ここでは、Oracle抽出レプリケーションのサポートする機能範囲と注意事項について説明します。
レプリケーション可能な組合せ
レプリケーション機能のサポート範囲
Oracleのサポート範囲
Oracle抽出レプリケーションの注意事項
Oracle抽出レプリケーションにおける複写元データベース、複写先データベースの組合せについては、“解説書”を参照してください。
なお、複写先データベースに、Symfoware ServerまたはEnterprise Postgres以外のデータベースを使用することはできません。
Oracle抽出レプリケーションは以下の機能をサポートしていません。他の機能範囲はSymfoware抽出レプリケーション(Postgres)と同じです。Symfoware抽出レプリケーション(Postgres)の機能範囲は“1.1.1 サポートする機能範囲”を参照してください。
グループ単位のレプリケーション
複写元システムのクラスタシステム対応機能
可変長ログ形式の差分データ
利用者プログラムの停止が不要な初期複写業務
範囲指定を条件とするレプリケーション
Oracleのサポート機能範囲を説明します。
マテリアライズド・ビューを除くビュー、シノニムまたはデータベース・リンクをレプリケーション対象にすることはできません。
レプリケーション対象の表には、以下の制限があります。
列の合計長の制約
列数の制約
マテリアライズド・ビューの制約
表に定義している列の合計長が32000バイト以下である表をレプリケーション対象にすることができます。列の合計長が32000バイトを超える表をレプリケーション対象にすると差分ログの取得開始コマンド(lxrpoenaコマンド)がエラーになる場合があります。
列の合計長とは、表に定義しているデータ型ごとの表示長の合計です。以下にデータ型ごとの表示長の算出方法を示します。表示長の詳細はOracleのマニュアルを参照してください。
データ型 | 表示長(単位はバイト) |
---|---|
NUMBER(p,s) [p>=Q] | p+2 |
NUMBER(p) | p+2 |
NUMBER(p,-s) | p+s+2 |
NUMBER(p,s) [p<s] | s |
NUMBER | 38+2 |
CHAR(n)/VARCHAR2(n) | n(注) |
NCHAR(n)/NVARCHAR2(n) | n |
FLOAT(p)/FLOAT | 23 |
DATE | 19 |
p:精度を表します。
s:スケールを表します。
n:文字列および各国語文字列のバイト数を表します。
注)文字数を表します。
Linkexpress Replication optionは、差分複写を実現するためにトリガを使用しています。トリガ定義では、識別子の数やサイズに制限があり、識別子の数やサイズは、レプリケーション対象の表に定義している列数およびデータ型に依存します。
そのために、以下の条件を満足する表をレプリケーション対象にすることができます。以下の条件を満足しない表をレプリケーション対象にすると差分ログの取得開始コマンド(lxrpoenaコマンド)がエラーになる場合があります。
対象表に必要な領域長の合計 < 950
対象表に必要な領域長の合計:
列1に必要な領域長 + 列2に必要な領域長 + … 列Nに必要な領域長
列1,2…Nに必要な領域長:レプリケーション対象の表に定義しているすべての列について、列のデータ型ごとに必要な領域長(データ型ごとに必要なトリガの領域長)
データ型ごとに必要なトリガの領域長を以下に示します。
各国語文字列型(NCHAR、NVARCHAR2) :2.33
文字列型(CHAR、VARCHAR、VARCHAR2):1.20
数値型(NUMBER、FLOAT) :1.45
時間型(DATE) :2.08
例えば、CHAR型だけで構成された表では、791個以下の列数(950/1.20)で構成された表をレプリケーション対象にすることができます。(950/1.20=791)
注意
条件を満足しない場合でもレプリケーション対象にできる場合があります。その場合には“差分ログの取得開始コマンド”が正常終了するかどうかにより判断することができます。
列数の制約は全複写だけで運用する場合は関係ありません。
マテリアライズド・ビューは、複写元データベースがOracle19cの場合に指定できます。
指定できるマテリアライズド・ビューは、読取り専用マテリアライズド・ビューです。また、使用できるマテリアライズド・ビューのタイプは、主キー・マテリアライズド・ビューです。
マテリアライズド・ビューを使用する場合の注意事項は、“3.1.1.4 Oracle抽出レプリケーションの注意事項”を参照してください。
以下の方法によるデータベースの更新は一括差分複写のサポート対象外です。以下の方法でデータベースを更新すると、複写元データベースと複写先データベース間の整合性が保てなくなりますので、一括差分複写業務の運用中は実行しないようにしてください。誤って実行してしまった場合には、複写元データベースと複写先データベースの同期をとるために、全複写業務を実行する必要があります。
パラレルDML
ダイレクト・ロード・インサート
SQL*Loaderのダイレクト・パス
SQL*Loaderの従来型パス(TRUNCATE指定)
スイッチバック処理
データガード
フラッシュバック
複製機能(GoldenGate)
Linkexpress Replication optionでは、未サポートのOracleデータ型があります。
未サポートのデータ型が定義されている表について、同じ表内のサポートされているデータ型の列を抽出定義の項目選択に指定することで、未サポートのデータ型が定義されている表をレプリケーションの対象にすることができます。この場合、未サポートのデータ型の列は、レプリケーションの対象にはなりません。
また、サポートしているデータ型についても、扱えるデータに以下の条件があります。
データ型 | サポート可否 | 条件 |
---|---|---|
CHAR型 | ○ |
|
VARCHAR2型 | ○ |
|
VARCHAR型 | ○ |
|
NCHAR型 | ○ | 文字数は、1000まで。 データベース・キャラクタ・セットがAL32UTF8の場合、対応する複写先データベースのデータ型はCHAR型(注)。 |
NVARCHAR2型 | ○ | 文字数は、2000まで。 データベース・キャラクタ・セットがAL32UTF8の場合は、文字数は1000文字まで。 |
LONG型 | × |
|
NUMBER型 | ○ | 位取りの絶対値が精度の値より大きく、かつ、マイナスの値の場合はサポートしていません。 |
DATE型 | ○ | ‘YYYY-MM-DD HH24:MI:SS’型だけをサポートしています。 |
LOB型 | × |
|
RAW型 | × |
|
LONG RAW型 | × |
|
ROWID型 | × |
|
MLSLABEL型 | × |
|
FLOAT型 | ○ | 精度が53以上の場合はサポートしていません。 |
ユーザ定義型 | × |
|
TIMESTAMP型 | × | |
TIMESTAMP WITH TIME ZONE型 | × | |
TIMESTAMP WITH LOCAL ZONE型 | × | |
INTERVAL YEAR TO MONTH型 | × | |
INTERVAL DAY TO SECOND型 | × | |
Arrive型 | × | |
XML Type型 | × | |
ネイティブXMLデータ型 | × | |
その他データ型 | × | 取り扱うデータは、OSの文字コードの範囲としてください。 |
注)抽出定義のDATATYPEには、CHARを指定します。また、DBサービス定義のINTABLEのITEMには、CHARを指定します。
以下のUPDATE文によるデータベースの更新は、一括差分複写のサポート対象外です。以下のUPDATE文でデータベースを更新すると、複写元データベースと複写先データベース間の整合性が保てなくなりますので、レプリケーション対象表に対して使用しないでください。
誤って実行してしまった場合には、複写元データベースと複写先データベースの同期をとるために、全複写業務を実行する必要があります。
SQL文 | 代替方法 |
---|---|
1つのUPDATE文による複写先データベースのPRIMARY KEYに対応した複写元データベースの一意性制約列(複数行)の集合(バルク)更新 | 適切な順序で1行ずつ更新してください。 |
以下の運用は使用できません。
Oracle Parallel Server
パーティション機能
分散機能(Oracle RAC)
圧縮機能
セキュリティ機能(Advanced Securityなど)
スタンバイ機能(Oracle Data Guardなど)
インメモリ機能
マルチテナント機能
ILM(Information Lifecycle Management)自動化機能
データウェアハウス機能(Oracle Advanced Analytics)
データベース・キャラクタ・セットおよび各国文字キャラクタ・セットはオペレーティング・システムのコード系と同じにする必要があります。さらにNLS環境およびデータベース・キャラクタ・セットは以下が使用可能です。
言語:JAPANESE
データベース・キャラクタ・セット:JA16EUC、JA16SJISまたはAL32UTF8
日時書式:’YYYY-MM-DD HH24:MI:SS’
その他のNLS環境はデフォルト
ここでは、特に注意が必要な事項について説明します。他の細かな注意事項については、本章および“コマンドリファレンス”に記述しています。
Oracleの異常や、Linkexpress Replication optionのシステムファイルのディスク破壊などの理由により、一括差分複写業務が異常終了した場合には、全複写業務を実行し、複写元データベースと複写先データベースの同期をとる必要があります。
トランザクションログデータベースから差分ログを収集する処理は、Oracleの性能に依存します。そのため、バッファキャッシュやデータベースのブロックサイズなどのOracleシステムパラメタのチューニングを必ず実施する必要があります。
数値型のデータ型で、実際にデータベースに格納されているデータの精度および位取りが、抽出定義に指定した抽出形式(DATATYPEに指定したデータ型)の精度を超えた場合には、そのデータに対して抽出形式に格納可能な近似値が代替値として設定され、コンソールに警告メッセージが出力されます。コンソールについては、“読み方”を参照してください。
NUMBER(5,0)のOracleデータ型に、抽出定義のDATATYPEにSINTを指定し、実際のデータがSINTの精度(32768)をオーバフローした場合、格納可能な最大値として32768が設定されます。このように、NUMBER(5,0)で32768~99999または-32769~-99999のデータが存在する可能性がある場合はINTで抽出定義を実施してください。
Oracleでは、FLOAT型に精度を超えるデータを格納する場合は、データの自動変換が行われます。Linkexpress Replication optionは、データベースに格納された値でレプリケーションします。
Linkexpress Replication optionを導入すると、差分ログを取得するトリガの処理により利用者プログラムのレスポンス性能に影響を与えます。レプリケーションのオーバヘッドを考慮した運用設計を実施してください。
Oracleの項目属性がNCHAR型の場合、更新するデータに各国語文字とASCII系文字を混在できるかどうかは、DATATYPEの指定に依存します。
複写元のOracleのデータ・ベース・キャラクタセットがAL32UTF8の場合、文字型のデータ型は、以下の範囲で使用できます。
データ型 | 利用範囲 |
---|---|
CHAR型 | 格納されるデータが、半角英数字である。 |
VARCHAR型 | 格納されるデータが、半角英数字である。 |
NCHAR型 | 連携できる複写先データベースは以下であり、複写先データベースの格納先の列は、CHAR型である。
|
NVARCHAR2型 | 連携できる複写先データベースは以下であり、複写先データベースの格納先の列は、NCHAR VARYING型である。
|
注1) 取り扱えるデータは4バイトまでのマルチバイト文字列です。
注2) 取り扱えるデータは3バイトまでのマルチバイト文字列です。
注3) データベースの文字コード系は、UNICODEです。
注4) 取り扱えるデータは2バイトまでのマルチバイト文字列です。
複写元システムのOracleのデータ・ベース・キャラクタセットがAL32UTF8の場合、NCHAR型およびNVARCHAR2型データを、UNICODE系以外の文字コードにコード変換することはできません。
マスターテーブル(マテリアライズド・ビューの元となる実表)とマテリアライズド・ビューの関係は1対1とし、マスターテーブルのすべての列をマテリアライズド・ビューの対象としてください。
複写先の表として、マテリアライズド・ビューは指定できません。
マテリアライズド・ビューに指定できる列のデータ型は、実表と同じです。
マテリアライズド・ビューの以下の句は、使用できません。
column_alias
ENCRYPT
OF object_type
scoped_table_ref_constraint
inmemory_table_clause
inmemory_column_clause
column_properties
parallel_clause
WITH ROWID
FOR UPDATE
query_rewrite_clause
QUERY REWRITE
マテリアライズド・ビューを複写元の表とする場合、抽出定義のJOINは使用できません。
マスターテーブルと複写先の表の一意性制約列の構成は、同じでなければなりません。
マテリアライズド・ビューを複写元の表とする場合、同期リフレッシュに対して、レプリケーションを行うことはできません