Oracle DB の SQL*Plus で Spool Log を取る時の定石コマンド

Oracle DB に接続するときに使う SQL*PlusSQL*Plus の GUI ツールはちょっと使いづらいのと、改行コードの扱いで不具合があったので、普段はコマンドプロンプトから Sqlplus コマンドで使っている。

そんな Oracle の SQL*Plus で DB を覗いている時に、Spool コマンドでログを取るために予め設定しておく、ぼくなりの定石コマンドを紹介する。

目次

まずはコマンドだけ

Host Md C:\Spool\
Spool C:\Spool\Spool.log

Set time on
Set echo on
Set serverout on
Set lines 32767
Set pages 50000
Set colsep ','
Set trimspool on
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

用途・意図

仕事で Oracle を触るとき。本番環境のデータを調べたり、データパッチを行うときに、操作ログや実行 SQL を証跡として残しておくためのもの。

そんな用途のために、「情報が多く出力されること」だったり、「後々そのログファイルが追跡しやすいこと」だったり、「SELECT したデータの内容を検証・再利用しやすいこと」だったりを意識して Set コマンドを設定した。

1行ずつ説明

以上

こんなことを考えながら Set コマンドとか書いていて、意図と合わせて周知もしているのだが、いつも別の担当者が用意する .sql ファイルの中に直接 Set echo off とか書かれてたりしてゲンナリしている。

そういやはてなブログで「SQL*Plus」と1行の中に2回書くと、アスタリスク「*」が2回登場し、Markdown 記法における強調と勘違いされてしまい、よくわからない位置で文章が強調されてしまった。

SQL\*Plus」と、バックスラッシュ (環境によっては円記号)「\」をアスタリスクの直前に書いてエスケープしてやると回避できる。