【第2回】OCI Cloud ShellからAutonomous Database(26ai)にSQL*Plusで接続する

第1回では、Database ActionsのSQLワークシートで動作確認をした。ただ、ブラウザ上のSQL画面は、長いクエリの編集や、結果の確認が少しやりにくい。そこで今回は、OCIのCloud Shellから、SQL*Plusで接続する。

Cloud Shellは、OCIコンソールから開けるブラウザ内のターミナルだ。テナンシーの月間上限の範囲内で無料で使え、自分のPCには何もインストールしなくてよい。環境を汚したくない場合にも向いている。


ステップ 1:Cloud Shellを開き、クライアントを確認する

OCIコンソール右上のCloud Shellアイコンからターミナルを開き、SQL*Plusが入っているかを確認する。

sqlplus -V

今回の環境では、次のように表示された。

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

ステップ 2:ウォレットを生成する

Autonomous Databaseへの接続には、ウォレット(接続情報と証明書をまとめたzip)が必要になる。OCI CLIで生成する。

oci db autonomous-database generate-wallet \
  --autonomous-database-id '<ADBのOCID>' \
  --file ~/wallet.zip \
  --password '<ウォレット用パスワード>'
  • <ADBのOCID> は、ADBの詳細画面でコピーできる。
  • ウォレット用パスワードは、ADMINのパスワードとは別のもので、8文字以上が必要になる。

ステップ 3:ウォレットを展開して、場所を教える

ウォレットを展開し、sqlnet.ora のパスを書き換える。

mkdir -p ~/wallet
unzip -o ~/wallet.zip -d ~/wallet
export TNS_ADMIN=~/wallet
sed -i "s#?/network/admin#$TNS_ADMIN#" $TNS_ADMIN/sqlnet.ora
grep DIRECTORY $TNS_ADMIN/sqlnet.ora

最後の grep で、DIRECTORY が展開先のパスに書き換わっていれば成功だ。

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/<ユーザー名>/wallet")))

ステップ 4:サービス名を確認して接続する

ウォレットに含まれる接続先の名前(サービス名)を確認する。

grep -o '^[a-z0-9_]*' $TNS_ADMIN/tnsnames.ora

次のように、5種類が表示された。

<DB名>_high
<DB名>_medium
<DB名>_low
<DB名>_tp
<DB名>_tpurgent

調査や学習の用途なら、_tp で十分だ。接続する。

sqlplus admin@<DB名>_tp

パスワードは、ADB作成時に決めたADMINのパスワードを入力する(入力しても表示されない)。接続できると、次のように表示された。

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.4.1.0 - Production
Version 23.26.4.1.0

ステップ 5:毎回の設定を保存する(alias化)

Cloud Shellを開き直すたびに、環境変数を設定し直すのは面倒だ。ホームディレクトリ(永続領域)に保存しておく。

cat >> ~/.bashrc <<'EOF'
export TNS_ADMIN=~/wallet
export SQLPATH=~
alias adb='sqlplus admin@<DB名>_tp'
EOF

cat > ~/login.sql <<'EOF'
set linesize 200
set pagesize 100
set trimout on
col banner_full format a80
EOF

source ~/.bashrc

alias は、コマンドの別名を決める仕組みだ。adb と入力すると、sqlplus admin@<DB名>_tp に置き換えて実行される。adb という名前は自由に付けてよい。login.sql は、SQL*Plusの起動時に毎回自動で読み込まれる。

Note: パスワードは、aliasやファイルに書かない。ホームディレクトリに残るためだ。

開き直しても adb だけで入れる

Cloud Shellを閉じて開き直し、adb と入力すると、次のように接続できた。

$ adb

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Nov 2 11:24:03 2026
Version 19.19.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Enter password: 
Last Successful login time: Mon Nov 02 2026 20:23:06 ASIA/TOKYO JST

Connected to:
Oracle AI Database 26ai Enterprise Edition Release 23.26.4.1.0 - Production
Version 23.26.4.1.0

ちなみに、この出力には時刻が2種類出ている。1行目の 11:24:03 は、クライアント(Cloud Shell)側の時刻で、UTCの表示のようだ。一方、Last Successful login time の 20:23:06 は、DB側がJSTで表示した前回のログイン時刻だ。同じ接続でも、クライアントとDBで時刻の基準が違う。第1回で触れたタイムゾーンの話につながる。


つまずいた点(エラー集)

  1. NotAuthorizedOrNotFound(404)
    OCIDの前後に、全角スペースが混ざっていた。エラーメッセージのURLに %E3%80%80(全角スペースのエンコード)が含まれていたのが手掛かりだ。OCIDを半角のシングルクォートで囲んで、打ち直したら通った。
  2. The wallet download password must be at least 8 characters
    ウォレット用のパスワードが短かった。8文字以上にする。
  3. ORA-01017: invalid credential or not authorized; logon denied
    ユーザー名かパスワードの誤りだ。ウォレットのパスワードではなく、ADMINのパスワードを入れる。ネットワークやウォレットの設定は、ここまでは通っていることもわかる。
  4. ORA-12162: TNS:net service name is incorrectly specified
    ORA-01017のあと、SQL*Plusが Enter user-name: と聞き直してきた。そこに admin だけを入れたのが原因だった。接続先を付けた admin@<DB名>_tp を入力するか、いったん抜けて最初から実行し直す。

まとめ

Cloud Shellなら、手元に何も入れずに、SQL*Plusで接続できた。ウォレットとaliasをホームに保存しておけば、次回からは adb の一語で入れる。

次回は、この環境で、ADBの現状調査(スキーマ、オブジェクト、CDB/PDB、アーカイブログモード)を行う。



コメント

このブログの人気の投稿

【第1回】OCI Always FreeでOracle 26aiを構築!ADBのタイムゾーンの罠とJST取得の確実なアプローチ