S-JIS[2005-05-15/2012-06-18] 変更履歴

Oracleオブジェクト 情報照会

Oracle9i,10gの各種情報を知るためのテーブル・ビューのメモ。


情報を保持しているビュー

RDBは、内部情報もテーブルで保持している(ことが多いと思う)。
Oracleの場合、user_*、all_*、v$*といったビュー(ごく一部はテーブル)で参照できる。

静的データ・ディクショナリ・ビュー

user_*はそのユーザー専用の情報で、all_*は全ユーザーの情報。大抵はuserとallはペアで、同じ内容のものがある。
dba_*はsysユーザー用(as sysdba付きで接続)。

ビュー名 内容 接頭辞 更新日
user_objects オブジェクト全般(というか全オブジェクト) user all dba  
user_tables
user_all_tables
user_tab_columns
テーブル user all dba 2012-06-18
user_indexes
user_ind_columns
user_ind_expressions
インデックス(索引) user all dba 2010-07-29
user_constraints
user_cons_columns
整合性制約 user all dba 2008-02-16
user_views ビュー user all dba  
user_mviews
user_mview_logs
マテリアライズド・ビュー user all dba  
user_sequences シーケンス user all dba  
user_synonyms シノニム user all dba  
user_types ユーザー定義型 user all dba  
user_db_links DBリンク user all dba  
user_dimensions ディメンジョン user all dba  
user_tab_partitions
user_part_key_columns
user_part_tables
user_ind_partitions
user_part_indexes
パーティション定義 user all dba 2009-01-06
user_jobs ジョブ(一定時間毎にPL/SQLを実行する) user all dba 2007-12-08
user_recyclebin リサイクルビン user     2007-12-13
user_procedures FUNCTIONPROCEDUREで定義されているルーチン user all dba 2007-09-22
user_arguments FUNCTION、PROCEDUREの引数 user all - 2008-01-27
user_source FUNCTIONPROCEDUREJAVA SOURCEユーザー定義型等のソース user all dba  
user_dependencies オブジェクト(関数・プロシージャ・ビュー等)の依存関係 user     2008-01-08
user_triggers トリガー user all dba  
user_users ユーザー user all dba  
dba_data_files 表領域(テーブルスペース)のファイル名 - - dba 2006-07-08
user_free_space 表領域(テーブルスペース)毎の空き容量 user - dba  
nls_session_parameters セッションパラメータ (→v$nls_parameters - - - 2006-11-21

動的パフォーマンス・ビュー

v$なんちゃら。

オブジェクト名 内容 項目 関連 更新日
v$version バージョン情報(→   define 2007-12-11
v$option 使用可能なオプション PARAMETER オプション名 パーティション
ビットマップ索引
索引の結合
2009-12-24
VALUE 使用可否
v$parameter パラメーター   show parameters 2009-01-06
v$nls_parameters セッションパラメータ   nls_session_parameters 2006-12-26
v$session セッション情報 USERNAME ユーザー名 セッション削除方法 2008-11-15
LOGON_TIME ログオン時刻
LAST_CALL_ET 最後に処理を行ってからの経過時間
SQL_ADDRESS 実行中のSQLを表す値
SQL_ID 実行中のSQLを表す値(Oracle10以降)
v$transaction トランザクション情報   2006-12-27
v$lock
v$locked_object
ロック情報   2009-03-02
v$sql 実行されたSQL SQL_TEXT SQL文の先頭1000文字   2010-10-23
ADDRESS SQLを表す値
SQL_ID SQLを表す値(Oracle10以降)
CPU_TIME 単位は、Oracle9iではミリ秒。
Oracle10gR2ではマイクロ秒。
ELAPSED_TIME
v$object_usage 索引の使用状況 USED インデックスが使用されたかどうか   2010-02-04

オブジェクト定義

テーブル・ビュー等のオブジェクトの定義を知る方法

SQL> desc 名称

オブジェクトの種類を知る方法

SQL> select object_name,owner,object_type
  2  from all_objects
  3  where object_name='EMP';

OBJECT_NAME                    OWNER                          OBJECT_TYPE
------------------------------ ------------------------------ ------------------
EMP                            SCOTT                          TABLE

テーブルやインデックスのDDLを知る方法

テーブルやインデックス等の定義をDDLの形で見る事が出来る。[2008-10-04]

SQL> set long 9999
SQL> set pages 9999
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;

DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT')
--------------------------------------------------------------------------------

  CREATE TABLE "SCOTT"."EMP"
   (    "EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
〜
        "DEPTNO" NUMBER(2,0),
         CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
〜
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "SYSTEM"
テーブル DBMS_METADATA.GET_DDL('TABLE','テーブル名','オーナー名')
インデックス DBMS_METADATA.GET_DDL('INDEX','インデックス名','オーナー名')
ビュー user_views
マテビュー user_mviews
シーケンス DBMS_METADATA.GET_DDL('SEQUENCE','シーケンス名','オーナー名')
ファンクション DBMS_METADATA.GET_DDL('FUNCTION','関数名','オーナー名')
プロシージャ DBMS_METADATA.GET_DDL('PROCEDURE','プロシージャ名','オーナー名')
Java DBMS_METADATA.GET_DDL('JAVA_SOURCE','Javaソース名','オーナー名')
パッケージ DBMS_METADATA.GET_DDL('PACKAGE','パッケージ名','オーナー名')
DBMS_METADATA.GET_DDL('PACKAGE_BODY','パッケージ名','オーナー名')
シノニム DBMS_METADATA.GET_DDL('SYNONYM','関数名','オーナー名')

他のOBJECT_TYPE(select distinct object_type from all_objects;)でも使えそう。


ビュー

ビューの定義内容を確認する方法。[2007-12-28]

SQL> set long 1000
SQL> select text from user_views where view_name='VW_EMP';

TEXT
--------------------------------------------------------------------------------
select "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO"
from emp

「create view」で作ったときの「AS」以降の内容が出る(改行もそのまま)。
「select *」で作ったものは項目がそれぞれ指定されているようだ。

(ビューの内容が入っている)text項目はlong型(長い可変文字列)なので、ビュー定義が大きいときはSQL*Plusで表示すると途切れる可能性がある。
そういうときは、「set long」によってlong型のSQL*Plusでの表示桁数を大きく指定すればよい。

マテリアライズド・ビューの定義内容を確認する方法


ユーザー

現在ログインしているユーザーを知る方法

SQL> show user
ユーザーは"HISHIDAMA"です。
SQL> select user from dual;

USER
------------------------------
HISHIDAMA
SQL> select username,account_status from user_users;

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
HISHIDAMA                      OPEN

作成されているユーザーの一覧

SQL> select * from all_users;

USERNAME                          USER_ID CREATED
------------------------------ ---------- --------
SYS                                     0 02-05-12
		〜
SCOTT                                  59 02-05-12
HISHIDAMA                              61 05-05-15

31行が選択されました。

ユーザーが持っている権限

ユーザーに付与されているロール [/2007-09-25]

SQL> select * from USER_ROLE_PRIVS;

USERNAME                       GRANTED_ROLE                   ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
HISHIDAMA                      CONNECT                        NO  YES NO
HISHIDAMA                      EMP_ACCESS                     NO  YES NO
HISHIDAMA                      RESOURCE                       NO  YES NO
SQL> select * from dba_role_privs where grantee='HISHIDAMA';

GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
HISHIDAMA                      CONNECT                        NO  YES
HISHIDAMA                      RESOURCE                       NO  YES
HISHIDAMA                      EMP_ACCESS                     NO  YES

ユーザーに付与されているロールと、その具体的な権限(システム権限のみ) [/2007-09-25]

SQL> select * from ROLE_SYS_PRIVS;

ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
CONNECT                        CREATE VIEW                              NO
CONNECT                        CREATE TABLE                             NO
CONNECT                        ALTER SESSION                            NO
CONNECT                        CREATE CLUSTER                           NO
CONNECT                        CREATE SESSION                           NO
CONNECT                        CREATE SYNONYM                           NO
CONNECT                        CREATE SEQUENCE                          NO
CONNECT                        CREATE DATABASE LINK                     NO
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE TABLE                             NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE INDEXTYPE                         NO
RESOURCE                       CREATE PROCEDURE                         NO

16行が選択されました。

ユーザーに付与されているシステム権限 [2007-09-25]

SQL> select * from SESSION_PRIVS;

PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
EXECUTE ANY PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

15行が選択されました。

個別に設定されているオブジェクト権限(テーブルアクセスやプロシージャ実行等)[2007-09-25]

SQL> select table_name,privilege,owner from USER_TAB_PRIVS_RECD;

TABLE_NAME                     PRIVILEGE                                OWNER
------------------------------ ---------------------------------------- ----------------------------
DEPT                           SELECT                                   SCOTT

ロールによって個別に設定されているオブジェクト権限 [2007-09-22/2007-09-25]
プロシージャの実行権限でも、プロシージャ名がTABLE_NAMEの項に表示される。

SQL> select table_name,privilege,role from ROLE_TAB_PRIVS;

TABLE_NAME                     PRIVILEGE                                ROLE
------------------------------ ---------------------------------------- ----------------------------
EMP                            DELETE                                   EMP_ACCESS
EMP                            INSERT                                   EMP_ACCESS
EMP                            SELECT                                   EMP_ACCESS
EMP                            UPDATE                                   EMP_ACCESS
TEST_F                         EXECUTE                                  EMP_ACCESS

自分のオブジェクトに誰がアクセスできるか(オブジェクト権限)[2007-09-25]

SQL> select table_name,privilege,grantee from USER_TAB_PRIVS_MADE;
TABLE_NAME                     PRIVILEGE                                GRANTEE
------------------------------ ---------------------------------------- ----------------------------
DEPT                           SELECT                                   HISHIDAMA
EMP                            DELETE                                   EMP_ACCESS
EMP                            INSERT                                   EMP_ACCESS
EMP                            SELECT                                   EMP_ACCESS
EMP                            UPDATE                                   EMP_ACCESS
TEST_F                         EXECUTE                                  EMP_ACCESS
TEST_P                         EXECUTE                                  HISHIDAMA

7行が選択されました。

権限

sysdba(例えばsysユーザー)で参照する。

ロールの一覧

SQL> select * from dba_roles;

ROLE                           PASSWORD
------------------------------ --------
CONNECT                        NO
RESOURCE                       NO
DBA                            NO
		〜
SALES_HISTORY_ROLE             NO

30行が選択されました。

ユーザーに付与されている権限


Oracle目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま