【Oracle】数据字典初步理解

数据字典(Data Dictionary)是 Oracle 数据库的一个重要组成部分, 是元数据(Metadata)的存储地点。

数据字典包括以下内容:
u 所有数据库 Schema 对象的定义(表、视图、索引、聚簇、同义词、序列、过程、
函数、包、触发器等等)
u 数据库的空间分配和使用情况
u 字段的缺省值
u 完整性约束信息
u Oracle 用户名称、角色、权限等信息
u 审计信息
u 其他数据库信息

一、概念

1、组成部分

通常所说的数据字典由四部分组成:
1、内部 RDBMS(X$)表
2、数据字典表
3、动态性能(V$)视图
4、数据字典视图

2、详解

(1)、内部 RDBMS(X$)表

X$表的本质上是一系列的 C 结构体, 是 Oracle 数据库的运行基础,在数据库启动时由Oracle 应用程序动态创建

(2)、数据字典表

数据字典表(Data dictionary table) 用以存储表、索引、约束以及其他数据库结构的信息
这些对象通常以“$”结尾(例如 TAB$、 OBJ$、 TS$等),在创建数据库的时候通过运行 sql.bsq脚本来创建

(3)、动态性能(V$)视图

动态性能(V$)视图(Dynamic Performance View) 记录了数据库运行时信息和统计数据,
大部分动态性能视图被实时更新以反映数据库当前状态。

(4)、数据字典视图

静态数据字典视图:
由于 X$表和数据字典表通常不能直接访问, Oracle 创建了静态数据字典视图来供用户
对于数据字典信息的访问,由于这些信息通常相对稳定、不能直接修改,所以又被称为静态数
据 字 典 视 图 。 数 据 字 典 视 图 在 创 建 数 据 库 时 由 catalog.sql 脚 本 ( 该 脚 本 位 于
$ORACLE_HOME/rdbms/admin/目录下)创建。

常用数据字典视图举例

  1. DICT / DICTIONARY
  2. DICT_COLUMNS
  3. OBJ$/DBA_OBJECTS/OBJ
  4. *_SOURCE 视图

二、查询

(1)内部表

查看所有的基表
V$FIXED_TABLE

–查看基表的SQL创建语句
V$FIXED_VIEW_DEFINITION
eg :

SELECT view_definition FROM v$fixed_view_definition  WHERE view_name='GV$SQL';

—或可通过set autotrace on 执行计划看到此数据字典表相关的基表。

(2)普通表

查看普通表、视图、过程、触发器等的SQL创建语句:
DBMS_METADATA.GET_DDL

eg:

set long 900000
select dbms_metadata.get_ddl('TABLE','TABLE1','SCOTT') from dual;

三、收集统计信息

1、收集数据字典的统计信息

DBMS_STATS Procedures for Gathering Optimizer Statistics:
在这里插入图片描述

Gathering Statistics for Fixed Objects
Fixed objects are dynamic performance tables and their indexes. These objects record current database activity.
Unlike other database tables, the database does not automatically use dynamic statistics for SQL statement referencing X$ tables when optimizer statistics are missing. Instead, the optimizer uses predefined default values. These defaults may not be representative and could potentially lead to a suboptimal execution plan. Thus, it is important to keep fixed object statistics current.
Oracle Database automatically gathers fixed object statistics as part of automated statistics gathering if they have not been previously collected. You can also manually collect statistics on fixed objects by calling DBMS_STATS.GATHER_FIXED_OBJECTS_STATS. Oracle recommends that you gather statistics when the database has representative activity.

总结:
----Gathers statistics of fixed objects

exec DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

—Gathers statistics for dictionary schemas ‘SYS’, ‘SYSTEM’ and schemas of RDBMS components

exec DBMS_STATS.GATHER_DICTIONARY_STATS;

----收集其它内部表,如:

exec dbms_stats.gather_table_stats('SYS','X$KSUSE');
exec dbms_stats.gather_table_stats('SYS','X$KSQRS');

又如:

EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','X$KCCBP');
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','X$KCCBS');
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','X$KCCRSR');
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','X$KSFQP');
EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS','X$KRBMRST');

2、收集普通表的统计信息

EXEC DBMS_STATS.GATHER_TABLE_STATS('USERNAME','TABLE_NAME');

============================================================
引自:
参考盖总的《深入浅出Oracle》第四章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值