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 OCP(27):使用資料字典檢視管理物件Oracle物件
- 19 Oracle Data Guard 相關檢視Oracle
- 2.12 資料庫資料字典檢視資料庫
- 系統表和資料字典檢視
- 2.8.3 資料庫服務的資料字典檢視資料庫
- Linux下使用ps命令來檢視oracle資料庫相關程式的操作步驟LinuxOracle資料庫
- 【AWR】Oracle awr相關檢視及體系介紹Oracle
- Linux檢視相關係統資訊Linux
- [20230214]資料庫連線訪問asm相關檢視.txt資料庫ASM
- 檢視mysql資料庫連線數、併發數相關資訊MySql資料庫
- oracle資料庫資料字典應用Oracle資料庫
- 字典及相關操作
- Linux根據程式號,檢視相關資訊Linux
- 檢視oracle資料庫真實大小Oracle資料庫
- 檢視織夢CMS原始碼中的資料庫相關檔案原始碼資料庫
- 【手摸手玩轉 OceanBase 167】資料備份相關檢視介紹
- [20230216]資料庫連線訪問asm相關檢視2.txt資料庫ASM
- MySQL 8.0 20個 InnoDB 及資料字典相關的新特性MySql
- 檢視錶和索引碎片情況相關資訊索引
- 什麼是Oracle的資料字典?Oracle
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- ORACLE資料庫檢視ACQ(ACTIVE CHECKPOINT QUEUE)資訊Oracle資料庫
- DBA_HIST相關檢視說明
- 2.4.12 Step 11: 執行指令碼來構建資料字典檢視指令碼
- python的字典及相關操作Python
- 連線到資料庫,你可以檢視織夢CMS的相關表結構和資料資料庫
- 【手摸手玩轉 OceanBase 166】怎麼檢視資料備份相關引數?
- Linux檔案內容檢視相關命令Linux
- Oracle相關命令Oracle
- 探索資料字典,提高自學習Oracle能力Oracle
- 達夢資料庫建立檢視&MyBatis表能不能關聯檢視資料庫MyBatis
- Oracle BLOB型別的資料如何檢視和下載?Oracle型別
- oracle資料庫檢視鎖表的sql語句整理Oracle資料庫SQL
- 如何尋找Oracle相關的資源?Oracle
- 【SCRIPT】Oracle統計資訊相關SQLOracleSQL
- 關於Oracle dba_free_space 檢視的研究Oracle
- 資料庫檢視資料庫