SQL*Plus の基礎
SQL*Plus は Oracle の標準 CLI です。この章では対話操作だけでなく、運用で必要な「管理者接続」「SQLファイル実行」「失敗時停止」まで扱います。
SQL*Plus とは
sqlplus は Oracle Database に接続して SQL / PL/SQL を実行するクライアントです。接続確認、メンテナンス、バッチ処理まで幅広く使います。
通常接続
sqlplus app_user/AppPass#2026@localhost:1521/apppdb
-- 接続後の確認
SHOW USER;
SELECT sys_context('USERENV', 'CON_NAME') AS con_name FROM dual;
ローカル管理者接続
Oracle サーバーローカルでシステム管理者として入るときは OS 認証を使う方法が一般的です。
-- OSDBA グループユーザーで実行
sqlplus / as sysdba
-- CDB / PDB の確認
SHOW CON_NAME;
SHOW PDBS;
必要に応じて CDB ルートと PDB を切り替えます。
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER SESSION SET CONTAINER = apppdb;
よく使うコマンド
SHOW USER
SHOW CON_NAME
SHOW PDBS
DESC employees
SET LINESIZE 200
SET PAGESIZE 100
SPOOL ./logs/query.log
SPOOL OFF
EXIT
SQLファイル実行
デプロイや定期メンテは SQL をファイル化して実行します。
sqlplus app_user/AppPass#2026@localhost:1521/apppdb @./migrations/V001_create_tables.sql
引数付きで渡す場合の例です。
sqlplus app_user/AppPass#2026@localhost:1521/apppdb @./scripts/calc_report.sql 2026-02-15
バッチ実行の定石
運用スクリプトは、エラー時に必ず終了する設定を先頭に入れます。
-- deploy.sql
WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT 9
SET ECHO ON
SET FEEDBACK ON
SET TERMOUT ON
@./ddl/01_create_tables.sql
@./ddl/02_create_indexes.sql
EXIT SUCCESS
実行例:
sqlplus -s app_user/AppPass#2026@localhost:1521/apppdb @./deploy/deploy.sql \
> ./logs/deploy_2026-02-15.log 2>&1
-s: サイレント実行(ログ向き)WHENEVER SQLERROR EXIT: SQL エラーで即終了SPOOL: SQL*Plus 側でログファイル出力
引数・変数の受け渡し
&1, &2 で位置引数を受け取れます。
-- calc_report.sql
DEFINE target_date = '&1'
SELECT *
FROM sales
WHERE sales_date = TO_DATE('&target_date', 'YYYY-MM-DD');
再入力を避けたい場合は DEFINE と ACCEPT を使い分けます。
よくある失敗
- CDB ルートに接続したまま業務 SQL を実行してしまう
WHENEVER SQLERROR EXITを入れず、失敗後も処理が進む- 実行ログを残しておらず、障害時に追跡できない
@script.sqlの相対パスを誤り、別ファイルを実行する
運用用 SQL は「接続先確認」「失敗時停止」「ログ出力」をテンプレート化してから使うのが安全です。