株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

TPT scriptsの導入とi.sql

このエントリは JPOUG Advent Calendar2日目への参加記事です。

先のエントリでは Tanel PoderさんのSnapperスクリプトについて紹介しました。TanelさんはSnapper以外にも他に多くの有用なスクリプトを公開しています。

これらのスクリプト群はOracle Scripts and ToolsにてTPT Scriptとして公開されています。 (TPTとは、"Tanel Poder’s Troubleshooting (or tuning) scripts"の略だとのこと) なお、TPT Scriptパッケージに含まれる個々のスクリプトについては、 An index of my TPT scripts | TANEL PODER'S BLOG: IT & MOBILE FOR GEEKS AND PROS に簡単な紹介が書かれています。

本エントリではTPT Scriptsの導入方法とi.sqlについて御紹介します。

TPT Scriptsの導入方法

http://tech.e2sn.com/oracle-scripts-and-tools から、プラットフォームに合わせて

のいずれかをダウンロードし、展開します。


[oracle@l54x64a ~]$ wget http://files.e2sn.com/scripts/tpt_public_unixmac.tar.gz
--2012-11-22 17:08:52--  http://files.e2sn.com/scripts/tpt_public_unixmac.tar.gz
Resolving files.e2sn.com... 173.45.236.197
Connecting to files.e2sn.com|173.45.236.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 550908 (538K) [application/x-gzip]
Saving to: `tpt_public_unixmac.tar.gz'

100%[======================================>] 550,908      308K/s   in 1.7s

2012-11-22 17:08:54 (308 KB/s) - `tpt_public_unixmac.tar.gz' saved [550908/550908]

[oracle@l54x64a ~]$ tar zft tpt_public_unixmac.tar.gz
tpt_public_unixmac/
tpt_public_unixmac/46off.sql
tpt_public_unixmac/46on.sql
tpt_public_unixmac/53on.sql
  : 
tpt_public_unixmac/aot/matching_lock_type_wait.sql
tpt_public_unixmac/aot/optimizer_bug.sql
tpt_public_unixmac/aot/ora4031.sql
tpt_public_unixmac/aot/README.txt
tpt_public_unixmac/aot/short_stack.sql
tpt_public_unixmac/aot/sqlidconv.sql
tpt_public_unixmac/aot/system_ts_writes.sql
tpt_public_unixmac/aot/tx_lock_diag.txt

[oracle@l54x64a ~]$ cd tpt_public_unixmac
[oracle@l54x64a tpt_public_unixmac]$ ls *.sql |wc -l
535

非常に多くのSQLスクリプトがあることが分かります。

展開されたSQLファイル群を、任意のディレクトリにコピーします。

環境変数 SQLPATH がポイントしているディレクトリにコピーすると、 パスを指定せずに、ファイル名を指定するだけで簡単にスクリプトを実行できて非常に便利です。


[oracle@l54x64a ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Nov 22 17:17:57 2012

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> @df
SP2-0310: unable to open file "df.sql"
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@l54x64a ~]$ export SQLPATH=~/sql←★SQLPATHを設定
[oracle@l54x64a ~]$ echo $SQLPATH
/home/oracle/sql
[oracle@l54x64a ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Nov 22 17:18:12 2012

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

USERNAME             INST_NAME    HOST_NAME                 SID   SERIAL#  VERSION    STARTED  SPID            OPID  CPID            SADDR            PADDR
-------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
SYS                  b203         l54x64a.domain            46    7749     11.2.0.3.0 20121115 2351            30    2350            000000007EB95F70 000000007E8A3D98

SQL> col tablespace_name format a12
SQL> @df

TABLESPACE_N    TotalMB     UsedMB     FreeMB % Used Ext       Used
------------ ---------- ---------- ---------- ------ --------- ----------------------
MANUALTBS           204        195          9    96% YES       |####################|
SYSAUX              730        691         39    95% YES       |################### |
SYSTEM              720        717          3   100% YES       |####################|
TEMP                 29         29          0   100% YES       |####################|
UNDOTBS1            145         14        131    10% YES       |##                  |
USERS                 5          2          3    40% YES       |########            |

6 rows selected.

SQL>

なお、TPT Sciptにはlogin.sqlが含まれています。 SQL*Plusは、SQLPATHがポイントするディレクトリパスにlogin.sqlが存在すると、 ログイン時にそのスクリプトを自動的に自動実行します。

このため、上記の手順にしたがってTPT Scriptを配置すると、SQL*Plusでログインしたときに TPT Sciptのlogin.sqlの処理が常に実行されます。 この処理が不要な場合はlogin.sqlを別の名前にリネームしてください。

また、すでに自分用のlogin.sqlが作成済みである場合は、 意図せずファイルを上書きしないように注意してください。

i.sql - Oracle Databaseのwho am i

さて、TPT Sciptのlogin.sqlからはinit.sqlとi.sqlが実行されます。


[oracle@l54x64a ~]$ cat sql/login.sql
-- calling init.sql which will set up sqlpus variables
@@init.sql
-- i.sql is the "who am i" script which shows your session/instance info and
-- also sets command prompt window/xterm title
@@i.sql

-- you can put your own login scripts here

init.sqlはSQL*Plusの変数と一部の初期化パラメータ (NLS_DATE_FORMAT)を 設定するスクリプトであり、主に表示の調整を行います。 私は、意図せず自動的に設定がされるのがあまり好きではないため、init.sqlの呼び出し部分をコメントアウトしています。 ここらへんは環境に対する考え方次第だと思います。

i.sqlは現行のセッションと関連プロセス、インスタンスについて情報を出力するスクリプトです。


SQL> @i

USERNAME             INST_NAME    HOST_NAME                 SID   SERIAL#  VERSION    STARTED  SPID            OPID  CPID            SADDR            PADDR
-------------------- ------------ ------------------------- ----- -------- ---------- -------- --------------- ----- --------------- ---------------- ----------------
SYS                  b203         l54x64a.domain            46    7779     11.2.0.3.0 20121115 3166            27    3165            000000007EB95F70 000000007E8A0B88

詳細は上記の実行結果を見てもらえれば分かると思います。 これらの情報はV$SESSION, V$PROCESS, V$INSTANCE から取得できる情報ですが、 "@i"とタイプするだけで簡単に取得できるのはやっぱり便利です。

私が重宝しているのは、ターミナルエミュレータのウィンドウのタイトル バーにユーザー名、インスタンス名、セッションID、OSプロセスIDを表示する機能です。 ウィンドウのタイトル バーは上記表示されていますので、@iの出力結果がスクロールして流れた状態でも、簡単にセッションIDやOSプロセスIDなどを確認できます。

Oracle Database エンジニアであれば、ふと思いついて あるセッション(≒プロセス)に対してoradebugを実行したくなるときが 良くあると思いますが、そのセッションで@iが実行されていれば、いつでも簡単にoradebugを実行できます。

i_oradebug.jpg

なお、ウィンドウのタイトル バーに情報を出力する機能は、エスケープシーケンスを活用することで実現されています。


[oracle@l54x64a ~]$ cat sql/i.sql
-- the Who am I script

def   mysid="NA"
  : 
-- short xterm title
host echo -ne "\033]0;&_i_user@&_i_inst &mysid[&_i_spid]\007"←★
-- long xterm title
--host echo -ne "\033]0;host=&_i_host inst=&_i_inst sid=&mysid ser#=&_i_serial spid=&_i_spid cpid=&_i_cpid opid=&_i_opid\007"
  : 

Oracle DatabaseやSQL*Plusだけを見ているのでは思いつかない便利なTipsです!

これでいつでもoradebugが実行できますね!

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ