Oracleオブジェクト情報照会(ディクショナリ情報)

本文介绍了Oracle数据库中如何查询对象信息,包括静态数据字典视图、动态性能视图,以及用户、权限和对象定义的相关操作。通过user_*, all_*, v$*等视图获取对象定义和用户权限,同时探讨了查看和管理用户角色的方法。" 90446711,8438563,IDEA中MyBatis逆向工程配置与问题解决,"['MyBatis', 'IDEA', 'Maven', '数据库', 'Java开发']

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

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

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

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

参照: OTNの静的データ・ディクショナリ・ビュー … Oracle10.2 (2008-01-27)

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

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

v$なんちゃら。

オブジェクト名内容項目関連更新日
v$versionバージョン情報(→ define2007-12-11
v$option使用可能なオプションPARAMETERオプション名パーティション
ビットマップ索引
索引の結合
2009-12-24
VALUE使用可否
v$parameterパラメーター show parameters2009-01-06
v$nls_parametersセッションパラメータ nls_session_parameters2006-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実行されたSQLSQL_TEXTSQL文の先頭1000文字 2008-11-15
ADDRESSSQLを表す値
SQL_IDSQLを表す値(Oracle10以降)
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','プロシージャ名','オーナー名')
JavaDBMS_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行が選択されました。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值