2010年2月4日 星期四

SQL 2008 交易式複寫 - 採用Pull方式

這次使用SQL Server 2008複寫,問題一大堆,
最後終於可以使用了,遇到的問題與解決方法

使用SQL Server複寫,複寫發行一定要用Enterprise版,
可以下載試用版來試,裝好一個instance可用180天,
另外,在複寫時使用的帳戶也很重要,(第一個問題)
因為複寫要用到網路芳鄰,
所以在執行SQL server和SQL Agent的帳戶,一定要是本機帳戶,
不能用Local System(用到的帳戶要在裝SQL之前就要建立)。
除此之外,若要使用Pull方式,Client端也要是Enterprise,
原因是要用來當Distributer,(第二個遇到的問題)
另外,初始化(Initialize)複寫是關鍵所在,
只要單一資料表的內容超過1000筆,使用快照集初始化就會失敗,
所以資料量大時,就要採用備份檔來初始化複寫設定,
(這也是我遇到最大的問題,後來google找一下才發現這個問題)




而使用備份檔初始化的步驟如下,記下來好了XD
Step 1:
設定好要發行複寫的資料庫,記得不要勾選立即建立快照集

Step 2:
在發行集的屬性中的訂閱選項中,將允許從備份檔案初始化,設定為True

Step 3:
在SQL Server Agent的作業中,將清除代理程式記錄及清除散發停用

Step 4:
備份發行複寫的資料庫,並將備份檔保留一份,初始化時會用到

Step 5:
將資料庫備份還原至訂閱端的SQL Server中,記得使用相同的資料庫名稱

Step 6:(最重要也較複雜的一步),建立Pull複寫訂閱,使用Transact-SQL指令,
6-1:在複寫發行端執行以下指令
use [Your_DB_Name]
exec sp_addsubscription @publication = N'Your_DB_Name_PUB', @subscriber = N'Subscribing_SQLServerName', @destination_db = N'Your_DB_Name', @sync_type = N'initialize with backup', @backupdevicetype = 'disk', @backupdevicename = 'e:\BACKUP\Your_DB_Name090209.bak', @subscription_type = N'pull', @update_mode = N'read only'

6-2:在複寫訂閱端執行以下指令
use [Your_DB_Name]
exec sp_addpullsubscription @publisher = N'Publishing_SQLServerName', @publication = N'Your_DB_Name_PUB', @publisher_db = N'Your_DB_Name', @independent_agent = N'True', @subscription_type = N'pull', @description = N'', @update_mode = N'read only', @immediate_sync = 0

6-3:在複寫發行端執行以下指令,啟動同步作業
exec sp_addpullsubscription_agent @publisher = N'Publishing_SQLServerName', @publisher_db = N'Your_DB_Name', @publication = N'Your_DB_Name_PUB', @distributor = N'Publishing_SQLServerName', @distributor_security_mode = 0, @distributor_login = N'dist_login_acct', @distributor_password = N'dist_password', @enabled_for_syncmgr = N'False', @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20090902, @active_end_date = 99991231, @alt_snapshot_folder = N'', @working_directory = N'', @use_ftp = N'False', @job_login = N'domain\username', @job_password =N'user_password', @publication_type = 0

其中,以上三個指令中的參數說明如下:
Your_DB_Name_PUB為發行集名稱(設定發行集時最後一個步驟的名稱)
Subscribing_SQLServerName為訂閱端的SQL Server名稱,包含Domain Name和Instance Name
這邊的Your_DB_Name為訂閱複寫的資料庫名稱,
參數@backupdevicename中設定備份檔的位置,
Publishing_SQLServerName為複寫發行端的SQL Server名稱,
dist_login_acct和dist_password為登入發行端時所用的SQL帳號和密碼,
domain\username和user_password為登入散發者的windows帳戶和密碼。

Step 7:
從複寫監視器中可看到同步的狀況,因為沒用到快照集,所以快照集代理程式不會啟動。

以上步驟順序很重要,記得依序執行。



Reference:
SQL 2008 Transactional Replication and initializing from a backup file

沒有留言: