温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Oracle相关数据字典分析

发布时间:2021-11-11 15:23:33 来源:亿速云 阅读:413 作者:iii 栏目:关系型数据库

本篇内容主要讲解“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相关数据字典分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI