sql-server-2008 – 复制SQL Server数据库

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – 复制SQL Server数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望将数据库“移动”到不同的服务器,同时尽量减少对数据和服务的干扰.这些数据库的大小从5GB到140GB不等.

我已经看过甚至使用过sql Server的各种数据传输工具,但我不确定最佳实践是什么(Detach / Reattach,Restore from Backup,Ship Transaction Logs,Mirror …).

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

我最新的想法是建立一面镜子,然后是initiate a manual failover.但是,在继续我以前从未做过的事情之前,我宁愿问一下.

TL; DR移动sql Server数据库的一些最佳实践方法是什么,可以最大限度地减少服务中断的威胁.

解决方法

根据我的经验,分离/附着是最快的方法.瓶颈可能是您通过网络复制文件的速度.

假设这两个数据库具有相同的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

如果你不能长时间无法通过网络复制140GB文件,那么我对复制数据库向导运气不错.尽管如此,我仍然会使用分离/附加.

祝好运!

猜你在找的MsSQL相关文章