Bla*_*ite 6 database-administration database-mirroring sql-server-2005 tsql sql-server-2008
我希望以最小的数据和服务中断将数据库“移动”到不同的服务器。这些数据库的大小从 5GB 到 140GB 不等。
我已经看到甚至使用了 SQL Server 的一些各种数据传输工具,但我不确定最佳实践是什么(分离/重新附加、从备份还原、发送事务日志、镜像......)。
我最担心的是这些数据库有很多存储过程、用户权限和各种索引,我不想丢失它们并最终中断服务。
我最近的一个大胆想法是设置一个镜像,然后启动手动故障转移。但是,我宁愿在进行我以前从未做过的事情之前先问一下。
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
Run Code Online (Sandbox Code Playgroud)
如果您无法长时间通过网络复制 140GB 文件,那么我很幸运地使用了复制数据库向导。不过,如果可能的话,我仍然会使用分离/附加。
祝你好运!
归档时间: |
|
查看次数: |
126 次 |
最近记录: |