本篇内容主要讲解“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。