您好,登錄后才能下訂單哦!
本篇內容主要講解“Oracle相關數據字典分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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或者控制文件,隨著實例的關閉和重新啟動,這些信息將重新產生。
到此,相信大家對“Oracle相關數據字典分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。