Amazon Web Services ブログ
Oracle Database 26ai での自然言語クエリ: Amazon Bedrock を使った Amazon RDS for Oracle での Select AI 入門
本記事は 2026 年 8 月 11 日 に公開された「Natural language queries on Oracle Database 26ai: Getting started with Select AI on Amazon RDS for Oracle with Amazon Bedrock」を翻訳したものです。
Amazon Relational Database Service (Amazon RDS) for Oracle で Oracle Database 26ai が利用可能になりました。Amazon RDS における Oracle 初の AI ネイティブなデータベースリリースで、生成 AI、ベクトル検索、機械学習がエンジンに直接組み込まれています。バックアップ、パッチ適用、マルチ AZ による高可用性、リードレプリカは Amazon RDS が処理するため、インフラストラクチャの管理ではなく AI アプリケーションの構築に集中できます。
本記事では、新機能のなかでも特に効果の大きい Select AI を紹介します。Select AI では、Amazon Bedrock の基盤モデル (FM) を使い、自然言語のプロンプトでリレーショナルデータを照会できます。「今四半期の売上上位 5 社の顧客は?」とデータベースに尋ねれば、コードを 1 行も書かずに、正しい SQL とその実行結果が返ってきます。内部では、Oracle の DBMS_CLOUD_AI パッケージがテーブルのスキーマを含むプロンプトを組み立て、選択した基盤モデルに送信します。生成された SQL を実データに対して実行し、結果を返すまでのすべてが同一のデータベースセッション内で完結します。
このアーキテクチャなら、AI インフラストラクチャを自前で構築する運用負荷がなくなります。Amazon Bedrock はフルマネージドかつサーバーレスです。プロビジョニングする GPU も、ホストするモデルも、維持する推論エンドポイントもありません。Anthropic、Meta、Amazon といったプロバイダーの基盤モデルに単一の API でアクセスでき、DBMS_CLOUD_AI プロファイルの属性を 1 つ変えるだけでモデルを切り替えられます。セキュリティは、すでに使い慣れた Amazon RDS のモデルに従います。Select AI のリクエストは Virtual Private Cloud (VPC) インターフェイスエンドポイントを経由するため、データは VPC 内に留まり、パブリックインターネットを通りません。DBMS_CLOUD_AI はネイティブな PL/SQL なので、すでに持っている SQL のスキルで生成 AI 機能を構築できます。別途 AI スタックを学んだり維持したりする必要はありません。
本記事は、Amazon RDS 上の Oracle Database 26ai の AI 機能を扱う 3 回シリーズの第 1 回です。今回は、Amazon Bedrock の認証情報の設定から自然言語クエリの実行まで、Select AI を一通り解説します。第 2 回では Oracle AI Vector Search による Retrieval Augmented Generation (RAG) を、第 3 回では SQL プロパティグラフを使った GraphRAG を取り上げ、グラフ探索、ベクトル検索、リレーショナルなフィルタリングを 1 つの SQL クエリで組み合わせる方法を紹介します。
Amazon RDS 上の Oracle Database 26ai の AI 機能
Amazon RDS 上の Oracle Database 26ai と Amazon Bedrock を組み合わせると、次の機能が使えます。
| 機能 | 内容 | ユースケースの例 |
| Select AI (NL2SQL) | 自然言語のプロンプトを SQL に変換し、クエリを実行して、単一の SQL セッション内で結果を返す | ビジネスアナリストが SQL を書かずに売上データを照会する。経営層がダッシュボードから即座に答えを得る |
| DBMS_CLOUD_AI.GENERATE | PL/SQL から基盤モデルを呼び出し、チャット、要約、翻訳、合成データ生成を行う | CLOB 列に格納されたサポートチケットを要約する。開発/QA 環境向けに現実的なテストデータを生成する。製品説明を翻訳する |
| Oracle AI Vector Search | 標準的な SQL でベクトル埋め込みをリレーショナルデータと並べて保存、インデックス化、検索する | 製品カタログのセマンティック検索。類似する顧客プロファイルの検索。レコメンデーションエンジンの実現 |
| Retrieval Augmented Generation (RAG) | ベクトル検索と大規模言語モデル (LLM) の生成を組み合わせ、AI の回答を実際のビジネスデータに基づかせる | 社内文書やデータベースのレコードを使って質問に答える AI アシスタント |
| データベース内 ONNX 推論 | 埋め込み、分類、回帰などの ML モデルを、外部 API を呼び出さずに Oracle 内部で実行する | 挿入時に埋め込みを生成する。不正な取引をリアルタイムで分類する。ラウンドトリップなしでリードをスコアリングする |
| プロパティグラフでの Select AI | SQL プロパティグラフに対して、自然言語のプロンプトでグラフの関係を照会する | 「サプライヤー X と顧客 Y の間の最短サプライチェーン経路を見せて」 |
ソリューションの概要
この手順を終えると、次のことができるようになります。
- AWS Identity and Access Management (IAM) の認証情報を作成し、
DBMS_CLOUD.CREATE_CREDENTIALで Oracle 内に格納する。 - VPC インターフェイスエンドポイントを設定し、プライベートな Amazon RDS インスタンスからインターネットを経由せずに Amazon Bedrock に到達できるようにする。
- Claude Sonnet や Amazon Nova などの Amazon Bedrock の基盤モデルを指す
DBMS_CLOUD_AIプロファイルを作成、管理する。 - LLM から Oracle のテーブルに合成テストデータを直接生成する。
SELECT AIの SQL 構文を使い、自分のテーブルに対して自然言語クエリを実行する。DBMS_CLOUD_AI.GENERATE()をチャット、SQL の説明、要約に使う。
次の図は全体のアーキテクチャです。
図 1: Amazon RDS for Oracle 26ai と Amazon Bedrock による Select AI
主なコンポーネントは次のとおりです。
| コンポーネント | 役割 |
| Amazon RDS for Oracle Database 26ai | DBMS_CLOUD_AI を含み、Select AI のクエリを実行する |
| Amazon Bedrock | 基盤モデル (Claude、Nova) へのマネージドなアクセスを提供する |
VPC インターフェイスエンドポイント (bedrock-runtime) |
プライベートな Amazon RDS のサブネットからの Amazon Bedrock API 呼び出しを、インターネットを経由せずにルーティングする |
| IAM 認証情報 | DBMS_CLOUD.CREATE_CREDENTIAL で Oracle に格納したアクセスキー ID とシークレット。Oracle がすべての Amazon Bedrock 呼び出しを SigV4 で署名するために使う |
動作の流れ: ユーザーが SQL クライアントで自然言語の質問を入力します。Oracle が SELECT AI ステートメントを受け取り、質問と対象テーブルのスキーマメタデータを含むプロンプトを構築します。そして IAM ユーザーのアクセスキーで署名したリクエストを、VPC インターフェイスエンドポイント経由で HTTPS により Amazon Bedrock に送信します。LLM が返した SQL を Oracle が実データに対して実行し、結果セットを返します。ここまでのすべてが同一の SQL セッション内で行われます。
前提条件
始める前に、次を確認してください。
- プライベートな VPC サブネットにデプロイした Amazon RDS for Oracle Database 26ai インスタンス。本記事では、データベースインスタンスとして一般的なパターンかつ推奨構成である、プライベートな Amazon RDS for Oracle インスタンスを前提とします。テスト目的であれば、インスタンスをパブリックに公開することもできます。
DBMS_CLOUDパッケージとDBMS_CLOUD_AIパッケージがインストールされていること (確認方法はステップ 1 で説明します)。- IAM ユーザーと VPC エンドポイントを作成する権限を持つ AWS アカウント。
- 対象の AWS リージョンで Amazon Bedrock が利用できること。Amazon Bedrock ではほとんどの基盤モデルがデフォルトで利用可能です。必要に応じて Amazon Bedrock コンソールの モデルアクセス で確認してください。
- 踏み台ホストまたは AWS Systems Manager Session Manager のポートフォワーディング経由で Amazon RDS インスタンスに接続した SQL Developer、SQLcl、その他の Oracle SQL クライアント。
- Amazon RDS インスタンスに関連付けられた VPC ID、サブネット ID、セキュリティグループ ID。
DBMS_CLOUDとDBMS_CLOUD_AIの両方に EXECUTE 権限を持つデータベースユーザー (例: AIUSER)。必要なら、先に作成しておきます。
ステップ 1: DBMS_CLOUD_AI が利用可能か確認する
設定を始める前に、必要なパッケージがインストールされていることを確認します。Amazon RDS for Oracle 26ai では、インスタンス作成時に DBMS_CLOUD と DBMS_CLOUD_AI がデフォルトでインストールされます。
4 行が返るはずです。DBMS_CLOUD と DBMS_CLOUD_AI のそれぞれについて PACKAGE と PACKAGE BODY です。パッケージが見つからない場合は、Amazon RDS インスタンスが Oracle Database 26ai で動作しているか確認してください。
ステップ 2: Amazon Bedrock ランタイム用の VPC インターフェイスエンドポイントを作成する
Amazon RDS for Oracle DB インスタンスは、ポート 443 (HTTPS) で Amazon Bedrock ランタイムのエンドポイント (bedrock-runtime.<region>.amazonaws.com) に到達できる必要があります。この通信を AWS ネットワーク内のプライベートな経路に留め、インターネットアクセスを不要にするには、Amazon Bedrock ランタイムサービス用の VPC インターフェイスエンドポイントを作成します。Amazon RDS インスタンスをプライベートに保てるため、VPC インターフェイスエンドポイントの利用が推奨されます。本記事の例でも VPC インターフェイスエンドポイントを使います。
もう 1 つの選択肢は NAT ゲートウェイです。NAT ゲートウェイを使う場合、DB インスタンスのサブネットに NAT ゲートウェイ経由でインターネットへ向かうルートが必要です。NAT ゲートウェイの設定は、ドキュメントの「Amazon VPC network requirements」セクションのオプション 2 を参照してください。
エンドポイントを作成する
- AWS マネジメントコンソールで VPC、エンドポイント、エンドポイントを作成 の順に移動します。
- サービスカテゴリ で AWS サービス を選択します。
- サービス名 の検索で
bedrock-runtimeと入力し、com.amazonaws.<your-region>.bedrock-runtimeを選択します。 - VPC では、Amazon RDS インスタンスがある VPC を選択します。
- サブネット では、Amazon RDS の DB サブネットグループが使っているサブネットと同じものを選択します。
- セキュリティグループ では、Amazon RDS インスタンスのセキュリティグループからの インバウンド TCP ポート 443 を許可するセキュリティグループをアタッチします。
- ポリシー では フルアクセス を選択します。
- プライベート DNS 名 を有効にします。ここが重要です。有効にすることで Oracle が
bedrock-runtime.<region>.amazonaws.comをプライベート IP に解決し、通信が VPC 内でルーティングされます。 - エンドポイントを作成 を選択し、状態が 利用可能 になるまで待ちます。
ステップ 3: Amazon Bedrock エンドポイントへのネットワーク ACL アクセスを許可する
Oracle はアクセスコントロールリスト (ACL) でアウトバウンドのネットワークアクセスを制御します。AIUSER ユーザーに、bedrock-runtime.<your-region>.amazonaws.com への HTTP/HTTPS のアウトバウンド接続を許可します。
DNS 解決を確認する
エンドポイントが有効になったら、Oracle が Amazon Bedrock のホスト名をプライベート IP に解決することを確認します。
出力例:
ステップ 4: AWS の認証情報を作成し Oracle Database に格納する
DBMS_CLOUD_AI は IAM のアクセスキー ID とシークレットアクセスキーで Amazon Bedrock に認証します。設定手順としては、Amazon Bedrock の基盤モデル呼び出しに必要な最小限の権限だけを付与した専用の IAM ユーザーを作成し、そのユーザーのアクセスキーを発行します。認証情報を取得したら、DBMS_CLOUD.CREATE_CREDENTIAL を呼び出して Oracle データベース内に格納します。Oracle はキーを保存時に暗号化し、DBMS_CLOUD_AI がアウトバウンドの Amazon Bedrock API リクエストの署名に自動的に使用します。
ステップ 4a: Amazon Bedrock アクセス用の IAM ユーザーを作成する
次のポリシーを持つ IAM ユーザーまたはロールを作成します (既存の ID にアタッチしても構いません)。
特定のモデルだけにアクセスを制限するには、ワイルドカードを次のように個別のモデル ARN に置き換えます。
ステップ 4b: アクセスキーを発行する
- 作成したユーザーを開き、セキュリティ認証情報 タブに移動します。
- アクセスキー で アクセスキーを作成 を選択します。
- ユースケースを選択し、アクセスキーを作成 を選択します。
- アクセスキー ID とシークレットアクセスキーをコピーまたはダウンロードします。
セキュリティに関する注意: アクセスキーは長期的な認証情報です。本番環境では、IAM コンソールで定期的にローテーションすることを検討してください。この IAM ユーザーにはコンソールアクセス (パスワード) を与えないようにします。
ステップ 4c: IAM ユーザーのアクセスキーを Oracle に格納する
Amazon Bedrock のモデルアクセス: 2025 年時点で、Amazon Bedrock のほとんどの基盤モデルはデフォルトで利用可能で、明示的な有効化は不要です。アカウントとリージョンでのモデルの利用可否は、Amazon Bedrock コンソール の モデルアクセス で確認または変更できます。Amazon RDS for Oracle 26ai の
DBMS_CLOUD_AIで動作を検証済みのモデルは次のとおりです。
| モデル名 | モデル ID | 備考 |
| Anthropic Claude Sonnet 4.6 | us.anthropic.claude-sonnet-4-6 |
NL2SQL の精度が最も高い (推奨) |
| Anthropic Claude Haiku 4.5 | us.anthropic.claude-haiku-4-5-20251001-v1:0 |
最速 / 最低コスト |
| Amazon Nova Pro | us.amazon.nova-pro-v1:0 |
高性能な AWS ネイティブモデル |
| Amazon Nova Lite | amazon.nova-lite-v1:0 |
単純なクエリ向けの超高速モデル |
重要: クロスリージョン推論のプレフィックス: Anthropic Claude と Amazon Nova Pro のモデル ID には
us.プレフィックスが必要です。このプレフィックスによってリクエストがクロスリージョン推論プロファイル経由でルーティングされ、可用性が高まります。プレフィックスのないベースモデル ID を使うとORA-20400: HTTP 400が返ります。
DBMS_CLOUD.CREATE_CREDENTIAL を使い、ステップ 4a で取得したアクセスキーとシークレットキーを Oracle の認証情報ストアに格納します。Oracle は認証情報を暗号化し、所有ユーザーだけがアクセスできるようにします。
認証情報が正しく作成されたか確認します。
username 列には指定したアクセスキー ID が表示されます。シークレットキーは暗号化されて格納され、クエリでは返りません。
ステップ 5: サンプルテーブルを作成する
Select AI のデモには E コマースのスキーマを使います。既存のテーブルがある場合は、ステップ 6 に進んでプロファイルの object_list で自分のテーブルを指定してください。
ステップ 6: DBMS_CLOUD_AI プロファイルを作成する
プロファイル は Select AI の中心となる設定オブジェクトです。AI プロバイダー、認証情報、呼び出す Amazon Bedrock のモデル、そしてプロンプトのコンテキストにスキーマを含めるデータベーステーブルを指定します。
DBMS_CLOUD_AI はデフォルトで bedrock-runtime.us-east-1.amazonaws.com に接続します。us-east-1 以外のリージョンの Amazon Bedrock ランタイムエンドポイントを使う場合は、プロファイル属性の JSON に region 属性と target_language 属性を含めます。region には Amazon Bedrock ランタイムエンドポイントがあるリージョン (例: us-west-2) を設定します。region を設定する場合は、target_language (または source_language) も含める必要があります。chat や runsql のように翻訳を使わないアクションでも、この 2 つの属性は必ずセットで設定してください。target_language の値が影響するのは translate アクションだけです。セットで指定しなければならないのは、Oracle の DBMS_CLOUD_AI パッケージに既知の制限があるためです。region なしで target_language だけを指定した場合、プロファイルは bedrock-runtime.us-east-1.amazonaws.com を使い続けます。VPC インターフェイスエンドポイントが別のリージョンにあると、Oracle はエンドポイントが存在しないリージョンへパブリックインターネット経由で接続を試み、ネットワーク構成でパブリックアクセスを許可していない限り、すべての呼び出しが ORA-30699 でタイムアウトします。
次の例では、Amazon Bedrock のクロスリージョン推論 (CRIS) 経由で Anthropic Claude Sonnet 4.6 を使うプロファイルを作成します。
object_list は、LLM 向けのスキーマコンテキストを構築するときに含めるテーブルとビューを Oracle に伝えます。Oracle はデータディクショナリから列名、データ型、列コメントを自動的に読み取り、プロンプトに組み込みます。スキーマを手作業で記述する必要はありません。
異なるモデルを指すプロファイルを複数作成し、セッションごとに切り替えることもできます。
セッションでプロファイルを有効化し、確認します。
ステップ 7: 合成データを生成する
Amazon Bedrock にアクセスできる AI プロファイルを設定したら、DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA でテーブルに現実的なテストデータを自動投入できます。GENERATE_SYNTHETIC_DATA は、指定した AI プロファイル経由で LLM を使い、文脈に沿ったレコードを生成します。
object_list パラメータには、対象テーブルとそれぞれの生成レコード数を指定する JSON 配列を渡します。
次の PL/SQL ブロックを実行して、4 つのテーブルに合成データを生成します。
実行すると、顧客 50 件、製品 250 件、注文 500 件、注文明細 1,000 件が生成されます。テストデータを手作業で作り込まなくても、クエリ、レポート、アプリケーションロジックの検証に使える現実的なデータセットが手に入ります。
内部では、Oracle が対象テーブルの DDL、制約、メタデータを読み取り、データ型と外部キーを満たす現実的な行を生成するよう LLM にプロンプトを出します。生成方法は次の要素でカスタマイズできます。
sample_rows: 既存のレコードを例として渡し、生成されるデータを実データのスタイルに合わせます。user_prompt: 「英国の郵便番号のみ」「2009 年公開の映画」といったルールを指定します。- テーブル統計 (デフォルトで有効): 列の最大値・最小値と個別値のリストを使って出力範囲を制限します。
- 列コメント: 列にヒント (例: 許可される Status の値) を付けると、LLM は生成時にヒントに従います。
- 一意制約: LLM のレスポンスから重複行を自動的に破棄します。
ステップ 8: Select AI で自然言語クエリを実行する
プロファイルを設定してデータを投入したら、SELECT AI の SQL 構文で平易な英語のままリレーショナルデータを照会できます。Oracle はステートメントを受け取り、質問と object_list のテーブルスキーマメタデータを組み合わせたプロンプトを構築し、Amazon Bedrock のモデルを呼び出して結果を返します。
実行前に生成された SQL を確認する
showsql を使うと、LLM が生成した SQL を実行せずに確認できます。精度の検証や信頼性の確認に役立ちます。
出力例:
実行して結果を返す
runsql に切り替えると、生成された SQL を実行して結果を返します。
結果を自然言語の文章で返す
narrate アクションは、クエリ結果を平易な英語で要約して返します。ビジネスレポートやダッシュボードに適しています。
1 つ目のクエリの出力例:
既存の SQL を平易な英語で説明する
explainsql アクションは、既存の SQL クエリを受け取って平易な英語の説明を返します。ドキュメント作成やオンボーディングに役立ちます。
出力例:
ステップ 9: DBMS_CLOUD_AI.GENERATE() を他の AI タスクに使う
SELECT AI 構文に加えて、DBMS_CLOUD_AI.GENERATE() を使うと Amazon Bedrock のモデルに直接アクセスできます。自由形式のチャット、要約、プロンプトからの SQL 生成のように、データベースのスキーマコンテキストを必要としないタスクに使えます。
テキストを要約する
インラインのテキストを要約するだけでなく、DBMS_CLOUD_AI.GENERATE を Amazon Simple Storage Service (Amazon S3) バケットに保存された文書を直接処理することもできます。次のクエリは Amazon S3 から PDF を取得し、DBMS_VECTOR_CHAIN.UTL_TO_TEXT でテキストに変換します。そのうえで内容を LLM に渡して要約させます。ここまでを 1 つの SQL ステートメントで実行します。
内部では、3 つの関数が 1 つの SQL ステートメント内で連鎖します。DBMS_CLOUD.GET_OBJECT が指定した認証情報を使って Amazon S3 バケットから PDF 文書を取得します。DBMS_VECTOR_CHAIN.UTL_TO_TEXT がバイナリの内容を LLM が処理できるプレーンテキストに変換します。DBMS_CLOUD_AI.GENERATE が抽出したテキストを AI プロファイル経由で Amazon Bedrock に送信し、要約を返します。Amazon RDS for Oracle インスタンスから Amazon S3 に到達できるようにするには、前提条件が 2 つ追加で必要です。1 つは Amazon S3 用の VPC ゲートウェイエンドポイントで、Amazon RDS のサブネットに関連付けられたルートテーブルに追加し、通信をパブリックインターネットから切り離します。もう 1 つは対象バケットへの s3:GetObject と s3:ListBucket の権限を付与する IAM ポリシーで、ステップ 4a で作成したユーザーにアタッチします。
トラブルシューティング
次の表に、遭遇しやすいエラーと根本原因、対処方法をまとめます。
| エラー | 根本原因 | 対処 |
ORA-30699: network connection failed: connection timed out |
bedrock-runtime の VPC エンドポイントがない、またはプロファイルの "region" が未指定か誤っている |
正しいリージョンに bedrock-runtime の VPC インターフェイスエンドポイントを作成する。すべてのプロファイルに "region": "<your-region>" を追加する |
| DNS がパブリック IP に解決される | VPC エンドポイントでプライベート DNS 名が有効になっていない | エンドポイントを編集してプライベート DNS 名を有効にする |
ORA-20400: HTTP 400 |
モデル ID が単一リージョン / オンデマンドの形式 (旧形式) になっている | モデル ID にクロスリージョン推論の us. プレフィックスを追加する |
ORA-20404: HTTP 404 |
そのリージョンでモデルが利用できない、またはアクセスが有効になっていない | Amazon Bedrock → モデルアクセスでリージョンでのモデルの利用可否を確認する。モデル ID が正しいことを確認する |
ORA-20400: HTTP 403 |
IAM ユーザーに bedrock:InvokeModel の権限がない |
BedrockInvokeModelPolicy が IAM ユーザーにアタッチされているか確認する |
ORA-20001: profile not found |
プロファイルが作成されていない、または名前が間違っている | SELECT profile_name FROM user_cloud_ai_profiles を実行する |
ORA-29024: Certificate validation failure |
Oracle ウォレットに Amazon Bedrock の CA 証明書がない | Amazon RDS では file:/rdsdbdata/rds-metadata/dbms_cloud_wallet にプリインストールされたウォレットに必要な CA が含まれているため、対応は不要 |
クリーンアップ
この手順で作成したリソースを削除するには、次を実行します。
AWS マネジメントコンソールでは、次の手順を実行します。
- IAM → ユーザー で、ステップ 4a で作成した IAM ユーザーを削除します。
- VPC → エンドポイント で、
bedrock-runtimeの VPC インターフェイスエンドポイントを削除します。
まとめ
本記事では、AI プロバイダーとして Amazon Bedrock を使い、Amazon RDS for Oracle Database 26ai で Select AI を設定する一連の手順を説明しました。IAM コンソールでの AWS 認証情報の作成、Oracle への認証情報の格納、VPC エンドポイントのセットアップ、自然言語クエリの実行までを、パブリックインターネットアクセスのないプライベートな Amazon RDS インスタンスで行いました。
Select AI を使えば、データを活用する人に SQL のスキルは不要になり、AI のロジックは信頼できる Oracle 環境の内側に留まります。ビジネスアナリストは SQL Developer や Oracle に接続したツールから、平易な英語で本番データを直接照会できます。データベース管理者は、モデルに公開するテーブル、有効にする基盤モデル、使用する IAM 認証情報を完全に制御し続けられます。いずれも Oracle 標準のプロファイルと認証情報の仕組みで管理できます。
本記事は Oracle Database 26ai と Amazon Bedrock を扱う 3 回シリーズの第 1 回です。
- 第 1 回 (本記事): Amazon RDS での Select AI と
DBMS_CLOUD_AIによる自然言語クエリ。 - 第 2 回: Oracle 26ai のネイティブなベクトル検索と Amazon Bedrock による RAG パイプラインの構築。
- 第 3 回: Amazon RDS 上の Oracle Database 26ai と Amazon Bedrock によるデータベース内 GraphRAG。
著者について
この記事は Solutions Architect の 矢木 覚 が翻訳しました。