Sql-Server-2008
複製 SQL Server 數據庫
我希望將數據庫“移動”到不同的伺服器,同時盡量減少對數據和服務的干擾。這些數據庫的大小從 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
如果您無法在網路上複製您的 140GB 文件,那麼我已經使用複制數據庫嚮導獲得了好運。不過,如果可能的話,我仍然會使用分離/附加。
祝你好運!