已啟用綱目進行列修改追蹤

使用 ENABLE ROW MODIFICATION TRACKING 子句作為 CREATE SCHEMA 或 ALTER SCHEMA 陳述式的一部分,啟用綱目以進行橫列修改追蹤。 這類綱目的主要目的是容許邏輯備份擷取表格資料。

附註: 依預設不會啟用列修改追蹤。 因此,若要利用增量綱目備份及還原,必須使用 ENABLE ROW MODIFICATION TRACKING 子句來明確建立綱目。

在綱目中建立的表格已啟用列修改追蹤

在針對列修改追蹤啟用的綱目中所建立的直欄組織表格,將會針對列修改追蹤啟用。 為了追蹤表格資料的變更,在建立每一個表格時,將為其新增三個隱含地隱藏的直欄。 如需相關資訊,請參閱 邏輯綱目 BACKUP 及 RESTORE

儲存在這三個新直欄中的值將需要額外空間,因此啟用列修改追蹤的表格將耗用更多頁面。

啟用列修改追蹤的表格將新增下列三個新直欄:

表 1. 新增至表格且具有列修改追蹤的三個新直欄
直欄名稱 資料類型 容許空值 說明
SYSROWID BIGINT 唯一識別表格中每一列的直欄。 ID 在所有資料庫分割區中是唯一的。 此直欄的值由 SEQUENCE 產生。
CREATEXID BIGINT 儲存將列新增至表格的交易 ID。
DELETEXID BIGINT 儲存刪除列的交易 ID。 如果未刪除列,則它將為零。

在插入列並指派 SYSROWID 的值之後,即使該列已更新,此值也不會變更。 請注意,上述直欄名稱現在將由 IBM® 保留,用於啟用列修改追蹤的表格中。 當建立或變更表格時,嘗試在表格中使用相同直欄名稱的使用者會收到錯誤。

只有在針對橫列修改追蹤啟用的綱目中所建立的永久直欄組織表格,才會針對橫列修改追蹤啟用。 下列表格未啟用列修改追蹤,因此將不包含額外的三個直欄:
  • 暫存表格
  • 外部表格
  • 具體化查詢表格
  • 不在上方清單中且也不是直欄組織的表格 (例如,依列、插入時間、維度子句等組織的表格)

以下是表格中三個額外直欄的範例。 執行表格說明時,使用者可以查看表格的額外直欄:

db2 "CREATE TABLE S1.T1 (C1 INTEGER)"
db2 "DESCRIBE TABLE S1.T1"

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
SYSROWID                        SYSIBM    BIGINT                       8     0 No
CREATEXID                       SYSIBM    BIGINT                       8     0 No
DELETEXID                       SYSIBM    BIGINT                       8     0 No
C1                              SYSIBM    INTEGER                      4     0 Yes

  4 record(s) selected.

由於直欄隱含地隱藏,並在內部產生值,例如,使用者在從表格中執行 select * 時將不會看到它們,而且使用者在執行 insert、update 或 delete 陳述式時不需要指定它們。 嘗試修改三個直欄中的任何直欄 (透過插入/更新/刪除/變更) 會被忽略或導致錯誤。

針對綱目中的物件啟用列修改追蹤的 Db2® 資料庫限制

  • db2load 及 INGEST 的異常狀況表格無法進行直欄組織,因此建議將 db2load 或 INGEST 的異常狀況表格用於啟用列修改追蹤的表格,是在另一個綱目 (不同的綱目,因為列組織表格會導致增量綱目備份失敗) 中建立列組織表格。 此外,除了 SYSROWID 之外,異常狀況表格還必須具有類似定義 (包括為列修改追蹤定義的隱藏直欄) ,因為異常狀況表格不支援這些定義。 例如:
    • CREATE SCHEMA S1 啟用橫列修改追蹤
    • CREATE SCHEMA S2
    • CREATE TABLE S1.T1 (C1 INT)
    • CREATE TABLE S2.LOADEXTBL (SYSROWID BIGINT NOT NULL , CREATEXID BIGINT NOT NULL , DELETEXID BIGINT NOT NULL , C1 INT)
    • LOAD FROM <file> OF DEL INSERT INTO S1.T1 FOR EXCEPTION S2.LOADEXTBL
  • 表格中針對橫列修改追蹤啟用的使用者定義直欄數目上限減少至 1009。
  • 使用 CREATE 或 REPLACE_CREATE 選項將 IMPORT 到啟用橫列修改追蹤的表格可能會失敗。
  • 如果至少有一個表格定義為 DISTRIBUTE BY RANDOM 或包含 GENERATED ALWAYS AS IDENTITY 直欄,則具有 copymode 'COPY' 或 'COPYNO' 的 ADMIN_COPY_SCHEMA 將會失敗。
  • 不支援將啟用橫列修改追蹤的表格變更為具體化查詢表格。
  • 表格的配送索引鍵內不支援三個新的隱藏直欄 (SYSROWID、CREATEXID、DELETEXID) (這表示在 DISTRIBUTE BY HASH 直欄清單中不容許它們)。
  • 如果來源或目標是綱目中已啟用列修改追蹤的表格,則不支援 db2move
  • 三個新的隱藏直欄都無法併入作為索引鍵的一部分或強制限制項中。
  • 不支援已啟用橫列修改追蹤的系統期間時間表格或 Bitemporal 期間表格,不過應用程式期間時間表格將支援橫列修改追蹤。
  • 不支援 CREATE VIEW ... 已啟用橫列修改追蹤的 WITH ROW MOVEMENT。
  • REORG TABLE ... RECLAIM EXTENTS 會從已刪除的 SYSROWID/CREATEXID/DELETEDEXID 直欄收回空間。 僅針對前次 -type ONL (完整綱目) 備份之前已刪除的列收回空間。

型錄變更

SYSCAT.SCHEMATA 中的新直欄 ROWMODIFICATIONTRACKING 將指出綱目是否已啟用橫列修改追蹤,且值為 'N' 或' Y '。 SYSCAT.SCHEMATA 中稱為 QUIESCED 的新直欄將指出綱目是否由進行中 LOGICAL_RESTORE () 鎖定,且值為 'N' 或' Y '。

db2 DESCRIBE TABLE SYSCAT.SCHEMATA
                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
SCHEMANAME                      SYSIBM    VARCHAR                    128     0 No
OWNER                           SYSIBM    VARCHAR                    128     0 No
OWNERTYPE                       SYSIBM    CHARACTER                    1     0 No
DEFINER                         SYSIBM    VARCHAR                    128     0 No
DEFINERTYPE                     SYSIBM    CHARACTER                    1     0 No
CREATE_TIME                     SYSIBM    TIMESTAMP                   10     6 No
AUDITPOLICYID                   SYSIBM    INTEGER                      4     0 Yes
AUDITPOLICYNAME                 SYSIBM    VARCHAR                    128     0 Yes
AUDITEXCEPTIONENABLED           SYSIBM    CHARACTER                    1     0 No
DATACAPTURE                     SYSIBM    VARCHAR                      1     0 No
ROWMODIFICATIONTRACKING         SYSIBM    VARCHAR                      1     0 No
QUIESCED                        SYSIBM    VARCHAR                      1     0 No
REMARKS                         SYSIBM    VARCHAR                    254     0 Yes

db2 SELECT CAST(SCHEMANAME as CHAR(5)) as SCHEMANAME, ROWMODIFICATIONTRACKING FROM SYSCAT.SCHEMATA WHERE SCHEMANAME='S1'
SCHEMANAME ROWMODIFICATIONTRACKING
---------- -----------------------
S1         Y
  1 record(s) selected.

移轉考量

使用者可以變更其綱目以啟用列修改追蹤,但這不會修改綱目中的任何表格以啟用列修改追蹤。 變更綱目的語法如下:

Read syntax diagramSkip visual syntax diagramALTER SCHEMAschema nameDATA CAPTURENONECHANGESENABLE ROW MODIFICATION TRACKING

只有在綱目中建立的新表格才會啟用列修改追蹤。 在啟用綱目以進行列修改追蹤之後,必須重建綱目中的所有直欄式表格,才能進行邏輯綱目備份。

表格移轉

重建表格可以透過任何方法來完成,例如使用 ADMIN_MOVE_TABLE 或 CREATE TABLE ... AS ... WITH DATA (select * from one table into a new table in the same schema)。 如果目標綱目已啟用橫列修改追蹤,且目標表格類型支援橫列修改追蹤,則目標表格將建立為已啟用橫列修改追蹤。 是否啟用來源表格以進行列修改追蹤,對將為目標表格選擇的項目沒有影響。 如果使用者嘗試從來源表格中選取任何新的隱藏直欄,而該來源表格是在已啟用橫列修改的綱目中建立目標,則會將此視為使用者已嘗試建立具有相同名稱且導致錯誤的使用者直欄 (直欄名稱已存在)。 在 CREATE TABLE 期間,不會將新隱藏直欄的值從來源帶到目標 ... AS (fullselect) WITH DATA 作業。

使用邏輯備份及還原進行表格資料移轉

為了協助移轉, SYSPROC.LOGICAL_BACKUP 能夠透過指定 -backup-migrate 選項來取得未啟用列修改追蹤之綱目的邏輯備份映像檔。 請注意,在此備份的整個期間,只容許對綱目中的表格進行讀取存取。 一旦完成備份,就可以使用 SYSPROC.LOGICAL_RESTORE(-enable-row-modification-tracking) 選項。 在該情況下,綱目會建立為 ENABLE ROW MODIFICATION TRACKING ,且綱目中的所有表格也會嘗試啟用。 原始綱目中任何將阻止表格啟用橫列修改追蹤的表格 DDL/ 條件都會導致備份失敗。