DataWorks は、Oracle データソースからデータを読み取り、Oracle データソースにデータを書き込むための Oracle Reader と Oracle Writer を提供しています。コードレス ユーザーインターフェース(UI)またはコードエディターを使用して、Oracle データソースのデータ同期タスクを構成できます。このトピックでは、Oracle データソースとのデータ同期の機能について説明します。
サポートされている Oracle バージョン
バッチデータの読み取りと書き込み
バージョン | バッチデータ読み取り用の Oracle Reader | バッチデータ書き込み用の Oracle Writer |
Oracle 11.2 または 11gR2 | サポートされています | サポートされています |
Oracle 12.1 または 12cR1 | サポートされています | サポートされています |
Oracle 12.2 または 12cR2 | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) |
Oracle 18.3 | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) |
Oracle 19.x | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) |
Oracle 21.1 | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) | サポートされています(以降のバージョンの Oracle の機能ではサポートされていません) |
Oracle Writer は ojdbc6-12.1.1.jar ドライバーを使用します。
リアルタイムデータの読み取り
サポートされている Oracle データベースバージョン:
12c non cdb
、18c non cdb
、19c non cdb
、19c cdb
、および11g R2 以降のバージョン
サポートされていない Oracle データベースバージョン:
12c cdb
および18c cdb
Oracle 12c 以降の Oracle データベースは、コンテナデータベース(CDB)として機能し、複数のプラガブルデータベース(PDB)をホストできます。
制限
データ同期では、UTF-8、AL32UTF8、AL16UTF16、ZHS16GBK のエンコーディング形式がサポートされています。
1 日に最大 500 GB の増分データを Oracle インスタンスからリアルタイムで同期できます。
Data Integration における Oracle データソースからのデータのリアルタイム同期は、ログファイルを分析するために使用される Oracle LogMiner ユーティリティに基づいて実装されています。プライマリ Oracle データベースでのみ、プライマリまたはセカンダリデータベースのサプリメンタルロギング機能を有効にできます。
バッチ同期の際にビューのデータを読み取ることができます。
データ型
データ型 | バッチデータ読み取り用の Oracle Reader | バッチデータ書き込み用の Oracle Writer | リアルタイムデータ読み取り |
NUMBER | サポートされています | サポートされています | サポートされています |
BINARY FLOAT | サポートされています | サポートされています | サポートされています |
BINARY DOUBLE | サポートされています | サポートされています | サポートされています |
CHAR | サポートされています | サポートされています | サポートされています |
NCHAR | サポートされています | サポートされています | サポートされています |
VARCHAR2 | サポートされています | サポートされています | サポートされています |
NVARCHAR2 | サポートされています | サポートされています | サポートされています |
DATE | サポートされています | サポートされています | サポートされています |
TIMESTAMP | サポートされています | サポートされています | サポートされています |
TIMESTAMP WITH TIME ZONE | サポートされています | サポートされています | サポートされていません |
TIMESTAMP WITH LOCAL TIME ZONE | サポートされています | サポートされています | サポートされていません |
CLOB | サポートされています | サポートされています | サポートされています |
BLOB | サポートされています | サポートされています | サポートされています |
RAW | サポートされています | サポートされています | サポートされています |
ROWID | サポートされていません | サポートされていません | サポートされています |
UROWID | サポートされていません | サポートされていません | サポートされています |
FLOAT | サポートされています | サポートされています | サポートされています |
INTERVAL DAY TO SECOND | サポートされていません | サポートされていません | サポートされています |
INTERVAL YEAR TO MONTH | サポートされていません | サポートされていません | サポートされています |
BFILE | サポートされていません | サポートされていません | サポートされていません |
LONG | サポートされていません | サポートされていません | サポートされていません |
LONG RAW | サポートされていません | サポートされていません | サポートされていません |
NCLOB | サポートされています | サポートされています | サポートされていません |
STRUCT | サポートされています | サポートされています | サポートされていません |
ユーザー定義型 | サポートされていません | サポートされていません | サポートされていません |
AnyType | サポートされていません | サポートされていません | サポートされていません |
AnyData | サポートされていません | サポートされていません | サポートされていません |
AnyDataSet | サポートされていません | サポートされていません | サポートされていません |
XmlType | サポートされていません | サポートされていません | サポートされていません |
空間型 | サポートされていません | サポートされていません | サポートされていません |
メディア型 | サポートされていません | サポートされていません | サポートされていません |
次の表に、Oracle Reader がデータ型を変換する際に基づくデータ型のマッピングを示します。
カテゴリ | Oracle データ型 |
整数 | NUMBER、ROWID、INTEGER、INT、および SMALLINT |
浮動小数点 | NUMERIC、DECIMAL、FLOAT、DOUBLE PRECISION、および REAL |
文字列 | LONG、CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、CLOB、NCLOB、CHARACTER、CHARACTER VARYING、CHAR VARYING、NATIONAL CHARACTER、NATIONAL CHAR、NATIONAL CHARACTER VARYING、NATIONAL CHAR VARYING、および NCHAR VARYING |
日付と時刻 | TIMESTAMP および DATE |
ブール値 | BIT および BOOLEAN |
バイナリ | BLOB、BFILE、RAW、および LONG RAW |
データ同期前に Oracle 環境を準備する
DataWorks を使用して Oracle データソースとの間でデータを同期する前に、Oracle 環境を準備する必要があります。これにより、データ同期タスクを構成し、Oracle データソースとの間でデータを想定どおりに同期できるようになります。次の情報では、Oracle データソースとのデータ同期のために Oracle 環境を準備する方法について説明します。
Oracle データベースのバージョンを確認する
サポートされている Oracle データベースのバージョンは、同期のシナリオによって異なります。データベースとの間でデータを同期する前に、Oracle データベースのバージョンがサポートされているかどうかを確認してください。
次のいずれかの文を実行して、Oracle データベースのバージョンを確認できます。
文 1:
select * from v$version;
文 2:
select version from v$instance;
Oracle データベースのバージョンが
12c
または18c
の場合は、次の文を実行して、データベースがCDB
として機能できるかどうかを確認する必要があります。Oracle データベースがCDB
として機能できる場合、この Oracle データベースは DataWorks のリアルタイム同期タスクではサポートされていません。select name,cdb,open_mode,con_id from v$database;
必要な権限を持つアカウントを準備する
Oracle データベースにログインするために使用するアカウントを準備する必要があります。アカウントは、Oracle データベースに対する必要な権限を持っている必要があります。
アカウントを作成します。詳細については、「Oracle データベースにアクセスするためのアカウントを作成する」をご参照ください。
アカウントに必要な権限を付与します。
次の文を実行して、アカウントに必要な権限を付与できます。特定の文を実行するときは、
データ同期用アカウント
を作成したアカウントに置き換えてください。grant create session to 'データ同期用アカウント'; // 同期アカウントにデータベースへのアクセスを承認します。 grant connect to 'データ同期用アカウント'; // 同期アカウントにデータベースへの接続を承認します。 grant select on nls_database_parameters to 'データ同期用アカウント'; // 同期アカウントに nls_database_parameters の設定を照会する権限を付与します。 grant select on all_users to 'データ同期用アカウント'; // 同期アカウントにデータベース内のすべてのユーザーを照会する権限を付与します。 grant select on all_objects to 'データ同期用アカウント'; // 同期アカウントにデータベース内のすべてのオブジェクトを照会する権限を付与します。 grant select on DBA_MVIEWS to 'データ同期用アカウント'; // 同期アカウントにデータベースのマテリアライズドビューを確認する権限を付与します。 grant select on DBA_MVIEW_LOGS to 'データ同期用アカウント'; // 同期アカウントにデータベースのマテリアライズドビューログを表示する権限を付与します。 grant select on DBA_CONSTRAINTS to 'データ同期用アカウント'; // 同期アカウントにデータベース内のすべてのテーブルの制約を表示する権限を付与します。 grant select on DBA_CONS_COLUMNS to 'データ同期用アカウント'; // 同期アカウントにデータベース内のすべてのテーブルの指定された制約を満たす列に関する情報を表示する権限を付与します。 grant select on all_tab_cols to 'データ同期用アカウント'; // 同期アカウントにデータベースのテーブル、ビュー、およびクラスタの列に関する情報を表示する権限を付与します。 grant select on sys.obj$ to 'データ同期用アカウント'; // 同期アカウントにデータベース内のオブジェクトを表示する権限を付与します。sys.obj$ は、データディクショナリテーブルに含まれるオブジェクトテーブルを示します。オブジェクトテーブルにはすべてのオブジェクトが含まれています。 grant select on SYS.COL$ to 'データ同期用アカウント'; // 同期アカウントにデータベースのテーブルの列の定義を表示する権限を付与します。SYS.COL$ は、テーブルの列の定義を格納します。 grant select on sys.USER$ to 'データ同期用アカウント'; // 同期アカウントにデータベースのシステムテーブルを表示する権限を付与します。sys.USER$ は、デフォルトのユーザーセッションサービスを示します。 grant select on sys.cdef$ to 'データ同期用アカウント'; // 同期アカウントにデータベースのシステムテーブルを表示する権限を付与します。 grant select on sys.con$ to 'データ同期用アカウント'; // 同期アカウントにデータベースの制約を表示する権限を付与します。sys.con$ は制約を記録します。 grant select on all_indexes to 'データ同期用アカウント'; // 同期アカウントにデータベースのすべてのインデックスを表示する権限を付与します。 grant select on v_$database to 'データ同期用アカウント'; // 同期アカウントにデータベースの v_$database ビューを確認する権限を付与します。 grant select on V_$ARCHIVE_DEST to 'データ同期用アカウント'; // 同期アカウントにデータベースの V_$ARCHIVE_DEST ビューを確認する権限を付与します。 grant select on v_$log to 'データ同期用アカウント'; // 同期アカウントにデータベースの v_$log ビューを確認する権限を付与します。v_$log は、制御ファイルに関するログインformation を表示します。 grant select on v_$logfile to 'データ同期用アカウント'; // 同期アカウントにデータベースの v_$logfile ビューを確認する権限を付与します。v_$logfile には、REDO ログファイルに関する情報が含まれています。 grant select on v_$archived_log to 'データ同期用アカウント'; // 同期アカウントにデータベースの v$archived_log ビューを確認する権限を付与します。v$archived_log には、アーカイブログに関する情報が含まれています。 grant select on V_$LOGMNR_CONTENTS to 'データ同期用アカウント'; // 同期アカウントにデータベースの V_$LOGMNR_CONTENTS ビューを確認する権限を付与します。 grant select on DUAL to 'データ同期用アカウント'; // 同期アカウントにデータベースの DUAL テーブルを表示する権限を付与します。DUAL は、SELECT 構文規則を含む仮想テーブルです。Oracle では、DUAL テーブルには 1 つのレコードのみが保持されます。 grant select on v_$parameter to 'データ同期用アカウント'; // 同期アカウントにデータベースの v_$parameter ビューを確認する権限を付与します。v$parameter は、データベースのパラメーターの値を格納する動的ディクショナリテーブルです。 grant select any transaction to 'データ同期用アカウント'; // 同期アカウントにデータベースのトランザクションを表示する権限を付与します。 grant execute on SYS.DBMS_LOGMNR to 'データ同期用アカウント'; // 同期アカウントに LOGMNR ツールを使用する権限を付与します。LOGMNR ツールは、トランザクションを分析し、失われたデータを回復するのに役立ちます。 grant alter session to 'データ同期用アカウント'; // 同期アカウントにデータベースの接続設定を変更する権限を付与します。 grant select on dba_objects to 'データ同期用アカウント'; // 同期アカウントにデータベース内のすべてのオブジェクトを表示する権限を付与します。 grant select on v_$standby_log to 'データ同期用アカウント'; // 同期アカウントにデータベースの v_$standby_log ビューを確認する権限を付与します。v_$standby_log には、セカンダリデータベースのアーカイブログが含まれています。 grant select on v_$ARCHIVE_GAP to 'データ同期用アカウント'; // 同期アカウントに不足しているアーカイブログを照会する権限を付与します。 grant select on sys.ICOL$ to 'データ同期用アカウント'; // 同期アカウントにデータベース内のオブジェクトを表示する権限を付与します。 sys.obj$ はデータディクショナリテーブルに含まれるオブジェクトテーブルを示します。オブジェクトテーブルにはすべてのオブジェクトが含まれています。 grant select on V$THREAD to 'データ同期用アカウント'; // 同期アカウントにインスタンススレッド情報を表示する権限を付与します。V$THREAD ビューは、Oracle の動的パフォーマンスビュー内のスレッドステータステーブルです。Real Application Clusters(RAC)環境の各インスタンスのスレッドステータスを格納し、増分解析中にインスタンスの状態とログのソースを判断するために使用されます。
完全データのバッチ同期を実装するには、次の文を実行して、すべてのテーブルに対するクエリ権限を同期アカウントに付与する必要もあります。
grant select any table to 'データ同期用アカウント';
12c 以降の Oracle データベースの場合、次の文を実行して、ログマイニング権限を同期アカウントに付与する必要があります。ログマイニング機能は、12c より前のバージョンの Oracle データベースの組み込み機能です。このようなデータベースでは、次の文を実行する必要はありません。
grant LOGMINING TO 'データ同期用アカウント';
アーカイブロギングとサプリメンタルロギングを有効にし、別の REDO ログファイルに切り替える
次の SQL 文を実行して、アーカイブロギングを有効にします。
shutdown immediate; startup mount; alter database archivelog; alter database open;
サプリメンタルロギングを有効にします。
SQL 文:
alter database add supplemental log data(primary key) columns; // プライマリキー列のサプリメンタルロギングを有効にします。 alter database add supplemental log data(unique) columns; // 一意なインデックス列のサプリメンタルロギングを有効にします。
別の REDO ログファイルに切り替えます。
サプリメンタルロギングを有効にした後、次の文を複数回実行して、別の REDO ログファイルに切り替える必要があります。次の文を 5 回実行することをお勧めします。
alter system switch logfile;
説明これにより、現在のログファイルがいっぱいになった後、データが次のログファイルに書き込まれるようになります。実行された操作のレコードは失われません。これは、データの回復を容易にします。
Oracle データベースの文字エンコーディング形式を確認する
次の文を実行して、データベースの文字エンコーディング形式を確認します。
select * from v$nls_parameters where PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
v$nls_parameters は、データベースのパラメーターの値を格納します。
NLS_CHARACTERSET はデータベース文字セットを示します。NLS_NCHAR_CHARACTERSET は各国語文字セットを示します。これら 2 つのセットは、それぞれの文字タイプのデータを格納するために使用されます。
データ同期では、UTF-8、AL32UTF8、AL16UTF16、ZHS16GBK のエンコーディング形式がサポートされています。データベースにデータ同期でサポートされていない文字エンコーディング形式が含まれている場合は、データを同期する前に形式を変更してください。
Oracle データベースのテーブルのデータ型を確認する
SELECT 文を実行して、データベース内のテーブルのデータ型を照会できます。'tablename'
テーブルのデータ型を照会するために実行されるサンプル文:
select COLUMN_NAME,DATA_TYPE from all_tab_columns where TABLE_NAME='tablename';
COLUMN_NAME: 列の名前。
DATA_TYPE: 列のデータ型。
all_tab_columns: データベースのテーブルのすべての列に関する情報を格納するビュー。
TABLE_NAME: 照会するテーブルの名前。上記の文を実行するときは、'tablename' を照会するテーブルの名前に置き換えてください。
select * from 'tablename';
文を実行して、目的のテーブルに関する情報を照会し、テーブルの列のデータ型を取得することもできます。
データソースを追加する
データソース管理 の手順に従って、必要なデータソースを DataWorks に追加する必要があります。 DataWorks コンソールでパラメーターのヒントを表示して、データソースを追加するときのパラメーターの意味を理解できます。
データ同期タスクを開発する
同期タスクのエントリポイントと構成手順については、次の構成ガイドを参照してください。
単一テーブルのデータを同期するためのバッチ同期タスクを構成する
構成手順の詳細については、「コードレス UI を使用してバッチ同期タスクを構成する」および「コードエディターを使用してバッチ同期タスクを構成する」をご参照ください。
コードエディターを使用してバッチ同期タスクを構成するときに構成されるすべてのパラメーターと実行されるコードについては、「付録: コードとパラメーター」をご参照ください。
単一テーブルのデータを同期するためのリアルタイム同期タスクを構成する
構成手順の詳細については、「DataStudio でリアルタイム同期タスクを構成する」をご参照ください。
データベース内のすべてのデータのバッチ同期、データベース内の完全データまたは増分データのリアルタイム同期、およびシャーディングデータベース内のシャーディングテーブルからのデータのリアルタイム同期を実装するための同期設定を構成する
構成手順の詳細については、「Data Integration で同期タスクを構成する」をご参照ください。
追加情報
Oracle、PolarDB、または MySQL からデータを同期するためにリアルタイム同期ノードを実行すると、エラーが繰り返し報告されるのはなぜですか?
プライマリデータベースとセカンダリデータベース間のデータ同期
災害復旧のためにセカンダリ Oracle データベースをデプロイできます。セカンダリデータベースは、バイナリログに基づいてプライマリデータベースからデータを継続的に同期します。プライマリデータベースとセカンダリデータベース間のデータの遅延を防ぐことはできません。これは、データの不整合につながる可能性があります。
データ整合性制御
Oracle は、データクエリの強力な整合性をサポートするリレーショナルデータベース管理システム(RDBMS)です。同期タスクが開始される前に、データベーススナップショットが作成されます。Oracle Reader は、データベーススナップショットからデータを読み取ります。したがって、データ同期の間に新しいデータがデータベースに書き込まれた場合、Oracle Reader は新しいデータを取得できません。
同期タスクで Oracle Reader が並列スレッドを使用してデータを読み取るようにした場合、データの整合性を確保することはできません。
Oracle Reader は、splitPk パラメーターの値に基づいてソーステーブルをシャーディングし、並列スレッドを使用してデータを読み取ります。これらの並列スレッドは異なるトランザクションに属し、異なる時点でデータを読み取ります。したがって、並列スレッドは異なるスナップショットを観察します。
同期タスクに並列スレッドを使用する場合、データの不整合を防ぐことはできません。次の回避策を使用できます。
同期タスクで Oracle Reader が単一スレッドを使用してデータを読み取るようにします。これは、Oracle Reader のシャードキーを指定する必要がないことを示します。こうすることで、データの整合性は確保されますが、データの同期効率は低下します。
データ同期の間にソーステーブルにデータが書き込まれないようにします。これにより、データ同期の間にソーステーブルのデータが変更されないことが保証されます。たとえば、ソーステーブルをロックしたり、プライマリデータベースとセカンダリデータベース間のデータ同期を無効にすることができます。こうすることで、データは効率的に同期されますが、実行中のサービスが中断される可能性があります。
文字エンコーディング
Oracle Reader は、Java Database Connectivity(JDBC)を使用してデータを読み取ります。これにより、Oracle Reader は文字のエンコーディング形式を自動的に変換できます。したがって、エンコーディング形式を指定する必要はありません。
増分データ同期
Oracle Reader は JDBC を使用してデータベースに接続し、
WHERE 句付きの SELECT 文
を使用して増分データを読み取ります。バッチデータの場合、増分の追加、更新、および削除操作(論理削除操作を含む)はタイムスタンプによって区別されます。特定のタイムスタンプに基づいて WHERE 句を指定します。タイムスタンプで示される時刻は、前回の同期の最新のタイムスタンプで示される時刻より後である必要があります。
ストリーミングデータの場合、特定のレコードの ID に基づいて WHERE 句を指定します。ID は、前回の同期に含まれる最大 ID より大きい必要があります。
追加または変更されたデータを区別できない場合、Oracle Reader は完全データのみを読み取ることができます。
構文検証
Oracle Reader では、querySql パラメーターを使用してカスタム SELECT 文を指定できますが、これらの文の構文は検証されません。
付録: コードとパラメーター
コードエディターを使用してバッチ同期タスクを構成する
コードエディターを使用してバッチ同期タスクを構成する場合は、統一スクリプト形式の要件に基づいて、スクリプトに関連パラメーターを構成する必要があります。詳細については、「コードエディターを使用してバッチ同期タスクを構成する」をご参照ください。次の情報では、コードエディターを使用してバッチ同期タスクを構成するときにデータソースに構成する必要のあるパラメーターについて説明します。