/*--說明:
?下面的代碼演示了如何利用日志還原功能,將主數據庫中的數據變化及時反饋到備用數據庫中
?備用數據庫的數據可以隨時用于查詢,但不能被更新(備用數據庫只讀)。
--*/
--首先,創建一個演示用的數據庫(主數據庫)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
????? FILENAME = 'c:\Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
?? FILENAME = 'c:\Db_test.ldf')
GO
--對數據庫進行備份
BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT
GO
--把數據庫還原成備用數據庫(演示主數據庫與這個備用數據庫之間的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c:\test_data.bak'
WITH REPLACE,STANDBY='c:\db_test_bak.ldf'
?,MOVE 'Db_test_DATA' TO 'c:\Db_test_data.mdf'
?,MOVE 'Db_test_LOG' TO 'c:\Db_test_log.ldf'
GO
--啟動 SQL Agent 服務
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO
--創建主服務器數據訓與備用服務器數據庫之間同步的作業
DECLARE? @jogid uniqueidentifier
EXEC msdb..sp_add_job
?@job_id = @jogid OUTPUT,
?@job_name = N'數據同步處理'
--創建同步處理步驟
EXEC msdb..sp_add_jobstep
?@job_id = @jogid,
?@step_name = N'數據同步',
?@subsystem = 'TSQL',
?@command = N'
--主數據庫中進行日志備份
BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--備用數據庫中還原主數據庫的日志備份(應用主數據庫中的最新變化
--實際應該時主數據庫備份與備用數據庫的還原作業應該分別在主服務器和備用服務器上建立,并且備份文件應該放在主服務器和備用都能訪問的共享目錄中
RESTORE LOG Db_test_bak FROM DISK=''c:\test_log.bak'' WITH STANDBY=''c:\test_log.ldf''',
?@retry_attempts = 5,
?@retry_interval = 5
--創建調度(每分鐘執行一次)
EXEC msdb..sp_add_jobschedule
?@job_id = @jogid,
?@name = N'時間安排',
?@freq_type=4,
?@freq_interval=1,
?@freq_subday_type=0x4,
?@freq_subday_interval=1,
?@freq_recurrence_factor=1
-- 添加目標服務器
EXEC msdb.dbo.sp_add_jobserver
?@job_id = @jogid,
?@server_name = N'(local)'
GO
--通過上述處理,主數據庫與備用數據庫之間的同步關系已經設置完成
--下面開始測試是否能實現同步
--在主數據庫中創建一個測試用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO
--等待1分鐘30秒(由于同步的時間間隔設置為1分鐘,所以要延時才能看到效果)
WAITFOR DELAY '00:01:30'
GO
--查詢一下備用數據庫,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test
/*--結果:
ID?????????
-----------
(所影響的行數為 0 行)
--*/
--測試成功
GO
--最后刪除所有的測試
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N'數據同步處理'
GO
/*===========================================================*/
/*--服務器檔機處理說明
?使用這種方式建立的數據庫同步,當主數據庫不可用時(例如,主數據庫損壞或者停機檢修)
?可以使用以下兩種方法使備用數據庫可用。
--*/
--1. 如果主數據庫損壞,無法備份出最新的日志,可以直接使用下面的語句使備用數據庫可讀寫(丟失最近一次日志還原后的所有數據)。
RESTORE LOG Db_test_bak WITH RECOVERY
--2. 如果主數據庫可以備份出最新日志,則可以使用下面的語句。
--先備份主數據庫的最新的事務日志
BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT
--再在備用數據庫中恢復最新的事務日志,并且使備用數據庫可讀寫(升級為主數據庫)
RESTORE LOG Db_test_bak FROM DISK='c:\test_log.bak'
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
