はじめに
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上に設置をしています。
必要に応じて作業用の踏み台サーバなどはご用意ください。
また、Portは適切に解放頂き、Heatwave側は3306Portを開けてるようにしてくだし。
手順1:MySQL Heatwave側の準備
まず、接続先となるMySQL側の準備をします。この作業はOCI Cloud Shellなどから行います。
1. ホスト名(FQDN)とデータベース名の確認
後のステップで必要になるため、以下の2つの情報をOCIコンソールから確認し、メモしておきます。
- ホスト名 (FQDN):
後続で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

