
我們將把單一 sql 2000 實例上的大約 20 個資料庫遷移到具有資料庫鏡像的 sql 2008 r2 環境。
我正在尋找的是一個工具或腳本,可以幫助我輕鬆管理這 20db 到這個新鏡像環境的轉換和管理。設定每個資料庫有很多步驟,我希望盡可能自動化。
編輯:以下是我手動執行的步驟:
- 從舊的 sql 2000 伺服器到新的 sql 2008 伺服器建立相同的使用者名稱/密碼。然後將這些使用者/密碼同步到具有相同 SSID 的其他 sql 2008 伺服器上,以便當我們進行資料庫備份和還原時它們會匹配。
- 對每個 sql 2000 資料庫進行備份。
- 將它們複製到伺服器 A。
- 將備份還原到伺服器A。
- 從伺服器a備份,複製到伺服器b,在那裡恢復。
- 執行鏡像「配置安全性」精靈。
- 開始鏡像。
我喜歡能夠編寫這個腳本或有一個工具可以為我完成這個任務。謝謝!保羅
答案1
我建立了一系列批次檔和 SQL 腳本來執行以下步驟。我只包含了鏡像內容的腳本,但其他引用的 SQL 腳本都是非常基本的 SQL 命令(恢復資料庫腳本除外,由於我的實現方式,該腳本有點棘手),創建它們將為您提供機會更改SQLCMD 模式變數。如果您想在 Twitter (@jcumberland) 上直接給我發送訊息並提供您的電子郵件地址,我可以向您發送全套腳本。我也刪除了檔案名稱的完整路徑。
- 設定資料庫的復原模式
- 刪除鏡像
- 刪除鏡像資料庫
- 備份資料庫
- 備份日誌
- 複製bak文件
- 複製 trn 文件
- 恢復資料庫備份
- 復原日誌備份
- 刪除bak文件
- 刪除 trn 文件
- 在主體和鏡像之間設定鏡像
/*------------------------------------------------ ------*/ -- 替換這些值 /*------------------------------------------------ ------*/ /*------------------------------------------------ ------*/ -- 批次檔 1,呼叫實用程式批次文件 /*------------------------------------------------ ------*/ @迴聲關閉 設定主主機= 設定鏡像主機= 設定 INST= 設定驅動器= 設定 DRTARGETDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\" 設定 LOGDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\" 設定連接埠= 設定 PRIMARYINST=%PRIMARYHOST%\%INST% 設定 MIRRORINST=%MIRRORHOST%\%INST% @迴聲 呼叫 drdbsetup.bat %PRIMARYHOST% %MIRRORHOST% %PRIMARYINST% %MIRRORINST% %DRIVE% %DRTARGETDIR% %PORT% %LOGDIR% 暫停 /*------------------------------------------------ ------*/ -- 批次檔 2 - 呼叫 SQL 腳本 /*------------------------------------------------ ------*/ rem -- 將恢復模式設定為完整 sqlcmd /E /S%3 -i SetRecoveryMode.sql -v DATABASE="%8" rem -- 刪除鏡像 sqlcmd /E /S%3 -i MirroringRemove.sql -v DATABASE="%8" sqlcmd /E /S%4 -i MirroringRemoveMirror.sql -v DATABASE="%8" rem——完整備份 sqlcmd /E /S%3 -i BackupDatabaseFull.sql -v BACKUPPATH="%5:\" -v DATABASE=%8 rem -- 日誌備份 sqlcmd /E /S%3 -i BackupDatabaseLog.sql -v BACKUPPATH="%5:\" -v DATABASE=%8 rem -- 將備份檔案複製到鏡像 複製 \\%1\%5$\*.bak %6 /y 複製 \\%1\%5$\*.trn %6 /y rem -- 從主庫中刪除備份文件 刪除 \\%1\%5$\*.bak 刪除 \\%1\%5$\*.trn rem -- 從備份目錄還原資料庫 sqlcmd /E /S%4 -i RestoreDatabase.sql -v BKDIR=%6 -v DATADIR=%6 -v LOGDIR=%9 rem -- 復原資料庫日誌 sqlcmd /E /S%4 -i RestoreLog.sql -v 備份路徑=%6 -v 資料庫=%8 rem -- 從鏡像中刪除備份文件 刪除 %6\*.bak 刪除 %6\*.trn rem -- 設定鏡像 sqlcmd /E /S%4 -i MirroringSetup.sql -v PRINCIPAL="%3" -v MIRROR="%4" -v PRINCIPAL_DNS="%1." -v MIRROR_DNS="%2.yourdomain.local" -v DATABASE_NAME="%8" -v PORT=%7 /*------------------------------------------------ ------*/ -- 鏡像設定.sql /*------------------------------------------------ ------*/ /*------------------------------------------------ -----*/ -- 運行在主體上 /*------------------------------------------------ -----*/ :連結$(主體) 去 -- 建立端點 如果不存在(從 sys.endpoints 選擇 *,其中 name = 'Mirroring') 開始 建立端點鏡像 授權 [] 狀態 = 以 TCP 啟動( 監聽器連接埠 = $(連接埠) ,LISTENER_IP = 全部 ) 對於資料鏡像( 角色=合作夥伴 ,身份驗證 = WINDOWS 協商 ,加密 = 所需演算法 RC4 ) 結尾 去 /*------------------------------------------------ -----*/ -- 在鏡像上運行 /*------------------------------------------------ -----*/ :連接$(鏡像) 去 -- 建立端點 如果不存在(從 sys.endpoints 選擇 *,其中 name = 'Mirroring') 開始 建立端點鏡像 授權 [] 狀態 = 以 TCP 啟動( 監聽器連接埠 = $(連接埠) ,LISTENER_IP = 全部 ) 對於資料鏡像( 角色=合作夥伴 ,身份驗證 = WINDOWS 協商 ,加密 = 所需演算法 RC4 ) 結尾 去 -- 建立鏡像合作關係 更改資料庫 [$(DATABASE_NAME)] SET PARTNER = N'TCP://$(PRINCIPAL_DNS):$(PORT)' 去 -- 刪除鏡像監控 如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job') 開始 EXEC sp_dbmmonitordropmonitoring 結尾 去 -- 設定鏡像監控 EXEC sys.sp_dbmmonitoraddmonitoring -- 預設為 1 分鐘 去 /*------------------------------------------------ -----*/ -- 運行在主體上 /*------------------------------------------------ -----*/ :連結$(主體) 去 -- 建立鏡像合作關係 更改資料庫 [$(DATABASE_NAME)] SET PARTNER = N'TCP://$(MIRROR_DNS):$(PORT)' 去 -- 刪除鏡像監控 如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job') 開始 EXEC sp_dbmmonitordropmonitoring 結尾 去 -- 設定鏡像監控 EXEC sys.sp_dbmmonitoraddmonitoring -- 預設為 1 分鐘 去 /*------------------------------------------------ ------*/ -- DRMirroringRemove.sql /*------------------------------------------------ ------*/ 如果存在( select * from sys.database_mirroring where db_name(database_id) = '$(DATABASE)' andmirroring_guid is not null ) 開始 更改資料庫 [$(DATABASE)] 將夥伴設定為關閉 結尾 去 等待延遲'00:00:10' 去 /*------------------------------------------------ ------*/ -- DRMirroringRemoveMirror.sql /*------------------------------------------------ ------*/ 如果存在( select * from sys.database_mirroring where db_name(database_id) = '$(DATABASE)' andmirroring_guid is not null ) 開始 更改資料庫 [$(DATABASE)] 將夥伴設定為關閉 結尾 去 等待延遲'00:00:10' 去 刪除資料庫 [$(資料庫)] 去
答案2
內建怎麼樣資料庫鏡像監控器?