1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI Data Integrationを使用しオブジェクト・ストレージからOracle DBにデータをロードする

Last updated at Posted at 2023-02-01

本ブログは、オラクル・クラウドの個人ブログの1つです。

初めに

これまでのODIシリーズの記事では、各種のODI製品(サービス)の差異を含め、さまざまなトピックを紹介してきました。今回は、OCI Data Integraton (以下 OCI DI と省略)の一般的な利用場面を紹介したいと思います。

検証シナリオ
オブジェクト・ストレージ上のJSONファイルからデータを読み込み、それをターゲットDBに(Oracle DBを例に)をロードします。この例では、単一のソースファイルからデータを読み込み、そのままDBにロードするため、データの編集やマージなどの機能には触れません。

オブジェクト・ストレージや Oracle DB 以外にも、多くの種類のデータ・ソースがサポートされています。詳細のリストについて、こちらをご参照ください。

目次

1. 事前準備

1-1. ネットワーク・リソース

OCI DI のワークスペースを作成する際、VCN内部か外部どちらかを指定できます。今回の例は、デフォルトの選択肢(VCN内部)を選び、プライベート・サブネットで作成します。

Oracle DBは、同じリージョンかつ同じVCNの下にある異なるプライベート・サブネットに格納されます。OCI DIからはサービス・ゲートウェイを経由して、同じリージョンのオブジェクト・ストレージにアクセスします。これらのデータ転送はすべてインターネットを経由せずにOCI内部で行われます。

この例では、OCI DIから他のリソースにアクセスするために、ワークスペースが所属するサブネットに対してセキュリティ・リストを付与する必要があります。設定の詳細は以下の通りです。

タイプ 項目 コメント
VCN CIDR 10.0.0.0/16
プライベート・サブネット 名前 Private Subnet DI ワークスペースの格納先
CIDR 10.0.5.0/24
プライベート・サブネット 名前 Private Subnet DB ターゲットDBの格納先
CIDR 10.0.6.0/24
サービス・ゲートウェイ サービス "All Region-ID Services in Oracle Service Network" サービスの指定が間違っている場合、接続時タイムアウトが発生する。
ルート表 (Private Subnet DI に付ける) ルール ターゲット・タイプ: サービス・ゲートウェイ
宛先サービス: "All Region-ID Services in Oracle Service Network"
宛先サービスの指定が間違っている場合、接続時タイムアウトが発生する。
セキュリティ・リスト (Private Subnet DI に付ける) Ingress 空白でよい OCIコンソールでDIを操作する
Egress 0.0.0.0/0, TCP All ポートを絞りたい場合、ALLではなく、443 (Object Storage) と 1521 (Oracle DB) に変更
セキュリティ・リスト (Private Subnet DB に付ける) Ingress ソース CIDR: 10.0.5.0/24
プロトコル: TCP
宛先ポート: 1521
ワークスペースからのアクセスを許可
Egress 0.0.0.0/0, TCP All

1-2. バケットとターゲットDB

一個のJSONファイルをバケットに保存しておきます。サンプル・データは、ここからダウンロードしてください。
image.png

この例で使用しているDBの情報は以下の通りです。
DB タイプ:Oracle Base DB (VM)
DB バージョン:19c Standard Edition

後ほど、SCAN DNS 名で接続しますので、それをコピーしておいてください(プライベートIPを使用しても構いません)。
image.png

ユーザの作成
SQL Plusで以下のコマンドを実施します。

管理者ユーザでPDBにログイン:

sqlplus system/<password>@<Private_IP>:1521/db19cse_pdb1.privatesubnetdb.vcn1.oraclevcn.com

ユーザ作成と権限の付与:

create user DIUSER identified by "<password>";
grant create table to DIUSER;
grant unlimited tablespace TO DIUSER;

テーブルの作成
作成したユーザでPDBにログイン:

sqlplus DIUSER/<password>@<Private_IP>:1521/db19cse_pdb1.privatesubnetdb.vcn1.oraclevcn.com

テーブル作成用SQLの実行:

SQL> @create_customers_target.sql

SQL文は、ここより取得できます。

1-3. IAM ポリシー

必要なポリシーは、ワークスペース作成画面から次のように確認できます。

Data Integration -> Workspace -> Show more information
image.png

この例では、枠線内のポリシーを参考にして作成します。
image.png

グループとポリシーの設定例
グループ名:OCI_DI_GRP (ユーザを入れる)

ポリシー:OCI_DI_Policy (作業用Compartmentの下に)
ステートメント:

allow service dataintegration to use virtual-network-family in compartment Liu
allow group OCI_DI_GRP to manage dis-workspaces in compartment Liu
allow group OCI_DI_GRP to manage dis-work-requests in compartment Liu
allow group OCI_DI_GRP to use virtual-network-family in compartment Liu
allow group OCI_DI_GRP to manage tag-namespaces in compartment Liu

Allow group OCI_DI_GRP to use object-family in compartment Liu
Allow any-user to inspect compartments in compartment Liu where ALL {request.principal.type='disworkspace'}
Allow any-user to use buckets in compartment Liu where ALL {request.principal.type = 'disworkspace', request.operation = 'GetBucket'}
Allow any-user to manage objects in compartment Liu where ALL {request.principal.type = 'disworkspace'}

※、この時点で、ワークスペースをまだ作成していないので、取り敢えずrequest.principal.id='<workspace_ocid>'という条件を外します。ワークスペース作成後、OCIDを取得し追加してもOKです。

2. ワークスペースの作成

OCIメニュー -> Analytics & AI -> Data Integration

Workspace -> Create workspace

作成用情報を入力
ワークスペースは、2種類のネットワークタイプがあります。VCNの内部か外部のどちらに指定できます。この例は、デフォルトの"Enable private network"を利用しますので、チェックを入れたままでOKです。ワークスペースの名前を入力し、VCNとサブネットを指定してから、作成ボタンをクリックします。

自分の環境では、作成完了まで約10分かかりました。ステータスは自動的にリフレッシュされないので、ご注意ください。長い時間が経っても「Active」にならない場合は、手動で画面をリフレッシュしてください。
image.png

3. データ・アセットの作成

作成したワークスペースをクリックすると、下記のホーム画面に入ります。ソースとターゲットに接続するため、データ・アセットを作成します。作成画面に入るには、以下のいずれかの方法を選択できます。

  • 左上の"+"をクリックし、"Data assets"をクリックする。
  • 左上の"Data assets"を直接にクリックする。
  • "Quick actions"の枠に、"Create data asset"をクリックする。

image.png

"Quick actions"の場合、以下のデータ・アセットの一覧画面を飛ばして、直接作成画面に入ります。
image.png

3-1. ソース側(オブジェクト・ストレージ)

ソース側は、オブジェクト・ストレージで、以下のようにタイプを指定してください。

テナンシOCID、ネームスペース、およびリージョンは自動的に入力されますので、そのままでOKです。他のリージョンやテナンシを指定したい場合は、関連情報を取得して置き換えてください。

(関連情報の取得方法を省略します。ネームスペースの取得方法が分からない場合は、こちらをご参照ください。)

オブジェクト・ストレージにアクセスするため、ポリシーの設定は必要です。事前準備のステップで既に設定済で、ここには何をしなくてもよいです。ポリシーの設定方法を確認したい時、"Show more information"をクリックすれば、詳細内容が見られます。

"Test connection"をクリックし、接続をテストします。成功のメッセージを確認したら、接続情報を保存します。接続が失敗した場合、トラブル・シューティングをご参考ください。

接続が失敗しても、一旦入力情報を保存しておき、後ほど編集してもOKです。

データ・アセット作成後:
image.png

バケット一覧画面からは、バケットとその中身のオブジェクトを確認できます。バケットを見るためには、まずCompartmentを指定してください(デフォルトは空白になっていますのでご注意ください)。

3-2. ターゲット側(Oracle DB)

Data Integration -> DI_Workspace_Private -> Quick actions (Create data asset)

タイプは、"Oracle DB"を選択します。

以下のように接続情報を入力します。

  • ホスト:SCAN DNS 名 (プライベートIPでもよい)
  • ポート:1521
  • サービス名:PDBのサービス名 (サービス名の取得方法を分からない方は、こちらをご参照ください。)

データ・アセット作成後:
image.png

テーブルの確認:
Details -> Schemas -> "DIUSER"を選択
image.png
表名をクリックしたら、テーブルの構成も確認できます。

4. データフローの作成

"My First Project"の利用

プロジェクトを新規作成しても構いませんが、この例では既存の"My First Project"をそのまま利用します。入口は、以下のいずれでも構いません。

  • 左上の"+"をクリックし、"Projects"をクリックする。
  • 左上の"Projects"を直接にクリックする。
  • "Recents"の枠に、"My First Project"をクリックする。 (一回利用したことがある場合)

データフローの作成
"Create data flow"をクリックし、作成を開始します。
image.png

フローの名前(Load Customers Data)を入力し、「作成」をクリックします。デザイナは開いたままになっており、編集を続行できます。
image.png

ソースとターゲットの編集
画面左側の矢印アイコンをクリックすると、各アイコンの詳細情報が表示されます。ソースとターゲットのアイコンを画面の中にドラッグアンドドロップします。そして、ソースとターゲットの間に線を結びつけます。
image.png

ソースを選択し、IDとのデータ・アセットの情報を設定します。

ターゲットを選択し、IDとのデータ・アセットの情報を設定します。

編集後、「保存してクローズ」をクリックします。
image.png

5. 統合タスクの作成と実行

5-1. 統合タスクの作成

Quick actions → Create integration Task

タスク名を入力し、プロジェクトを選択します。

この例は、既存の"My First Project"を使います。

引き続き、データフローを選択します。

作成したデータフローを指定します。

選択後、Validaton(検証)が自動開始します。成功を確認した後、「作成してクローズ」をクリックします。

注意: テーブルに既存データがある場合、キー違反により検証が失敗する可能性があります。

5-2. アプリケーションの作成

入り口は、以下のどちらでもOKです。

  • Quick actions → Create application
  • Menu → Applications -> Create application (as below)

    作成をクリックします。

    アプリケーション名を入力し、作成を開始します。

5-3. アプリケーションへのタスクの公開

プロジェクトの下のタスクに入って、右側のメニューから"Public to application"をクリックします。
image.png

アプリケーションを選択し、公開します。

5-4. タスクの実行

アプリケーションの画面に移動して、タスクを実行します。

Application: Application_Sample → Tasks → IntegrationTask_Sample → Run
image.png

実行結果を確認します。(実行のステータス:未開始 → キュー済 → 実行中 → 成功)
image.png

成功した場合、ログが表示されません。
image.png

テーブルの中身を確認します。
方法1
データ・アセットの詳細 -> Schemas -> DIUSERを選択 -> Data entities -> テーブル名を選択 -> Data
image.png

方法2: SQL Developerでテーブルの中身と件数を確認します。
テーブルの中身:
image.png

テーブルの件数:

ここまで、OCI DI で成功にデータを Oracle DB にロードできました。お疲れ様です。

トラブル・シューティング

問題-1 (オブジェクト・ストレージへのテスト接続はタイムアウト)

現象: テスト接続は、タイムアウトが発生し接続できない。
image.png
可能な原因-1: ポリシー設定は足りない。
対策1-3. ポリシーの設定内容に合っているかをもう一度確認してください。

可能な原因-2: セキュリティ・リストは、設定不正か漏れがある。
対策:ワークスペースが所属するプライベート・サブネットに対し、セキュリティ・リストを付けて以下のように、Egress ルールを設定する。

  • 宛先のCIDR: 0.0.0.0/0
  • IP プロトコル: TCP
  • 宛先ポート:ALL (通常は、Allを指定してもよい。ポートを絞りたい時、オブジェクト・ストレージにアクセスするのに、443 ポートを指定する。)

可能な原因-3: ルート表にサービス・ゲートウェイの設定がない。
対策:以下のようにサービス・ゲートウェイを追加し、宛先サービスは、"All Region-ID Services in Oracle Services Network"を指定する。

可能な原因-4: サービス・ゲートウェイの設定があるが、サービスのタイプが間違った。
対策:"All Region-ID Services in Oracle Services Network"を指定する。

"OCI Region-ID Object Storage"に指定した場合、タイムアウトが発生するので、ご注意ください。

問題-2 (Oracle DBへのテスト接続はタイムアウト)

現象: エラーメッセージは、問題1と同様(IDが毎回変わる)

可能な原因-1: セキュリティ・リストは、設定不正か漏れがある。
対策:ワークスペースが所属するプライベート・サブネットに対し、セキュリティ・リストを付けて以下のように、Egressルールを設定する。

  • 宛先のCIDR: 0.0.0.0/0 (絞りたい時、Oracle DBのプライベートIPに設定)
  • IP プロトコル: TCP
  • 宛先ポート:ALL (通常、Allを指定してもよいが、ポートを絞りたい時、Oracle DBへ接続するのには、1521 ポートを指定する。)

以上です。


関連記事
オラクル・クラウドの個人ブログ一覧
ODI On-PとODI MarketplaceとOCI Data Integrationの比較
オブジェクト・ストレージからOracle DB 19c/21cにデータを導入する
オブジェクト・ストレージからデータを Oracle DB/ADB にロードする方法のまとめ


オフィシャル・リンク
サービス・ホームページ (価格表、見積もりを含める)
ドキュメント・ホームページ
データ統合のチュートリアル (オブジェクト・ストレージから Autonomous DB へ)
Understanding VCN Configuration for Oracle Cloud Infrastructure (OCI) Data Integration (English blog)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?