只今、VB6、Rdo、Oracleを使用して以下の様なプログラムを作れ
とのご命令なのですが、どなたかお解りであればご教示お願いします。
接続先のデータベースに現在接続している全てのユーザーを切断する。
Rdoを使用し、自分を切断する事は当然出来るのですが
自分以外の接続ユーザーを全て切断する事は可能なのでしょうか?
初心者の為詳しく教えていただければ恐縮です。
接続ユーザー皆殺しですか・・・
そんな恐ろしいプログラムを使用すると言う事にまず反対しておきます。
回答ですが、いくつかの条件がありますが出来ます。
VBと言うよりほとんどがOracle側の知識になってしまうのですが
VB.Rdoで組むとこんな感じです。
※ oCn 'RdoConncetion
Dim oRs As rdoResultset
'DB接続略・・・
sSQL = "SLECT * FROM V$SESSION "
'レコード取得
Do Until oRs.EOF
If ※1の条件を満たす Then
sSQL = "ALTER SYSTEM KILL SESSION '" & oRs![SID] & _
& "," & oRs![SERIAL#] & "'"
oCn.Excute sSQL
End If
oRs.MoveNext
Loop
説明
V$SESSIONとはOracle自身が持つセッション管理のDBAビュー?
KILL SESSION 'セッションID,シリアル番号';
↑切断命令です、トランザクション等は全て破棄されると思います
※接続時のユーザーはALTER SYSTEMの権限が必要になります。
※1の条件には以下を行う。
① 自分ではない事(現行セッションは殺せません)
② ユーザーセッションである事(Oracleインスタンス等サーバー自身のセッションは殺せません)
VBで行うよりOracleのストアドファンクションに持つほうが良いと思います
よく理解しないと大変な事になるので気をつけて下さい。
ツイート | ![]() |