Oracle相關資料字典檢視
問題描述:alert日誌發現報錯主鍵衝突
ORA-12012: 自動執行作業 24 出錯
ORA-00001: 違反唯一約束條件 (ADDEDTAXUSER.PK_PT_INOUTFLOW)
ORA-06512: 在 "DWETL.SP_ETL_CONTROL", line 519
ORA-06512: 在 line 7
透過報錯可以看出,是違反了ADDEDTAXUSER使用者下的PK_PT_INOUTFLOW主鍵,並且是在執行DWETL使用者下的SP_ETL_CONTROL東西的時候報錯的;
那麼接下來透過資料字典查出相關物件到底是什麼,以及他們的建立語句:
1.首先查詢出這個主鍵屬於哪個表?
SQL> select OWNER,CONSTRAINT_NAME,TABLE_NAME from dba_constraints where CONSTRAINT_NAME='PK_PT_INOUTFLOW';
OWNER CONSTRAINT_NAME TABLE_NAME
------------------------------------------------------------ ------------------------------ -----------------------------ADDEDTAXUSER PK_PT_INOUTFLOW PT_INOUTFLOW
2.查詢這個主鍵在哪個表的那個欄位上,可以透過dba_ind_columns 或者dba_cons_columns
SQL> select INDEX_OWNER,INDEX_NAME,TABLE_NAME,COLUMN_NAME from dba_ind_columns where INDEX_NAME='PK_PT_INOUTFLOW';
INDEX_OWNER INDEX_NAME COLUMN_NAME TABLE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
ADDEDTAXUSER PK_PT_INOUTFLOW PT_INOUTFLOW PK_INOUTFLOW
或者
SQL> select owner,CONSTRAINT_NAME,table_name,COLUMN_NAME from dba_cons_columns where CONSTRAINT_NAME='PK_PT_INOUTFLOW';
OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------ ------------------------------
ADDEDTAXUSER PK_PT_INOUTFLOW PT_INOUTFLOW PK_INOUTFLOW
3.然後檢視DWETL使用者下的SP_ETL_CONTROL 是個什麼東西?
可以看出是儲存過程,如下:
SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE from dba_objects where OBJECT_NAME='SP_ETL_CONTROL';
OWNER OBJECT_NAME OBJECT_TYPE
------------------------------ --------------------------------------------------------------------------------------------
DWETL SP_ETL_CONTROLPROCEDURE
4.檢視這個儲存過程的建立語句,藉助dbms_metadata程式包的get_ddl函式:
set line 200
set pagesize 0
set long 99999
select dbms_metadata.get_ddl('PROCEDURE','SP_ETL_CONTROL','DWETL') from dual;
至此查出了報錯的所有的資訊,可以給開發溝通了。。。。
透過這個問題,順便總結下,常用的查詢語句:
一:查詢物件的建立語句:
select dbms_metadata.get_ddl('TABLE','TABLE_NAME','TABLE_OWNER') from dual;
select dbms_metadata.get_ddl('INDEX','INDEX_NAME','INDEX_OWNER') from dual;
select dbms_metadata.get_ddl('VIEW','VIEW_NAME','VIEW_OWNER') from dual;
select dbms_metadata.get_ddl('PROCEDURE','PROCEDURE_name','PROCEDURE_owner') from dual;
select dbms_metadata.get_ddl('FUNCTION','FUNCTION_NAME','FUNCTION_OWNER') from dual;
二:查詢出資料庫中的有log欄位的資訊,透過DBA_TAB_COLUMNS和dba_lobs資料字典查詢:
SQL>select owner ,table_name ,COLUMN_NAME from dba_lobs where rownum<10;
SQL> select OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE from DBA_TAB_COLUMNS where DATA_TYPE like '%LOB%' and rownum<10;
SYS VIEWCON$ CON_TEXT CLOB
SYS ECOL$ BINARYDEFVAL BLOB
SYS JIREFRESHSQL$ SQLTEXT CLOB
四:以及一些常用的資料字典小結:
DBA_TABLES:描述資料庫中所有相關的表。
DBA_ALL_TABLES:描述資料庫中所有的物件以及相關的表。
USER_TABLES:描述資料庫中當前使用者擁有的相關的表。
USER_ALL_TABLES:描述資料庫中當前使用者擁有的物件以及相關的表。
ALL_TABLES:描述資料庫中所有的使用者可以訪問的相關的表。
ALL_ALL_TABLES:描述資料庫中所有的使用者可以訪問的物件以及相關的表。
DBA_TAB_COLUMNS:描述資料庫中所有表的列屬性。
USER_TAB_COLUMNS:描述資料庫中當前使用者擁有的表的列屬性。
ALL_TAB_COLUMNS:描述資料庫中所有使用者可以訪問的表的列屬性。
DBA_CONSTRAINTS:描述資料庫中所有表的約束和屬性。
DBA_CONS_COLUMNS:包含在DBA_CONSTRAINTS約束定義中的可訪問的列的資訊。
ALL_CONSTRAINTS:描述資料庫中所有使用者可以訪問的表的約束和屬性。
ALL_CONS_COLUMNS:包含在ALL_CONSTRAINTS約束定義的可訪問的列的資訊。
USER_CONSTRAINTS:描述資料庫中所有當前使用者擁有的表的約束的屬性。
USER_CONS_COLUMNS:包含在USER_CONSTRAINTS約束定義的可訪問的列的資訊。
DBA_SEQUENCES:資料庫中所有序列的描述。
ALL_SEQUENCES:描述資料庫中所有使用者可以訪問的序列的描述。
USER_SEQUENCES:描述資料庫中所有當前使用者擁有的序列的描述。
DBA_INDEXES:描述資料庫中所有的索引的屬性。
ALL_INDEXES:描述資料庫中所有使用者可以訪問的索引的屬性。
USER_INDEXES:描述資料庫中所有當前使用者擁有的索引的屬性。
最後介紹下:
1)ALL_TABLES、user_tables和dba_tables的區別?
dba_tables : 系統裡所有的表的資訊,需要DBA許可權才能查詢的檢視(資料字典檢視)
all_tables : 當前使用者有許可權的表的資訊(只要對某個表有任何許可權,即可在此檢視中看到表的相關資訊)
user_tables: 當前使用者名稱下的表的資訊
所以以上3個檢視中,user_tables的範圍最小,all_tables看到的東西稍多一些,而dba_tables看到最多的資訊;
2)資料字典檢視(dba_)和動態效能檢視(v$)的區別?
資料字典檢視反映了資料庫的資訊,如資料庫的物理結構和邏輯結構資訊,使用者和許可權資訊以及
資料庫物件的資訊,如表、檢視、索引、儲存程式、約束等,這些資訊不會隨著資料庫的執行而改變,除非人為操作,資料字典檢視中的資訊是靜態的,來自資料字典基表,它反映的是資料庫的資訊,這些資訊不會因為資料庫伺服器的關閉而消失。
而動態效能檢視則主要反映了例項的資訊,並且動態效能檢視中的資訊則是動態變化的,它反映了例項的實際執行情況,這些資訊來自SGA或者控制檔案,隨著例項的關閉和重新啟動,這些資訊將重新產生。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2156258/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM 相關的 檢視(V$) 和 資料字典(X$)OracleASM
- Oracle 資料字典和資料字典檢視Oracle
- oracle常用資料字典.檢視Oracle
- Oracle許可權(二)許可權相關的動態效能檢視與資料字典檢視Oracle
- 【檢視】oracle 資料字典檢視之 DICT / DICTIONARYOracle
- 【轉載】Oracle資料字典檢視Oracle
- oracle資料字典表與檢視Oracle
- Oracle 資料庫字典 檢視 基表Oracle資料庫
- 檢視資料字典
- 【檢視】oracle 資料字典檢視之 “小”檢視 CAT, TAB, SEQ, SYN ...Oracle
- 【ORACLE】物化檢視相關後設資料檢視欄位說明Oracle
- oracle Metrics相關檢視Oracle
- Oracle OCP(27):使用資料字典檢視管理物件Oracle物件
- Oracle 常用資料字典表、檢視的總結Oracle
- 【VIEW】Oracle資料字典檢視之DICT_COLUMNSViewOracle
- Oracle 常用資料字典檢視、表的總結Oracle
- 檢視oracle鎖相關資訊Oracle
- PL/SQL相關的資料字典SQL
- 2.12 資料庫資料字典檢視資料庫
- 19 Oracle Data Guard 相關檢視Oracle
- oracle許可權相關檢視Oracle
- 使用資料字典檢視管理物件物件
- 【ORACLE】常用物化檢視相關後設資料查詢語句Oracle
- oracle-一些檢視效能相關的檢視Oracle
- oracle 資料字典關係圖Oracle
- 系統表和資料字典檢視
- DBA常用的資料字典檢視(一)
- 常用的資料字典檢視和包
- 【檢視】oracle 資料字典檢視之 DBA_OBJECTS / ALL_OBJECTS / USER_OBJECTS(OBJ)OracleObject
- oracle 9i 查詢資料字典檢視慢案例分析Oracle
- 2.8.3 資料庫服務的資料字典檢視資料庫
- 通過連線檢視資料庫相關資訊資料庫
- 系統許可權相關資料字典
- oracle10g database vault 訪問Realms相關的資料字典OracleDatabase
- Oracle11gDATAGUARD相關檢視備忘Oracle
- oracle cluster叢集相關日誌檢視Oracle
- oracle privilege不得不說的11一個資料字典檢視Oracle
- oracle 11g 統計資訊 相關檢視Oracle