✄ Oracleデータベースを使ったアプリケーションでは、誰かがアプリを操作したままとなり、 データベースがロックされた状態になることがあります。
今回、そのロック状態を解除するため、 ExcelからSQL Plus を実行してセッションを強制切断(ロック解除)する方法を説明します。
サンプルのExcelをダウンロード
概要
まず、Oracleがロック状態になっていることを確認してみます。
下記のSQLを、SQL Developer やSQL Plusu から実行することで、
ロック状態を引き起こしているのが どこから(どのPCから)の接続なのか 確認できます。
ロック状態の場合は下記のようにレコードが抽出されます。
ロック状態を解除するには、抽出したレコードの中にあるSIDとSERIAL#が必要となります。 (上の例では、 SID=277, SERIAL#=18621)
パッケージ構成
Excelマクロ内の構成は下記となります。
main から modSqlPlus の関数を呼び出すシンプルな構造です。
ソースコード解説
ExcelのVBA、いわゆるマクロ処理のソースコードとなります。
①ModuleSqlPlus
SQL Plus からSQLを実行するために必要な関数を格納しています。
SQL Plus Windows Shell、つまりコマンドプロンプトから実行する必要があります。
そのため、一度SQL文が格納されたファイルを作成し、そのファイルをSQL Plus で実行するようにしています。
②Main
Oracle接続している(ロックしている)セッションを切断します。
上記の例では、modSqlPlusモジュールのkillSession を呼び出して、その引数に必要なSIDとSERIAL#を渡しています。
以上です。