25 Sybaseのサポート対象の理解

この章では、SybaseのためのOracle GoldenGateでサポートされているデータベースと表の機能について説明します。

内容は次のとおりです。

サポートされるSybaseデータ型

この項では、Oracle GoldenGateでサポートされるSybaseデータ型と、このサポートの制限事項を示します。

整数

  • BIGINT

  • BIT

  • DECIMAL

  • INT (符号付きおよび符号なし)

  • TINYINT (符号付きおよび符号なし)

  • NUMERIC

  • SMALLINT (符号付きおよび符号なし)

サポートの制限事項

  • NUMERICDECIMAL (固定小数点)は、計算や変換を行わずに同じデータ型のターゲット列にデータを移動する場合にサポートされ、完全性が保持されます。計算や変換を実行する必要がある場合、Oracle GoldenGateは符号付きの長整数 (32ビット)の最大値をサポートします。

  • Sybaseデータベース間の自動マッピングでは、BITがサポートされます。Sybaseと他のデータベース・タイプとの間でBITデータを移動する場合、Oracle GoldenGateはBITデータをバイナリとして扱います。この場合、次のことが必要です。

    • TABLE文またはMAP文のCOLMAP句を使用して、BIT列を対応するソース列またはターゲット列にマップする必要があります。

  • Sybase 157 GAリリースでは、次のデータ型はレプリケートできません。

    • BIGINT (キー列として)

    • BIGDATETIME

    • BIGTIME

  • TINYINTをレプリケートする際にExtractがReplicatと同じバージョンでない場合、同一のSybaseバージョン間でレプリケートする場合でも、sourcedefまたはtargetdefファイル(あるいはその両方)を作成する必要があります。

  • 「サポートされないSybaseデータ型」も参照してください。

浮動小数点数

  • DOUBLE

  • FLOAT

  • REAL

サポートの制限事項

浮動小数点数の範囲および精度のサポートは、ホスト・マシンによって異なります。通常は有効桁数が16桁の精度ですが、データベースのドキュメントで想定されている近似について確認してください。Oracle GoldenGateでは、サポートされる精度を超える値は丸められるか切り捨てられます。

文字データ

  • CHAR

  • NCHAR

  • NVARCHAR

  • VARCHAR

  • UNICHAR

  • UNIVARCHAR

サポートの制限事項

  • これらのデータ型は、データベースでサポートされている最大長、すなわち最大ページ・サイズまでサポートされます。

  • Sybaseデータベースがターゲット、ソースが異種データベースで、ソースからターゲットにレプリケートする場合に、Sybaseのchar_lengthまたはdatalengthファンクションを使用してNVARCHARレプリケーション結果をフェッチすると、データ整合性の問題が発生する場合があります。これは、Adaptive Server Enterprise 15.5 for Windows x64プラットフォームEBF 21262: 15.5 ESD #5.3より前のSybaseリリースを使用する場合に発生します。

日付とタイムスタンプ

  • BIGDATETIME

  • BIGTIME

  • DATE

  • DATETIME

  • SMALLDATETIME

  • TIME

サポートの制限事項

  • Oracle GoldenGateでは、0001/01/03:00:00:00から9999/12/31:23:59:59のタイムスタンプ・データをサポートしています。タイムスタンプがGMTからローカル時間に変換されると、これらの制限も変換後のタイムスタンプに適用されます。タイムゾーンに応じて、変換により時間が追加または引かれる場合があり、これにより、タイムスタンプがサポートされている上限を超えたり、下回ったりすることがあります。

  • Oracle GoldenGateでは、マイナスの日付はサポートされていません。

ラージ・オブジェクト

  • BINARY

  • IMAGE

  • TEXT

  • UNITEXT

  • VARBINARY

サポートの制限事項

  • TEXTUNITEXTおよびIMAGEは、最大2GBの長さまでサポートされます。

  • 他のデータベースからレプリケートされるラージ・オブジェクト(Oracle BLOBおよびCLOBなど)は、SybaseのCHAR列、VARCHAR列、BINARY列およびVARBINARY列にマップすることができます。レプリケートされたラージ・オブジェクトがターゲット列のサイズより大きい場合にReplicatの異常終了を回避するため、Replicatパラメータ・ファイルでDBOPTIONSパラメータをALLOWLOBDATATRUNCATEオプションと合せて使用します。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください

  • 空のLOB列が許可されているソース・データベースから、Sybaseのターゲットにデータを移動する場合は、Replicatパラメータ・ファイルでDBOPTIONSパラメータをEMPTYLOBSTRINGオプションと合せて使用します。このパラメータは文字列値を受け入れ、Replicatによってターゲット列がNULL (Sybaseで許可されていない値)に設定されないようにします。詳細は、『Oracle GoldenGate for Windows and UNIXリファレンス』を参照してください

  • ソース表に同一の行が複数含まれていると、ターゲット表内でLOBの不整合が生じるおそれがあります。ソース表に主キーまたは他の一意の行識別子がない場合に、このような不整合が生じす。これらの列はReplicatによってターゲットに挿入されますが、以降のソース操作でLOBデータが更新された場合、ターゲットに挿入された最初の行にのみレプリケートされます。

  • 行内LOB列に対してNOT NULL制約を使用しないでください。NOT NULL制約を使用する必要がある場合は、行外LOB列に対して使用してください。

  • 行内LOBデータを表から直接フェッチする必要がある場合は、FETCHCOLS/FETCHMODCOLSを使用する必要があります。

  • Oracle GoldenGate for Sybase 15.7では、行内LOB列のレプリケーションはサポートされていません(ただし、Replicatデータベース内の行内LOB列にデータをプッシュすることはできます)。つまり、レプリケーションに含める表に行内LOB列が存在していてはなりません。レプリケーション表に行内LOB列が含まれている場合、Oracle GoldenGateは異常終了します。行内LOBのサポートが必要な場合は、追加情報についてOracleサポートにお問い合せください。

通貨型

  • MONEY

  • SMALLMONEY

サポートの制限事項

通貨データ型は、計算や変換を行わずに同じデータ型のターゲット列にデータを移動する場合にサポートされ、完全性が保持されます。計算や変換を実行する必要がある場合、Oracle GoldenGateは符号付きの長整数 (32ビット)の最大値をサポートします。

IDENTITY型

IDENTITYデータ型は単一方向のレプリケーションにサポートされますが、双方向の構成にはサポートされません。

text、imageおよびunitextデータ型

Sybase 15.7バージョンでは、LOB text、imageおよびunitextデータ型がBATCHSQLモードでサポートされるようになりました。LOBのデータ長は4Kに制限されています。LOB列を含みサイズが4Kを超えるレコードは、バッチから除外され、一度に1つずつ実行されます。現在LOB列はバインドされていますが、以前のSybaseバージョン(15.5または15.0)ではバインドされていませんでした。DBPOTIONS LEGACYLOBREPLICATIONパラメータを使用すると、以前の動作を使用できます。このサポートは、Sybaseバージョン15.7以降で実行されているReplicatにのみ適用されます。

ユーザー定義データ型

ユーザー定義のデータ型は完全にサポートされています。

サポートされないSybaseデータ型

この項では、Oracle GoldenGateでサポートされないSybaseデータ型を示します。

  • TIMESTAMPデータはサポートされていません。タイムスタンプ列のデータはキャプチャされますが、データベース制限により、そのデータはSybaseのタイムスタンプ列には適用できません。データベースでは、対応する行が挿入または更新されると、この列が自動的に移入されます。タイムスタンプ列がOracle GoldenGateにキャプチャされないようにするには、TABLEパラメータのCOLSEXCEPTオプションを使用します。システムによってタイプスタンプが作成されるため、ソース値とターゲット値が異なります。

  • Java rowobjectデータ型はサポートされていません。

Sybaseに対してサポートされる操作とオブジェクト

この項では、Oracle GoldenGateでサポートされているデータ操作およびデータベース・オブジェクトをリストします。

  • 最大長512KBの行を含むSybaseの表に対する挿入、更新、削除操作の抽出およびレプリケーションをサポートしています。

  • データベースでサポートされる表ごとの列の最大数および最大サイズ。

  • 遅延挿入、遅延間接挿入、遅延更新および遅延削除。遅延更新を使用すると、ターゲット上の影響のあるSQLに対して主キーの制約違反が生じる可能性があります。これらのエラーが発生した場合は、ReplicatのパラメータHANDLECOLLISIONSを使用します。

  • 影響のある表の名前がすべてのスキーマにおいて一意の場合は、TRUNCATE TABLE。表名がすべてのスキーマにおいて一意でない場合は、それらの表に対してIGNORETRUNCATESパラメータを使用して、Replicatの異常終了を回避します。

  • ExtractおよびReplicatによる、GETTRUNCATESおよびIGNORETRUNCATES

  • ユーザー定義システム暗号化パスワードを使用して暗号化されたデータ。

  • FETCHBATCHSIZEパラメータによって制御される、初期ロード時の配列のフェッチ。

  • 次のプラットフォーム上のASE 15.7 SP110以降のBATCHSQL Replicat機能。

    • AIX

    • Linux x64

    • Sun Solaris SPARC

    • Sun Solaris x64

    • Windows x64

    特定のシナリオで、CS_NUMERICおよびCS_DECIMALデータ型は、Sybase固有のCTライブラリのバグにより、BatchSQLでサポートされていません。LOBレプリケーションは、Sybaseデータベース・バージョン157 SP110以降のBatchSqlモードでサポートされています。これでLOBレプリケーションのパフォーマンスが向上します。これは16384バイトのLOBデータに制限されています。つまり、LOBデータが16384バイトを超える場合、データはBATCHSQLモードでは処理されず、Normalモードに切り替わります。

  • 計算結果列のサポートに関する制限事項は次のとおりです。

    • 永続化計算結果列を完全にサポートします。変更値はトランザクション・ログに含まれ、証跡にキャプチャできます。

    • 行内LOB列に対してNOT NULL制約を使用することはできません。NOT NULL制約を使用する必要がある場合は、行外LOB列のみで行います。

    • 非永続化計算結果列を持つ表。ただし、これらの列の変更データはキャプチャしません。データベースが、これらの列の変更データをトランザクション・ログに書き込まないためです。非永続化計算結果列のデータをレプリケートするには、TABLEパラメータのFETCHCOLSまたはFETCHMODCOLSオプションを使用して表から列データをフェッチします。列がデータベースで変更された時点と処理されるトランザクション・レコードに対するデータをExtractでフェッチする時点でデータ値が異なることで、不整合が生じることがあることに注意してください。

    • その列のデータが証跡にあった場合でも、ReplicatはDMLを計算結果列に適用しません。データベースがこの種の列のDMLを許可しないためです。ソース永続化計算結果列またはフェッチされた非永続化列のデータは、計算結果列ではないターゲット列に適用できます。

    • 初期ロードでは、データはすべて、トランザクション・ログからではなくソース表から直接選択されます。したがって、初期ロードで、非永続化計算結果列も含め、すべての列のデータ値が証跡に書き込まれるか、またはターゲットに送信されます。どちらになるかは、使用されているメソッドによって決まります。ただし、変更データの適用時に、Replicatは初期ロード・データを計算結果列に適用しません。データベースがこの種の列のDMLを許可しないためです。

    • キー列、索引列として定義されているか、TABLE文またはMAP文のKEYCOLS句に含まれている永続化計算結果列は使用されません。一意キーまたは索引に計算結果列が含まれ、Oracle GoldenGateがそのキーを使用する必要がある場合、計算結果列は無視されます。また、一意キーまたは一意索引に計算結果列が含まれ、表の唯一の一意識別子である場合、計算結果列以外のすべての列がターゲット行を検索するための識別子として使用されます。したがって、キーまたは索引に計算結果列が含まれ、残りの列に一意性がない場合、データの整合性に影響します。Sybaseでは、非永続化計算結果列はキーの一部としてサポートされず、Oracle GoldenGateでもサポートされません。

    • TRUNCATE TABLEをサポートするには、すべての表名がデータベース内のすべてのスキーマで一意である必要があります。このルールは、ExtractとReplicatに適用されます。

  • 自動ハートビート表のサポートに関する制限事項は次のとおりです。

    • ハートビート頻度は60で割り切れる整数にする必要があります。Oracle GoldenGateのハートビート・パラメータの頻度は、秒単位で使用することもできますが、分単位で使用します。Sybaseのジョブ・スケジューラで使用される分単位は小数ではなく整数なので、頻度を分単位で設定するために最も近い設定可能な値に内部変換されます。たとえば、この値を65秒に設定すると、頻度は1分に設定されます。140秒の値は2分に設定されます。

    • GG_HEARTBEAT_SEED表、GG_HEARTBEAT表およびGG_HEARTBEAT_HISTORY表のincoming_routing_pathoutgoing_routing_pathのデータが1500文字を超える場合にReplicatが異常終了するとデータの切捨てが発生します。これらの表のincoming_routing_pathおよびoutgoing_routing_pathのサイズは、ASCIIで1500文字に設定され、マルチバイト文字では最大500バイトです。受信および送信ルーティング・パスの文字列が指定の制限以内であることを確認してください。

    • Sybaseジョブ・スケジューラは、Oracle GoldenGateハートビート機能を実行する前にASEサーバーで構成する必要があります。

    • ハートビート表の機能が正常に動作するためには、ログイン・ユーザーにreplication_rolejs_admin_rolejs_user_roleの各ロールが必要です。

Sybaseに対してサポートされない操作とオブジェクト

この項では、Oracle GoldenGateでサポートされないデータ操作およびデータベース・オブジェクトを示します。

  • ユーザー定義パスワードを使って暗号化されたデータ。

  • DDL (データ定義言語)操作の抽出またはレプリケーション。

  • マルチExtract構成。Sybaseトランザクション・ログの読取りのためのコンテキストを保持できるのは、1つのExtractのみです。

  • SHOWSYNTAXDYNSQLモードでサポートされるため、NODYNSQLは非推奨です。

  • アンダースコアの後に文字、その後に空白(たとえば、'zzz_j')のあるデータが含まれる表名は、サポートされていません。Oracle GoldenGateでは、GGSCI、DEFGENEXTRACTまたはREPLICATを含む、この型の文字列を含むレコードを処理できません。また、この型のデータをOracle GoldenGateワイルドカード(*)と一緒に使用することはできません。この型のデータを表名に使用する場合は、この種類の表名をデータベースから削除する必要があります(アプリケーションが再起動され、Oracle GoldenGateワイルドカードが処理および適用されます)。