Oracle使ってる時に、今どのサーバーに繋いでるの?とか、今どのスキーマに繋いでるの?
ってなるとき無いですか?
そんなときの確認法。
今、どのサーバーに接続してるんだ?
先日の仮想マシンにOracleをインストールした時のこと・・・
ゲストOS内ではローカル接続は出来ていて、外から接続ができなくて悩んでいたタイミングに、IPの直接指定で接続できた(ように見えてしまって)いたんです。
実際には、ホストOS側のOracleに繋がっているという状態だったんですが、TRUNCATEコマンドなんかも実施したりしてたので、後で考えた時にゾッとしたわけです。
実際、ローカル環境だったので、dumpファイルインポートしちゃえば無かったことに出来るので、大丈夫ではあったんですが、どのサーバーに繋いでいるのか?っていうのは確認必須だな・・・と。
接続・実行先の確認方法
SQLDeveloper
色々楽なので、使うんですが、SQLDeveloperだと、こんな感じで接続状態と、SQLの実行先が分かります。
データベースアイコンに電源コネクタみたいなのが表示されるようになってるので、現在の接続先が分かりやすい。
ただ、これも接続確認が出来ている状態で有効な確認方法であって、100%ではないわけです。
先日の接続出来ていない状態だと、アイコンもこういう風に変わって、普通に接続できているように見えていたので。
インスタンスの確認
SELECT * FROM v$instance;
確認できる項目はいくつかあるけど、
- INSTANCE_NAME
- HOST_NAME
- VERSION
- STARTUP_TIME
なんかを確認すると良い感じ。
少なくとも、HOST_NAMEが正しい必要はある。
接続先IPアドレスの確認
CYS_CONTEXTを使うと、もっと色々と情報は取得できるけど、インスタンスの確認でHOST_NAMEがわかっているので、念のためにIP確認をする。
SELECT sys_context('USERENV', 'IP_ADDRESS') FROM dual;
「IP_ADDRESS」部分を変更すれば現在のセッションの定義を確認できる。
パラメータについては、
https://docs.oracle.com/cd/E60665_01/db112/SQLRF/functions184.htm
を参照のこと。
まとめ
うちの会社では、プロジェクトごとに仮想マシンをWindowsServer上に作成して、Oracle11gXEでDB環境を作って社内での開発に使用してたりします。
が、先日のような事が起こると、どこに接続しているか?というのは非常に重要なファクターなので、確認せざるを得ないなと。
SELECT文やVIEWなら全然問題ないけど、TRUNCATEや、大量データのDELETEをかます時には一度確認したいなと。
別にローカルDBに接続されてしまっているだけなら全く問題ないけど、実はスキーマが本番テスト用でした・・・とかだと笑えないので。
まぁ、本番テスト用だろうが管理者に頭下げてロールバックなりして貰えれば解決するけど、その間になぜかPLとかから怒られるので・・・
後は、特に客先では気をつけましょうって話。