SQL 伺服器:支援的資料類型、物件以及作業
瞭解 SQL Server 資料庫上 Oracle GoldenGate 的支援資訊。
Oracle GoldenGate for SQL Server 支援為支援的 SQL Server 資料庫版本擷取及傳遞初始載入和異動資料。
Oracle GoldenGate for SQL Server 支援來源資料的對應、篩選和轉換,除非本文件中另有說明,以及將衍生自 Oracle GoldenGate 支援之其他來源資料庫的資料複製到 SQL Server 資料庫。
執行處理需求
-
SQL Server 伺服器名稱 (
@@SERVERNAME) 不得為NULL。 -
(擷取) 若要讓 Oracle GoldenGate 擷取交易資料,「SQL 伺服器代理程式」必須在來源 SQL Server 執行處理上執行,且「SQL 伺服器變更資料擷取」工作必須針對資料庫執行。如果同時對資料庫啟用「SQL Server 交易複製」,則必須執行「SQL Server 日誌讀取器代理程式」。
-
如果
TEXT, NTEXT, IMAGE,或VARCHAR(MAX), NVARCHAR(MAX)和VARBINARY(MAX)資料欄的資料超過為max text repl size選項設定的 SQL Server 預設大小,請擴充大小。使用sp_configure來檢視或調整max text repl size的目前值。注意:對於 Amazon RDS for SQL Server,若要調整執行處理設定值,您必須使用「參數群組」而非sp_configure。
- 建議為您的 SQL Server 實例安裝最新的 Service Pack 或 Cummulative Update,以確保其功能正確。對於 SQL Server 2012、2014、2016 和 2017,Microsoft 已找出並修正數個直接影響 SQL Server 變更資料擷取功能的重要問題。此情況會影響 Oracle GoldenGate 正確擷取資料的能力。目前需要 Microsoft 修補程式的已知問題包括 KB3030352、KB3166120 和 KB 4073684。
資料庫需求
注意下列支援 Oracle GoldenGate 的需求和限制:
-
只支援擷取和傳遞使用者資料庫。
-
確定資料庫已啟用
Auto Create Statistics和Auto Update Statistics。 -
資料庫必須設為 SQL Server 例項版本的相容性層級。
-
Oracle GoldenGate 支援設定「通透資料加密 (TDE)」的 SQL Server 資料庫。
-
(擷取) 來源資料庫可設為任何支援 Microsoft SQL Server 中變更資料擷取功能的復原模型。
-
如果來源資料庫是透過從其他執行處理回復備份而建立的,您必須將資料庫擁有者 SID 與新執行處理上的 SID 同步。或者,您也可以使用
sp_changedbowner將回復的資料庫設為目前的登入。 -
使用記憶體內 OLTP (記憶體內最佳化) 啟用 SQL Server 資料庫 (SQL Server 2017 CU15 和更新版本) 的擷取支援,Oracle GoldenGate 版本為 21.15 和 23.5。不過,只支援從磁碟上的表格擷取,也不支援從記憶體最佳化表格擷取。
-
(AlwaysOn) Extract 支援從主要資料庫或唯讀的同步確認模式擷取。不支援擷取非同步確認模式。
-
Replicat 效能考量:從 SQL Server 2016 開始,Microsoft 將資料庫選項
TARGET_RECOVERY_TIME的預設設定從 0 秒變更為 60 秒。在內部測試中已示範此功能,可降低 Replicat 的傳輸量。如果您遇到 Replicat 傳輸量降低,請考慮將TARGET_RECOVERY_TIME設定調整為 0。
限制:
-
Oracle GoldenGate 不支援擷取或傳遞系統資料庫。
-
Oracle GoldenGate 不支援從包含的資料庫擷取。
-
來源資料庫名稱不得超過 121 個字元。此限制是由於用來啟用補充記錄日誌的 SQL Server 預存程序所造成。
-
如果您正在設定 Oracle GoldenGate 活動訊號功能,SQL Server 資料庫名稱不得超過 107 個字元。
-
(AlwaysOn) 不支援從以 AlwaysOn 可用性群組之非同步確認模式設定的資料庫擷取。
表格需求
要包含在擷取和傳遞的表格必須僅包含列在支援的 SQL Server 資料類型中的資料類型。
-
Oracle GoldenGate 支援從使用者表格擷取交易 DML,以及傳遞至使用者表格和可寫入視觀表。
-
不支援 DDL 作業。
-
Oracle GoldenGate 支援「SQL 伺服器變更資料擷取」所追蹤之表格的允許表格名稱和資料欄長度上限。
-
要擷取之表格的所有資料欄長度總和,不得超過 SQL Server 允許為表格啟用變更資料擷取的長度。如果所有資料欄長度的總和超過 SQL Server 程序
sys.sp.cdc_enable_table允許的長度,則無法為該表格啟用ADD TRANDATA。允許的記錄長度上限會隨著資料欄數增加而減少,因此記錄長度上限與表格中的資料欄數之間會有反向關係。
支援的 SQL Server 資料類型
除非在下列限制中特別註明,否則下列資料類型支援擷取和傳遞:
-
二進位資料類型
-
(binary, varbinary, varbinary (max)) -
(varbinary (max)與FILESTREAM)
-
-
字元資料類型
(char, nchar, nvarchar, nvarchar (max), varchar, varchar (max))
-
日期與時間資料類型
(date, datetime2, datetime, datetimeoffset, smalldatetime, time)
-
數值資料類型
(bigint, bit, decimal, float, int, money, numeric, real, smallint, smallmoney, tinyint)
-
業務範圍
(image, ntext, text)
-
其他資料類型
(timestamp, uniqueidentifier, hierarchyid, geography, geometry, sql_variant (Delivery only), XML)
-
Oracle GoldenGate for SQL Server 可以複製包含
SPARSE設定值的資料欄資料。
限制:
-
Oracle GoldenGate 不支援篩選、資料欄對應或操控大於 4KB 的大型物件。完整 Oracle GoldenGate 功能最多可用於 4KB 的物件。
-
Oracle GoldenGate 會將 XML 資料視為大型物件 (LOB),如同 XML 無法放入資料列中的 SQL Server 一樣。不支援 SQL Server 擴充的 XML 增強功能 (例如,蠟驗證、
DATETIME、聯集功能)。 -
系統指派的
TIMESTAMP資料欄或非具體化計算的資料欄不能是索引鍵的一部分。包含TIMESTAMP資料欄的表格必須要有一個索引鍵,可以是主索引鍵或唯一限制條件,或是以TABLE或MAP敘述句中KEYCOLS子句指定的替代索引鍵。如需詳細資訊,請參閱指派資料列識別碼。 -
Oracle GoldenGate 支援多位元組字元資料類型,以及儲存在字元資料欄中的多位元組資料。只有類似 SQL Server 組態支援多位元組資料。多位元組字元資料不支援轉換、篩選以及其他類型的操控。
-
如果擷取
TEXT、NTEXT、IMAGE、VARCHAR (MAX)、NVARCHAR(MAX)及VARBINARY (MAX)資料欄的資料超過為max text repl size選項設定的 SQL Server 預設大小,請擴充大小。使用sp_configure來檢視目前max text repl size的值,並視需要調整選項。注意: SQL Server 的 Amazon RDS 不允許max text repl size大於 64MB。{:.infoboxnote} -
IMAGE、NTEXT及TEXT資料類型的資料欄會記錄為刪除的NULL值,且在影像更新作業之前。除非資料欄已更新,否則VARBINARY(MAX)、VARCHAR(MAX)和NVARCHAR(MAX)的資料欄在影像更新作業之前會記錄為NULL值。如需詳細資訊,請複查下列 Microsoft 文件中的大型物件資料類型內容:
-
Oracle GoldenGate 支援最多 2 GB 的 UDT 和 UDA 資料。支援除 SQL_Variant 以外的所有 UDT。
-
支援通用語言程式實際執行 (CLR),包括 SQL Server 內建的 CLR 資料類型 (例如幾何、地理位置和階層 ID)。只有類似 SQL Server 組態才支援 CLR 資料類型。CLR 資料不支援轉換、篩選和其他類型的操控。
-
支援
FILESTREAM屬性的VARBINARY (MAX)資料欄大小上限為 4 GB。Extract 使用標準Win32檔案函數來讀取FILESTREAM檔案。 -
浮點數的範圍與精確度取決於主機機器。一般而言,精確度是 16 個有效位數,但您應該複查資料庫文件來決定預期的近似值。Oracle GoldenGate 會捨入或截斷超過支援精確度的值。
-
Oracle GoldenGate 支援從 0001/01/03:00:00:00 到 9999/12/31:23:59:59 的時戳資料。若時間戳記是從 GMT 轉換成當地時間,這些限制也會套用至產生的時間戳記。視時區而定,轉換可能會增加或減去時數,這可能會導致時間戳記超過支援的下限或上限。
計算資料欄的限制:
-
Microsoft 的「變更資料擷取」不支援運算資料欄 (保留或非保留)。因此,不會針對包含計算資料欄的資料欄,將任何資料寫入歷程檔。若要複製非保留之計算資料欄的資料,請使用
TABLE參數的FETCHCOLS或FETCHMODCOLS選項,從表格擷取資料欄資料。請記住,在資料庫中的資料欄變更,以及 Extract 擷取正在處理之交易記錄資料的時間之間,資料值之間可能會有差異。
-
在
FETCHCOLS或FETCHMODCOLS選項中使用不支援資料類型sql_variant的資料欄時,「擷取」會中止並出現下列錯誤:ERROR OGG-25230 Unsupported datatype '*column-name* (sql_variant)' used with 'FETCHCOLS/FETCHCOLSEXCEPT' in table '*table-name>*. -
Replicat 不會將 DML 套用至任何計算的資料欄,即使該資料欄的資料位於歷程檔中,因為資料庫不允許在該資料欄類型使用 DML。來源持續計算之資料欄或擷取之非持續性資料欄的資料,可套用至不是計算之資料欄的目標資料欄。
-
在初始載入中,會直接從來源表格選取所有資料,而不是從異動日誌選取。因此,在第一次載入時,會根據使用的方法,將所有資料欄的資料值 (包括非持續性計算的資料欄) 寫入歷程檔或傳送到目標。不過,在套用變更資料時,Replicat 不會對計算的資料欄套用初始載入資料,因為資料庫不允許對該資料欄類型執行 DML。
-
Oracle GoldenGate 不允許在
TABLE或MAP敘述句的KEYCOLS子句中使用非保存的運算資料欄。 -
如果唯一索引鍵包含非保存的計算資料欄,而 Oracle GoldenGate 必須使用索引鍵,則會忽略非保存的計算資料欄。如果其餘資料欄未強制實行唯一性,這可能會影響資料完整性。
-
如果在任何非永久保留的計算資料欄上定義了唯一的索引,則不會使用該索引。
-
如果唯一索引鍵或索引包含非保存的計算資料欄,而且是表格中唯一的唯一 ID,則 Oracle GoldenGate 必須使用所有資料欄作為 ID 來尋找目標資料列。因為此 ID 中不能使用非保留的計算資料欄,所以 Replicat 可能會將包含此 ID 的作業套用至錯誤的目標資料列。
不支援的 SQL Server 資料類型和功能
-
擷取不支援
SQL_Variant資料類型。 -
包含不支援資料類型的表格可能會導致 Extract 異常中止。為了因應措施,您必須將
TRANDATA從這些表格中移除,然後將它們從 Extract 的TABLE敘述句中移除,或使用 Extract 的TABLEEXCLUDE參數作為表格。
SQL Server 支援的物件與作業
支援下列物件與作業:
-
Oracle GoldenGate for SQL Server 支援平行 Replicat。
-
Oracle GoldenGate 支援從使用者表格擷取交易 DML,以及傳遞至使用者表格和可寫入視觀表。
-
SQL Server 長資料擷取所記錄的作業支援
TEXT, NTEXT, IMAGE, VARBINARY, VARBINARY (MAX) VARCHAR (MAX)和NVARCHAR (MAX)資料欄的大小。例如,IMAGE、NTEXT和TEXT資料類型的資料欄會記錄為刪除作業的 NULL 值。如需詳細資訊,請複查下列 Microsoft 文件中的「大型物件資料類型」內容: -
Oracle GoldenGate 支援針對「SQL Server 變更資料擷取」啟用的表格所允許的資料列大小上限。
-
Oracle GoldenGate 支援從啟用
PAGE和ROW壓縮的表格進行擷取。對於使用壓縮的分割表格,必須使用相同的壓縮類型啟用所有分割區。 -
如果表格在所有分割區的實體版面配置相同,Oracle GoldenGate 便支援擷取分割的表格。
-
要擷取之表格的所有資料欄長度總和不得超過 SQL Server 允許為表格啟用「變更資料擷取」的長度。如果所有資料欄長度的總和超過 SQL Server 程序
sys.sp.cdc_enable_table允許的長度,則無法為該表格新增ADD TRANDATA。允許的記錄長度上限會隨著資料欄數增加而減少,因此記錄長度上限與表格中的資料欄數之間會有反向關係。
SQL Server 的非支援物件與作業
不支援下列物件與作業:
-
假設兩個表格之間的父項 - 子項關係,其中父項表格中的主索引鍵由子項表格中的外來索引鍵與
ON UPDATE SET DEFAULT子句參照。父項表格上的遞延 PK 更新會產生 DELETE 和 INSERT 組。無法可靠地識別父項表格上對應的 DELETE 和 INSERT 作業。在父項表格執行這類暫緩更新時,Oracle GoldenGate Extract 可能無法可靠地擷取所有事件。 -
對於來源資料庫,SQL Server 變更資料擷取不支援的作業,例如
TRUNCATE敘述句。如需啟用「SQL Server 變更資料擷取」所限制作業的完整清單,請參閱 Microsoft SQL Server 文件。 -
Oracle GoldenGate for SQL Server 不支援擷取或傳遞 SQL Server 的 DDL 變更,來源和目標上的 Oracle GoldenGate 處理作業需要額外的步驟,才能處理任何表格層次的 DDL 變更,包括表格索引重建作業。請參閱表格層次 DDL 變更的需求。
-
不支援檢視。
-
由
TextCopy公用程式和WRITETEXT和UPDATETEXT敘述句執行的作業。這些功能會執行資料庫未記錄或僅有部分記錄的作業,因此 Extract 處理作業無法支援這些作業。 -
分割區中具有多個實體版面配置的分割表格。
-
分割區會切換來源表格。「SQL Server 變更資料擷取」會將分割區切換視為 DDL 作業,而從某個分割區移至另一個分割區的資料不會記錄在 CDC 表格中,因此您必須遵循表格層次 DDL 變更的需求中的程序,在啟用表格以進行補充記錄時,手動實行分割區切換。
-
由於 SQL Server 的「變更資料擷取」限制,與資料庫衝突不同的資料欄層級衝突可能會導致將不正確的資料寫入字元資料的 CDC 表格,且 Extract 會在寫入 CDC 表格時加以擷取。建議您為包含非 ASCII 資料的資料欄使用
NVARCHAR、NCHAR或NTEXT資料類型,或對表格資料欄使用與資料庫相同的定序。如需詳細資訊,請參閱關於變更資料擷取 (SQL Server) 。 -
由於 SQL Server 的「變更資料擷取」受到限制,SQL Server 的「變更資料擷取」代理程式不會擷取
NOOPUPDATES,因此沒有擷取以進行無作業更新作業的記錄。 -
不支援啟用「變更資料擷取」時序表格,因此無法為來源實行的 Extract 設定。
表格層次 DDL 變更的需求
Oracle GoldenGate for SQL Server 不支援擷取或傳遞 DDL 變更。不過,從 Oracle GoldenGate 21c 開始,對以 TRANDATA 啟用之表格所做的變更不會導致 Extract 異常中止。Extract 將繼續處理表格在啟用 TRANDATA 時的變更資料。
視為表格層次 DDL 變更的作業包括但不限於:ALTER TABLE、TRUNCATE TABLE、索引重建以及分割區切換。
為了避免因表格層次 DDL 變更而導致資料不一致,需要下列步驟。
-
來源:暫停或停止要修改之表格或表格的應用程式資料。
-
來源:確定沒有要修改的表格未結交易。
-
來源:確定 SQL Server CDC Capture 工作會處理要修改之表格的所有剩餘交易。
-
來源:進行任何 DDL 變更之前,請確定 Extract 會先處理要修改之表格的所有異動。
-
目標:進行任何 DDL 變更之前,請確定 Replicat 會先處理要修改之表格的所有異動。
-
(選擇性) 實行「事件標記」表格可以用來決定何時處理要修改之表格的所有剩餘交易,以及處理何時正確停止 Extract 和 Replicat 的協調。
-
來源:停止 Extract 處理作業。
-
目標:停止 Replicat 處理作業。
-
來源:停用要透過執行
DELETE TRANDATA修改之表格的補充日誌記錄。 -
來源:對來源表格進行表格 DDL 變更。
-
目標:對目標表格進行表格 DDL 變更。
-
來源:在執行修改之後,對表格執行
ADD TRANDATA,以重新啟用補充日誌記錄。 -
來源:開始擷取。
-
目標:啟動 Replicat。
-
來源:繼續應用程式資料至已修改的表格。
SQL Server 的系統綱要
複製不支援下列系統綱要:
-
sys -
cdc -
INFORMATION_SCHEMA
不支援使用萬用字元對應來使用 guest 綱要,但明確列出時支援該綱要,例如 TABLE guest.employees。