擴展您的架構 ![]() |
![]() |
![]() |
級別: 中級 Sean Byrd (sabyrd@us.ibm.com), Americas Techworks SME, IBM 2006 年 7 月 10 日 即將發布的 Q Replication 將支持一種新的目標表,即 Consistent Change Data (CCD) 表。探索 Q Replication 用戶之所以需要這些表的原因,并考慮在使用 CCD 表作為目標的情況下,可能出現的一些新的復制架構。學習如何定義和使用 CCD 表,這需要對 Q Replication 的安裝和配置有基本的了解。另外,還看看在使用 CCD 表作為目標的情況下有哪些限制。 Consistent Change Data (CCD) 表一直是 SQL Replication 中一種流行的目標表。通過支持 CCD 表作為另一種目標選項,對于熟悉 Q Replication 的人來說,他們就可以利用這種新功能了。這時您可能要問,“為什么我應該在我的復制架構中考慮 CCD 表?” CCD 表通過關聯的跟蹤機制暴露數據,以便準確地描繪源表的事務歷史。換句話說,CCD 允許重現源表的歷史。讓我們看看用到 CCD 的三個例子。
歷史表 —— 在任何系統中,都會有一些關鍵的表需要能夠恢復或重建。通過將關鍵的源表復制到一個 CCD 目標表,就可以逐個事務地從頭開始重建這個表。更棒的是,如果表中輸入了壞的數據,CCD 記錄還允許您查看哪些行受到影響,讓您很容易改變主意,或者正確地更新所需的值。 扇出場景登臺(Fan out scenario staging)表 —— 傳統上,CCD 目標表用于幫助創建扇出架構,將一個源復制到多個目標。這意味著之前 SQL Replication 不能接受的一些高吞吐量的工作負載現在可以被復制到多個目標了。 不受支持的數據庫登臺表 —— 對于將數據放到 Q Replication 受支持的結構之外的數據庫中這一任務而言,CCD 目標表也是一種理想的方法。有了最新的修復包(用于 Oracle 和 Sybase 的修復包版本為 9;用于 Microsoft SQL Server 和 Informix 的修復包版本為 10),DB2® 之外的數據庫可以作為 Q Replication 的目標數據庫,不過仍然有很多目標數據庫不可用。雖然 CCD 目標表不能自動將數據復制到不受支持的目標數據庫中,但是它通過用戶應用程序暴露數據。所以,只需簡單地從 IBMSNAP_OPERATION 列選擇數據到一個動作變量,然后結合對源列的值的選擇,使用一個用于 insert、update 和 delete 的 case 語句,便可以將事務復制到任何您想在其上編程的數據源。
接下來我們看看如何創建 CCD 目標表。本節假設您已經知道如何配置 Q Replication —— 因此著重講解隊列映射和隊列訂閱的創建。以前,當選擇一種目標表類型時(如果使用 Replication Center's Create Queue Subscription 向導的話,就在這個向導中的第 5 步),您有兩個選擇 —— 表或存儲過程。現在您可以選擇 CCD Table,但是必須指定您想要哪種類型的 CCD。如果使用的是 ASNCLP,那么語法如下: 清單 1. ASNCLP CCD 語法
要創建一個 CCD,必須指定兩個新屬性 —— condensed(壓縮的)和 complete(完整的)。表 1 展示了這些屬性如何影響目標表的創建: 表 1. 完整的還是壓縮的?
創建 CCD 目標表只要做這些就可以了。那么,有了 CCD 表之后,如何使用它呢?讓我們將這些值與之前介紹的那些用法聯系起來。 表 2. 最佳匹配
接下來我們看看 CCD 表與源表有什么不同。CCD 表與源表的不同在于多了幾個附加的列: 表 3. CCD 列
這些列附件在行的后面,因此該 CCD 表可用于創建其他拷貝,更新其他拷貝,或者使應用程序可以訪問事務歷史。如果啟用了數據庫審計功能,那么 CCD 表中還可能提供以下幾列: 表 4. 審計列
如果手動創建 CCD 目標表,則語法應該像下面這個例子一樣。注意,<user data columns> 的數據類型應該與源表中相應的列的數據類型一致。 例 2. CCD 目標表的 DDL
幸運的是,您只需清楚三個限制,另外再注意一點:
另外一個您可能失察的地方是 delete 的行為。如果您在使用一個壓縮 CCD 表,那么在處理 delete 操作時,現有的行將被更新,而 IBMQREP_OPERATION 列將被設為 ‘D’。如果這一行不存在,那么該行將被忽略,并且被記錄到異常表中。對于非壓縮 CCD 表,所有事務都生成新的行。delete 會生成一個新行,其中仍然使用當前各列的值,但是 IBMQREP_OPERATION 列被設為 'D'。
關于這個話題就講到這里了。希望本文提供的信息能幫助您利用擴展的架構,并將數據暴露給更多的用戶。 學習
|