3
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のAutonomous DatabaseからMySQL内のテーブルにSELECT AIを使って自然言語で問い合わせてみる

3
Posted at

はじめに

OCIのAutonomous Database (ADB) では、SideCarという概念でOracle Databaseではない別のデータベース製品などを参照させることが可能です。
(Sidecarという概念になります。)

この記事では、ADBに標準で備わっている機能を利用し、中継サーバーなどを経由することなくMySQLへのデータベースリンクを構築する手順を解説します。

また、MySQLについてはOCI上で稼働することが可能なHeatwaveと呼ばれるPaaSサービスを利用します。

更に最後には、Oracle Databaseの最新バージョン23aiで利用可能なSELECT AI機能を用いて、
ADBからMySQL上のデータを自然言語で問い合わせしてみたいと思います。

この記事のゴール

  • ADBからMySQL HeatwaveへDBLink経由でSELECTできるようになる。
  • 更にSELECT AI機能を用いて、DBLink経由かつ自然言語で問い合わせるようになる。

構成図

構成は非常にシンプルで、特にデータやり取り用のサーバなどは不要です。
ADBからMySQL Heatwaveに直接接続します。

Autonomous Database → MySQL Heatwave

今回は検証用途なので、全て同一Subnet上に設置をしています。
必要に応じて作業用の踏み台サーバなどはご用意ください。

image.png

また、Portは適切に解放頂き、Heatwave側は3306Portを開けてるようにしてくだし。


手順1:MySQL Heatwave側の準備

まず、接続先となるMySQL側の準備をします。この作業はOCI Cloud Shellなどから行います。

1. ホスト名(FQDN)とデータベース名の確認

後のステップで必要になるため、以下の2つの情報をOCIコンソールから確認し、メモしておきます。

  • ホスト名 (FQDN):
    • OCIコンソールのMySQL DBシステムの詳細ページに移動します。
    • 「エンドポイント」タブで、ホスト名(例: hwtest.subnet...oraclevcn.com)をコピーします。
    • image.png

後続でADB側でDBLINKを設定する際にホスト名を記入するのですが、プライベートIPではうまく動作せず、ホスト名を記入したところ正しく動作しました。

  • データベース名 (スキーマ名):
    • 接続したいデータベースの名前です。この手順ではサンプルスキーマのsakilaを使用します。

2. サンプルデータ「sakila」のロード

動作確認用にsakilaデータベースをロードします。

# データをダウンロードしてunzip
wget https://downloads.mysql.com/docs/sakila-db.zip
unzip sakila-db.zip

# ディレクトリに移動し、mysqlクライアントで接続
cd sakila-db
# <your_user>と<MySQLのホスト名(FQDN)>はご自身の環境に合わせてください
mysql -u <your_user> -p --host <MySQLのホスト名(FQDN)>

MySQLクライアントに接続後、以下のSQLを実行します。

CREATE DATABASE IF NOT EXISTS sakila;
USE sakila;
SOURCE sakila-schema.sql;
SOURCE sakila-data.sql;
quit;

正しくデータが投入されていることを確認します

mysql> SELECT * FROM actor LIMIT 10;
+----------+------------+--------------+---------------------+
| actor_id | first_name | last_name    | last_update         |
+----------+------------+--------------+---------------------+
|        1 | PENELOPE   | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK       | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED         | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER   | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY     | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
|        6 | BETTE      | NICHOLSON    | 2006-02-15 04:34:33 |
|        7 | GRACE      | MOSTEL       | 2006-02-15 04:34:33 |
|        8 | MATTHEW    | JOHANSSON    | 2006-02-15 04:34:33 |
|        9 | JOE        | SWANK        | 2006-02-15 04:34:33 |
|       10 | CHRISTIAN  | GABLE        | 2006-02-15 04:34:33 |
+----------+------------+--------------+---------------------+
10 rows in set (0.00 sec)
データの中身
[opc@sqltest ~]$ mysql -u admin -p --host 10.0.0.144
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 939
Server version: 8.4.6-u2-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> 
mysql> 
mysql> use sakila
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 
mysql> select * from actor;
+----------+-------------+--------------+---------------------+
| actor_id | first_name  | last_name    | last_update         |
+----------+-------------+--------------+---------------------+
|        1 | PENELOPE    | GUINESS      | 2006-02-15 04:34:33 |
|        2 | NICK        | WAHLBERG     | 2006-02-15 04:34:33 |
|        3 | ED          | CHASE        | 2006-02-15 04:34:33 |
|        4 | JENNIFER    | DAVIS        | 2006-02-15 04:34:33 |
|        5 | JOHNNY      | LOLLOBRIGIDA | 2006-02-15 04:34:33 |
|        6 | BETTE       | NICHOLSON    | 2006-02-15 04:34:33 |
|        7 | GRACE       | MOSTEL       | 2006-02-15 04:34:33 |
|        8 | MATTHEW     | JOHANSSON    | 2006-02-15 04:34:33 |
|        9 | JOE         | SWANK        | 2006-02-15 04:34:33 |
|       10 | CHRISTIAN   | GABLE        | 2006-02-15 04:34:33 |
|       11 | ZERO        | CAGE         | 2006-02-15 04:34:33 |
|       12 | KARL        | BERRY        | 2006-02-15 04:34:33 |
|       13 | UMA         | WOOD         | 2006-02-15 04:34:33 |
|       14 | VIVIEN      | BERGEN       | 2006-02-15 04:34:33 |
|       15 | CUBA        | OLIVIER      | 2006-02-15 04:34:33 |
|       16 | FRED        | COSTNER      | 2006-02-15 04:34:33 |
|       17 | HELEN       | VOIGHT       | 2006-02-15 04:34:33 |
|       18 | DAN         | TORN         | 2006-02-15 04:34:33 |
|       19 | BOB         | FAWCETT      | 2006-02-15 04:34:33 |
|       20 | LUCILLE     | TRACY        | 2006-02-15 04:34:33 |
|       21 | KIRSTEN     | PALTROW      | 2006-02-15 04:34:33 |
|       22 | ELVIS       | MARX         | 2006-02-15 04:34:33 |
|       23 | SANDRA      | KILMER       | 2006-02-15 04:34:33 |
|       24 | CAMERON     | STREEP       | 2006-02-15 04:34:33 |
|       25 | KEVIN       | BLOOM        | 2006-02-15 04:34:33 |
|       26 | RIP         | CRAWFORD     | 2006-02-15 04:34:33 |
|       27 | JULIA       | MCQUEEN      | 2006-02-15 04:34:33 |
|       28 | WOODY       | HOFFMAN      | 2006-02-15 04:34:33 |
|       29 | ALEC        | WAYNE        | 2006-02-15 04:34:33 |
|       30 | SANDRA      | PECK         | 2006-02-15 04:34:33 |
|       31 | SISSY       | SOBIESKI     | 2006-02-15 04:34:33 |
|       32 | TIM         | HACKMAN      | 2006-02-15 04:34:33 |
|       33 | MILLA       | PECK         | 2006-02-15 04:34:33 |
|       34 | AUDREY      | OLIVIER      | 2006-02-15 04:34:33 |
|       35 | JUDY        | DEAN         | 2006-02-15 04:34:33 |
|       36 | BURT        | DUKAKIS      | 2006-02-15 04:34:33 |
|       37 | VAL         | BOLGER       | 2006-02-15 04:34:33 |
|       38 | TOM         | MCKELLEN     | 2006-02-15 04:34:33 |
|       39 | GOLDIE      | BRODY        | 2006-02-15 04:34:33 |
|       40 | JOHNNY      | CAGE         | 2006-02-15 04:34:33 |
|       41 | JODIE       | DEGENERES    | 2006-02-15 04:34:33 |
|       42 | TOM         | MIRANDA      | 2006-02-15 04:34:33 |
|       43 | KIRK        | JOVOVICH     | 2006-02-15 04:34:33 |
|       44 | NICK        | STALLONE     | 2006-02-15 04:34:33 |
|       45 | REESE       | KILMER       | 2006-02-15 04:34:33 |
|       46 | PARKER      | GOLDBERG     | 2006-02-15 04:34:33 |
|       47 | JULIA       | BARRYMORE    | 2006-02-15 04:34:33 |
|       48 | FRANCES     | DAY-LEWIS    | 2006-02-15 04:34:33 |
|       49 | ANNE        | CRONYN       | 2006-02-15 04:34:33 |
|       50 | NATALIE     | HOPKINS      | 2006-02-15 04:34:33 |
|       51 | GARY        | PHOENIX      | 2006-02-15 04:34:33 |
|       52 | CARMEN      | HUNT         | 2006-02-15 04:34:33 |
|       53 | MENA        | TEMPLE       | 2006-02-15 04:34:33 |
|       54 | PENELOPE    | PINKETT      | 2006-02-15 04:34:33 |
|       55 | FAY         | KILMER       | 2006-02-15 04:34:33 |
|       56 | DAN         | HARRIS       | 2006-02-15 04:34:33 |
|       57 | JUDE        | CRUISE       | 2006-02-15 04:34:33 |
|       58 | CHRISTIAN   | AKROYD       | 2006-02-15 04:34:33 |
|       59 | DUSTIN      | TAUTOU       | 2006-02-15 04:34:33 |
|       60 | HENRY       | BERRY        | 2006-02-15 04:34:33 |
|       61 | CHRISTIAN   | NEESON       | 2006-02-15 04:34:33 |
|       62 | JAYNE       | NEESON       | 2006-02-15 04:34:33 |
|       63 | CAMERON     | WRAY         | 2006-02-15 04:34:33 |
|       64 | RAY         | JOHANSSON    | 2006-02-15 04:34:33 |
|       65 | ANGELA      | HUDSON       | 2006-02-15 04:34:33 |
|       66 | MARY        | TANDY        | 2006-02-15 04:34:33 |
|       67 | JESSICA     | BAILEY       | 2006-02-15 04:34:33 |
|       68 | RIP         | WINSLET      | 2006-02-15 04:34:33 |
|       69 | KENNETH     | PALTROW      | 2006-02-15 04:34:33 |
|       70 | MICHELLE    | MCCONAUGHEY  | 2006-02-15 04:34:33 |
|       71 | ADAM        | GRANT        | 2006-02-15 04:34:33 |
|       72 | SEAN        | WILLIAMS     | 2006-02-15 04:34:33 |
|       73 | GARY        | PENN         | 2006-02-15 04:34:33 |
|       74 | MILLA       | KEITEL       | 2006-02-15 04:34:33 |
|       75 | BURT        | POSEY        | 2006-02-15 04:34:33 |
|       76 | ANGELINA    | ASTAIRE      | 2006-02-15 04:34:33 |
|       77 | CARY        | MCCONAUGHEY  | 2006-02-15 04:34:33 |
|       78 | GROUCHO     | SINATRA      | 2006-02-15 04:34:33 |
|       79 | MAE         | HOFFMAN      | 2006-02-15 04:34:33 |
|       80 | RALPH       | CRUZ         | 2006-02-15 04:34:33 |
|       81 | SCARLETT    | DAMON        | 2006-02-15 04:34:33 |
|       82 | WOODY       | JOLIE        | 2006-02-15 04:34:33 |
|       83 | BEN         | WILLIS       | 2006-02-15 04:34:33 |
|       84 | JAMES       | PITT         | 2006-02-15 04:34:33 |
|       85 | MINNIE      | ZELLWEGER    | 2006-02-15 04:34:33 |
|       86 | GREG        | CHAPLIN      | 2006-02-15 04:34:33 |
|       87 | SPENCER     | PECK         | 2006-02-15 04:34:33 |
|       88 | KENNETH     | PESCI        | 2006-02-15 04:34:33 |
|       89 | CHARLIZE    | DENCH        | 2006-02-15 04:34:33 |
|       90 | SEAN        | GUINESS      | 2006-02-15 04:34:33 |
|       91 | CHRISTOPHER | BERRY        | 2006-02-15 04:34:33 |
|       92 | KIRSTEN     | AKROYD       | 2006-02-15 04:34:33 |
|       93 | ELLEN       | PRESLEY      | 2006-02-15 04:34:33 |
|       94 | KENNETH     | TORN         | 2006-02-15 04:34:33 |
|       95 | DARYL       | WAHLBERG     | 2006-02-15 04:34:33 |
|       96 | GENE        | WILLIS       | 2006-02-15 04:34:33 |
|       97 | MEG         | HAWKE        | 2006-02-15 04:34:33 |
|       98 | CHRIS       | BRIDGES      | 2006-02-15 04:34:33 |
|       99 | JIM         | MOSTEL       | 2006-02-15 04:34:33 |
|      100 | SPENCER     | DEPP         | 2006-02-15 04:34:33 |
|      101 | SUSAN       | DAVIS        | 2006-02-15 04:34:33 |
|      102 | WALTER      | TORN         | 2006-02-15 04:34:33 |
|      103 | MATTHEW     | LEIGH        | 2006-02-15 04:34:33 |
|      104 | PENELOPE    | CRONYN       | 2006-02-15 04:34:33 |
|      105 | SIDNEY      | CROWE        | 2006-02-15 04:34:33 |
|      106 | GROUCHO     | DUNST        | 2006-02-15 04:34:33 |
|      107 | GINA        | DEGENERES    | 2006-02-15 04:34:33 |
|      108 | WARREN      | NOLTE        | 2006-02-15 04:34:33 |
|      109 | SYLVESTER   | DERN         | 2006-02-15 04:34:33 |
|      110 | SUSAN       | DAVIS        | 2006-02-15 04:34:33 |
|      111 | CAMERON     | ZELLWEGER    | 2006-02-15 04:34:33 |
|      112 | RUSSELL     | BACALL       | 2006-02-15 04:34:33 |
|      113 | MORGAN      | HOPKINS      | 2006-02-15 04:34:33 |
|      114 | MORGAN      | MCDORMAND    | 2006-02-15 04:34:33 |
|      115 | HARRISON    | BALE         | 2006-02-15 04:34:33 |
|      116 | DAN         | STREEP       | 2006-02-15 04:34:33 |
|      117 | RENEE       | TRACY        | 2006-02-15 04:34:33 |
|      118 | CUBA        | ALLEN        | 2006-02-15 04:34:33 |
|      119 | WARREN      | JACKMAN      | 2006-02-15 04:34:33 |
|      120 | PENELOPE    | MONROE       | 2006-02-15 04:34:33 |
|      121 | LIZA        | BERGMAN      | 2006-02-15 04:34:33 |
|      122 | SALMA       | NOLTE        | 2006-02-15 04:34:33 |
|      123 | JULIANNE    | DENCH        | 2006-02-15 04:34:33 |
|      124 | SCARLETT    | BENING       | 2006-02-15 04:34:33 |
|      125 | ALBERT      | NOLTE        | 2006-02-15 04:34:33 |
|      126 | FRANCES     | TOMEI        | 2006-02-15 04:34:33 |
|      127 | KEVIN       | GARLAND      | 2006-02-15 04:34:33 |
|      128 | CATE        | MCQUEEN      | 2006-02-15 04:34:33 |
|      129 | DARYL       | CRAWFORD     | 2006-02-15 04:34:33 |
|      130 | GRETA       | KEITEL       | 2006-02-15 04:34:33 |
|      131 | JANE        | JACKMAN      | 2006-02-15 04:34:33 |
|      132 | ADAM        | HOPPER       | 2006-02-15 04:34:33 |
|      133 | RICHARD     | PENN         | 2006-02-15 04:34:33 |
|      134 | GENE        | HOPKINS      | 2006-02-15 04:34:33 |
|      135 | RITA        | REYNOLDS     | 2006-02-15 04:34:33 |
|      136 | ED          | MANSFIELD    | 2006-02-15 04:34:33 |
|      137 | MORGAN      | WILLIAMS     | 2006-02-15 04:34:33 |
|      138 | LUCILLE     | DEE          | 2006-02-15 04:34:33 |
|      139 | EWAN        | GOODING      | 2006-02-15 04:34:33 |
|      140 | WHOOPI      | HURT         | 2006-02-15 04:34:33 |
|      141 | CATE        | HARRIS       | 2006-02-15 04:34:33 |
|      142 | JADA        | RYDER        | 2006-02-15 04:34:33 |
|      143 | RIVER       | DEAN         | 2006-02-15 04:34:33 |
|      144 | ANGELA      | WITHERSPOON  | 2006-02-15 04:34:33 |
|      145 | KIM         | ALLEN        | 2006-02-15 04:34:33 |
|      146 | ALBERT      | JOHANSSON    | 2006-02-15 04:34:33 |
|      147 | FAY         | WINSLET      | 2006-02-15 04:34:33 |
|      148 | EMILY       | DEE          | 2006-02-15 04:34:33 |
|      149 | RUSSELL     | TEMPLE       | 2006-02-15 04:34:33 |
|      150 | JAYNE       | NOLTE        | 2006-02-15 04:34:33 |
|      151 | GEOFFREY    | HESTON       | 2006-02-15 04:34:33 |
|      152 | BEN         | HARRIS       | 2006-02-15 04:34:33 |
|      153 | MINNIE      | KILMER       | 2006-02-15 04:34:33 |
|      154 | MERYL       | GIBSON       | 2006-02-15 04:34:33 |
|      155 | IAN         | TANDY        | 2006-02-15 04:34:33 |
|      156 | FAY         | WOOD         | 2006-02-15 04:34:33 |
|      157 | GRETA       | MALDEN       | 2006-02-15 04:34:33 |
|      158 | VIVIEN      | BASINGER     | 2006-02-15 04:34:33 |
|      159 | LAURA       | BRODY        | 2006-02-15 04:34:33 |
|      160 | CHRIS       | DEPP         | 2006-02-15 04:34:33 |
|      161 | HARVEY      | HOPE         | 2006-02-15 04:34:33 |
|      162 | OPRAH       | KILMER       | 2006-02-15 04:34:33 |
|      163 | CHRISTOPHER | WEST         | 2006-02-15 04:34:33 |
|      164 | HUMPHREY    | WILLIS       | 2006-02-15 04:34:33 |
|      165 | AL          | GARLAND      | 2006-02-15 04:34:33 |
|      166 | NICK        | DEGENERES    | 2006-02-15 04:34:33 |
|      167 | LAURENCE    | BULLOCK      | 2006-02-15 04:34:33 |
|      168 | WILL        | WILSON       | 2006-02-15 04:34:33 |
|      169 | KENNETH     | HOFFMAN      | 2006-02-15 04:34:33 |
|      170 | MENA        | HOPPER       | 2006-02-15 04:34:33 |
|      171 | OLYMPIA     | PFEIFFER     | 2006-02-15 04:34:33 |
|      172 | GROUCHO     | WILLIAMS     | 2006-02-15 04:34:33 |
|      173 | ALAN        | DREYFUSS     | 2006-02-15 04:34:33 |
|      174 | MICHAEL     | BENING       | 2006-02-15 04:34:33 |
|      175 | WILLIAM     | HACKMAN      | 2006-02-15 04:34:33 |
|      176 | JON         | CHASE        | 2006-02-15 04:34:33 |
|      177 | GENE        | MCKELLEN     | 2006-02-15 04:34:33 |
|      178 | LISA        | MONROE       | 2006-02-15 04:34:33 |
|      179 | ED          | GUINESS      | 2006-02-15 04:34:33 |
|      180 | JEFF        | SILVERSTONE  | 2006-02-15 04:34:33 |
|      181 | MATTHEW     | CARREY       | 2006-02-15 04:34:33 |
|      182 | DEBBIE      | AKROYD       | 2006-02-15 04:34:33 |
|      183 | RUSSELL     | CLOSE        | 2006-02-15 04:34:33 |
|      184 | HUMPHREY    | GARLAND      | 2006-02-15 04:34:33 |
|      185 | MICHAEL     | BOLGER       | 2006-02-15 04:34:33 |
|      186 | JULIA       | ZELLWEGER    | 2006-02-15 04:34:33 |
|      187 | RENEE       | BALL         | 2006-02-15 04:34:33 |
|      188 | ROCK        | DUKAKIS      | 2006-02-15 04:34:33 |
|      189 | CUBA        | BIRCH        | 2006-02-15 04:34:33 |
|      190 | AUDREY      | BAILEY       | 2006-02-15 04:34:33 |
|      191 | GREGORY     | GOODING      | 2006-02-15 04:34:33 |
|      192 | JOHN        | SUVARI       | 2006-02-15 04:34:33 |
|      193 | BURT        | TEMPLE       | 2006-02-15 04:34:33 |
|      194 | MERYL       | ALLEN        | 2006-02-15 04:34:33 |
|      195 | JAYNE       | SILVERSTONE  | 2006-02-15 04:34:33 |
|      196 | BELA        | WALKEN       | 2006-02-15 04:34:33 |
|      197 | REESE       | WEST         | 2006-02-15 04:34:33 |
|      198 | MARY        | KEITEL       | 2006-02-15 04:34:33 |
|      199 | JULIA       | FAWCETT      | 2006-02-15 04:34:33 |
|      200 | THORA       | TEMPLE       | 2006-02-15 04:34:33 |
+----------+-------------+--------------+---------------------+
200 rows in set (0.00 sec)

3. ADB接続用ユーザーの作成

ADBからMySQLに接続するための専用ユーザーを作成します。

CREATE USER 'adb_user'@'%' IDENTIFIED BY 'Welcome12345#';
GRANT SELECT ON sakila.* TO 'adb_user'@'%';
FLUSH PRIVILEGES;

これでMySQL側の作業は完了です


手順2:ADB側での設定

ここからの作業は、ADMINユーザーでADBに接続して実行します。

1. ネットワーク設定の確認

MySQL側のセキュリティ・リスト(またはNSG)で、TCP/3306通信が許可されていることを確認します。

2. 資格証明の作成

MySQLのユーザー情報をADB内に安全に保管するための資格証明オブジェクトを作成します。

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'MYSQL_HEATWAVE_CRED',
    username        => 'adb_user',
    password        => 'WelCome12345#'
  );
END;
/

3. データベースリンクの作成

MySQLへの接続経路であるデータベースリンクを作成します。

BEGIN
  DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
    db_link_name       => 'MYSQL_HW_LINK',
    hostname           => 'hwtest.subnet08041808.vcn08041808.oraclevcn.com', --控えておいたHeatwaveのホスト名
    port               => '3306',
    service_name       => 'sakila',  --スキーマ名
    credential_name    => 'MYSQL_HEATWAVE_CRED',
    private_target     => TRUE,
    gateway_params     => JSON_OBJECT('db_type' value 'mysql'),
    ssl_server_cert_dn => NULL
  );
END;
/

4. VIEWの作成と開発ユーザーへの権限付与

-- MySQLのfilmテーブルを参照するVIEWを作成
-- 開発者に公開したいカラムのみを選択できる
CREATE OR REPLACE VIEW V_MYSQL_FILM AS
SELECT 
  "film_id", 
  "title", 
  "description", 
  "release_year"
FROM "film"@MYSQL_HW_LINK;

-- 作成したVIEWへのSELECT権限を開発ユーザー(例: WKSP_APEXDEV)に付与
GRANT SELECT ON V_MYSQL_FILM TO WKSP_APEXDEV;


-- 同様に、actorテーブルを参照するVIEWも作成・権限付与
CREATE OR REPLACE VIEW V_MYSQL_ACTOR AS
SELECT 
  "actor_id", 
  "first_name", 
  "last_name"
FROM "actor"@MYSQL_HW_LINK;

GRANT SELECT ON V_MYSQL_ACTOR TO WKSP_APEXDEV;

開発ユーザー(例: WKSP_APEXDEV)でADBに接続し、以下のように**ADMINスキーマが所有するVIEW**を指定してSQLを実行します。

SQL> SELECT COUNT(*) FROM ADMIN.V_MYSQL_FILM;


   COUNT(*) 
___________ 
       1000 

     
SQL> SELECT * FROM ADMIN.V_MYSQL_ACTOR FETCH FIRST 10 ROWS ONLY;

   actor_id first_name    last_name       
___________ _____________ _______________ 
          1 PENELOPE      GUINESS         
          2 NICK          WAHLBERG        
          3 ED            CHASE           
          4 JENNIFER      DAVIS           
          5 JOHNNY        LOLLOBRIGIDA    
          6 BETTE         NICHOLSON       
          7 GRACE         MOSTEL          
          8 MATTHEW       JOHANSSON       
          9 JOE           SWANK           
         10 CHRISTIAN     GABLE           

10 rows selected. 

ADB上から、正しくMySQLのデータが参照できました!


手順3:SELECT AIを用いて自然言語で問い合わせしてみる

更に自然言語での問い合わせにチャレンジしてみます

SELECT AIを使えるようにする

権限付与

-- ADMINで実行
GRANT EXECUTE ON DBMS_CLOUD_ADMIN TO wksp_apexdev;

*以降一般User側での操作です

クレデンシャルの作成
詳細はこちらを参照

-- User側で実行

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'OCI_GENAI_CRED',
        user_ocid       => 'ocid1.user.oc1..axxxxxxxxxxxxxxxxq',
        tenancy_ocid    => 'ocid1.tenancy.oc1..aaxxxxxxxxxxxxa',
        private_key     => '-----BEGIN PRIVATE KEY-----
        MIIEvAIBADANBgkqhkiGQEFA<中略>1D3iheu1ct50SB0aIQz9Ow==
        -----END PRIVATE KEY-----',
        fingerprint     => 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx'
    );
END;
/

AIプロファイルの作成

-- User側で実行

BEGIN
    DBMS_CLOUD_AI.CREATE_PROFILE(
        'GENAI_COHERE_2025',
        '{
            "provider": "oci",
            "credential_name": "OCI_GENAI_CRED",
            "model":"cohere.command-a-03-2025",
            "oci_apiformat":"COHERE",
            "region": "ap-osaka-1",
            "object_list": [
                    {"owner": "ADMIN", "name": "V_MYSQL_ACTOR"},
                    {"owner": "ADMIN", "name": "V_MYSQL_FILM"}
            ]
        }'
    );
END;

プロファイルの紐づけ

-- User側で実行
EXEC DBMS_CLOUD_AI.SET_PROFILE('GENAI_COHERE_2025');

AIが動作するか確認してみる

SQL> SELECT AI chat "あなたはだれ?";

RESPONSE                                                                                                     
____________________________________________________________________________________________________________ 
こんにちは!私はCohereが開発した高度な言語モデル、Commandです。複雑な質問に答えたり、創造的なコンテンツを生成したり、有益な会話をしたりするためにここにいます。本日はどのようなお手伝いができますか?    

返答があれば、正しくAIと紐づけが出来ていることになります。

MySQL上のデータも自然言語で問い合わせてみる

ようやく環境構築ができました!
色々と試してみます。

SQL> SELECT AI "俳優IDが20の人はだれ?";


   actor_id first_name    last_name    
___________ _____________ ____________ 
         20 LUCILLE       TRACY        

SQL> 

SQL> select ai 'V_MYSQL_FILM表のデータ件数はいくつですか?';

   film_count 
_____________ 
         1000 

SQL> select ai showsql 'V_MYSQL_FILM表のデータ件数はいくつですか?';

RESPONSE                           
__________________________________ 
SELECT COUNT(*) AS "film_count"
FROM "ADMIN"."V_MYSQL_FILM"    

SQL> SELECT COUNT(*) AS "film_count"
  2* FROM "ADMIN"."V_MYSQL_FILM";

   film_count 
_____________ 
         1000 

SQL> 


正しく動作しました!

まとめ

MySQL上のテーブルをADBから参照し、更に自然言語で問い合わせをすることに成功しました。
ADBはMySQLだけでなく、MS SQL ServerやSnowfrake、AWSのRedshiftなど様々なOracle以外のDBとの接続が可能です。
複数DBLinkを接続し、ADB上で自然言語で問い合わせることで、様々なデータの集約・活用の幅が広がると触りながら感じることが出来ました。

Appendix

3
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
3
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?