🗄️aidp-exacs
- ソース
- GitHub で見る ↗
説明
AIDP の `aidataplatform` Spark フォーマットハンドラーを使用して、AIDP ノートブックから Oracle Exadata Cloud Service(ExaCS)の読み取りまたは書き込みを行います。 次のような場合に使用: ユーザーが ExaCS、Exadata、Exadata Cloud、RAC SCAN リスナーについて言及している場合、またはプライベートサブネット上の Oracle DB を使用している場合。 公式の `ORACLE_EXADATA` コネクターサンプルを優先して使用し、`catalog.id`、`pushdown.sql`、およびコネクターの書き込みモードを適切に設定してください。
原文を表示
Read or write Oracle Exadata Cloud Service (ExaCS) from an AIDP notebook via the AIDP `aidataplatform` Spark format handler. Use when the user mentions ExaCS, Exadata, Exadata Cloud, RAC SCAN listener, or has a private-subnet Oracle DB. Prefer the official `ORACLE_EXADATA` connector sample with catalog.id, pushdown.sql, and connector write modes.
ユースケース
- ✓ExaCS からデータを読み取るとき
- ✓ExaCS へデータを書き込むとき
- ✓Exadata Cloud を使用するとき
- ✓プライベートサブネット上の Oracle DB を使用するとき
本文(日本語訳)
aidp-exacs — AIDP aidataplatform 経由の Oracle Exadata Cloud Service
使用すべき場合
- AIDPノートブックからExaCS PDBを読み書きしたい場合
- 次のキーワードが出てきた場合:「ExaCS」「Exadata Cloud」「RAC SCANリスナー」「プライベートサブネットのOracle DB」
使用すべきでない場合
- Oracle AI Lakehouse / ADW / ATP(Autonomous DBファミリー)が対象の場合
→
aidp-alhを使用してください。
インフラの前提条件(重要)
ExaCSはカスタマーのプライベートサブネット内に存在し、AIDPは独自のVCN上で動作します。 JDBCが機能するには、以下の2点が事前に設定されている必要があります。 どちらもノートブックから設定することはできません。
-
VCNルーティング AIDP→ExaCS(PAGW経由のPE/RCE) プライベート接続なしで作成されたWorkspaceは、カスタマーDBに到達できません。
-
Workspaceの
scanDetails— RACクラスター必須の設定 この設定がないと、SCANリスナーがノードローカルIP(10.x.x.x)にリダイレクトしても、executorから到達できずORA-17820が発生します。 AIDP WorkspaceのREST APIまたはコンソールから一度だけ設定してください:networkConfigurationDetails: { "subnetId": "ocid1.subnet.oc1.iad.aaaa...", "scanDetails": [ {"fqdn": "<scan-host>.clientsubnet.dns.oraclevcn.com", "port": "1521"} ] }これにより PE-ARCH 3c(RCE with SCAN Proxy) が有効になります。 PAGWがRACノードのリダイレクトIPをClass-E NATアドレスに変換し、 JDBCのリダイレクト先が正しいトンネルに到達できるようになります。
JDBCエラーを追う前に、ノートブックから接続の疎通確認を行ってください:
import socket, ipaddress
ip = socket.gethostbyname(SCAN_HOST) # Class-E (255.x) またはRFC-1918 — パブリックIPであってはならない
with socket.create_connection((SCAN_HOST, 1521), timeout=15): pass
読み込み(インラインコネクターオプション)
まず公式のAIDP Exadataコネクターを使用してください:
import os
from oracle_ai_data_platform_connectors.aidataplatform import (
AIDP_FORMAT, aidataplatform_options,
)
opts = aidataplatform_options(
type="ORACLE_EXADATA",
host=os.environ["EXACS_HOST"],
port=int(os.environ.get("EXACS_PORT", "1521")),
database_name=os.environ["EXACS_DATABASE_NAME"],
user=os.environ["EXACS_USER"],
password=os.environ["EXACS_PASSWORD"],
schema=os.environ["EXACS_SCHEMA"],
table=os.environ["EXACS_TABLE"],
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()
書き込み
opts["table"] = os.environ["EXACS_TARGET_TABLE"]
opts["write.mode"] = os.environ.get("EXACS_WRITE_MODE", "APPEND") # CREATE | APPEND | OVERWRITE | MERGE
df.write.format(AIDP_FORMAT).options(**opts).save()
catalog.id の使用
catalog_opts = aidataplatform_options(
type="ORACLE_EXADATA",
schema=os.environ["EXACS_SCHEMA"],
table=os.environ["EXACS_TABLE"],
extra={"catalog.id": os.environ["EXACS_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**catalog_opts).load()
プッシュダウン
pushdown_opts = aidataplatform_options(
type="ORACLE_EXADATA",
host=os.environ["EXACS_HOST"],
port=int(os.environ.get("EXACS_PORT", "1521")),
database_name=os.environ["EXACS_DATABASE_NAME"],
user=os.environ["EXACS_USER"],
password=os.environ["EXACS_PASSWORD"],
extra={
"pushdown.sql": "SELECT * FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 10",
},
)
df = spark.read.format(AIDP_FORMAT).options(**pushdown_opts).load()
注意事項(Gotchas)
-
scanDetailsは ORA-17820 の原因第1位です。 JDBCのURLがRACクラスターのSCANリスナーを指しているのに、WorkspaceにSCANのFQDNが登録されていないと、リダイレクトがサイレントに失敗します。 上記「インフラの前提条件(重要)」を参照してください。 -
ポート1521はサーバーサイドNNEによって暗号化されていることが多いです。
ORACLE_EXADATAコネクターを優先的に使用してください。 生のJDBCへのフォールバックは、組み込みコネクターでは表現できない診断目的に限定してください。 -
AIDPノートブックからはIMDSにアクセスできません。 OCI Computeの他の場所では動作するInstance Principal / Resource Principalのフローは、ここでは機能しません。 OCI SDKの呼び出しが必要な場合は、APIキー+インラインPEMを使用してください。
-
ウォレット+TCPSまたはIAM DB-TokenをAutonomous DBに対して使用する必要がある場合は、 代わりに
aidp-alhスキルを使用してください。
参照
- ヘルパー: scripts/oracle_ai_data_platform_connectors/aidataplatform.py
- 公式Exadataサンプル: data-engineering/ingestion/Read_Write_Oracle_Ecosystem_Connectors/Oracle_Exadata.ipynb
- AIDPプライベートエンドポイント設計(PE-ARCH 1a〜3c、SCAN Proxy): Workspaceメモリ
oci_private_endpoint_design.mdを参照
原文(English)を表示
aidp-exacs — Oracle Exadata Cloud Service via AIDP aidataplatform
When to use
- User wants to read or write an ExaCS PDB from an AIDP notebook.
- User mentions: "ExaCS", "Exadata Cloud", "RAC SCAN listener", "private-subnet Oracle DB".
When NOT to use
- For Oracle AI Lakehouse / ADW / ATP (Autonomous DB family) → use
aidp-alh.
Critical infrastructure prerequisites
ExaCS sits in a customer private subnet; AIDP runs in its own VCN. Two pieces must be in place before any JDBC will work — neither is configurable from a notebook:
-
VCN routing AIDP→ExaCS (PE/RCE through PAGW). Workspaces created without private connectivity can't reach customer DBs.
-
Workspace
scanDetails— required for RAC clusters. Without it, the SCAN listener's redirect to a node-local IP (10.x.x.x) is unreachable from the executor →ORA-17820. Configure once via the AIDP workspace REST API or console:networkConfigurationDetails: { "subnetId": "ocid1.subnet.oc1.iad.aaaa...", "scanDetails": [ {"fqdn": "<scan-host>.clientsubnet.dns.oraclevcn.com", "port": "1521"} ] }This activates PE-ARCH 3c (RCE with SCAN Proxy) — the PAGW translates RAC node-redirect IPs to Class-E NAT addresses so the JDBC redirect lands on the right tunnel.
Smoke-test connectivity from a notebook before chasing JDBC errors:
import socket, ipaddress
ip = socket.gethostbyname(SCAN_HOST) # should be Class-E (255.x) or RFC-1918 — never public
with socket.create_connection((SCAN_HOST, 1521), timeout=15): pass
Read (inline connector options)
Use the official AIDP Exadata connector first:
import os
from oracle_ai_data_platform_connectors.aidataplatform import (
AIDP_FORMAT, aidataplatform_options,
)
opts = aidataplatform_options(
type="ORACLE_EXADATA",
host=os.environ["EXACS_HOST"],
port=int(os.environ.get("EXACS_PORT", "1521")),
database_name=os.environ["EXACS_DATABASE_NAME"],
user=os.environ["EXACS_USER"],
password=os.environ["EXACS_PASSWORD"],
schema=os.environ["EXACS_SCHEMA"],
table=os.environ["EXACS_TABLE"],
)
df = spark.read.format(AIDP_FORMAT).options(**opts).load()
df.show()
Write
opts["table"] = os.environ["EXACS_TARGET_TABLE"]
opts["write.mode"] = os.environ.get("EXACS_WRITE_MODE", "APPEND") # CREATE | APPEND | OVERWRITE | MERGE
df.write.format(AIDP_FORMAT).options(**opts).save()
Use catalog.id
catalog_opts = aidataplatform_options(
type="ORACLE_EXADATA",
schema=os.environ["EXACS_SCHEMA"],
table=os.environ["EXACS_TABLE"],
extra={"catalog.id": os.environ["EXACS_CATALOG_ID"]},
)
df = spark.read.format(AIDP_FORMAT).options(**catalog_opts).load()
Pushdown
pushdown_opts = aidataplatform_options(
type="ORACLE_EXADATA",
host=os.environ["EXACS_HOST"],
port=int(os.environ.get("EXACS_PORT", "1521")),
database_name=os.environ["EXACS_DATABASE_NAME"],
user=os.environ["EXACS_USER"],
password=os.environ["EXACS_PASSWORD"],
extra={
"pushdown.sql": "SELECT * FROM HR.EMPLOYEES WHERE DEPARTMENT_ID = 10",
},
)
df = spark.read.format(AIDP_FORMAT).options(**pushdown_opts).load()
Gotchas
scanDetailsis the #1 cause of ORA-17820. If the JDBC URL points at the SCAN listener on a RAC cluster but the workspace doesn't have the SCAN FQDN registered, the redirect fails silently. See "Critical infrastructure prerequisites" above.- Port 1521 is often encrypted by server-side NNE. The
ORACLE_EXADATAconnector is the preferred path; fall back to raw JDBC only for diagnostics that the built-in connector cannot express. - No IMDS access from AIDP notebooks — Instance Principal / Resource Principal flows that work elsewhere on OCI compute fail here. Use API Key + inline PEM if you need OCI SDK calls.
- If you need wallet+TCPS or IAM DB-Token to an Autonomous DB, use the
aidp-alhskill instead.
References
- Helper: scripts/oracle_ai_data_platform_connectors/aidataplatform.py
- Official Exadata sample: data-engineering/ingestion/Read_Write_Oracle_Ecosystem_Connectors/Oracle_Exadata.ipynb
- AIDP private endpoint design (PE-ARCH 1a–3c, SCAN Proxy): see workspace memory
oci_private_endpoint_design.md.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。