Sql-Server

管理sql 2008數據庫鏡像的工具?

  • February 8, 2011

我們將把大約 20 個位於單個 sql 2000 實例上的數據庫遷移到具有數據庫鏡像的 sql 2008 r2 環境中。

我正在尋找的是一種工具或腳本,它可以幫助我輕鬆地將那些 20db 轉換和管理到這個新的鏡像環境中。設置每個數據庫有很多步驟,我想盡可能地自動化。

編輯:以下是我手動執行的步驟:

  1. 從舊的 sql 2000 伺服器創建相同的使用者名/密碼到新的 sql 2008 伺服器。然後將這些使用者/密碼同步到另一個具有相同 SSID 的 sql 2008 伺服器上,這樣當我們進行數據庫備份和恢復時,它們就會匹配。
  2. 備份每個 sql 2000 db。
  3. 將它們複製到伺服器 A。
  4. 將備份恢復到伺服器 A。
  5. 從伺服器a備份,複製到伺服器b,在那裡恢復。
  6. 執行鏡像“配置安全”嚮導。
  7. 開始鏡像。

我喜歡能夠編寫腳本或擁有一個為我完成它的工具。謝謝!保羅

我創建了一系列批處理文件和 SQL 腳本來執行以下步驟。我只包含了鏡像的腳本,但其他引用的 SQL 腳本是非常基本的 SQL 命令(除了恢復數據庫腳本,由於我的實現方式,這個腳本有點棘手),創建它們會給你一個機會更改 SQLCMD 模式變數。如果您想使用您的電子郵件地址在 Twitter (@jcumberland) 上直接向我發送消息,我可以向您發送全套腳本。我也刪除了文件名上的完整路徑。

  • 設置數據庫的恢復模式
  • 刪除鏡像
  • 刪除鏡像數據庫
  • 備份數據庫
  • 備份日誌
  • 複製bak文件
  • 複製 trn 文件
  • 恢復數據庫備份
  • 恢復日誌備份
  • 刪除後面的文件
  • 刪除刺文件
  • 在主體和鏡像之間設置鏡像
/*------------------------------------------------------*/
-- 替換這些值
/*------------------------------------------------------*/











/*------------------------------------------------------*/
-- 批處理文件 1,呼叫實用程序批處理文件
/*------------------------------------------------------*/
@echo 關閉

設置 PRIMARYHOST=
設置鏡像=
設置安裝=
設置驅動器=
設置 DRTARGETDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\"
設置 LOGDIR="%DRIVE%:\MSSQL.1\MSSQL\DATA\"
設置埠=
設置 PRIMARYINST=%PRIMARYHOST%\%INST%
設置 MIRRORINST=%MIRRORHOST%\%INST%

@echo on


呼叫 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 -- 從主目錄中刪除備份文件
del \\% 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 BACKUPPATH=%6 -v DATABASE=%8

rem -- 從鏡像中刪除備份文件
del%6\*.bak
of%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
/*------------------------------------------------------*/


/*-----------------------------------------------------*/
-- 在主體上執行
/*-----------------------------------------------------*/
:connect $(PRINCIPAL)
走

-- 創建端點
如果不存在(選擇 * from sys.endpoints where name = 'Mirroring')
開始
創建端點鏡像
授權 []
狀態 = 以 TCP 啟動(
LISTENER_PORT = $(PORT)
,LISTENER_IP = 全部
)
FOR DATA_MIRRORING (
角色 = 合作夥伴
,AUTHENTICATION = WINDOWS 協商
,加密 = 所需算法 RC4
)
結尾
走

/*-----------------------------------------------------*/
-- 在鏡像上執行
/*-----------------------------------------------------*/
:connect $(鏡像)
走

-- 創建端點
如果不存在(選擇 * from sys.endpoints where name = 'Mirroring')
開始
創建端點鏡像
授權 []
狀態 = 以 TCP 啟動(
LISTENER_PORT = $(PORT)
,LISTENER_IP = 全部
)
FOR DATA_MIRRORING (
角色 = 合作夥伴
,AUTHENTICATION = WINDOWS 協商
,加密 = 所需算法 RC4
)
結尾
走

-- 建立鏡像夥伴關係
ALTER DATABASE [$(DATABASE_NAME)] SET PARTNER = N'TCP://$(PRINCIPAL_DNS):$(PORT)'
走

-- 移除鏡像監控
如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job')
開始
執行 sp_dbmmonitordropmonitoring
結尾
走

-- 設置鏡像監控
EXEC sys.sp_dbmmonitoraddmonitoring -- 預設為 1 分鐘
走


/*-----------------------------------------------------*/
-- 在主體上執行
/*-----------------------------------------------------*/
:connect $(PRINCIPAL)
走

-- 建立鏡像夥伴關係
ALTER DATABASE [$(DATABASE_NAME)] SET PARTNER = N'TCP://$(MIRROR_DNS):$(PORT)'
走

-- 移除鏡像監控
如果存在(select * from msdb..sysjobs where [name] ='Database Mirroring Monitor Job')
開始
執行 sp_dbmmonitordropmonitoring
結尾
走

-- 設置鏡像監控
EXEC sys.sp_dbmmonitoraddmonitoring -- 預設為 1 分鐘
走






/*------------------------------------------------------*/
-- DRMirroringRemove.sql
/*------------------------------------------------------*/
如果存在(select * from sys.database_mirroring where db_name(database_id) = '$(DATABASE)' and mirroring_guid is not null)
開始
ALTER DATABASE [$(DATABASE)] 設置合作夥伴關閉
結尾
走

等待延遲'00:00:10'
走







/*------------------------------------------------------*/
-- DRMirroringRemoveMirror.sql
/*------------------------------------------------------*/
如果存在(select * from sys.database_mirroring where db_name(database_id) = '$(DATABASE)' and mirroring_guid is not null)
開始
ALTER DATABASE [$(DATABASE)] 設置合作夥伴關閉
結尾
走

等待延遲'00:00:10'
走

刪除數據庫 [$(DATABASE)]
走

引用自:https://serverfault.com/questions/169464