SQL*Plus の新機能
本記事では Oracle Database 23ai に附属の SQL*Plus に実装された新機能を検証します。
AUTOTRACE に SQL 文の変更アドバイスが出力される機能は [SQL Adviser Report 機能を試す(Oracle Database 23ai)] で紹介しましたので、それ以外の新機能について記載しています。
CONFIG
CONFIG コマンドは tnsnames.ora ファイルの内容を JSON 形式で出力します。CONFIG EXPORT TNS までは固定で、追加オプションにより動作が変わります。
SQL> CONFIG EXPORT TNS
ローカル・ネット・ネーミング構成ファイル/opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.oraの構成ストアJSONを生成しています
{
"FREE": {
"connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = freepdb1)))"
},
"LISTENER_FREE": {
"connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521))"
}
}
AZURE 句を指定すると、Oracle Database Service for Azure 用の JSON 出力が生成されます。
SQL> CONFIG EXPORT TNS AZURE
ローカル・ネット・ネーミング構成ファイル/opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.oraの構成ストアJSONを生成しています
{
"orcl/FREE/connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = freepdb1)))",
"orcl/LISTENER_FREE/connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521))"
}
tnsnames.ora ファイルを読み込むディレクトリ名は環境変数 TNS_ADMIN または $ORACLE_HOME/network/admin がデフォルトです。変更したい場合はディレクトリのパスを指定します。
SQL> CONFIG EXPORT TNS /home/oracle/tnsadmin
ローカル・ネット・ネーミング構成ファイル/home/oracle/tnsadmin/tnsnames.oraの構成ストアJSONを生成しています
{
"FREE2": {
"connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = freepdb1)))"
},
"LISTENER_FREE": {
"connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521))"
}
}
ファイルに出力する場合は FILE 句と同時にパスを指定します。ディレクトリを指定しない場合は SQL*Plus を実行したカレント・ディレクトリに作成されます。ファイル名も省略した場合にはカレントディレクトリに oraconfig.json ファイルが生成されます。
SQL> CONFIG EXPORT TNS FILE /tmp/tnsnames.json
ローカル・ネット・ネーミング構成ファイル/opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.oraの構成ストアJSONを生成しています
構成ストアJSONファイルが正常に生成されました(/tmp/tnsnames.json)
マニュアル上には出力ファイルに「JSON ファイル名」の形式が書かれていますが、この句を指定するとカレントディレクトリの JSON ディレクトリに oraconfig.json ファイルを作成しようとします。また出力ファイルの拡張子を json 以外にすると、ディレクトリ名と判断するようです。
SQL> CONFIG EXPORT TNS FILE test.out
SP2-1692: JSONファイル(test.out/oraconfig.json)の作成に失敗しました。
ヘルプ: https://docs.oracle.com/error-help/db/sp2-1692/
マニュアル
13.16 CONFIG
SHOW CONNECTION
SHOW CONNECTION NETSERVICEMAMES コマンドは tnsnames.ora ファイルの内容を出力します。短縮形として SHOW CONN NETS を使用できます。
パラメーターを指定しない場合、tnsnames.ora ファイルのサービス名一覧を出力します。
SQL> SHOW CONNECTION NETSERVICENAMES
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
FREE
LISTENER_FREE
サービス名を指定すると、tnsnames.ora ファイルのサービス詳細を出力します。大文字/小文字は区別されません。サービス名は複数回指定できます。
SQL> SHOW CONNECTION NETSERVICENAMES FREE
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
FREE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr23ai)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = freepdb1)))
マニュアル
13.47 SHOW CONNECTION
OERR
OERR コマンドは Oracle Database 23c で追加されたコマンドで、オペレーティング・システム上の oerr コマンドを SQL*Plus 内から実行できます。ファシリティとして TNS を指定するとエラーが発生する不具合がありましたが、Oracle Database 23ai Free でも修正されていません。このためシンボリックリンクを作成して回避します。
SQL> OERR TNS 12154
SP2-0160: "/opt/oracle/product/23ai/dbhomeFree//network_src/mesg/tnsus.msg"をオープンできません。
ヘルプ: https://docs.oracle.com/error-help/db/sp2-0160/
SQL> !
$ cd $ORACLE_HOME/
$ ln -s network network_src
$ exit
SQL> OERR TNS 12154
Message: "Cannot connect to database. Cannot find alias %s in %s."
ヘルプ: https://docs.oracle.com/error-help/db/tns-12154/
Cause: A connection to a database or other service is being requested
using a connection alias but the alias specified cannot be resolved
into a connect descriptor using one of the configured naming
methods.
...
マニュアルの記載
Oracle Database 23ai のマニュアルを見ると、Oracle Database 23c は無かったことにされています。このため、新機能の説明には Oracle Database 23c と Oracle Database 23ai の新機能が一緒に記載されています。
Changes in This Release for Oracle Database SQL*Plus User's Guide and Reference
Author: Noriyoshi Shinoda / Date: June 6, 2024