You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何批量迁移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模块,功能超级强大:

  1. 先安装dbatools模块(以管理员身份打开PowerShell):
Install-Module -Name dbatools -Force
  1. 执行一行命令完成批量迁移:
# 替换成你的源和目标服务器信息
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

火山引擎 最新活动