如何批量迁移SQL Server数据库至另一服务器?含2012转2014场景
批量迁移SQL Server 2012所有数据库到SQL Server 2014的方案
嘿,没问题!从SQL Server 2012批量迁移所有数据库到2014完全可行,根本不用一个个手动操作。下面分享几个靠谱的方法,你可以根据自己的环境选最合适的:
方法1:用SSMS注册服务器批量备份+还原
这是最直观的图形化操作方式,适合不太喜欢写脚本的朋友:
- 打开SSMS,在视图菜单里打开「注册服务器」,分别注册你的源(2012)和目标(2014)服务器。
- 右键点击源服务器,选择「任务」→「生成脚本」,在脚本生成向导里:
- 选择「整个数据库和所有数据库对象」,然后在「设置」里勾选「编写CREATE DATABASE脚本」和「编写备份脚本」。
- 关键一步:在「选择对象」时,勾选所有你要迁移的用户数据库(系统库建议单独处理,比如master、msdb可以用备份还原,但要注意兼容性)。
- 把脚本保存到本地,然后在目标服务器上执行备份文件的还原脚本(记得修改备份文件路径为目标服务器能访问的路径)。
方法2:PowerShell脚本自动化批量迁移
如果想更高效、可重复执行,PowerShell是绝佳选择,这里分两步:
第一步:批量备份源服务器数据库
# 源服务器信息 $sourceInstance = "你的源服务器名\实例名" $backupPath = "\\共享路径\SQLBackups\" # 目标服务器能访问的共享文件夹 # 获取所有用户数据库(排除系统库) $databases = Get-SqlDatabase -ServerInstance $sourceInstance | Where-Object { $_.IsSystemObject -eq $false } # 循环备份每个数据库 foreach ($db in $databases) { $backupFile = Join-Path $backupPath "$($db.Name)_$(Get-Date -Format 'yyyyMMddHHmmss').bak" Backup-SqlDatabase -ServerInstance $sourceInstance -Database $db.Name -BackupFile $backupFile }
第二步:批量还原到目标服务器
# 目标服务器信息 $targetInstance = "你的目标服务器名\实例名" $backupPath = "\\共享路径\SQLBackups\" # 和上面的共享路径一致 # 获取所有备份文件 $backupFiles = Get-ChildItem $backupPath -Filter "*.bak" # 循环还原每个数据库 foreach ($file in $backupFiles) { # 从备份文件获取数据库名 $dbName = ($file.Name -split "_")[0] # 设置数据文件和日志文件的目标路径(根据你的目标服务器调整) $restoreOptions = New-Object Microsoft.SqlServer.Management.Smo.Restore $restoreOptions.Devices.AddDevice($file.FullName, [Microsoft.SqlServer.Management.Smo.DeviceType]::File) $fileList = $restoreOptions.ReadFileList($targetInstance) # 构建还原脚本 Restore-SqlDatabase -ServerInstance $targetInstance -Database $dbName -BackupFile $file.FullName ` -RelocateFile @( New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($fileList.LogicalName[0], "D:\SQLData\$dbName.mdf"), New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($fileList.LogicalName[1], "E:\SQLLogs\$dbName.ldf") ) }
方法3:用dbatools模块一键批量迁移
这是最省心的方法,dbatools是专门为SQL Server打造的PowerShell模块,功能超级强大:
- 先安装dbatools模块(以管理员身份打开PowerShell):
Install-Module -Name dbatools -Force
- 执行一行命令完成批量迁移:
# 替换成你的源和目标服务器信息 Get-DbaDatabase -SqlInstance "源服务器\实例" -ExcludeSystem | Copy-DbaDatabase -Destination "目标服务器\实例" -BackupRestore -WithReplace
这个命令会自动处理备份、复制备份文件、还原,甚至还能帮你迁移登录名和作业(加上 -CopyLogin 参数即可)。
迁移后的关键注意事项
- 迁移完成后,记得把数据库兼容性级别调整到SQL Server 2014(级别120):
ALTER DATABASE [数据库名] SET COMPATIBILITY_LEVEL = 120;
- 系统数据库(比如msdb、master)如果需要迁移,建议单独备份还原,并且注意目标服务器的配置(比如代理作业、登录名)要和源服务器对齐。
- 迁移前最好先做一次全量备份,并且在非业务高峰时段操作,避免影响业务。
内容的提问来源于stack exchange,提问作者Masum




