SYS_CONTEXT()ファンクションを使うと各種接続先の情報、接続元の情報を確認できます。複数接続先にて作業する可能性がある際は念のために接続先を確認してから作業にとりかかりましょう。作業を始める前にエビデンスとしてこちらの結果出力を保持しておくと重宝します。
プラガブルDBの確認および切り替えはこちらです。
簡易版
select 1 LNO,'SERVICE_NAME' label, SYS_CONTEXT('USERENV','SERVICE_NAME') USERENV_ITEM from dual UNION select 2 LNO,'INSTANCE_NAME' label, SYS_CONTEXT('USERENV','INSTANCE_NAME') USERENV_ITEM from dual UNION select 3 LNO,'SESSION_USER' label, SYS_CONTEXT('USERENV','SESSION_USER') USERENV_ITEM from dual order by 1 ;
実行結果例
LNO LABEL USERENV_ITEM
---------- ---------------- ------------------------
1 SERVICE_NAME ora19.box
2 INSTANCE_NAME ora19
3 SESSION_USER SOONI
SQL>
より詳細版
サービス名はDB名+DBドメイン名から構成される。
DB_UNIQUE_NAME+”.”+DB_DOMAIN = SERVICE_NAME
select 1 LNO,'DB_NAME' label, SYS_CONTEXT('USERENV','DB_NAME') USERENV_ITEM,'データベース名' note from dual UNION select 2 LNO,'DB_UNIQUE_NAME' label, SYS_CONTEXT('USERENV','DB_UNIQUE_NAME') USERENV_ITEM,'DBユニーク名' note from dual UNION select 3 LNO,'DB_DOMAIN' label, SYS_CONTEXT('USERENV','DB_DOMAIN') USERENV_ITEM,'DBドメイン' note from dual UNION select 4 LNO,'SERVICE_NAME' label, SYS_CONTEXT('USERENV','SERVICE_NAME') USERENV_ITEM,'サービス名' note from dual UNION select 5 LNO,'INSTANCE_NO' label, SYS_CONTEXT('USERENV','Instance') USERENV_ITEM,'インスタンスNo' note from dual UNION select 6 LNO,'INSTANCE_NAME' label, SYS_CONTEXT('USERENV','INSTANCE_NAME') USERENV_ITEM,'インスタンス名' note from dual UNION select 7 LNO,'SERVER_HOST' label, SYS_CONTEXT('USERENV','SERVER_HOST') USERENV_ITEM,'インスタンス稼働ホスト' note from dual UNION select 8 LNO,'SESSION_USER' label, SYS_CONTEXT('USERENV','SESSION_USER') USERENV_ITEM,'セッションユーザ' note from dual UNION select 9 LNO,'SID' label, SYS_CONTEXT('USERENV','SID') USERENV_ITEM,'セッションID' note from dual UNION select 10 LNO,'SERIAL#' label, to_char( SERIAL#) USERENV_ITEM,'SERIAL#' note from V$SESSION WHERE SID = USERENV('SID') UNION select 11 LNO,'SERVER' label, SERVER USERENV_ITEM,'接続モード' note from V$SESSION WHERE SID = USERENV('SID') UNION select 12 LNO,'HOST' label, SYS_CONTEXT('USERENV','HOST') USERENV_ITEM,'クライアント名' note from dual UNION select 13 LNO,'IP_ADDRESS' label, SYS_CONTEXT('USERENV','IP_ADDRESS') USERENV_ITEM,'クライアントIP' note from dual order by 1 ;
実行結果例
LNO LABEL USERENV_ITEM NOTE
---------- ---------------- ---------------------------- ------------------------
1 DB_NAME ora19 データベース名
2 DB_UNIQUE_NAME ora19 DBユニーク名
3 DB_DOMAIN box DBドメイン
4 SERVICE_NAME ora19.box サービス名
5 INSTANCE_NO 1 インスタンスNo
6 INSTANCE_NAME ora19 インスタンス名
7 SERVER_HOST vm102 インスタンス稼働ホスト
8 SESSION_USER SOONI セッションユーザ
9 SID 107 セッションID
10 SERIAL# 55216 SERIAL#
11 SERVER DEDICATED 接続モード
12 HOST SOFFICE\DESKTOP-SOONIPC クライアント名
13 IP_ADDRESS 192.168.56.1 クライアントIP
13行が選択されました。
SQL>
もし「ORA-00942: 表またはビューが存在しません。」とエラーが出てしまった場合はV$SESSIONへのアクセス権限を保持していないと思われます。この場合SELECT_CATALOG_ROLEを付与してあげると解決します。但しロールの付与が反映されるには再度ログインし直す必要があります。
例)grant SELECT_CATALOG_ROLE to scott;
SQL*plusで使う場合こちらも使ってください
set lin 200 set pagesize 50 set tab off col label for a16 col userenv_item for a28 col note for a24