Oracle:接続1回でSQLを繰り返し実行するシェルスクリプト | けしくんのWebLog

けしくんのWebLog

自分が考えたこと、調べたことを忘れずに残しておくため、Web上にLogを残していきます。

Oracleへの接続(SQL*Plusでconnect ユーザー名/パスワードを実行)はそれなりの負荷がかかる。
できるだけサーバーの負荷をかけず、また、PL/SQLを書くことなく短時間で同じ繰り返しSQLを実行したい場合、次のようにする。

特に、パフォーマンス・チューニングの際、今現在実行しているセッションの情報や流れているSQLを取得する場合に便利。

--ここから--
#!/bin/sh
(
SLEEP_SEC=3  # 繰り返しの頻度 
# 接続情報
echo "connect / as sysdba"

# SQL*Plusの設定 echoさせることでSQL*Plusにコマンドを渡す
# columnコマンド等もここに書く
echo "set head off"
echo "set feed off"
echo "set time on"
echo "set pages 10000"
echo "set lines 2000"

# このwhile文の中のSQLを繰り返し実行させる
# whileに条件をつければ、回数の制限も可能
while true
do
  # SQL文やSQLスクリプトの実行文(@ファイル名)をechoさせる
  echo 'select * from v$session where status = 'ACTIVE;' 
  sleep ${SLEEP_SEC}
done
) | sqlplus -s /nolog

exit 0

--ここまで--

 

よく使うOracle SQL/コマンドまとめ