复制SQL Server数据库

我正在寻求将数据库“移动”到不同的服务器,而对数据和服务的影响最小。 这些数据库大小从5GB到140 GB不等。

我已经看到,甚至使用了SQL Server的各种数据传输工具,但我不确定最佳做法是什么(分离/重新附件,从备份还原,交易日志,镜像…)。

我最担心的是这些数据库有很多存储过程,用户权限和各种索引,我不想丢失它们,最终中断服务。

我最新的想法是build立一个镜像,然后启动手动故障转移 。 但是,在继续我以前从未做过的事情之前,我宁愿问一下。

TL; DR移动SQL Server数据库的最佳实践方式是什么,可以最大限度地减less服务中断的威胁。

    以我的经验,分离/附加是最快的方法。 瓶颈可能是您可以通过networking复制文件的速度。

    假设两个数据库具有相同的Windows帐户(如果您使用的是SQL帐户,则可能需要更新SID),那么您可以使用类似于此脚本的东西,在开始重写PowerShell中的所有内容之前,我已经做好了准备。 :)它的目的是在源服务器上运行,并使用带有数据库列表的文件来移动。

    @ECHO ON set newipmdf=\\newserver\g$ set newipldf=\\newserver\e$ set controlfile=control.txt set oldserver=oldserver\instance set oldmdfpath=d:\instance set newmdfpath=g:\instance set copymdfpath="m:\instance" set newserver=newserver\instance set oldlogpath=e:\instance set newlogpath=e:\instance set copylogpath="l:\instance" set movedmdfpath=%oldmdfpath%\moved set movedldfpath=%oldlogpath%\moved mkdir %movedmdfpath% mkdir %movedldfpath% net use m: %newipmdf% net use l: %newipldf% SETLOCAL DISABLEDELAYEDEXPANSION FOR /F %%L IN (%controlfile%%) DO ( SET "line=%%L" SETLOCAL ENABLEDELAYEDEXPANSION ECHO !line! sqlcmd -E -S!oldserver! -Q"EXEC master.dbo.sp_detach_db @dbname = N'!line!'" copy "!oldmdfpath!\!line!.mdf" !copymdfpath! copy "!oldlogpath!\!line!_log.ldf" !copylogpath! sqlcmd -E -S!newserver! -Q"CREATE DATABASE [!line!] ON ( FILENAME = '!newmdfpath!\!line!.mdf' ),( FILENAME = N'!newlogpath!\!line!_log.ldf' ) FOR ATTACH" move "!oldmdfpath!\!line!.mdf" !movedmdfpath! move "!oldlogpath!\!line!_log.ldf" !movedldfpath! ENDLOCAL ) ENDLOCAL net use m: /z net use l: /z 

    如果你的下载时间不够长,无法通过networking复制你的140GB文件,那么我已经有了复制数据库向导的好运气。 尽pipe如此,我仍然会使用detach / attach。

    祝你好运!