OCI GoldenGateデータ変換の検出
OCI GoldenGate Data ReplicationデプロイメントとData Transformsデプロイメントを一緒に使用して、2つのAutonomous Databases間でデータをロードおよび変換する方法について学習します。
開始する前に
このクイックスタートを正常に完了するには:
- サンプル・データがロードされ、サプリメンタル・ロギングが有効になっているソースAutonomous Database。
ヒント:
サンプル・データを操作する必要がある場合は、OCI GoldenGateサンプル・データをダウンロードできます。- Autonomous Databaseのデータベース・アクションのSQLツールを使用して、2つのスクリプトを実行してユーザー・スキーマおよび表を作成します。
- SQLツールを使用して、サプリメンタル・ロギングを有効にします。
- ソースAutonomous DatabaseインスタンスでGGADMINユーザーをロック解除します
- 「Autonomous Databaseの詳細」ページで、「データベース・アクション」メニューから「データベース・ユーザー」を選択します。
ヒント:
プロンプトが表示されたら、ログインするインスタンスの作成時に指定されたAutonomous Database管理者資格証明を使用します。 - GGADMINユーザーを見つけて、その省略記号(3つのドット)メニューから「編集」を選択します。
- 「ユーザーの編集」パネルで、パスワードを入力し、パスワードを確認して、「アカウントがロックされています」の選択を解除します。
- 「変更の適用」をクリックします
- 「Autonomous Databaseの詳細」ページで、「データベース・アクション」メニューから「データベース・ユーザー」を選択します。
タスク1: 環境の設定
- データ・レプリケーション・デプロイメントを作成します。
- ソースOracle Autonomous Transaction Processing (ATP)接続を作成します。
- ターゲットAutonomous Data Warehouse (ADW)接続を作成します。
- デプロイメントに接続を割り当てます。
- Autonomous Database SQLツールを使用して、サプリメンタル・ロギングを有効にします:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA - SQLツールで次の問合せを実行して、ソース・データベース内のすべての表の
support_mode=FULLを確認します:select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';
タスク2: 統合Extractの作成
統合Extractは、ソース・データベースに対する継続的な変更を取得します。
- 「デプロイメントの詳細」ページで、「コンソールの起動」をクリックします。
- 必要に応じて、ユーザー名にoggadminと入力し、デプロイメントの作成時に使用したパスワードを入力して、「サインイン」をクリックします。
- トランザクション データとチェックポイント テーブルを追加します。
- ナビゲーション・メニューを開き、「DB接続」をクリックします。
- 「データベースへの接続」 SourceATPをクリックします。
- ナビゲーション・メニューで、「Trandata」をクリックし、「Trandataの追加」(プラス・アイコン)をクリックします。
- 「スキーマ名」に
SRC_OCIGGLLと入力し、「送信」をクリックします。 - 確認するには、「検索」フィールドに
SRC_OCIGGLLと入力し、「検索」をクリックします。 - ナビゲーション・メニューを開き、「DB接続」をクリックします。
- 「データベースへの接続」 TargetADWをクリックします。
- ナビゲーション・メニューで、「チェックポイント」、「チェックポイントの追加」(プラス・アイコン)の順にクリックします。
- 「チェックポイント表」に
"SRCMIRROR_OCIGGLL"."CHECKTABLE"と入力し、「送信」をクリックします。
- Extractを追加します。「Extractパラメータ」ページで、
EXTTRAIL <trail-name>の下に次の行を追加します:-- Capture DDL operations for listed schema tables ddl include mapped -- Add step-by-step history of -- to the report file. Very useful when troubleshooting. ddloptions report -- Write capture stats per table to the report file daily. report at 00:01 -- Rollover the report file weekly. Useful when IE runs -- without being stopped/started for long periods of time to -- keep the report files from becoming too large. reportrollover at 00:01 on Sunday -- Report total operations captured, and operations per second -- every 10 minutes. reportcount every 10 minutes, rate -- Table list for capture table SRC_OCIGGLL.*; - 長時間実行トランザクションを確認します。ソース・データベースで次のスクリプトを実行します:
select start_scn, start_time from gv$transaction where start_scn < (select max(start_scn) from dba_capture);問合せでなんらかの行が返された場合は、トランザクションのSCNを特定してから、トランザクションをコミットまたはロールバックする必要があります。
タスク3: Oracle Data Pump (ExpDP)を使用したデータのエクスポート
Oracle Data Pump (ExpDP)を使用して、ソース・データベースからOracle Object Storeにデータをエクスポートします。
- Oracle Object Storeバケットを作成します。
エクスポートおよびインポート・スクリプトで使用するネームスペースおよびバケット名をメモしておいてください。
- 認証トークンを作成し、後で使用するためにトークン文字列をコピーしてテキスト・エディタに貼り付けます。
- ソース・データベースに資格証明を作成し、
<user-name>および<token>を、前のステップで作成したOracle Cloudアカウントのユーザー名およびトークン文字列に置き換えます:BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'ADB_OBJECTSTORE', username => '<user-name>', password => '<token>' ); END; - ソース・データベースで次のスクリプトを実行して、データのエクスポート・ジョブを作成します。オブジェクト・ストアURIの
<region>、<namespace>および<bucket-name>を適宜置き換えてください。SRC_OCIGGLL.dmpは、このスクリプトの実行時に作成されるファイルです。DECLARE ind NUMBER; -- Loop index h1 NUMBER; -- Data Pump job handle percent_done NUMBER; -- Percentage of job complete job_state VARCHAR2(30); -- To keep track of job state le ku$_LogEntry; -- For WIP and error messages js ku$_JobStatus; -- The job status from get_status jd ku$_JobDesc; -- The job description from get_status sts ku$_Status; -- The status object returned by get_status BEGIN -- Create a (user-named) Data Pump job to do a schema export. h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'SRC_OCIGGLL_EXPORT','LATEST'); -- Specify a single dump file for the job (using the handle just returned -- and a directory object, which must already be defined and accessible -- to the user running this procedure. DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE','100MB',DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE,1); -- A metadata filter is used to specify the schema that will be exported. DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''SRC_OCIGGLL'')'); -- Start the job. An exception will be generated if something is not set up properly. DBMS_DATAPUMP.START_JOB(h1); -- The export job should now be running. In the following loop, the job -- is monitored until it completes. In the meantime, progress information is displayed. percent_done := 0; job_state := 'UNDEFINED'; while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts); js := sts.job_status; -- If the percentage done changed, display the new value. if js.percent_done != percent_done then dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done)); percent_done := js.percent_done; end if; -- If any work-in-progress (WIP) or error messages were received for the job, display them. if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) then le := sts.wip; else if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) then le := sts.error; else le := null; end if; end if; if le is not null then ind := le.FIRST; while ind is not null loop dbms_output.put_line(le(ind).LogText); ind := le.NEXT(ind); end loop; end if; end loop; -- Indicate that the job finished and detach from it. dbms_output.put_line('Job has completed'); dbms_output.put_line('Final job state = ' || job_state); dbms_datapump.detach(h1); END;
タスク4: Oracle Data Pump (ImpDP)を使用したターゲット・データベースのインスタンス化
Oracle Data Pump (ImpDP)を使用して、ソース・データベースからエクスポートしたSRC_OCIGGLL.dmpからターゲット・データベースにデータをインポートします。
- Oracle Object Storeにアクセスするための資格証明をターゲット・データベースに作成します(前述の項と同じ情報を使用します)。
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'ADB_OBJECTSTORE', username => '<user-name>', password => '<token>' ); END; - ターゲット・データベースで次のスクリプトを実行して、
SRC_OCIGGLL.dmpからデータをインポートします。オブジェクト・ストアURIの<region>、<namespace>および<bucket-name>を適宜置き換えてください:DECLARE ind NUMBER; -- Loop index h1 NUMBER; -- Data Pump job handle percent_done NUMBER; -- Percentage of job complete job_state VARCHAR2(30); -- To keep track of job state le ku$_LogEntry; -- For WIP and error messages js ku$_JobStatus; -- The job status from get_status jd ku$_JobDesc; -- The job description from get_status sts ku$_Status; -- The status object returned by get_status BEGIN -- Create a (user-named) Data Pump job to do a "full" import (everything -- in the dump file without filtering). h1 := DBMS_DATAPUMP.OPEN('IMPORT','FULL',NULL,'SRCMIRROR_OCIGGLL_IMPORT'); -- Specify the single dump file for the job (using the handle just returned) -- and directory object, which must already be defined and accessible -- to the user running this procedure. This is the dump file created by -- the export operation in the first example. DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE',null,DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE); -- A metadata remap will map all schema objects from SRC_OCIGGLL to SRCMIRROR_OCIGGLL. DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA','SRC_OCIGGLL','SRCMIRROR_OCIGGLL'); -- If a table already exists in the destination schema, skip it (leave -- the preexisting table alone). This is the default, but it does not hurt -- to specify it explicitly. DBMS_DATAPUMP.SET_PARAMETER(h1,'TABLE_EXISTS_ACTION','SKIP'); -- Start the job. An exception is returned if something is not set up properly. DBMS_DATAPUMP.START_JOB(h1); -- The import job should now be running. In the following loop, the job is -- monitored until it completes. In the meantime, progress information is -- displayed. Note: this is identical to the export example. percent_done := 0; job_state := 'UNDEFINED'; while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop dbms_datapump.get_status(h1, dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts); js := sts.job_status; -- If the percentage done changed, display the new value. if js.percent_done != percent_done then dbms_output.put_line('*** Job percent done = ' || to_char(js.percent_done)); percent_done := js.percent_done; end if; -- If any work-in-progress (WIP) or Error messages were received for the job, display them. if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0) then le := sts.wip; else if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0) then le := sts.error; else le := null; end if; end if; if le is not null then ind := le.FIRST; while ind is not null loop dbms_output.put_line(le(ind).LogText); ind := le.NEXT(ind); end loop; end if; end loop; -- Indicate that the job finished and gracefully detach from it. dbms_output.put_line('Job has completed'); dbms_output.put_line('Final job state = ' || job_state); dbms_datapump.detach(h1); END;
タスク5: 非統合Replicatの追加および実行
- Replicatを追加して実行します「パラメータ・ファイル」画面で、
MAP *.*, TARGET *.*;を次のスクリプトに置き換えます:-- Capture DDL operations for listed schema tables -- ddl include mapped -- -- Add step-by-step history of ddl operations captured -- to the report file. Very useful when troubleshooting. -- ddloptions report -- -- Write capture stats per table to the report file daily. -- report at 00:01 -- -- Rollover the report file weekly. Useful when PR runs -- without being stopped/started for long periods of time to -- keep the report files from becoming too large. -- reportrollover at 00:01 on Sunday -- -- Report total operations captured, and operations per second -- every 10 minutes. -- reportcount every 10 minutes, rate -- -- Table map list for apply -- DBOPTIONS ENABLE_INSTANTIATION_FILTERING; MAP SRC_OCIGGLL.*, TARGET SRCMIRROR_OCIGGLL.*;ノート
DBOPTIONS ENABLE_INSTATIATION_FILTERINGによって、Oracle Data Pumpを使用してインポートした表に対するCSNフィルタリングが可能になります。詳細は、DBOPTIONSのリファレンスを参照してください。 - ソース・データベースへの挿入を実行します。
- Oracle Cloudコンソールに戻り、ナビゲーション・メニューを使用して「Oracle Database」、「Autonomous Transaction Processing」、「SourceATP」の順にナビゲートします。
- 「ソースATP詳細」ページで、「データベース・アクション」、「SQL」の順にクリックします。
- 次の挿入を入力し、「スクリプトの実行」をクリックします:
Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1000,'Houston',20,743113); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1001,'Dallas',20,822416); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1002,'San Francisco',21,157574); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1003,'Los Angeles',21,743878); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1004,'San Diego',21,840689); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1005,'Chicago',23,616472); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1006,'Memphis',23,580075); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1007,'New York City',22,124434); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1008,'Boston',22,275581); Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1009,'Washington D.C.',22,688002); - OCI GoldenGateデプロイメント・コンソールで、「抽出名(UAEXT)」をクリックし、「統計」をクリックします。SRC_OCIGGLL.SRC_CITYが10個の挿入とともにリストされていることを確認します。
- 「概要」画面に戻り、Replicat名(REP)をクリックし、「統計」をクリックします。SRCMIRROR_OCIGGLL.SRC_CITYが10個の挿入とともにリストされていることを確認します。
タスク6: データ変換リソースの作成
- データ変換デプロイメントの作成。
- 汎用接続を作成します。ノート
たとえば、米国東部(アッシュバーン)のAutonomous Databasesでは、次の値を使用します:- 「ホスト」に、
adb.us-ashburn-1.oraclecloud.com:1522と入力します。 - 「サブネット」で、ドロップダウンからデプロイメントと同じサブネットを選択します。
- 「ホスト」に、
- 汎用接続をデプロイメントに割り当てます。
- Autonomous Data Warehouse (ADW)インスタンスでSRCMIRROR_OCIGGLLにTRG_CUSTOMERを作成します:
- Oracle Cloudコンソールで、ナビゲーション・メニューを開き、Oracle Databaseに移動して、「Autonomous Data Warehouse」を選択します。
- 「Autonomous Databases」ページで、ADWインスタンスをクリックします。
- ADW Autonomous Databaseの詳細ページで、「データベース・アクション」をクリックし、ドロップダウンから「SQL」を選択します。「データベース・アクション」メニューのロードに時間がかかりすぎる場合は、「データベース・アクション」を直接クリックし、「データベース・アクション」ページから「SQL」を選択できます。
- ワークシートに次を入力し、「文の実行」をクリックします。
create table SRCMIRROR_OCIGGLL.TRG_CUSTOMER ( CUST_ID NUMBER(10,0) not null, DEAR VARCHAR2(4 BYTE), CUST_NAME VARCHAR2(50 BYTE), ADDRESS VARCHAR2(100 BYTE), CITY_ID NUMBER(10,0), PHONE VARCHAR2(50 BYTE), AGE NUMBER(3,0), AGE_RANGE VARCHAR2(50 BYTE), SALES_PERS VARCHAR2(50 BYTE), CRE_DATE DATE, UPD_DATE DATE, constraint PK_TRG_CUSTOMER primary key (CUST_ID) );
- Data Transformsデプロイメント・コンソールを起動します。
- 「デプロイメント」ページに戻り、タスク6で作成したデプロイメントを選択します。
- 「デプロイメントの詳細」ページで、「コンソールの起動」をクリックします。
- Data Transformsデプロイメント・コンソールにログインします。
- ADW接続の作成:
- ナビゲーション・メニューを開き、「接続」、「接続の作成」の順にクリックします。
- 「タイプの選択」ページの「データベース」で、「Oracle」、「次へ」の順に選択します。
- 「接続の詳細」ページで、次のようにフォーム・フィールドに入力し、「作成」をクリックします:
- 「名前」に、ADW_IADと入力します。
- 「資格証明ファイルの使用」を選択します。
- Walletファイルの場合は、(ADW)ウォレット・ファイルをアップロードします。
ノート
ADWウォレット・ファイルをダウンロードするには、ADWの詳細ページで「データベース接続」をクリックします。 - 「サービス」ドロップダウンから、<name>_lowを選択します。
- 「ユーザー」に、ADMINと入力します。
- 「パスワード」には、ADWパスワードを入力します。
- データ・エンティティのインポート:
- ナビゲーション・メニューを開き、「データ・エンティティ」、「データ・エンティティのインポート」の順にクリックします。
- 「接続」で、ドロップダウンからADW_IADを選択します。
- 「スキーマ」で、ドロップダウンからSRCMIRROR_OCIGGLLを選択します。
- 「起動」をクリックします
- プロジェクトを作成:
- ナビゲーション・メニューを開き、「プロジェクト」をクリックします。
- 「プロジェクト」ページで、「プロジェクトの作成」をクリックします。
- 「プロジェクトの作成」ダイアログの「名前」にdemo-pipelineと入力し、「作成」をクリックします。
タスク7: ワークフローの作成および実行
- データ・フローの作成:
- プロジェクトの名前を選択します。
- 「プロジェクトの詳細」ページの「リソース」で、「データ・フロー」、「データ・フローの作成」の順にクリックします。
- 「データ・フローの作成」ダイアログで、「名前」に「ロードTRG_CUSTOMER」と入力し、オプションで説明を入力します。「作成」をクリックします デザイン・キャンバスが開きます。
- 「スキーマの追加」ダイアログで、次のようにフォーム・フィールドに入力し、「OK」をクリックします:
- 「接続」で、ドロップダウンからADW_IADを選択します。
- 「スキーマ」で、ドロップダウンからSRCMIRROR_OCIGGLLを選択します。
- 次のデータ・エンティティおよびコンポーネントをデザイン・キャンバスにドラッグします。
- 「データ・エンティティ」パネルで、SRCMIRROR_OCIGGLLスキーマを展開します。SRC_AGE_GROUPデータ・エンティティをデザイン・キャンバスにドラッグします。
- 「データ・エンティティ」パネルで、SRCMIRROR_OCIGGLLスキーマを展開します。SRC_SALES_PERSONデータ・エンティティをデザイン・キャンバスにドラッグします。
- 「データ変換」ツールバーから、「参照」コンポーネントをデザイン・キャンバスにドラッグします。
- 「データ変換」ツールバーから、「結合」コンポーネントをデザイン・キャンバスにドラッグします。
- 「データ・エンティティ」パネルのSRCMIRROR_OCIGGLLで、SRC_CUSTOMERデータ・エンティティを設計キャンバスにドラッグします。
- 次のデータ・エンティティを「参照」コンポーネントに接続します:
- SRC_AGE_GROUPコネクタ・アイコンをクリックし、アイコンを「参照」コンポーネントにドラッグします。
- SRC_CUSTOMERコネクタ・アイコンをクリックし、アイコンを「参照」コンポーネントにドラッグします。
- デザイン・キャンバスで、「参照」をクリックして「参照」パネルを開きます。「ルックアップ」パネルで、「属性」タブに切り替えてから、次の問合せを「ルックアップ条件」に貼り付けます:
SRC_CUSTOMER.AGE between SRC_AGE_GROUP.AGE_MIN and SRC_AGE_GROUP.AGE_MAX - 次のコンポーネントを「結合」コンポーネントに接続します:
- SRC_SALES_PERSONコネクタ・アイコンをクリックし、アイコンを「結合」コンポーネントにドラッグします。
- 「参照」コネクタ・アイコンをクリックし、アイコンを「結合」コンポーネントにドラッグします。
- デザイン・キャンバスで、「結合」をクリックして「結合」パネルを開きます。「結合」パネルで、「属性」タブに切り替えてから、次の問合せを「結合条件」に貼り付けます:
SRC_CUSTOMER.SALES_PERS_ID=SRC_SALES_PERSON.SALES_PERS_ID - 次のデータ・エンティティおよびコンポーネントをデザイン・キャンバスにドラッグします。
- 「データ・エンティティ」パネルのSRCMIRROR_OCIGGLLで、TRG_CUSTOMERデータ・エンティティを設計キャンバスにドラッグします。
- 「結合」コネクタ・アイコンをクリックし、アイコンをTRG_CUSTOMERデータ・エンティティにドラッグします。
- デザイン・キャンバスで、TRG_CUSTOMERをクリックし、データ・エンティティを展開します。
- 「属性」タブで、CUST_IDの「キー」を有効にし、CRE_DATEの「更新」を無効にし、UPD_DATEの「挿入」を無効にします。
- 「列マッピング」タブで、名前が式と一致していることを確認します:
- CUST_ID
SRC_CUSTOMER.CUSTID - シリア
CASE WHEN SRC_CUSTOMER.DEAR = 0 THEN 'Mr' WHEN SRC_CUSTOMER.DEAR = 1 THEN 'Mrs' ELSE 'Ms' END - CUST_NAME
SRC_CUSTOMER.FIRST_NAME || ' ' || UPPER(SRC_CUSTOMER.LAST_NAME) - SALES_PERS
SRC_SALES_PERSON.FIRST_NAME || ' ' ||UPPER(SRC_SALES_PERSON.LAST_NAME) - CRE_DATE
SYSDATE - UPD_DATE
SYSDATE - 他のマッピングをそのまま使用します。
- CUST_ID
- 「オプション」タブの「モード」で、ドロップダウンから「増分更新」を選択します。
- TRG_CUSTOMERを縮小します。
- データ・フローの保存をクリックします。
- ワークフローの作成:
- プロジェクトの名前を選択し、「ワークフロー」、「ワークフローの作成」の順に選択します。
- 「名前」に、Orchestrate Data Warehouse Loadと入力します。「作成」をクリックします
- デザイン・キャンバスで「SQL」アイコンをドラッグします。
- エディタでSQLステップをダブルクリックし、ステップ・プロパティのページを開きます。
- 「一般」タブで、名前に「データ・クレンジング」と入力します。
- 「属性」タブを選択し、「接続」でドロップダウンからADW_IADを選択します。
- 「SQL」で、次の問合せをコピーします。
delete from SRCMIRROR_OCIGGLL.TRG_CUSTOMER where CITY_ID > 110 - 「SQL」を縮小します。
- 「データ・フロー」で、TRG_CUSTOMERデータ・フローをデザイン・キャンバスにドラッグします。
- 「データ・クレンジング」SQLワークフロー・ラインをクリックし、OK (緑色の矢印)アイコンをTRG_CUSTOMERデータ・フローにドラッグします。
- 「ワークフローの保存」をクリックし、「ワークフローの開始」をクリックします。
- ジョブの作成および管理。