SQL Server復制用備份文件初始化訂閱
下面為您介紹一個SQL Server復制用備份文件初始化訂閱的方法,該方法供您參考,如果您遇到過類似方面的問題,不妨一看。
這是一個讓我覺得頭疼的blog記錄,弄了半天我還是很暈,其實也許結果就是我折騰的那個樣子,但我折騰出來的結果感覺實在是覺得有點麻煩。默認創建的訂閱都是用快照初始化的,但是也可以不使用快照來初始化訂閱,而使用數據庫備份來初始化。至于原因msdn有如下描述對使用這種初使化的方式:
在某些方案中,例如涉及大型初始數據集的方案中,***用其他方法初始化訂閱。初始化訂閱服務器的其他方法包括:
指定備份。還原訂閱服務器上的備份,然后分發代理將SQL Server復制任何所需的復制元數據和系統過程。使用備份進行初始化是向訂閱服務器傳遞數據最快的方法,而且也很方便,因為如果在啟用發布以使用備份進行初始化之后取得備份,則可以使用任何最近的備份。
我的理解就是當在SQL Server復制中,有需要初始化大型的訂閱數據庫的時候,就不要使用快照模式讓發布數據庫來自動初始化訂閱數據庫的數據和架構,用備份還原的方法,先將發布數據庫還原到訂閱服務器上,然后再進行事務復制這樣就只復制增量,而不用快照進行初始化SQL Server復制了。但是使用這種復制讓人覺得有個麻煩的地方,就是當發布數據庫的架構發生了改變的時候,比如多添了表或者存儲過程視圖等的時候,如果又想在發布中包含這些添加的新項,就都得在訂閱服務器上再恢復一遍***的備份,還得在發布服務器上執一遍初始化腳本,反正覺得挺麻煩的,如果是用快照的話,對數據架構的如上的改變,只需要生成***的快照(初始化一下訂閱)即可。也許是我弄的不對吧,我自己目前也不太清楚,反正我試了半天,如果想用備份初始化訂閱就得主要步驟就得按如下的執行:
- exec sp_addsubscription
- @publication = N'publicationname',
- @subscriber ='computername\sqlserverinstancename',
- @destination_db = N'subscription_database_name',
- @subscription_type = N'Push',
- @sync_type = N'initialize with backup',
- @article = N'all',
- @update_mode = N'read only',
- @subscriber_type = 0,
- @backupdevicetype='disk',
- @backupdevicename='g:\reptest\t.bak(backupfilepath)',
- @frequency_type = 1
1,先在發布屬性中的訂閱選項中,更改允許從備份文件初始化,默認的是不允許。(創建好發布修改即可,以后不用執行)
2,對發布數據庫備份,然后在訂閱服務器上恢復這個備份
3,在發布數據庫中執行如下的腳本,具體參數參見聯機文檔關于存儲過程sp_addsubscription的說明(每執行一次第2步,也就是每次新備份了一次發布數據庫并在訂閱服務器上恢復了它,就要執行一次這個腳本,依我的測試如果不執行如下的腳本,只進行了備份恢復,再運行訂閱的時候就會出錯,當然這也可能跟具體的情況有關),用備份文件進行初始化的訂閱只能使用如下腳本來創建跟初始化:
如果是***次運行這個腳本,執行完之后創建的訂閱是運行在sqlserver agent的啟動賬戶下的,如果有必要需要修改成相應的代理運行賬戶來執行訂閱同步。
另外整個初始化過程可參見sqlserver聯機叢書
How to: Initialize a Transactional Subscriber from a Backup (Replication Transact-SQL Programming)
初始化事務訂閱(不使用快照)
【編輯推薦】