Oracleソース データベース取り込みとレプリケーション タスクでOracleソースを使用するには、最初にソースデータベースを準備し、使用に関する考慮事項を確認してください。
ソースの準備: • 次のいずれかの方法で、Oracleクライアントインストールディレクトリの場所を定義します。- データベース取り込みエージェントサービスの場合、oci.dllファイルまたはlibcIntsh.soファイルを含むOCIライブラリを指すように、AdministratorでociPathプロパティを設定します。OCIライブラリは、データベース取り込みとレプリケーション のCDCタスクによってOracleに接続するために使用されます。エージェントが実行されると、このパスはWindowsではPATH環境変数値、LinuxではLD_LIBRARY_PATH値に追加されます。- OracleクライアントインストールディレクトリをPATHまたはLD_LIBRARY_PATH環境変数に手動で追加します。WindowsのbinディレクトリまたはLinuxのlibディレクトリから1レベル上のインストールディレクトリを指すように、ORACLE_HOME環境変数を定義しない限り、完全なOracleクライアントインストールパスを指定する必要があります。その後、クライアントインストールパスで%ORACLE_HOME%\binまたは$ORACLE_HOME/libを使用できます。
• Oracle Database Ingestion接続プロパティで[データベース接続文字列] プロパティをTNS名に設定する場合は、tnsnames.oraファイルの場所が指定されていることを確認します。tnsnames.oraファイルは、Oracleソースデータベースと通信するために、Oracle Call Interface(OCI)とともに使用されます。データベース取り込みおよびレプリケーションでは、優先順位に応じて、次の場所でtnsnames.oraファイルを検索します。- TNS_ADMIN環境変数。ファイルが$ORACLE_HOME/network/adminディレクトリまたはデフォルトの<Oracleクライアントライブラリパス>/../network/adminディレクトリにない場合は、この環境変数を使用してtsnnames.oraファイルのディレクトリの場所を指定できます。- $ORACLE_HOME/network/admin- <Oracle_client_library_path>/../network/admin• データベース取り込みとレプリケーション ユーザーに、データベース取り込みとレプリケーション のロードタイプの実行に必要なOracle特権があることを確認してください。 詳細については、
Oracle特権 を参照してください。
• ログベースのCDCを使用したデータベース取り込みとレプリケーション ジョブには、増分変更データを読み取るためにOracleのオンラインREDOログとアーカイブREDOログへの読み取りアクセスが必要です。REDOログが、Secure Agentが実行されているオンプレミスシステムからリモートにある場合は、ログへの読み取りアクセスが提供されていることを確認してください。例えば、Oracle Automatic Storage Management(ASM)を使用して、ログをネットワークファイルシステム(NFS)にマウントするか、またはOracleファイルシステム上にあるログへのBFILEアクセスを設定することによって、それを実現します。• Oracle ASMのREDOログファイルからデータを読み取る予定の場合、Informaticaでは、ローカルのsqlnet.oraファイルのsqlnet.recv_timeoutパラメータを5分未満に設定することをお勧めします。このパラメータは、クエリがタイムアウトになるまでにOracleクライアントがASMからの応答を待機する時間を指定します。ネットワークの中断やその他の要因により、Oracle接続が応答しなくなることがあります。この値を設定すると、リーダーがそのような状況に適時応答してリカバリできるようになります。• Secure AgentがOracleと通信できるように、Oracle Database ClientまたはInstant ClientがSecure Agentサーバーにインストールされ、設定されていることを確認します。Oracleクライアントをまだインストールしていない場合は、Oracle Webサイトからクライアントをダウンロードしてインストール情報にアクセスするか、Oracle DBAにOracleクライアントのダウンロードと設定を依頼してください。• ログベースのCDCを使用した増分ロードまたは初期ロードと増分ロードの組み合わせ操作の場合、Oracleで次の要件タスクを実行します。- OracleデータベースのARCHIVELOGモードを有効にします。データベースがAmazon RDS環境にない場合は、次のSQL文を発行します。SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; SHUTDOWN IMMEDIATE; STARTUP;
Amazon RDS for Oracleデータベースの場合、データベースをARCHIVELOGモードにして、自動バックアップを有効にするために、バックアップの保存期間を設定します。
- ログのアーカイブ先を定義します。- ソースデータベースでOracleの最小限のグローバルサプリメンタルロギングを有効にします。- Oracleソーステーブルにプライマリキーがある場合は、すべてのプライマリキーカラムに対してサプリメンタルロギングが有効になっていることを確認してください。プライマリキーのないソーステーブルの場合、変更データがキャプチャされるすべてのカラムでサプリメンタルロギングが有効になっていることを確認してください。注: データベース取り込みとレプリケーションタスクを作成するときに、選択したソーステーブルのすべてのカラムまたはプライマリキーカラムのみのサプリメンタルロギングを実装するスクリプトを生成するオプションがあります。
- Oracle MAX_STRING_SIZE初期化パラメータがEXTENDEDに設定されていない ことを確認してください。EXTENDEDに設定されている場合、データベース取り込みとレプリケーション は、大きな(拡張サイズ)VARCHAR2、NVARCHAR2、またはRAWカラムで定義されたカラムを含むテーブルの挿入と更新をレプリケートできません。これらのタスクを実行する権限がない場合は、Oracleデータベース管理者に実行を依頼してください。詳細については、Oracleのマニュアルを参照してください。
• クエリベースのCDCを使用する増分ロード操作の場合、ソーステーブルには、変更行を示すために使用されるCDCクエリカラムを含める必要があります。データベース取り込みとレプリケーション タスクを作成する前に、クエリカラムをソーステーブルに追加する必要があります。クエリカラムでサポートされるOracleデータ型はTIMESTAMPです。クエリベースのCDC用に選択されたソーステーブルにCDCクエリカラムがない場合、変更データキャプチャはこれらのテーブルを無視し、残りのテーブルで処理を続行します。スキップされたテーブルの場合、ターゲットデータベースで生成された、対応するテーブルは空になります。どのソーステーブルにもCDCクエリカラムがない場合、ジョブのデプロイは失敗します。
Oracleソース準備用のAmazon Relational Database Service(RDS):
1 RDSファイルシステム上にオンラインREDOログとアーカイブREDOログをそれぞれ保持するONLINELOG_DIRディレクトリおよびARCHIVELOG_DIRのディレクトリを作成します。次の実行文を使用します。exec rdsadmin.rdsadmin_master_util.create_archivelog_dir; exec rdsadmin.rdsadmin_master_util.create_onlinelog_dir;
2 Amazon RDS for Oracleソースタイプに必要なOracle特権をデータベース取り込みとレプリケーション ユーザーに付与します。Amazon RDS for Oracleソースに必要な特権の詳細については、
Amazon RDS for Oracleソースに対するOracle特権 を参照してください。
3 アーカイブREDOログの適切な保持時間を定義します。次の実行文を使用します。exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention days',number_of_days );
4 Amazon RDSコンソールで、データベースインスタンスの自動バックアップを有効にするために、ソースデータベースのバックアップ保持期間を0より大きい値に設定します。注: この手順では、データベースに対してARCHIVELOGモードを有効にします。
5 データベースレベルでサプリメンタルロギングが有効になっていることを確認します。次の文を使用します。exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
データベース取り込みとレプリケーション タスクを作成するときに、選択したソーステーブルのサプリメンタルロギングを有効にするスクリプトを生成できます。
6 オプションで、Amazon RDSコンソールでは、パラメータグループを作成し、デフォルトのバッファープールのキャッシュサイズを定義することができます。デフォルトのバッファプールは、プライマリデータベースのブロックサイズを使用するバッファを保持します。次のDB_CACHE_SIZEパラメータ値を使用します。- DB_2K_CACHE_SIZE- DB_4K_CACHE_SIZE- DB_16K_CACHE_SIZE- DB_32K_CACHE_SIZE次に、ソースデータベースのパラメーターグループを選択します。
使用に関する考慮事項: • Oracleソースを使用する増分ロード操作の場合、データベース取り込みとレプリケーション は、ソースから変更データをキャプチャし、そのデータをターゲットに適用するための代替キャプチャメソッドを提供します。使用可能な変更キャプチャメソッドは次のとおりです。- ログベースの変更データキャプチャ。データベース取り込みとレプリケーション は、Oracle REDOログからデータ変更を読み取ります。この方法では、ユーザーの権限を拡張する必要があります。- クエリベースの変更データキャプチャ。変更データキャプチャでは、共通のCDCクエリカラムを参照するWHERE句を含むSQLステートメントを使用して、挿入および更新の変更がある行を識別します。ソースデータベースの設定は、各ソーステーブルへのCDCクエリカラムの追加に制限されます。ユーザーは、少なくともソーステーブルへの読み取り専用アクセス権を持つ必要があります。• データベース取り込みとレプリケーション では、ソーステーブルの各行が一意であることを想定しているため、各ソーステーブルにプライマリキーを持たせることをお勧めします。データベース取り込みとレプリケーション は、プライマリキーの代わりに一意のインデックスを許可しません。プライマリキーが指定されていない場合、データベース取り込みとレプリケーション はすべてのカラムをプライマリキーの一部であるかのように扱います。例外: OracleクエリベースのCDCの場合、各ソーステーブルにプライマリキーが必要です。• マルチテナントアーキテクチャを使用するOracleソースの場合、ソーステーブルはマルチテナントコンテナデータベース(CDB)内の単一のプラガブルデータベース(PDB)に存在する必要があります。• Oracle Transparent Data Encryption(TDE)を使用して、増分ロード処理のためのOracleソーステーブルを含むテーブルスペース内のデータを暗号化できます。データベース取り込みとレプリケーション は、ファイルシステム、ASM、またはOracle Key Vault(OKV)などPKCS11インタフェースを提供する外部ハードウェアセキュリティモジュール(HSM)にあるTDEキーストアへのマスター暗号化キーの保存をサポートします。詳細については、Informaticaグローバルカスタマサポートにお問い合わせください。• データベース取り込みとレプリケーション は、Oracle Data Guardの論理および物理スタンバイデータベースおよびFar Syncインスタンスをソースとしてサポートします。詳細については、ソースとしてのOracle Data GuardデータベースまたはFar Syncインスタンス を参照してください。• Oracle Cloud Infrastructure(OCI)環境のOracleソースデータベースを使用する場合、以下の要件を満たしているのであれば、データベース取り込みおよびレプリケーションを使用してログベースのCDCを実行できます。- Oracleデータベースログへのアクセスは、Oracle Database Ingetion接続のASM接続プロパティ、またはファイルシステムへのBFILEアクセスのいずれかで設定されます。- Oracleデータベースウォレットへのアクセスは、TDEマスターキーの取得を許可するように設定されています。注: Oracle Autonomous Database(ADB)システムをOCIデータベースソースと組み合わせて使用することはできません。
• データベース取り込みとレプリケーション は、RESETLOGS境界を越えてデータを処理できます。ソースとターゲットが同期しなくなるのを避けるため、RESETLOGSを実行する前にキャプチャ処理を停止し、RESETLOGSイベントの後にキャプチャ処理を再開することをお勧めします。そうしないと、キャプチャプロセスによってデータがターゲットに送信され、その後RESETLOGSイベントによって元に戻されて、ソースとターゲットが同期しなくなる可能性があります。• Oracle REDOログにアクセスするための別の戦略を利用できます。詳細については、CDCのOracleログアクセス方法 を参照してください。• データベース取り込みとレプリケーション の増分ロードタスクまたは初期ロードと増分ロードの組み合わせタスクに、30文字を超えるOracleソーステーブル名または1つ以上のカラム名が含まれている場合、Oracleではプライマリキーと外部キーを含むテーブル全体の補足ログが抑制されます。その結果、テーブルに対するほとんどの操作が失敗します。この問題は、Oracleの制限が原因で発生します。この状況では、テーブルをキャプチャ処理から除外するか、長いテーブル名とカラム名を30文字以下の名前に変更してください。• OracleソースのCHARカラムまたはVARCHARカラムにnullが含まれている場合、データベース取り込みとレプリケーション ジョブは、Amazon S3、フラットファイル、Microsoft Azure Data Lake、またはMicrosoft Azure Synapse Analyticsターゲットにデータを書き込むときに、null値を二重引用符(")マークまたはその他の区切り文字で区切りません。• データベース取り込みとレプリケーション で、Oracle BLOB、CLOB、NCLOB、LONG、LONG RAW、およびXMLカラムからAmazon Redshift、Amazon S3、Databricks、Google BigQuery、Google Cloud Storage、Microsoft Azure Data Lake Storage Gen2、Microsoft Azure Synapse Analytics、Microsoft Fabric OneLake、Oracle、Oracle Cloud Object Storage、PostgreSQL、Snowflake、およびSQL Serverターゲットにデータをレプリケートできます。タスクを設定するときに、[ソース] ページの[詳細] で[LOBを含める] を選択する必要があります。LOBカラムデータのサイズがターゲットタイプで許可されているバイト制限よりも大きい場合、ターゲットで切り詰められることがあります。詳細については、
Oracleソースの設定 を参照してください。
注: データベース取り込みとレプリケーションでは、圧縮されたOracle LOBデータ型からの変更データキャプチャはサポートされていません。
• Oracleソースを持ち、ログベースのCDCメソッドを使用するデータベース取り込みとレプリケーション ジョブでは、ソースの更新コマンドと削除コマンドのLOBタイプのカラムの前後のイメージ値にアクセスできない場合があります。これは、Data LakeまたはKafkaターゲット、または監査モードが有効になっているリレーショナルデータベースターゲットを持つジョブに影響を与える可能性があり、ターゲットの報告された更新および削除アクティビティでLOBカラム値がNULLと表示されることがあります。• バイナリ形式またはCLOB形式で格納されたXMLカラムがあるOracleソースを持つデータベース取り込みとレプリケーション の組み合わせロードジョブは、ソースデータをCLOBとして処理し、ターゲットタイプに応じて、対応するCLOB、VARCHAR、または文字列カラムを持つターゲットテーブルを作成します。• データベース取り込みとレプリケーション では、どのターゲットタイプとロードタイプでも次のOracleソースデータ型はサポートされません。- ANYTYPE、ANYDATA、ANYDATASETなどの「ANY」型- 拡張タイプ- INTERVAL- JSON- LOBデータを外部に格納するためのBFILE型- UROWID- SDO_GEOMETRYなどの空間タイプ- OBJECT、REF、VARRAY、ネストされたテーブルタイプなどのユーザー定義タイプサポートされていないデータ型を持つソースカラムは、ターゲット定義から除外されます。
サポートされているOracleデータ型からターゲットデータ型へのデフォルトのマッピングについては、「
デフォルトのデータ型マッピング 」を参照してください。
• Oracle TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEデータ型を使用するには、データベース取り込みエージェントサービスのDBMI_ORACLE_SOURCE_ENABLE_TIMESTAMP_WITH_TZまたはDBMI_ORACLE_SOURCE_ENABLE_TIMESTAMP_WITH_LOCAL_TZ環境変数をそれぞれtrueに設定します。AdministratorでSecure Agentを開き、[編集] をクリックします。[カスタム構成の詳細] で、環境変数に次の詳細を追加します。- サービス : データベース取り込み- タイプ : DBMI_AGENT_ENV- 名前 : DBMI_ORACLE_SOURCE_ENABLE_TIMESTAMP_WITH_TZまたはDBMI_ORACLE_SOURCE_ENABLE_TIMESTAMP_WITH_LOCAL_TZ- 値 : true• OracleソースのRAWカラムをターゲットのCHARまたはVARCHARカラムにマッピングするときに、カスタムデータ型マッピングルールを使用しないようにしてください。カスタムデータ型マッピングルールを使用した場合、データベース取り込みとレプリケーション タスクのデプロイが失敗する可能性があります。• データベース取り込みとレプリケーション では、ターゲットタイプに関係なく、Oracleソースカラムの非表示カラムはサポートされていません。これらのカラムについては、データベース取り込みとレプリケーション の増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブは、対応するターゲットカラムにnullをプロパゲートします。• ターゲットテーブルに存在しないレコードに対してOracleソーステーブルのプライマリキー値を更新すると、そのレコードはターゲットにレプリケートされません。ただし、監視インタフェースは更新カウントを増分してプライマリキーの更新を含めます。プライマリキー値の更新前にターゲットテーブルにレコードがすでに存在する場合、データはターゲットにレプリケートされます。• Oracleテーブルへの更新によって既存のカラム値が変更されない場合、テーブルの監視詳細の更新カウントは引き続き増加しますが、更新行がターゲットに適用されることはありません。データベース取り込みとレプリケーション は、実際に値を変更しない更新行を無視します。また、ほとんどのデータベースターゲットにおいて、データベース取り込みとレプリケーション はターゲットに変更を書き込む前にマイクロバッチレベルで変更レコードの集計を行います。この場合、監視統計の更新カウントとターゲットに適用された行との間に不一致が発生する可能性もあります。• テーブル名またはテーブルカラム名が30文字を超える場合、テーブルのサプリメンタルロギング設定がOracleによって無視されることがあります。この場合、データベース取り込みとレプリケーション の増分ロードまたは組み合わせロードジョブの結果は予測できません。• データベース取り込みとレプリケーション は、Oracleソースを持つジョブの派生カラムをサポートしていません。• Oracleの初期ロードと増分ロードの組み合わせジョブの場合、Oracle Flashbackクエリを使用して、変更ストリーム内の特定の時点で最新のコミット済みデータを取得します。初期ロード期間中にソーステーブルが切り詰められないようにしてください。切り詰めが発生した場合、フラッシュバッククエリ中にDDL変更を実行すると、クエリは失敗します。• 複数のエージェントが含まれるSecure Agentグループを使用していて、アクティブなエージェントが予期せずダウンした場合、データベース取り込みとレプリケーション ジョブは、Secure Agentグループ内の別の使用可能なエージェントに自動的に切り替えることができます。自動スイッチオーバーは、15分のハートビート間隔が経過した後に行われます。Oracleソースを持つデータベース取り込みとレプリケーション ジョブの場合、自動スイッチオーバーに次の制限があります。- ジョブで永続ストレージを有効にすることはできません。- Kafkaターゲットを持つジョブでは、チェックポイント情報をKafkaヘッダーに格納する必要があります。2025年7月リリースより前に存在していたジョブの場合、チェックポイント情報はSecure Agentのチェックポイントファイルに格納されるため、自動スイッチオーバーを実行できません。- クエリベースのCDCメソッドを使用するジョブには、Amazon Redshift、Databricks、Google BigQuery、Microsoft Azure Synapse Analytics、Oracle、PostgreSQL、Snowflake、またはSQL Serverターゲットが必要です。• クエリベースのCDCメソッドを使用した増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブには、次の制限が適用されます。- 選択したソーステーブルごとにプライマリキーが必要です。ソーステーブルにプライマリキーが存在しない場合、変更データキャプチャはテーブルを無視し、選択されたソーステーブルの残りの処理を続行します。どのソーステーブルにもプライマリキーがない場合、ジョブは失敗します。- クエリベースのCDCは、削除操作をキャプチャしません。- 挿入と更新の操作はすべて更新/挿入として扱われ、監視インタフェースに表示され、更新としてログに記録されます。- 特定のサイクルの開始時に夏時間またはタイムゾーンの変更が検出された場合、またはジョブが失敗状態または停止状態から再開されたときに、データベース取り込みとレプリケーション は再開してそのサイクルで発生した変更を処理します。夏時間またはタイムゾーンの変更を適用するには、Oracleデータベースを再起動する必要があります。• Oracleソースを使用したデータベース取り込みとレプリケーション ジョブの実行後、レプリケーション用に追加のソースカラムを選択してタスクを再デプロイした場合、ジョブは追加のカラムを使用してターゲットテーブルをすぐに再作成したり、それらのデータをレプリケートしたりしません。ただし、増分ロードジョブ、または初期ロードと増分ロードの組み合わせジョブでは、スキーマドリフトの[カラムの追加] オプションを[レプリケート] に設定した場合、次の新しいDML変更レコードを処理するときに、新しく選択したカラムがターゲットに追加され、データがレプリケートされます。初期ロードジョブでは、次回のジョブ実行時に、新しく選択したカラムがターゲットに追加され、データがレプリケートされます。 • データベース取り込みとレプリケーション は、Oracle Exadataマシンから変更データをキャプチャできますが、Oracle Exadata Hybrid Columnar Compression(EHCC)はサポートしていません。• どのロードタイプのデータベース取り込みとレプリケーション ジョブでも、Oracleのシノニムをソースとして使用することはできません。• 何らかの理由でOracleソースのLOBデータのログが不完全な場合、[LOBを含める] オプションが有効になっていてソースを処理するデータベース取り込みとレプリケーション ジョブは、次のような警告メッセージを発行します。PWX-36678 ORAD WARN: Failed to fetch LOB data for table <schema>.<table> column <column> to resolve partially logged data.
通常、データのログが不完全である原因は、既存のLOBカラムに追加されたためです。この問題は、どのロードタイプでも発生する可能性があります。
この問題を解決するには、タスクウィザードの[ソース] ページで、pwx.cdcreader.oracle.option.additionalカスタムプロパティをLOB_FETCHBACK=Yパラメータとともに指定します。この設定により、現在のデータはログからではなく、データベースから直接取得されます。このソリューションを正常に使用するには、ユーザーにSELECT ON ANY TABLE特権が付与されている必要があります。
• ディレクトリオブジェクトを使用したOracleデータへのデータベース取り込みとレプリケーション BFILEアクセスは、プライマリデータベースとスタンバイデータベース、RDSデータベースインスタンス、またはUSE_DB_RECOVERY_FILE_DESTパラメータが指す高速リカバリ領域がある環境など、複数のログの場所をサポートします。データベース取り込みおよびレプリケーションは、ARCHIVELOG_DIRおよびONLINELOG_DIRで始まり、ARCHIVELOG_DIR_01、ARCHIVE_LOG_DIR_02などのサフィックスで終わるすべてのディレクトリオブジェクトを問い合せることで、ログを自動的に見つけることができます。カスタムプロパティpwx.cdcreader.oracle.database.additional BFILEARCHIVEDIR=<directory_object>およびpwx.cdcreader.oracle.database.additional BFILEONLINEDIR=<directory_object>を使用して、ARCHIVELOG_DIR名とONLINELOG_DIR名をオーバーライドすることができます。データベース取り込みおよびレプリケーションジョブを実行するデータベースユーザーにCREATE ANY DIRECTORY特権とDROP ANY DIRECTORY特権を付与すると、必要に応じてディレクトリオブジェクトを実行時に作成できるようになります。例えば、データベースに複数のアーカイブログとオンラインログの格納先が存在する場合は、ディレクトリオブジェクトを次の命名規則で作成することができます。
- <ARCHIVEDIRNAME>_01- <ARCHIVEDIRNAME>_02- <ONLINEDIRNAME>_01- <ONLINEDIRNAME>_02データベース取り込みおよびレプリケーションは、これらの生成されたディレクトリオブジェクトに対してクリーンアップ処理を実行しません。
USE_DB_RECOVERY_FILE_DESTパラメータを使用しており、CREATE ANY DIRECTORY特権およびDROP ANY DIRECTORY特権が付与されていない場合、DBAは次のようなスクリプトを使用して、データベース取り込みおよびレプリケーションジョブを実行する前に、毎日または毎週ディレクトリオブジェクトを作成する必要があります。
create or replace directory ARCHIVELOG_DIR_2024_08_19 as '<DB_RECOVERY_FILE_DEST>/2024_08_19'
USE_DB_RECOVERY_FILE_DESTパラメータを使用しており、データベースユーザーにCREATE ANY DIRECTORY特権とDROP ANY DIRECTORY特権が付与されている場合、ディレクトリオブジェクトは実行時に必要に応じて作成され、14日後に削除されます。これらのディレクトリオブジェクトには、<ARCHIVEDIRNAME>_YYYY_MM_DDという命名規則があります。
• Azure Data Lake Storage Gen2、Amazon S3、Microsoft Fabric OneLake、またはGoogle Cloud Storageなど、Oracleソースとファイルベースのターゲットを持つデータベース取り込みとレプリケーションの増分ロードまたは組み合わせロードジョブでは、ソースプロパティで[CDCスクリプト] フィールドを[プライマリキーカラムのCDCを有効化] に設定した場合、更新されたカラムの値とプライマリキーカラムの値のみがターゲットにレプリケートされます。他のカラムの場合、ジョブはNULLをターゲットにレプリケートします。これは、それらのカラムに対してredoログへのデータの補足ロギングが有効になっていないためです。ファイルベースのターゲットにレプリケートされた更新のすべてのカラム値が必要な場合は、[CDCスクリプト] フィールドを[すべてのカラムのCDCを有効化] に設定します。
データベース取り込みとレプリケーション 環境に関する情報の収集データベース取り込みとレプリケーション タスクの作成を開始する前に、以下の情報を収集してください。
全般的な情報 どのOracleバージョンを使用しているか。 答え: ___________________________________________________ Oracleをオンプレミスで実行するか、それともクラウドベースのAmazon RDS for Oracle環境で実行するか。 答え: ___________________________________________________ ターゲットタイプは何か。 答え: ___________________________________________________ どのタイプのロード操作を実行する予定か。初期ロード(ポイントインタイムバルクロード)、増分ロード(変更のみ)、または初期ロードと増分ロードの組み合わせ(初期ロードとそれに続く増分ロード)のどれか。 答え: ___________________________________________________ Secure Agentを実行するシステムのコア数、メモリ量、およびディスク容量はいくつか。 答え: ___________________________________________________ Oracle環境 Oracleソースデータベースサーバーのホスト名とポート番号は何か。 答え: ___________________________________________________ データベースのOracleシステム識別子(SID)は何か。 答え: ___________________________________________________ データベースへの接続に使用するOracleデータベースのユーザー名とパスワードは何ですか? 答え: ___________________________________________________ Secure Agentを実行するシステムにOracle Database ClientまたはInstant Clientがインストールされていますか? 答え: ___________________________________________________ データベースはOracle Real Application Cluster(RAC)で実行されますか? 非アクティブなノードを含め、RACメンバーの最大数はいくつですか? 答え: ___________________________________________________ Oracle Data Guardの論理または物理スタンバイデータベースから変更データをキャプチャする必要があるか。 答え: ___________________________________________________ Oracleマルチテナント環境のプラガブルデータベース(PDB)のテーブルから変更データをキャプチャする必要がありますか? 答え: ___________________________________________________ Oracle Transparent Data Encyrption(TDE)を使用するテーブルスペースから変更データをキャプチャする必要がありますか? はいの場合、TDEウォレットディレクトリとパスワードは何ですか? 答え: ___________________________________________________ ソーステーブルのUnit of Work(UOW)の一般的なサイズはいくつか。 答え: ___________________________________________________ Oracle REDOログ REDOログはOracle Automatic Storage Management(ASM)環境にありますか? ASMインスタンスに接続してREDOログを読み取る場合に、SYSDBAまたはSYSASM権限を持つASMのログインユーザーIDの作成を許可されているか。 答え: ___________________________________________________ OracleソースデータベースのARCHIVELOGモードと最少グローバル補足ログが有効になっているか。されていない場合は、有効にできるか。 答え: ___________________________________________________ 変更データを読み取るアーカイブREDOログのプライマリおよびセカンダリアーカイブ先はどこか。 答え: ___________________________________________________ Oracleデータベースのピーク期間中とピーク期間外に作成されるアーカイブREDOログの1時間あたりの平均量はいくつか。 答え: ___________________________________________________ 使用している環境のREDOログへの読み取りアクセスを持っているか。 答え: ___________________________________________________ REDOログを直接読み取る権限を持っていない場合、アーカイブREDOログファイルを共有ディスクまたはファイルシステムにコピーし、その共有ディスクまたはファイルシステムから、コピーしたREDOログファイルにアクセスできるか。 答え: ___________________________________________________ データベース取り込みとレプリケーション で、アーカイブログだけでなくオンラインログから変更データを読み取れるようにするか。答え: ___________________________________________________ CDC処理中のエラーまたは異常を診断するために、必要に応じて、診断に使用するアーカイブREDOログをInformaticaグローバルカスタマサポートに提供できるか。 答え: ___________________________________________________ データベース取り込みを設定するための詳細情報 データのレプリケート元となるソーステーブルのスキーマ名は何か。 答え: ___________________________________________________ スキーマ内のすべてのテーブルまたはそれらのテーブルのサブセットからデータをレプリケートするか。サブセットの場合は、それらのリストを作成してください。 答え: ___________________________________________________ ソーステーブルにプライマリキーがあるか。すべてのプライマリキーに対して補足ログを有効にできるか。 答え: ___________________________________________________ キーなしのソーステーブルはあるか。 答え: ___________________________________________________ ソーステーブルに、サポートされていないデータ型のカラムが含まれているか。ソースタイプでサポートされていないデータ型を判別するには、データベース取り込みとレプリケーション ヘルプの「データベース取り込みとレプリケーション のソースに関する考慮事項」のソース固有のトピックを参照してください。 答え: ___________________________________________________ UTF-8のデフォルトのコードページは容認できるか。できない場合、どのコードページを使用するか。 答え: ___________________________________________________ SSLを使用して、Secure Agentとデータベースサーバー間で交換するデータを暗号化するか。暗号化SSLまたはTLSプロトコルはどれを使用するか。 答え: ___________________________________________________ 新しいOracleユーザーを作成し、データベース取り込みとレプリケーション で必要となる特権をそのユーザーに割り当てることができるか。使用するユーザー名を決定してください。 答え: ___________________________________________________ ソーステーブルに、データベース取り込みとレプリケーション がサポートしていないOracleデータ型が含まれているか。 答え: ___________________________________________________ カラムの追加、削除、変更、名前変更操作など、ソースでのスキーマドリフトの変更をキャプチャするか。 答え: ___________________________________________________ Oracle特権 Oracleソースを持つデータベース取り込みとレプリケーション タスクをデプロイして実行するには、ソース接続で取り込みロードタイプに必要な特権を持つデータベース取り込みとレプリケーション ユーザーを指定する必要があります。
ログベースのCDCを使用した増分ロード処理の権限
注: OracleログがASMによって管理されている場合、Informaticaでは、ASMファイルシステムへの読み取り専用アクセスを許可する最小システム特権であるSYSDBA特権をユーザーに持たせることをお勧めします。
ログベースのCDCメソッドを使用した増分ロードまたは、初期ロードと増分ロードの組み合わせを実行するデータベース取り込みとレプリケーション タスクの場合、データベース取り込みとレプリケーション ユーザー(cmid_user )に次の権限が付与されていることを確認してください。
GRANT CREATE SESSION TO <cmid_user >; GRANT SELECT ON table TO <cmid_user >; -- For each source table created by user -- Include the following grant only if you want to Execute the CDC script for enabling -- supplemental logging from the user interface. If you manually enable supplemental -- logging, this grant is not needed. GRANT ALTER table |ANY TABLE TO <cmid_user >; GRANT SELECT ON DBA_CONSTRAINTS TO <cmid_user >; GRANT SELECT ON DBA_CONS_COLUMNS TO <cmid_user >; GRANT SELECT ON DBA_INDEXES TO <cmid_user >; GRANT SELECT ON DBA_LOG_GROUPS TO <cmid_user >; GRANT SELECT ON DBA_LOG_GROUP_COLUMNS TO <cmid_user >; GRANT SELECT ON DBA_OBJECTS TO <cmid_user >; GRANT SELECT ON DBA_OBJECT_TABLES TO <cmid_user >; GRANT SELECT ON DBA_TABLES TO <cmid_user >; GRANT SELECT ON DBA_TABLESPACES TO <cmid_user >; GRANT SELECT ON DBA_USERS TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$ARCHIVED_LOG TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$CONTAINERS TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$DATABASE TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$DATABASE_INCARNATION TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$ENCRYPTION_WALLET TO <cmid_user >; -- For Oracle TDE access GRANT SELECT ON "PUBLIC".V$LOG TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$LOGFILE TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$PARAMETER TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$PDBS TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$SPPARAMETER TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$STANDBY_LOG TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$THREAD TO <cmid_user >; GRANT SELECT ON "PUBLIC".GV$TRANSACTION TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$TRANSPORTABLE_PLATFORM TO <cmid_user >; GRANT SELECT ON "PUBLIC".V$VERSION TO <cmid_user >; GRANT SELECT ON SYS.ATTRCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CDEF$ TO <cmid_user >; GRANT SELECT ON SYS.COL$ TO <cmid_user >; GRANT SELECT ON SYS.COLTYPE$ TO <cmid_user >; GRANT SELECT ON SYS.IDNSEQ$ TO <cmid_user >; GRANT SELECT ON SYS.IND$ TO <cmid_user >; GRANT SELECT ON SYS.INDPART$ TO <cmid_user >; GRANT SELECT ON SYS.OBJ$ TO <cmid_user >; GRANT SELECT ON SYS.PARTOBJ$ TO <cmid_user >; GRANT SELECT ON SYS.RECYCLEBIN$ TO <cmid_user >; GRANT SELECT ON SYS.TAB$ TO <cmid_user >; GRANT SELECT ON SYS.TABCOMPART$ TO <cmid_user >; GRANT SELECT ON SYS.TABPART$ TO <cmid_user >; GRANT SELECT ON SYS.TABSUBPART$ TO <cmid_user >; -- Also ensure that you have access to the following ALL_* views: ALL_CONSTRAINTS ALL_CONS_COLUMNS ALL_ENCRYPTED_COLUMNS ALL_INDEXES ALL_IND_COLUMNS ALL_OBJECTS ALL_TABLES ALL_TAB_COLS ALL_TAB_PARTITIONS ALL_USERS
クエリベースのCDCを使用した増分ロード処理の権限
クエリベースのCDCメソッドを使用した増分ロード、または初期ロードと増分ロードの組み合わせを実行するデータベース取り込みとレプリケーション タスクの場合、ユーザーが少なくとも次の特権を持っていることを確認してください。
GRANT CREATE SESSION TO <cmid_user >; GRANT SELECT ON DBA_INDEXES TO <cmid_user >; GRANT SELECT ON DBA_OBJECT_TABLES TO <cmid_user >; GRANT SELECT ON DBA_OBJECTS TO cmid_user ; GRANT SELECT ON DBA_TABLES TO <cmid_user >; GRANT SELECT ON DBA_USERS TO <cmid_user >; GRANT SELECT ON DBA_VIEWS TO <cmid_user >; -- Only if you unload data from views GRANT SELECT ANY TABLE TO <cmid_user >; -or- GRANT SELECT ON table TO <cmid_user >; -- For each source table created by user GRANT SELECT ON ALL_CONSTRAINTS TO <cmid_user >; GRANT SELECT ON ALL_CONS_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_IND_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_INDEXES TO <cmid_user >; GRANT SELECT ON ALL_OBJECTS TO <cmid_user >; GRANT SELECT ON ALL_TAB_COLS TO <cmid_user >; GRANT SELECT ON ALL_USERS TO <cmid_user >; GRANT SELECT ON "PUBLIC"."V$DATABASE" TO cmid_user ; GRANT SELECT ON "PUBLIC"."V$CONTAINERS" TO cmid_user ; GRANT SELECT ON SYS.ATTRCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CDEF$ TO <cmid_user >; GRANT SELECT ON SYS.COL$ TO <cmid_user >; GRANT SELECT ON SYS.COLTYPE$ TO <cmid_user >; GRANT SELECT ON SYS.IND$ TO <cmid_user >; GRANT SELECT ON SYS.IDNSEQ$ TO cmid_user ; GRANT SELECT ON SYS.OBJ$ TO <cmid_user >; GRANT SELECT ON SYS.RECYCLEBIN$ TO <cmid_user >; GRANT SELECT ON SYS.TAB$ TO <cmid_user >;
初期ロード処理の特権
初期ロードを実行するデータベース取り込みとレプリケーション タスクの場合、ユーザーが少なくとも次の権限を持っていることを確認してください。
GRANT CREATE SESSION TO <cmid_user >; GRANT SELECT ON DBA_INDEXES TO <cmid_user >; GRANT SELECT ON DBA_OBJECT_TABLES TO <cmid_user >; GRANT SELECT ON DBA_OBJECTS TO cmid_user ; GRANT SELECT ON DBA_TABLES TO <cmid_user >; GRANT SELECT ON DBA_USERS TO <cmid_user >; GRANT SELECT ON DBA_VIEWS TO <cmid_user >; -- Only if you unload data from views GRANT SELECT ANY TABLE TO <cmid_user >; -or- GRANT SELECT ON table TO <cmid_user >; -- For each source table created by user GRANT SELECT ON ALL_CONSTRAINTS TO <cmid_user >; GRANT SELECT ON ALL_CONS_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_ENCRYPTED_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_IND_COLUMNS TO <cmid_user >; GRANT SELECT ON ALL_INDEXES TO <cmid_user >; GRANT SELECT ON ALL_OBJECTS TO <cmid_user >; GRANT SELECT ON ALL_TAB_COLS TO <cmid_user >; GRANT SELECT ON ALL_USERS TO <cmid_user >; GRANT SELECT ON "PUBLIC"."V$DATABASE" TO cmid_user ; GRANT SELECT ON "PUBLIC"."V$CONTAINERS" TO cmid_user ; GRANT SELECT ON SYS.ATTRCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CCOL$ TO <cmid_user >; GRANT SELECT ON SYS.CDEF$ TO <cmid_user >; GRANT SELECT ON SYS.COL$ TO <cmid_user >; GRANT SELECT ON SYS.COLTYPE$ TO <cmid_user >; GRANT SELECT ON SYS.IND$ TO <cmid_user >; GRANT SELECT ON SYS.IDNSEQ$ TO cmid_user ; GRANT SELECT ON SYS.OBJ$ TO <cmid_user >; GRANT SELECT ON SYS.RECYCLEBIN$ TO <cmid_user >; GRANT SELECT ON SYS.TAB$ TO <cmid_user >;
Amazon RDS for Oracleソースに対するOracle特権 Amazon RDS for Oracleソースを使用している場合は、データベース取り込みとレプリケーション ユーザーに特定の権限を付与する必要があります。
重要: GRANT文とプロシージャを実行するには、マスターユーザー名でAmazon RDSにログインする必要があります。
少なくとも、CDC処理に必要なオブジェクトおよびシステムテーブルに対するSELECT特権を、データベース取り込みとレプリケーション ユーザー(cmid_user )に付与します。特定の状況では、追加の権限の付与が必要になります。
次のGRANT文を使用します。
GRANT SELECT ON "PUBLIC"."V$ARCHIVED_LOG" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$DATABASE" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$LOG" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$LOGFILE" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$TRANSPORTABLE_PLATFORM" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$THREAD" TO "cmid_user "; GRANT SELECT ON "PUBLIC"."V$DATABASE_INCARNATION" TO "cmid_user "; GRANT SELECT ON "PUBLIC".GV$TRANSACTION TO "cmid_user "; GRANT SELECT ON "SYS"."DBA_CONS_COLUMNS" TO "cmid_user "; GRANT SELECT ON "SYS"."DBA_CONSTRAINTS" TO "cmid_user "; GRANT SELECT ON DBA_INDEXES TO "cmid_user "; GRANT SELECT ON "SYS"."DBA_LOG_GROUP_COLUMNS" TO "cmid_user "; GRANT SELECT ON "SYS"."DBA_TABLESPACES" TO "cmid_user "; GRANT SELECT ON "SYS"."OBJ$" TO "cmid_user "; GRANT SELECT ON "SYS"."TAB$" TO "cmid_user "; GRANT SELECT ON "SYS"."IND$" TO "cmid_user "; GRANT SELECT ON "SYS"."COL$" TO "cmid_user "; GRANT SELECT ON "SYS"."PARTOBJ$" TO "cmid_user "; GRANT SELECT ON "SYS"."TABPART$" TO "cmid_user "; GRANT SELECT ON "SYS"."TABCOMPART$" TO "cmid_user "; GRANT SELECT ON "SYS"."TABSUBPART$" TO "cmid_user "; COMMIT; /*To provide read access to the Amazon RDS online and archived redo logs:*/ GRANT READ ON DIRECTORY ONLINELOG_DIR TO "cmid_user "; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO "cmid_user ";
さらに、マスターユーザーとしてログインし、次のAmazon RDSプロシージャを実行して、さらにいくつかのオブジェクトに対するSELECT特権を付与します。
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_TABLES', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_OBJECTS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_OBJECT_TABLES', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_VIEWS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / /begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'DBA_USERS', p_grantee => 'cmid_user ', p_privilege => 'SELECT', p_grant_option => false); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$CONTAINERS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$PARAMETER', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SPPARAMETER', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$STANDBY_LOG', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$VERSION', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_CONS_COLUMNS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_CONSTRAINTS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_OBJECTS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_TABLES', p_grantee => 'cmid_user ', p_privilege => 'SELECT', p_grant_option => false); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_TAB_PARTITIONS', p_grantee => 'cmid_user ', p_privilege => 'SELECT', p_grant_option => false); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_USERS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rd 'ALL_TABLES', p_grantee => 'sadmin_util.grant_sys_object( p_obj_name => 'cmid_user ', p_privilege => 'SELECT', p_grant_option => false); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ALL_TAB_PARTITIONS', p_grantee => 'cmid_user ', p_privilege => 'SELECT', p_grant_option => false); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'ATTRCOL$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'CCOL$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'COLTYPE$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'INDPART$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'IDNSEQ$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'CDEF$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'RECYCLEBIN$', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; / /* Only required for RDS21 which supports PDB*/ begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$PDBS', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end; /
CDCのOracleログアクセス方法 データベース取り込みとレプリケーション の増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブは、環境と要件に応じて、CDC処理のために別の方法でOracle REDOログにアクセスできます。
直接ログアクセス データベース取り込みとレプリケーション ジョブは、オンプレミスのソースシステム上の物理Oracle REDOログに直接アクセスして、変更データを読み取ることができます。
注: ログをソリッドステートディスク(SSD)に保存すると、この方法で最高のパフォーマンスを実現できます。
次の図は、データフローを示しています。
1 Oracleデータベースが、変更レコードをディスク上のデータベースログファイルに書き込みます。2 データベース取り込みとレプリケーション のCDCリーダーが、物理ログファイルを読み取り、CDCの対象となるソーステーブルのログファイルから変更レコードを抽出します。3 データベース取り込みとレプリケーション のCDCライターが変更レコードを読み取ります。4 CDCライターが、変更レコードをターゲットに適用します。NFSマウントされたログ データベース取り込みとレプリケーション ジョブは、ネットワークファイル共有(NFS)マウント、またはネットワーク接続ストレージ(NAS)やクラスタ化されたストレージなど別の方法を使用して、共有ディスクからOracleデータベースログにアクセスできます。
次の図は、データフローを示しています。
1 Oracleデータベースが、変更レコードをデータベースログファイルに書き込みます。ログファイルが共有ディスクに書き込まれます。共有ディスクは、ファイルをデータベースとSecure Agentホストの両方に対してローカルとして見える任意のシステムに配置できます。この共有は、上記のようにNFSを使用するか、ネットワーク接続ストレージ(NAS)またはクラスタ化されたストレージを使用して実現できます。
2 データベース取り込みとレプリケーション のCDCリーダーが、ネットワークを介してNFSサーバーからログファイルを読み取り、CDCの対象となるソーステーブルの変更レコードを抽出します。3 データベース取り込みとレプリケーション のCDCライターが変更レコードを読み取ります。4 CDCライターが、変更レコードをターゲットに適用します。ASM管理によるログ データベース取り込みとレプリケーション ジョブは、Oracle Automatic Storage Management(ASM)システムに格納されているOracle REDOログにアクセスできます。ASM管理によるREDOログから変更データを読み取るには、ASMユーザーが、ASMインスタンスに対するSYSASMまたはSYSDBA権限を持っている必要があります。
Oracle Database Ingestion接続を設定するときは、名前に「ASM」を含むプロパティを入力します。
また、Informaticaでは、Oracle ASMのREDOログファイルからデータを読み取る場合、ローカルのsqlnet.oraファイルのsqlnet.recv_timeoutパラメータを5分未満に設定することをお勧めします。このパラメータは、クエリがタイムアウトになるまでにOracleクライアントがASMからの応答を待機する時間を指定します。ネットワークの中断やその他の要因により、Oracle接続が応答しなくなることがあります。この値を設定すると、リーダーがそのような状況に適時応答してリカバリできるようになります。
次の図は、データフローを示しています。
1 Oracleデータベースが、変更レコードをASM管理によるデータベースログファイルに書き込みます。2 データベース取り込みとレプリケーション のCDCリーダーが、ASM管理によるログファイルを読み取り、CDCの対象となるソーステーブルの変更レコードを抽出します。3 データベース取り込みとレプリケーション のCDCライターが変更レコードを読み取ります。4 CDCライターが、変更レコードをターゲットに適用します。ステージングディレクトリを使用したASM管理によるログ データベース取り込みジョブは、ASM環境のステージングディレクトリからASM管理によるREDOログにアクセスできます。ASMのみを使用する場合と比較して、この方法ではログファイルへのアクセスが高速になり、ASMシステムのI/Oが低減されます。ASM管理によるログから変更データを読み取るには、ASMユーザーが、ASMインスタンスに対するSYSASMまたはSYSDBA権限を持っている必要があります。
次の図は、データフローを示しています。
1 Oracleデータベースが、変更レコードをASM管理によるログファイルに書き込みます。2 ASMが、ログをステージングディレクトリにコピーします。ステージングディレクトリは、NFSマウントなどの共有ディスク上にある必要があります。そうすることにより、ASMはそこにデータを書き込み、データベース取り込みとレプリケーション ジョブはそこからデータを読み取ることができます。
3 データベース取り込みとレプリケーション のCDCリーダーが、ステージングディレクトリにあるログファイルを読み取り、CDCの対象となるソーステーブルの変更レコードを抽出します。4 データベース取り込みとレプリケーション のCDCライターが変更レコードを読み取ります。5 CDCライターが、変更レコードをターゲットに適用します。ディレクトリオブジェクトを使用したOracleサーバーファイルシステムのログへのBFILEアクセス オンプレミスのOracleソースシステムでは、BFILEロケータを備えたOracleディレクトリオブジェクトを使用して、ローカルOracleサーバーファイルシステムからオンラインREDOログとアーカイブREDOログを読み取るように、データベース取り込みとレプリケーション を設定できます。Oracle REDOログファイルの場所を指すARCHIVELOG_DIRおよびONLINELOG_DIRという名前のOracleディレクトリオブジェクトを作成する必要があります。
次の図は、データフローを示しています。
1 Oracleデータベースが、ローカルOracleサーバーファイルシステムのREDOログファイルに変更レコードを書き込みます。データベース取り込みとレプリケーション タスクがログファイルを読み取る必要があるときに、Oracleに接続し、ARCHIVELOG_DIRまたはONLINELOG_DIRディレクトリオブジェクトを参照してログにアクセスするためのselect要求を発行します。注: スタンバイデータベース、RDSデータベースインスタンス、または高速リカバリ領域がある環境など、複数のログの場所に格納されているOracleデータへのBFILEアクセスを使用した場合、データベース取り込みおよびレプリケーションは、ARCHIVELOG_DIRおよびONLINELOG_DIRで始まり、ARCHIVELOG_DIR_01、ARCHIVE_LOG_DIR_02などのサフィックスで終わるすべてのディレクトリオブジェクトを問い合せることで、ログを自動的に見つけることができます。データベース取り込みおよびレプリケーションジョブを実行するデータベースユーザーにCREATE ANY DIRECTORY特権とDROP ANY DIRECTORY特権が付与されている場合は、必要に応じてディレクトリオブジェクトを実行時に作成できます。
2 データベース取り込みとレプリケーション のCDCリーダーが、Secure AgentボックスにインストールされているOCIクライアントを使用してログファイルを読み取り、CDC対象のソーステーブルの変更レコードを抽出します。3 CDCリーダーが、変更レコードをCDCライターに送信します。4 CDCライターが、変更レコードをターゲットに適用します。OracleアーカイブREDOログのコピーを使用する データベース取り込みとレプリケーション の初期ロードと増分ロードの組み合わせジョブでは、アーカイブREDOログのコピーから変更データを読み取ることができます。Oracle Database Ingetion接続プロパティの[読み取りモード] プロパティをARCHIVECOPYに設定し、ソースのカスタムプロパティpwx.cdcreader.oracle.reader.additionalをdirおよびfileパラメータを指定して設定する必要があります。dirパラメータでは、CDCログリーダーがアーカイブログコピーをスキャンするベースディレクトリの名前を指すようにし、fileパラメータでは、ログコピーのフィルタリングに使用するマスクを指定します。
OracleファイルシステムのOracle REDOログへのBFILEアクセスの設定 REDOログをローカルのOracleサーバーファイルシステムに保存し、BFILEでOracleディレクトリオブジェクトを使用してログにアクセスする場合は、次の設定タスクを実行します。
BFILEアクセスに固有ではない、次の通常のOracleソース前提条件タスクを完了します。
詳細については、「
Oracleソース 」を参照してください。
さらに、BFILEアクセスの場合は、次の手順を実行して、オンラインログの格納先とのアーカイブログの格納先を設定します。
1 Oracleデータベースに、Oracleサーバーファイルシステム内のオンラインREDOログとアーカイブREDOログの場所をクエリします。次のサンプルクエリを使用できます。オンラインREDOログの場所を取得するには、次の手順を実行します。
select * from v$logfile;
ログのアーカイブ先を取得するには、次の手順を実行します。
select dest_id, dest_name, destination, status from V$ARCHIVE_DEST;
2 手順1で取得したログファイルの場所を指すONLINELOG_DIRおよびARCHIVELOG_DIRディレクトリオブジェクトを作成します。Oracleディレクトリオブジェクトは、アクセスするログファイルが配置されているOracleサーバーファイルシステム上の物理ディレクトリの論理エイリアス名を指定します。以下に例を示します。CREATE DIRECTORY ONLINELOG_DIR AS '/u01/oracle/data'; CREATE DIRECTORY ARCHIVELOG_DIR AS '/u01/oracle/archivedata';
Oracle Database Ingestion接続でリーダーモードを[ARCHIVEONLY]に設定して、アーカイブログからのみ変更を読み取る場合は、ONLINELOG_DIRディレクトリまたはディレクトリオブジェクトを作成する必要はありません。
Oracleデータベースは、ディレクトリが存在することを確認しません。Oracleファイルシステムに存在する有効なディレクトリを指定していることを確認してください。
注: これらのパスでソフトリンクを使用すると、Oracleバージョン18c以降のソースを使用したデータベース取り込みおよびレプリケーションの増分ロードジョブと組み合わせロードジョブは、エラーORA-22288: file or LOB operation FILEOPEN failedで失敗します。このエラーを回避するには、[ディレクトリの置換]接続プロパティで絶対パスプレフィックスを指定するか、ログパスのソフトリンクを削除します。また、BFILEディレクトリオブジェクトを手動で作成する場合は、絶対パスを使用できます。
3 ディレクトリオブジェクトがREDOログの正しいファイルシステムパスで作成されたことを確認するには、次のようなselect文を発行します。select * from all_directories; OWNER DIRECTORY_NAME DIRECTORY_PATH -------- ------------------- ---------------------------------- SYS ARCHIVELOG_DIR /u01/oracle/data/JO112DTL SYS ONLINELOG_DIR /u01/oracle/data/JO112DTL
4 Oracle Database Ingestion接続プロパティで指定されたデータベース取り込みとレプリケーション ユーザーに、ONLINELOG_DIRおよびARCHIVELOG_DIRディレクトリオブジェクトへの読み取りアクセスを付与します。以下に例を示します。grant read on directory "ARCHIVELOG_DIR" to "cmid_user "; grant read on directory "ONLINELOG_DIR" to "cmid_user ";
注: ONLINELOG_DIRパスが存在しないか、アクティブなREDOログのパスと一致する場合、データベース取り込みおよびレプリケーションはディレクトリの作成を試みます。ディレクトリオブジェクトを作成するための十分な権限がない場合は、エラーメッセージが発行されます。その場合は、DBAに、正しいパスでディレクトリオブジェクトを作成するよう依頼してください。
5 Oracle Database Ingestion接続プロパティで、[BFILEアクセス] チェックボックスを選択します。重要: 複数のログの場所に格納されているOracleデータへのBFILEアクセスを使用した場合、データベース取り込みおよびレプリケーションは、ARCHIVELOG_DIRおよびONLINELOG_DIRで始まり、ARCHIVELOG_DIR_01、ARCHIVE_LOG_DIR_02などのサフィックスで終わるすべてのディレクトリオブジェクトを問い合せることで、ログを自動的に見つけることができます。この機能により、データベース取り込みおよびレプリケーションは、プライマリデータベースとは異なるログの場所、Amazon RDSデータベースインスタンス上のレプリカログ、およびUSE_DB_RECOVERY_FILE_DESTパラメータが指す高速リカバリエリア内のアーカイブログを使用するOracleスタンバイデータベースをサポートします。
必要に応じて、カスタムプロパティpwx.cdcreader.oracle.database.additional BFILEARCHIVEDIR=<directory_object>およびpwx.cdcreader.oracle.database.additional BFILEONLINEDIR=<directory_object>を使用して、ARCHIVELOG_DIR名とONLINELOG_DIR名をオーバーライドすることができます。
データベース取り込みおよびレプリケーションジョブを実行するデータベースユーザーにCREATE ANY DIRECTORY特権とDROP ANY DIRECTORY特権を付与すると、必要に応じてディレクトリオブジェクトを実行時に作成できるようになります。例えば、データベースに複数のアーカイブログとオンラインログの格納先が存在する場合は、ディレクトリオブジェクトを次の命名規則で作成することができます。
データベース取り込みおよびレプリケーションは、これらの生成されたディレクトリオブジェクトに対してクリーンアップ処理を実行しません。
USE_DB_RECOVERY_FILE_DESTパラメータを使用しており、CREATE ANY DIRECTORY特権およびDROP ANY DIRECTORY特権が付与されていない場合、DBAは次のようなスクリプトを使用して、データベース取り込みおよびレプリケーションジョブを実行する前に、毎日または毎週ディレクトリオブジェクトを作成する必要があります。
create or replace directory ARCHIVELOG_DIR_2024_08_19 as '<DB_RECOVERY_FILE_DEST>/2024_08_19'
USE_DB_RECOVERY_FILE_DESTパラメータを使用しており、データベースユーザーにCREATE ANY DIRECTORY特権とDROP ANY DIRECTORY特権が付与されている場合、ディレクトリオブジェクトは実行時に必要に応じて作成され、14日後に削除されます。これらのディレクトリオブジェクトには、<ARCHIVEDIRNAME>_YYYY_MM_DDという命名規則があります。
TDEウォレットへのBFILEアクセスの使用 データベース取り込みとレプリケーション は、リモートファイルベースの透過的データ暗号化(TDE)ウォレットへのBFILEアクセスを使用できます。
ファイルベースのTDEウォレットを設定する場合、データベース取り込みとレプリケーション はまずローカルマシンのTDEウォレットディレクトリにewallet.p12ファイルが存在するかどうかを確認します。ファイルが存在する場合、処理は通常どおり続行されます。ファイルがその場所に存在しない場合、データベース取り込みとレプリケーション はリモートアクセスに使用するディレクトリオブジェクトを次のように探します。
1 データベース取り込みとレプリケーション は、TDEウォレットディレクトリと一致するパスを持つディレクトリオブジェクトをデータベースに問い合わせます。データベースがWindows上で実行されている場合、この照合では大文字小文字は区別されません。末尾の区切り文字は無視されます。2 クエリでは一致するディレクトリオブジェクトが見つからず、ユーザーにCREATE ANY DIRECTORYシステム特権がある場合、データベース取り込みとレプリケーション はdirectory_nameにPWXTDEDIRを設定したディレクトリオブジェクトを作成します。3 ユーザーにCREATE ANY DIRECTORYシステム特権がない場合は、DBAにディレクトリオブジェクトを作成するよう依頼してください。ディレクトリオブジェクトにはDBAが選んだ任意の名前を付けることができます。ユーザーにはディレクトリオブジェクトに対するREADアクセス権が必要です。ディレクトリオブジェクトが存在するようになれば、初期化時にデータベースからリモートでTDEウォレットを読み取ることができます。ウォレットをローカルマシンにコピーする必要はありません。
ソースとしてのOracle Data GuardデータベースまたはFar Syncインスタンス データベース取り込みとレプリケーション は、Oracle Data Guardプライマリデータベース、論理および物理スタンバイデータベース、およびFar Syncインスタンスから変更データをキャプチャできます。
Far Syncインスタンスは、プライマリデータベースからREDOを受け入れ、そのREDOをOracle Data Guard構成の他のメンバーに送信する、リモートOracle Data Guardの宛先です。
Oracle Data Guardプライマリデータベースまたは読み取りモードで開いているスタンバイデータベースからデータをターゲットに初期ロードできます。
設定
Oracle変更キャプチャの設定は、Oracle Data Guardデータベースタイプによって異なります。
• プライマリOracleデータベースの場合は、V$STANDBY_LOGビューへのSELECT権限をデータベース取り込みとレプリケーション ユーザーに付与します。GRANT SELECT ON "PUBLIC".V$STANDBY_LOG TO <cmid_user >;
プライマリデータベースがAmazon RDS for Oracle環境にある場合は、次のように設定します。
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$STANDBY_LOG', p_grantee => 'cmid_user ', p_privilege => 'SELECT'); end;
• マウントモードの物理スタンバイデータベース (読み取り専用アクセス権では開かない)の場合は、次のOracle Database Ingestion接続プロパティを設定します。- データベース接続文字列 - Oracleカタログを読み取れるようにプライマリデータベースを指していることを確認します。- スタンバイ接続文字列 - ログリーダーがOracle物理スタンバイデータベースに接続し、ログを監視するために使用する、TNSで定義されたOracle接続文字列。- スタンバイユーザー名 - ログリーダーがOracle物理スタンバイデータベースに接続するために使用するユーザーID。このユーザーIDにはSYSDBA権限が必要です。- スタンバイパスワード - ログリーダーがOracle物理スタンバイデータベースに接続するために使用するパスワード。注: マウントモードのデータベースでは、ユーザー認証にパスワードファイルを使用できます。最初に、SYSDBA権限をユーザーに付与する必要があります。ユーザーに永続的なSYSDBA権限を付与することを回避するには、プライマリパスワードファイルを物理スタンバイまたはFar Syncインスタンスにコピーしてから、ユーザーのSYSDBA権限を取り消します。パスワードファイルを更新するたびに、このプロセスを繰り返します。
必要に応じて、次の追加の接続プロパティを設定します。
- RACメンバ - データベースがRAC環境にある場合に、Data Guardプライマリデータベース上にあるアクティブなスレッドの最大数。- リーダースタンバイログマスク - OracleスタンバイデータベースでREDOログの多重化を使用しているときに、ログリーダーがデータベースのREDOログを選択するために使用するマスク。詳細については、「コネクタと接続 」の「Oracle Database Ingestion接続プロパティ」を参照してください。
• 論理スタンバイデータベース の場合、特別な設定タスクは必要ありません。Data Guard環境にないOracleデータベースと同じ方法で設定します。スタンバイからプライマリロールへの遷移
Oracle Data Guard環境では、物理スタンバイデータベースがプライマリロールに遷移する可能性があります。通常、ロールの遷移はフェイルオーバーまたはスイッチオーバーが原因で発生します。遷移中は、物理スタンバイデータベースへのすべてのアクティブな接続が終了します。
物理スタンバイデータベースがプライマリロールに遷移した後にCDC処理を再開できるようにするには、データベース取り込みとレプリケーション が遷移ポイントを過ぎて処理できるように、元のスタンバイシステムでいくつかの接続設定プロパティを調整することが必要になる場合があります。遷移が完了したら、新しいプライマリデータベース環境でパフォーマンスを最適化するようプロパティを再度調整できます。
次の表で、この接続プロパティについて遷移段階別に説明します。
接続プロパティ
遷移前
遷移中
遷移後
RACメンバ
プライマリデータベース上のアクティブなスレッドの数を指定します。
スタンバイデータベースとプライマリデータベースの両方 のデータベース上で一意のスレッドIDを持つアクティブなスレッドの総数を指定します。
例えば、プライマリデータベースがスレッドID 1と2を使用する2ノードのRACデータベースであり、スタンバイデータベースがスレッドID 2、3、4を使用する3ノードのRACデータベースの場合、プロパティ値を4に指定します。
再開ポイントが遷移ポイントを超えるまで進行したら、必要に応じてこのプロパティ値を編集し、新しいプライマリデータベースからの変更データキャプチャのパフォーマンスを最適化します。
CDCのスレッド追跡によるオーバーヘッドを最小限に抑えるため、環境に適した最小値を使用することをお勧めします。
リーダースタンバイログマスク
スタンバイ接続文字列
スタンバイユーザー名
スタンバイパスワード
すべてのスタンバイプロパティを削除します。読み取り専用アクセス用に開いている物理スタンバイデータベースには適用されません。
プロパティは削除されたままです。
これらのプロパティは指定しないでください。これらはプライマリデータベースでは使用されません。
データベース接続文字列
スタンバイデータベースが開かれていない場合、プライマリデータベース用の接続文字列を定義します。
スタンバイデータベースが開かれている場合、スタンバイデータベース用の接続文字列を定義します。
ロールの遷移後にプライマリロールになるデータベース用の接続文字列を指定します。
この接続プロパティが、新しいプライマリデータベースの接続文字列を定義していることを確認してください。
Oracleアーカイブログの保持に関する考慮事項 データベース取り込みとレプリケーション の増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブは、OracleオンラインREDOログおよびアーカイブREDOログのトランザクションデータにアクセスできる必要があります。ログを利用できない場合、データベース取り込みとレプリケーション ジョブはエラーで終了します。
通常、Oracle DBAは、組織の特定のビジネスニーズとOracle環境に基づいて、アーカイブログの保持期間を設定します。ログを再起動処理に使用できるように、変更キャプチャが停止または潜在的な状態になると予想される最長期間プラス約1時間にわたって、ソースアーカイブログが保持されていることを確認してください。
環境内の現在のログ保持ポリシーが、データベース取り込みとレプリケーション の変更キャプチャ処理に対応するのに十分かどうかを判断するには、次の要素を考慮してください。
ログのキャプチャ処理を再開する必要があるときにアーカイブログを使用できない場合は、DBAに、アーカイブログを復元して必要に応じて保存期間を変更するよう依頼してください。それ以外の場合は、別の初期ロードを実行してターゲットを再マテリアライズしてから、増分変更データ処理を再度開始してください。ただし、この場合、一部の変更が失われる可能性があります。
tnsnames.oraファイルへのJDBC接続の詳細入力 必要に応じて、Oracleのtnsnames.oraファイルにOracleソースのJDBC接続の詳細を入力することで、データベース取り込みおよびレプリケーションのアンロード処理とログベースのCDCに使用できます。後で接続を変更する必要がある場合でも、tnsnames.oraファイルの詳細を更新するだけで十分です。Oracle Database Ingestion接続のプロパティとtnsnames.oraファイルの両方を修正する必要はありません。
tnsnames.oraファイルは、ネイティブのOracle JDBCドライバまたはProgress DataDirect Oracle JDBCドライバのいずれかで使用できます。tnsnames.oraファイルは、ユーザー自身で作成し、設定する必要があります。また、Oracle Database Ingestion接続を定義して、データベース接続文字列を指定する必要もあります。この文字列はソースデータベースのTNSエントリを指定するものです。
この機能は、クエリベースのCDCを使用するOracleソースや、Oracleターゲットには適用されません。また、接続の詳細にtnsnames.oraファイルのみを使用する場合、SSL暗号化やKerberos認証の設定はできません。
tnsnames.oraファイルを使用するように設定するには、次の手順を実行します。
1 tnsnames.oraファイルを設定します。ソースデータベースにTNSエントリを追加します。例:# Entry for the database 'MY_DB' on the server specified by the host name MY_DB_TNS_NAME = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = my_server_hostname)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = my_service_name.example.com) ) )
2 tnsnames.oraファイルの場所を定義するには、優先度の高い順に記載されている次のシステム環境変数のいずれかを設定します。- TNS_ADMIN環境変数- ORACLE_HOME環境変数これらの場所のいずれかでtnsnames.oraを見つけられない場合、タスクは該当するエラーメッセージで失敗します。
3 タスク設定ウィザードでデータベース取り込みおよびレプリケーションタスクを設定する際、アンロード処理にtnsnames.oraファイルを使用できるようにするために、[タスクの詳細 – ソースの詳細] ページでソースカスタムプロパティuseTnsNamesInJDBCUrlをtrueに設定します。4 次のプロパティを使用してOracle Database Ingestion接続を定義します。- データベース接続文字列 プロパティを、tnsnames.oraファイルのエントリの有効なTNS名に設定します。- 必要なホスト 、ポート 、およびサービス名 の値を指定します。これらのプロパティは接続に必要ですが、ユーザーインタフェースから接続をテストするときにのみ使用されます。タスクの設定や実行時にメタデータを取得する際は、tnsnames.oraファイルのTNSエントリが優先されます。