SQL Server: サポートされているデータ型、オブジェクトおよび操作
SQL Serverデータベース上のOracle GoldenGateのサポート情報について学習します。
SQL ServerのためのOracle GoldenGateでは、サポートされるSQL Serverデータベース・バージョンの初期ロードおよびトランザクション・データの取得と配信がサポートされます。
SQL ServerのためのOracle GoldenGateでは、ソース・データのマッピング、フィルタリングおよび変換がサポートされており、このドキュメントで特に明記されている場合を除き、Oracle GoldenGateでサポートされている他のソース・データベースから導出されたデータのSQL Serverデータベースへのレプリケーションもサポートされています。
インスタンスの要件
- 
                        
                        SQL Serverのサーバー名( @@SERVERNAME)はNULLにできません。
- 
                        
                        (Extract) Oracle GoldenGateでトランザクション・データを取得するには、ソースSQL ServerインスタンスでSQL Serverエージェントを実行している必要があり、データベースに対するSQL Server変更データ取得ジョブを実行している必要があります。データベースに対してSQL Serverトランザクション・レプリケーションも有効にしている場合は、SQL Serverログ・リーダー・エージェントを実行している必要があります。 
- 
                        
                        TEXT、NTEXT、IMAGEのデータまたはVARCHAR(MAX)、NVARCHAR(MAX)およびVARBINARY(MAX)列のデータがmax text repl sizeオプションに設定されたSQL Serverのデフォルト・サイズを超過すると、そのサイズが拡大されます。現在のmax text repl size値は、sp_configureを使用して表示または調整します。ノート: Amazon RDS for SQL Serverの場合、インスタンスの設定を調整するには、sp_configureのかわりにパラメータ・グループを使用する必要があります。
- 
                        
                        使用しているSQL Serverインスタンス用の最新のサービス・パックまたは累積更新をインストールして、適切な機能を確保することをお薦めします。SQL Server 2012、2014、2016および2017については、SQL Server変更データ取得機能に直接影響する複数の重要な問題がMicrosoft社によって特定され修正されています。このことは、適切にデータを取得するためのOracle GoldenGateの機能に影響します。Microsoftパッチを必要とする現在の既知の問題には、KB3030352、KB3166120およびKB4073684が含まれています。 
データベースの要件
Oracle GoldenGateをサポートするための要件と制限事項を次に示します。
- 
                           キャプチャおよび配信でサポートされているのはユーザー・データベースのみです。 
- 
                           
                           Auto Create StatisticsおよびAuto Update Statisticsがデータベースに対して有効になっていることを確認します。
- 
                           データベースがSQL Serverインスタンスのバージョンの互換性レベルに設定されている必要があります。 
- 
                           Oracle GoldenGateは、Transparent Data Encryption (TDE)で構成されたSQL Serverデータベースをサポートしています。 
- 
                           (Extract)ソース・データベースは、Microsoft SQL Serverの変更データ取得機能をサポートしている任意のリカバリ・モデルに設定できます。 
- 
                           別のインスタンスから作成したバックアップの復元によってソース・データベースが作成された場合は、データベース所有者のSIDと新しいインスタンスのSIDを同期する必要があります。また、 sp_changedbownerを使用すると、復元したデータベースを現在のログインに設定できます。
- 
                           
                           
                           Oracle GoldenGateリリース21.15および23.5以降では、インメモリーOLTP (インメモリー最適化)が有効なSQL Serverデータベース(SQL Server 2017 CU15以上のリリース)からの取得がサポートされています。ただし、メモリー最適化表からではなく、ディスク上の表からの取得のみがサポートされます。 
- 
                           
                           (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 Availability Groupの非同期コミット・モードで構成されたデータベースからの取得はサポートされていません。 
表の要件
取得と配信の対象に含める表には、「サポートされているSQL Serverデータ型」にリストされたデータ型のみが含まれている必要があります。
- 
                        Oracle GoldenGateでは、ユーザー表からのトランザクションDMLのキャプチャ、ユーザー表および書込み可能ビューへの配信をサポートしています。 
- 
                        DDL操作はサポートされません。 
- 
                        
                        Oracle GoldenGateは、SQL Serverチェンジ・データ・キャプチャで追跡する表で許可されている最大の表名および列の長さをサポートします。 
- 
                        キャプチャ元の表のすべての列の長さの合計は、その表に対するチェンジ・データ・キャプチャを有効にするためにSQL Serverで許容される長さを超えることはできません。すべての列の長さの合計がSQL Serverプロシージャ sys.sp.cdc_enable_tableで許容される長さを超えると、その表に対してADD TRANDATAを有効にできなくなります。最大許容レコード長は列数が増加すると減少するため、最大レコード長と表の列数には反比例関係があります。
サポートされているSQL Serverデータ型
次にあげた制限事項に特に記載がないかぎり、キャプチャと配信で次のデータ型がサポートされます。
- 
                           バイナリ・データ型 - 
                                 (binary、varbinary、varbinary (max))
- 
                                 (varbinary (max)withFILESTREAM)
 
- 
                                 
- 
                           文字データ型 - 
                                 (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)
 
- 
                                 
- 
                           LOB - 
                                 (image, ntext, text)
 
- 
                                 
- 
                           その他のデータ型 - 
                                 (timestamp、uniqueidentifier、hierarchyid、geography、geometry、sql_variant (配信のみ)、XML)
 
- 
                                 
- 
                           SQL ServerのためのOracle GoldenGateでは、 SPARSE設定が含まれている列データをレプリケートできます。
制限事項:
- 
                              Oracle GoldenGateでは、4KBより大きいラージ・オブジェクトのフィルタリング、列マッピングまたは操作はサポートされません。Oracle GoldenGateのすべての機能が、最大4KBのオブジェクトに使用できます。 
- 
                              XMLが行に格納されない場合にSQL Serverが行う処理と同様に、Oracle GoldenGateは、XMLデータをラージ・オブジェクト(LOB)として処理します。SQL Server拡張XMLの拡張機能(lax検証、 DATETIME、union機能など)はサポートされていません。
- 
                              システムによって割り当てられる 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の現在の値を表示し、必要に応じてオプションを調整します。ノート: Amazon RDS for SQL Serverでは、max text repl sizeを64MBより大きくすることはできません。
- 
                              
                              IMAGE、NTEXTおよびTEXTデータ型の列は、削除およびイメージ更新前操作のNULL値として記録されます。VARBINARY(MAX)、VARCHAR(MAX)およびNVARCHAR(MAX)の列は、列が更新されないかぎり、イメージ更新前操作のNULL値として記録されます。詳細は、次のMicrosoftドキュメントでラージ・オブジェクト・データ型の内容を確認してください。 
- 
                              Oracle GoldenGateは、最大サイズが2GBのUDTおよびUDAデータをサポートします。SQL_Variant以外のすべてのUDTがサポートされます。 
- 
                              SQL Server組込みCLRデータ型(geometry、geography、hierarchyidなど)を含む共通言語ランタイム(CLR)がサポートされます。CLRデータ型は、同類のSQL Server構成でのみサポートされます。変換、フィルタリング、およびその他の種類の操作は、CLRデータに対してはサポートされていません。 
- 
                              FILESTREAM属性付きのVARBINARY (MAX)列は、4GBまでのサイズがサポートされます。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でフェッチする時刻でデータ値が異なることで、不整合が生じる場合があることに注意してください。 
- 
                              
                              サポートされていないデータ型sql_variantの列がFETCHCOLSまたはFETCHMODCOLSオプションで使用されている場合、Extractは次のエラーで異常終了します: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がそのキーを使用する必要がある場合は、非永続化計算結果列は無視されます。これによって、残りの列が一意性を強制しない場合には、データ整合性が影響を受けることがあります。 
- 
                              一意索引は、非永続化計算結果列に定義されると、使用されません。 
- 
                              一意キーまたは一意索引に非永続化計算結果列が含まれていて、表の唯一の一意識別子である場合、Oracle GoldenGateは、ターゲット行を見つけるための識別子としてすべての列を使用する必要があります。非永続化計算結果列はこの識別子として使用できないため、Replicatは、この識別子を含む操作を間違ったターゲット行に適用する場合があります。 
サポートされていないSQL Serverのデータ型および機能
- 
                        SQL_Variantデータ型はキャプチャではサポートされません。
- 
                        サポートされないデータ型を含む表が原因で、Extractが異常終了する場合があります。回避策として、これらの表から TRANDATAを削除し、さらにExtractのTABLE文から表を削除するか、表に対してExtractのTABLEEXCLUDEパラメータを使用してください。
SQL Serverについてサポートされているオブジェクトおよび操作
次のオブジェクトと操作がサポートされています。
- 
                        
                        パラレルReplicatは、Oracle GoldenGate for SQL Serverでサポートされています。 
- 
                        Oracle GoldenGateは、ユーザー表からのトランザクションDMLのキャプチャ、ユーザー表および書込み可能ビューへの配信をサポートしています。 
- 
                        TEXT, NTEXT, IMAGE, VARBINARY, VARBINARY (MAX) VARCHAR (MAX)およびNVARCHAR (MAX)列は、SQL Server Chang Data Captureによってログに記録される操作のフル・サイズでサポートされています。たとえば、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についてサポートされていないオブジェクトおよび操作
次のオブジェクトと操作はサポートされていません。
- 
                        ソース・データベースの場合に、SQL Serverチェンジ・データ・キャプチャではサポートされない操作( TRUNCATE文など)。SQL Serverチェンジ・データ・キャプチャを有効にすることで制限される操作の完全なリストは、Microsoft SQL Serverのドキュメントを参照してください。
- 
                        SQL ServerのためのOracle GoldenGateは、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データ型を使用するか、データベースと同じ表列の照合を使用することをお薦めします。詳細は、About Change Data Capture (SQL Server)を参照してください。
- 
                        SQL Serverのチェンジ・データ・キャプチャの制限により、SQL Serverチェンジ・データ・キャプチャ・エージェントでは NOOPUPDATESがキャプチャされないため、no-op更新操作についてExtractがキャプチャするレコードはありません。
- 
                        
                        一時表は、Change Data Captureを有効にするためにサポートされていないため、ソース実装のExtract用には構成できません。 
トピック:
表レベルDDLの変更の要件
Oracle GoldenGate for SQL Serverは、SQL ServerのDDLの変更の取得および配信をサポートしていません。ただし、Oracle GoldenGate 21c以降、TRANDATAで有効にされた表に対して行われた変更が原因でExtractが異常終了することはありません。Extractは、TRANDATAが有効にされたときに存在していた表の変更データを引き続き処理します。
                        
表レベルDDLの変更とみなされる操作には、ALTER TABLE、TRUNCATE TABLE、索引の再構築、パーティション・スイッチなどが含まれます(それらに限定されません)。
                        
表レベルDDLの変更によるデータの不整合を回避するには、次のステップを実行する必要があります。
- ソース: 変更される1つ以上の表へのアプリケーション・データを一時停止または停止します。
- ソース: 変更される表に対するオープン・トランザクションが存在しないことを確認します。
- ソース: 変更される表に対する残りのすべてのトランザクションをSQL Server CDCキャプチャ・ジョブが処理していることを確認します。
- ソース: DDLの変更前に、変更される表のすべてのトランザクションをExtractが処理していることを確認します。
- ターゲット: DDLの変更前に、変更される表のすべてのトランザクションをReplicatが処理していることを確認します。
- オプションで、イベント・マーカー表の実装を使用して、変更される表の残りのすべてのトランザクションが処理されたタイミングを判断すると、ExtractおよびReplicatを正しく停止するタイミングの調整を処理できます。
- ソース: Extractプロセスを停止します。
- ターゲット: Replicatプロセスを停止します。
- ソース: DELETE TRANDATAを実行して、変更される表のサプリメンタル・ロギングを無効にします。
- ソース: ソース表に対して表DDLの変更を実施します。
- ターゲット: ターゲット表に対して表DDLの変更を実施します。
- ソース: 変更の実行後、表に対してADD TRANDATAを実行することで、サプリメンタル・ロギングを再有効化します。
- ソース: Extractプロセスを開始します。
- ターゲット: Replicatプロセスを開始します。
- ソース: 変更された1つ以上の表へのアプリケーション・データを再開します。