複製和資料庫映象

iSQlServer發表於2008-11-13

資料庫映象可與複製一起使用以確保釋出資料庫可用。 資料庫映象涉及一個資料庫的兩個副本,這兩個副本通常駐留在不同的計算機上。 在任何給定時間都只有一個資料庫副本可供客戶端使用。 該副本稱為主體資料庫。 客戶端對主體資料庫所做的更新應用到資料庫的另一副本(稱為映象資料庫)。 映象涉及將在主體資料庫上執行的每個插入、更新或刪除操作的事務日誌應用到映象資料庫上。

對釋出資料庫只支援將複製故障轉移到映象資料庫的功能;對分發資料庫或訂閱資料庫不支援此功能。 有關無須重新配置複製就可恢復分發資料庫或訂閱資料庫的資訊,請參閱備份和還原複製的資料庫。

注意:
故障轉移後,映象資料庫變為主體資料庫。 在本主題中,“主體”和“映象”始終是指原始主體和映象。
 


 將複製與資料庫映象一起使用的要求和注意事項
將複製與資料庫映象一起使用時,注意以下要求和注意事項:

主體資料庫和映象資料庫必須共享分發伺服器。 建議此處使用遠端分發伺服器,如果釋出伺服器有意外故障轉移,則遠端分發伺服器可以提供較大的容錯能力。

釋出伺服器和分發伺服器必須為 Microsoft SQL Server 2005 或更高版本。 訂閱伺服器可以為任意版本,但早於 SQL Server 2005 的版本的合併複製請求訂閱不支援故障轉移,在這種情況下代理在訂閱伺服器中執行,並且早期版本的代理不能識別映象。如果資料庫從映象資料庫故障恢復到主體資料庫,則對此類訂閱伺服器的複製將繼續進行。

對於合併複製,以及對於使用只讀訂閱伺服器或排隊更新訂閱伺服器的事務複製,複製支援對釋出資料庫進行映象。 不支援即時更新對等拓撲中的訂閱伺服器、Oracle 釋出伺服器、釋出伺服器並重新發布。

存在於資料庫外部的後設資料和物件不復制到映象資料庫,包括登入名、作業、連結伺服器等等。 如果要求映象資料庫中有後設資料和物件,則必須手動複製它們。 有關詳細資訊,請參閱在角色切換後管理登入名和作業。

 配置複製以及資料庫映象
配置複製和資料庫映象包括五個步驟。 在下面的部分中將詳細說明每個步驟。

配置釋出伺服器。

配置資料庫映象。

配置映象資料庫,使其使用與主體資料庫相同的分發伺服器。

配置用於故障轉移的複製代理。

向複製監視器新增主體資料庫和映象資料庫。

也可以相反的順序執行步驟 1 和步驟 2。

配置釋出資料庫的資料庫映象
配置釋出伺服器:

建議使用遠端分發伺服器。 有關配置分發的詳細資訊,請參閱配置分發。

可以為快照發布及事務釋出和/或合併釋出啟用資料庫。 對於將包含多種釋出型別的映象資料庫,必須使用 sp_replicationdboption 為同一節點上的兩種型別都啟用資料庫。 例如,可以在主體資料庫上執行下面的儲存過程呼叫:

 複製程式碼
exec sp_replicationdboption @dbname='', @optname='publish', @value=true
exec sp_replicationdboption @dbname='', @optname='mergepublish', @value=true

有關建立釋出的詳細資訊,請參閱釋出資料和資料庫物件。

配置資料庫映象。 有關詳細資訊,請參閱如何配置資料庫映象會話 (SQL Server Management Studio) 和設定資料庫映象。

配置映象的分發。 將映象名稱指定為釋出伺服器,並指定主體資料庫使用的同一分發伺服器和快照資料夾。 例如,如果想使用儲存過程配置複製,則可以在分發伺服器上執行 sp_adddistpublisher,然後在映象上執行 sp_adddistributor。 對於 sp_adddistpublisher:

將 @publisher 引數的值設定為映象的網路名稱。

將 @working_directory 引數的值設定為主體資料庫使用的快照資料夾。

指定 –PublisherFailoverPartner 代理引數的映象名稱。 下列代理在故障轉移後需要使用此代理引數來標識映象:

快照代理(對於所有釋出)

日誌讀取器代理(對於所有事務釋出)

佇列讀取器代理(對於支援排隊更新訂閱的事務釋出)

合併代理(對於合併訂閱)

SQL Server 複製偵聽器(replisapi.dll:用於使用 Web 同步進行同步的合併訂閱)

SQL 合併 ActiveX 控制元件(對於與控制元件同步的合併訂閱)

分發代理和分發 ActiveX 控制元件沒有此引數,因為它們不連線到釋出伺服器。

對代理引數所做的更改在下次啟動代理時生效。 如果代理連續執行,則必須停止該代理,然後重新啟動。 可以在代理配置檔案中和從命令提示符指定引數。 有關詳細資訊,請參閱:

如何使用複製代理配置檔案 (SQL Server Management Studio)

如何檢視和修改複製代理命令提示符引數 (SQL Server Management Studio)

如何使用複製代理配置檔案(複製 Transact-SQL 程式設計)

複製代理可執行檔案概念

建議將 –PublisherFailoverPartner 新增到代理配置檔案,然後在配置檔案中指定映象名稱。 例如,如果您通過儲存過程配置複製,請執行以下操作:

 複製程式碼
-- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles.
-- Select the profile id of the profile that needs to be updated from the result set.
-- In the agent_type column returned by sp_help_agent_profile:
-- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.

exec sp_help_agent_profile

-- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1).
-- Execute sp_add_agent_parameter in the context of the distribution database.
exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N''

-- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6).
-- Execute sp_add_agent_parameter in the context of the distribution database.
exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N''

向複製監視器新增主體資料庫和映象資料庫。 有關詳細資訊,請參閱如何從複製監視器中新增和刪除釋出伺服器(複製監視器)。

 維護映象釋出資料庫
維護映象釋出資料庫與維護非映象資料庫基本相同,需要注意以下事項:

管理和監視必須在活動伺服器上進行。 在 SQL Server Management Studio 中,釋出僅出現在活動伺服器的“本地釋出”資料夾下方。例如,如果故障轉移到映象資料庫,則釋出顯示在映象資料庫中,而不再顯示在主體資料庫中。 如果資料庫故障轉移到映象資料庫,則可能需要手動重新整理 Management Studio 和複製監視器才能反映更改。

複製監視器會在物件樹中同時顯示主體資料庫和映象資料庫的“釋出伺服器”節點。 如果主體資料庫位於活動伺服器,則僅在複製監視器的主體資料庫節點下顯示釋出資訊。
如果映象資料庫位於活動伺服器:

代理出錯時,只在主體資料庫節點上指出錯誤,而不在映象資料庫節點上指出。

主體資料庫不可用時,主體資料庫節點和映象資料庫節點會顯示相同的釋出列表。 這時,應對映象資料庫節點下的釋出執行監視。

當使用儲存過程或複製管理物件 (RMO) 在映象資料庫上管理複製時,對於需要指定釋出伺服器名稱的情況,必須指定已經為複製啟用了資料庫的例項的名稱。 若要確定相應的名稱,請使用函式 publishingservername。
如果對釋出資料庫做了映象,則映象資料庫中儲存的複製後設資料與主體資料庫中儲存的後設資料相同。 因此,對於為主體資料庫上的複製啟用的釋出資料庫,在映象資料庫上的系統表中儲存的釋出伺服器例項名稱是主體資料庫的名稱,而不是映象資料庫的名稱。 如果釋出資料庫故障轉移到映象資料庫,則這種情況會影響複製的配置和維護。 例如,如果故障轉移後使用映象資料庫上的儲存過程配置複製,並且希望新增對主體資料庫上啟用的釋出資料庫的請求訂閱,則必須為 sp_addpullsubscription 或 sp_addmergepullsubscription 的 @publisher 引數指定主體資料庫名稱,而不是映象資料庫名稱。
如果故障轉移到映象資料庫後在映象資料庫上啟用釋出資料庫,則儲存在系統表中的釋出伺服器例項名稱是映象資料庫的名稱;在此情況下,應將映象資料庫的名稱用於 @publisher 引數。
注意:
某些情況下,如 sp_addpublication,只有非 SQL Server 釋出伺服器支援 @publisher 引數;在這些情況下,它與 SQL Server 資料庫映象無關。
 


若要在故障轉移後在 Management Studio 中同步訂閱:請同步來自訂閱伺服器的請求訂閱以及來自活動釋出伺服器的推送訂閱。

刪除映象後的複製行為
如果從已釋出資料庫中刪除了資料庫映象,請謹記以下情況:

如果主體資料庫上的釋出資料庫不再有映象,則複製依照原主體資料庫無改變地繼續工作。

如果釋出資料庫從主體資料庫故障轉移到映象資料庫,而且映象關係隨後被禁用或刪除,則複製代理不再對映象資料庫起作用。 如果主體資料庫永久丟失,請禁用複製,然後用指定為釋出伺服器的像鏡重新配置複製。

如果完全刪除資料庫映象,映象資料庫將處於恢復狀態,必須還原才能起作用。 就複製而言,已恢復資料庫的行為取決於是否指定了 KEEP_REPLICATION 選項。 在將已釋出資料庫還原到建立備份的伺服器以外的伺服器上時,此選項強制還原操作保留複製設定。 僅當另一個釋出資料庫不可用時才使用 KEEP_REPLICATION 選項。 如果另一個釋出資料庫仍然完好且仍在複製,則不支援此選項。 有關 KEEP_REPLICATION 的詳細資訊,請參閱 RESTORE (Transact-SQL)。

 日誌讀取器代理的行為
下表說明了日誌讀取器代理對於資料庫映象各種執行模式的行為。 有關執行模式的詳細資訊,請參閱 Transact-SQL 設定和資料庫映象執行模式。

執行模式  映象資料庫不可用時日誌讀取器代理的行為 
具有自動故障轉移的高安全性模式
 如果映象資料庫不可用,則日誌讀取器代理將命令傳播到分發資料庫。 直到映象資料庫回到聯機狀態並且具有來自主體資料庫的所有事務,主體資料庫才能故障轉移到映象資料庫。
 
高效能模式
 如果映象資料庫不可用,則主體資料庫公開(即無映象)執行。 但是,日誌讀取器代理僅複製那些在映象伺服器上受保護的事務。 如果是強制服務,並且映象伺服器充當主體伺服器的角色,則日誌讀取器代理將依照映象伺服器工作並開始拾取新事務。 有關詳細資訊,請參閱強制服務(可能造成資料丟失)。

請注意,如果映象伺服器落後於主體伺服器,就會加大複製滯後。
 
不帶自動故障轉移功能的高安全性模式
 保證所有已提交的事務均在映象伺服器的磁碟上受到保護。 日誌讀取器代理僅複製那些在映象伺服器上受保護的事務。 如果映象伺服器不可用,則主體伺服器禁止資料庫中的進一步活動;因此,日誌讀取器代理沒有事務可以複製。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-494030/,如需轉載,請註明出處,否則將追究法律責任。

相關文章