- 浏览: 311471 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
lzz3717845:
有道理,受教了~谢谢
关于SQL中自动增长列值回复(还原)的问题 -
桃汁天天:
ExtJs中如何动态设置其选中状态!! -
sangumaolv2:
你TM在说什么啊。。。。
关于SQL中自动增长列值回复(还原)的问题 -
duyupeng:
你好,我最近也是在使用这个控件,只是用了_id、_parent ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法) -
wokao_wg:
大伙可以看看作者说的http://www.sencha.com ...
ExtJs 中的TreeGrid(Ext.ux.maximgb.tg.EditorGridPanel详解与其他问题解决办法)2
需求:
需要数据库中的对象(eg: Table 、 Trigger、 View 、Function、 StoredProcedure 等)进行迁移到同一数据库服务器或远程数据库服务器,且要求支持迁移时改名,及迁移时可以对某些对象改名。
思路:
利用SMO可以操作数据库对象进行数据库备份与还原。且有两种方式:一种是数据库脚本的形式(.sql) ;一种是整个数据库(.bak)的操作形式,因为第二种(.bak)是对整个数据库的操作,不能够有选择的备份,达不到我的要求,故这种方式我没找到解决办法。(或许本人没找到),因此这里记录的是本人通过第一种形式(.sql)的实现。因为他能够针对你指定的数据库对象来备份数据.而且还能够匹配到你指定的通配符来操作数据库对象。而且也能够进行文本替换来改名。缺点就是数据库对象之间的关系难以确定.因为假如你备份视图,但表不存在,这时就会有问题.
因为是一键对数据库进行备份与还原.所有这里有三个文件.
1) 批处理文件:run.bat
cls powershell -command "&{set-executionpolicy RemoteSigned }" powershell -command "&{.\beta.ps1 Club.Secretary}"
第一句是清屏
第二句:因为PowerShell在计算机上运行的权限不同,这里将执行权限设为RemoteSigned,其它权限参考如下:
1 )Restricted - No scripts can be run. Windows PowerShell can be used only in interactive mode.
2 )AllSigned - Only scripts signed by a trusted publisher can be run.
3 )RemoteSigned - Downloaded scripts must be signed by a trusted publisher before they can be run.
4 )Unrestricted - No restrictions; all Windows PowerShell scripts can be run.
|
第三句是执行同目录下的beta.ps1文件。
2)配置文件: config.xml
<?xml version="1.0" encoding="UTF-8"?> <config model="0"> <!-- Model=1 directory run ; Model=2 communicate model--> <backup> <ServerName>localhost</ServerName> <UserName>sa</UserName> <PassWord>123</PassWord> <DataBase>UserDB</DataBase> <BackupObject>5</BackupObject> <!-- All Objects = 0; Tables = 1; Table Triggers = 2; Views = 3; Functions = 4;Stored Procedures = 5; --> <WildCard>customer_cal*</WildCard> <oldChar>axdev.dbo.</oldChar> <newChar>ax18.dbo.</newChar> <BackupFolder>d:\backup</BackupFolder> </backup> <restore> <whether>0</whether> <!-- whether restore to database --> <ServerName>10.1.1.115</ServerName> <UserName>sa</UserName> <PassWord>123</PassWord> <DataBase>backupTest</DataBase> </restore> </config>
配置信息为如下:
备份的数据库服务器的相关信息: 服务器(ServerName)、 登录用户(UserName)、 登录密码(PassWord)、 要备份的数据库(DataBase)、 备份对象(BackupObject)、 通配符(WildCard)、 要替代的字符(oldChar)、 用来替代的字符(newChar)、 备份文件存放路径(BackupFolder) 还原的数据库服务器相关信息: 是否要還原(Whether)、 服务器(ServerName)、 登录用户(UserName)、 登录密码(PassWord)、 要还原的数据库(DataBase)、
3) 以下是beta.ps1的程序代码及说明:
(得到相关信息后开始,开始进行脚本备份,之后替换脚本 ,最后在还原数据库上执行脚本.)
[String]$CurrentPath = get-location; #得到当前路径 [String]$xmlDocPath = $CurrentPath+"\config.xml"; #获得config.xml配置文件路径. #write-host $xmlDocPath #输出(Debug已注释掉) $xmlDoc = New-Object "System.Xml.XmlDocument" #创建一个xml文档对象 $xmlDoc.Load($xmlDocPath) #加载并读取文档对象(config.xml)中的配置 $modelList = $xmlDoc.GetElementsByTagName("config");#得到<config>节点 $model=$modelList.ItemOf(0).GetAttribute("model") #得到第一个<config>的属性model的值 #write-host $model #输出(Debug已注释掉) if($model -eq 0 ) #如果model属性值等于0 { #--------------------------------Start Param----------------------------------------------------------- $backupNodelist=$xmlDoc.GetElementsByTagName("backup"); $backupConfig=$backupNodelist.ItemOf(0); #得到第一个<backup> $backupServer=$backupConfig.GetElementsByTagName("ServerName").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<ServerName>的值 $backupLogin=$backupConfig.GetElementsByTagName("UserName").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<UserName>的值 $backupPassWord=$backupConfig.GetElementsByTagName("PassWord").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<PassWord>的值 $backupDataBase=$backupConfig.GetElementsByTagName("DataBase").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<DataBase>的值 $backupObject=$backupConfig.GetElementsByTagName("BackupObject").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<BackupObject>的值 $backupWildCard=$backupConfig.GetElementsByTagName("WildCard").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<WildCard>的值 $oldChar=$backupConfig.GetElementsByTagName("oldChar").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<oldChar>的值 $newChar=$backupConfig.GetElementsByTagName("newChar").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<newChar>的值 $backupFolder=$backupConfig.GetElementsByTagName("BackupFolder").ItemOf(0).get_InnerXml(); #得到第一个<backup>中<BackupFolder>的值 $restoreNodelist=$xmlDoc.GetElementsByTagName("restore"); $restoreConfig=$restoreNodelist.ItemOf(0); $whether=$restoreConfig.GetElementsByTagName("whether").ItemOf(0).get_InnerXml(); #得到第一個<restore>中<whether>的值 $restoreServer=$restoreConfig.GetElementsByTagName("ServerName").ItemOf(0).get_InnerXml(); #得到第一个<restore>中<ServerName>的值 $restoreLogin=$restoreConfig.GetElementsByTagName("UserName").ItemOf(0).get_InnerXml(); #得到第一个<restore>中<UserName>的值 $restorePassWord=$restoreConfig.GetElementsByTagName("PassWord").ItemOf(0).get_InnerXml(); #得到第一个<restore>中<PassWord>的值 $restoreDataBase=$restoreConfig.GetElementsByTagName("DataBase").ItemOf(0).get_InnerXml(); #得到第一个<restore>中<DataBase>的值 #---------------------------------End Param------------------------------------------------------------------ #加载所需包 cls #load assemblies [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null #Need SmoExtended for backup [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null [Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null $serverConn=new-object Microsoft.SqlServer.Management.Common.ServerConnection #数据库连接 $serverConn.ServerInstance=$backupServer #设置数据库连接实例 $serverConn.LoginSecure =$false #采用SQL Server 身份验证,非Window 身份验证 $serverConn.Login = $backupLogin #登录用户名 $serverConn.Password =$backupPassWord #登录密码 $user_folder=$backupFolder #备份目录 #trap errors $errors =$user_folder+"\errors.txt" #错误日志写入文件 trap #写入错误日志 { "______________________" | out-file $errors -append; "ERROR SCRIPTING TABLES" | out-file $errors -append; get-date | out-file $errors -append; "ERROR: " + $_ | out-file $errors -append; "`backupServer = $backupServer" | out-file $errors -append; "`backupDataBae = $backupDataBase" |out-file $errors -append; "`user_folder = $user_folder" | out-file $errors -append; "`restoreServer = $restoreServer" | out-file $errors -append; "`restoreDataBae = $restoreDataBase " | out-file $errors -append; #throw "ERROR: See $errors" } #给定一个目录路径,判断是否存在,不存在则创建 function MakeDirectory { param([string]$DirName) Process { if (!(Test-Path -path $DirName)) { New-Item $DirName -type directory | Out-Null } } } MakeDirectory ($user_folder) #创建目录路径$user_folder $srv = new-object Microsoft.SqlServer.Management.Smo.Server($serverConn) #创建Microsoft.SqlServer.Management.Smo.Server对象 $db=$srv.databases[$backupDataBase] #指定的数据库对象 $dbName=$db.Name #数据库名字 #write-host "Current Database:"$dbName $scr = New-Object "Microsoft.SqlServer.Management.Smo.Scripter" #脚本创建对象 $scr.Server = $srv $scrOptions = New-Object "Microsoft.SqlServer.Management.SMO.ScriptingOptions" #脚本创建对象的选择(Options) $scrOptions.AllowSystemObjects = $false #不需要数据库中的系统对象,如系统中表、视图等 $scrOptions.IncludeDatabaseContext = $false #buyaodababase $scrOptions.IncludeIfNotExists = $true #包含IfNotExists语句 $scrOptions.ClusteredIndexes = $true $scrOptions.NoCollation = $true $scrOptions.Default = $true #$scrOptions.DriAll = $true $scrOptions.Indexes = $true $scrOptions.NonClusteredIndexes = $true $scrOptions.IncludeHeaders = $true $scrOptions.ToFileOnly = $true #只写入文件 $scrOptions.Permissions = $true $scrOptions.ScriptDataCompression = $true #压缩 $scrOptions.ScriptSchema = $true $scrOptions.AppendToFile = $true #追加到文件中,而不是覆盖. $sEnc=[System.Text.Encoding]::UTF8 #設置生成腳本編碼方式(注意) $scrOptions.Encoding=$sEnc #Set options for SMO.Scripter $scr.Options = $scrOptions $backupfolder=$user_folder+"\"+$dbName+"_backup" #备份的目录 MakeDirectory ($backupfolder) #创建备份的目录 remove-item $backupfolder\* #每次备份之前会先删除备份目录中的所有文件 $backupfile=$backupfolder+"\"+$dbName+".backup.sql"; #脚本备份到目录中的某个文件中. $WildCard=""; function getWildCard { param($obj) $WildCard=""; #write-host $obj foreach($element in $backupWildCard.split(';')) { $WildCard+="'"+$obj+"' -like '"+$element+"' -or " } $WildCard=$WildCard.substring(0,$WildCard.length-5) invoke-expression $WildCard } ">>>>>>>>>>>>Start backup" function ScriptDropStatement { param($object) $scrOptions.ScriptDrops = $true # drop statement $scrOptions.FileName = $backupfile; $scr.Options = $scrOptions; $scr.Script($object); } function ScriptCreateStatement { param($object) $scrOptions.ScriptDrops = $false #create statement $scrOptions.FileName = $backupfile; $scr.Options = $scrOptions; $scr.Script($object); } $tables=$db.Tables; if ($backupObject -eq 0 -or $backupObject -eq 1) #如果備份表腳本 { $srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.Table],"IsSystemObject") #讓server對象實例化時為Table對象 foreach ($table in $tables | where-object {getWildCard($_.name)} | where-object{$_.IsSystemObject -eq $false}) #用通配符過濾對象且不為系統對象 { #write-host $table.Name MakeDirectory ($backupfolder); #Check for folder, and create if needed #ScriptDropStatement($table) ScriptCreateStatement($table) write-host "Table "$table.Name" backup Complete !" } } if ($backupObject -eq 0 -or $backupObject -eq 2) #如果備份Trigger腳本 { # Script table triggers (go into tables then triggers) $srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.Trigger],"IsSystemObject") #讓server對象實例化時為Trigger對象 foreach ($table in $tables) { foreach ($trigger in $Table.Triggers |where-object {getWildCard($_.name)} | where-object{$_.IsSystemObject -eq $false}) #用通配符過濾對象且不為系統對象 { MakeDirectory ($backupfolder); #Check for folder, and create if needed ScriptDropStatement($trigger) ScriptCreateStatement($trigger) write-host "Trigger "$trigger.Name" backup Complete !" } } } if ($backupObject -eq 0 -or $backupObject -eq 3) #如果備份View腳本 { # script each view $srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.View],"IsSystemObject") #讓server對象實例化時為View對象 foreach ($view in $db.Views | where-object { getWildCard($_.name)} | where-object {$_.IsSystemObject -eq $false} ) #用通配符過濾對象且不為系統對象 { MakeDirectory ($backupfolder); #Check for folder, and create if needed ScriptDropStatement($view) ScriptCreateStatement($view) write-host "View "$view.Name" backup Complete !" } } if ($backupObject -eq 0 -or $backupObject -eq 4) #如果備份Function腳本 { # script each function $srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.UserDefinedFunction],"IsSystemObject") #讓server對象實例化時為Function對象 foreach ($function in $db.UserDefinedFunctions | where-object {getWildCard($_.name)} | where-object {$_.IsSystemObject -eq $false}) #用通配符過濾對象且不為系統對象 { MakeDirectory ($backupfolder); #Check for folder, and create if needed ScriptDropStatement($function) ScriptCreateStatement($function) write-host "Function "$function.Name" backup Complete !" } } if ($backupObject -eq 0 -or $backupObject -eq 5) #如果備份StoredProcedure腳本 { # script each stored procedure $srv.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.StoredProcedure],"IsSystemObject") #讓server對象實例化時為StoredProcedure對象 foreach ($procedure in $db.StoredProcedures | where-object {getWildCard($_.name)} | where-object{$_.IsSystemObject -eq $false}) #用通配符過濾對象且不為系統對象 { MakeDirectory ($backupfolder); #Check for folder, and create if needed ScriptDropStatement($procedure) ScriptCreateStatement($procedure) write-host "Stored Procedure "$procedure.Name" backup Complete !" } } ">>>>>>>>>>>>All Backup Complete" if($whether -eq 1){ #如果配置需要還原 $file=Get-ChildItem $backupfile; #write-host ($oldChar -eq "" -and $newChar -eq "") if($oldChar -eq "" -and $newChar -eq "") #如果沒有替換 { #write-host "No replace necearray !" }else{ foreach($str in $file) { $content=Get-Content -path $str -Encoding UTF8 #取文件內容(注意編碼) $content | foreach-object {$_ -replace $oldChar,$newChar} | Set-Content $str -Encoding UTF8 #替換文件內容并設置到文件內.(注意編碼) } } ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" foreach($f in get-childitem -path $backupfolder -Filter *.sql | sort-object) { sqlcmd -i $f.fullname -S $restoreServer -U $restoreLogin -P $restorePassWord -d $restoreDataBase #開始還原到(遠程)數據庫上 } }else{ #不還原 #write-host 'No Restore !' } }
- DB_Backup.rar (3.1 KB)
- 描述: 将此文件解压到一个文件夹中,通过配置config.xml,双击run.bat即可运行!
- 下载次数: 15
发表评论
-
PowerDesigner连接数据库导出ER图
2012-06-28 18:16 3173PowerDesigner建立与数据库的连接,以便生成数 ... -
各类数据库中的SQL Profiler
2012-01-12 15:52 2060SQL Profiling and ... -
表变量与临时表
2011-12-27 09:51 933SQL Server中的临时表和表变量 ... -
sqlserver的换行问题
2011-09-20 20:29 1995制表符: CHAR(9) 换行符: CHAR(10) ... -
PowerShell 數據庫備份與還原(帶替換)
2011-07-19 18:44 1549同一目錄下config.xml: <?xml v ... -
在SQL Server中将数据库表结构及全部数据导成脚本
2011-05-20 15:24 2016当我们想将数据库搬到另一个环境中运行时,如 ... -
SMO+PowerShell 实现SQLServer数据库的备份与还原
2011-05-17 21:31 3500最近有需求,需要用脚 ... -
SQL中的DateAdd()
2011-04-18 22:04 3770MS SQL Server中DATEADD和DATEDIF ... -
一个表写给另一个表的情书!
2011-02-09 22:01 1197亲爱的Mrs TableMM: ... -
SQL Server datetime 常用日期格式转换
2010-12-20 20:59 1510我们经常出于某种目的需要使用各种各样的日期格式,当然我们可以使 ... -
SQL Server 2005启用sa账号
2010-11-11 09:35 1312... -
PIVOT初接触
2010-10-28 20:33 1102以前一直没接触过PIVOT这个概念!当接触时,赶紧查了下资料如 ... -
常用函数
2010-10-28 15:40 987SQL函数 left()、charindex()的使用 ... -
关于SQL中自动增长列值回复(还原)的问题
2010-10-23 14:13 4413大家都知道,只要有新加记录,SQL中自动增长字段的值总是自动 ... -
数据库中涉及到的几种连接方式
2010-10-14 19:43 1278通俗的讲: A left join B ...
相关推荐
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf
内容概要:本文详细介绍了基于瞬时无功功率理论的三电平有源电力滤波器(APF)仿真研究。主要内容涵盖并联型APF的工作原理、三相三电平NPC结构、谐波检测方法(ipiq)、双闭环控制策略(电压外环+电流内环PI控制)以及SVPWM矢量调制技术。仿真结果显示,在APF投入前后,电网电流THD从21.9%降至3.77%,显著提高了电能质量。 适用人群:从事电力系统研究、电力电子技术开发的专业人士,尤其是对有源电力滤波器及其仿真感兴趣的工程师和技术人员。 使用场景及目标:适用于需要解决电力系统中谐波污染和无功补偿问题的研究项目。目标是通过仿真验证APF的有效性和可行性,优化电力系统的电能质量。 其他说明:文中提到的仿真模型涉及多个关键模块,如三相交流电压模块、非线性负载、信号采集模块、LC滤波器模块等,这些模块的设计和协同工作对于实现良好的谐波抑制和无功补偿至关重要。
内容概要:本文探讨了在工业自动化和物联网交汇背景下,构建OPC DA转MQTT网关软件的需求及其具体实现方法。文中详细介绍了如何利用Python编程语言及相关库(如OpenOPC用于读取OPC DA数据,paho-mqtt用于MQTT消息传递),完成从OPC DA数据解析、格式转换到最终通过MQTT协议发布数据的关键步骤。此外,还讨论了针对不良网络环境下数据传输优化措施以及后续测试验证过程。 适合人群:从事工业自动化系统集成、物联网项目开发的技术人员,特别是那些希望提升跨协议数据交换能力的专业人士。 使用场景及目标:适用于需要在不同通信协议间建立高效稳定的数据通道的应用场合,比如制造业生产线监控、远程设备管理等。主要目的是克服传统有线网络限制,实现在不稳定无线网络条件下仍能保持良好性能的数据传输。 其他说明:文中提供了具体的代码片段帮助理解整个流程,并强调了实际部署过程中可能遇到的问题及解决方案。
基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 基于C#实现的检测小说章节的重复、缺失、广告等功能+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档