首页 > 代码库 > 【oracle11g,8】数据字典 和字符集

【oracle11g,8】数据字典 和字符集

一.数据字典:
oracle的数据字典记录了数据库管理的元数据,他对于数据库来说是生死攸关的核心档案。
1.数据字典放在system表空间,用户是sys。
2.描述数据库和对象的定义,
3..数据字典是只读的。
4.是server维护的,只能查询。
5.大部分由catalog.sql创建的。

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


二. 数据字典组成:

1. 内部 RDBMS(X$)表 

X$表是 Oracle 数据库的核心部分,这些表用于跟踪内部数据库信息,维持数据库的正常运行。X$表是加密命名的,而且 Oracle 不作文档说明,这部分知识是 Oracle 公司的技术机密,Oracle 通过这些 X$建立起其他大量视图?供用户查询管理数据库之用。但是由于 X$表记录了大量有用的信息,所以也不停的被全球 DBA 不懈的探索着,最为人所熟知的有:X$BH,X$KSMSP 等。

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


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

①.静态数据字典视图按照前缀的不同通常被分为三类: 
a.USER_  类视图包含了用户所拥有的相关对象信息,用户可以通过这个视图查询自己拥有的对象信息。 
b.ALL_  类视图包含了用户有权限访问的所有对象的信息。 
c.DBA_  类视图包含了数据库所有相关对象的信息,用户需要 SELECT ANY TABLE 权限才能访问。 

②.常用数据字典视图举例 
a.DICT / DICTIONARY 
为了方便检索, Oracle ?供一个名为字典(DICTIONARY)的 视 图 ,基 于 这 个 视 图 , Oracle又创建了两个名为 DICT 和 DICTIONARY 的同义词:

b.  DICT_COLUMNS 
同 DICT 类似,DICT_COLUMNS 视图记录了字典视图列(COLUMN)及其相关说明:


c.  OBJ$/DBA_OBJECTS/OBJ 
OBJ$是一个底层的字典表,其中记录了数据库中所有对象的信息,DBA_OBJECTS 视图基于 OBJ$建立,一脉相承的,ALL_OBJECTS 和 USER_OBJECTS 视图也随之建立。

4.动态性能视图:

动态性能(V$)视图(Dynamic Performance View)记录了数据库运行时信息和统计数据,大部分动态性能视图被实时更新以反映数据库当前状态。 Oracle 通过动态性能视图将 Oracle 数据库的状态展示出来,提供给用户和数据库管理员,Oracle 对 V$视图给出了详细的文档说明供开发管理人员参考,是我们研究和管理数据库的主要依据。 

①.GV$和 V$视图 
在数据库启动时,Oracle 动态创建 X$表,在此基础之上,Oracle 创建了 GV$和 V$视图。  从 Oracle8 开始,GV$视图开始被引入,其含义为 Global V$。 除了一些特例以外,每个 V$视图都有一个对应的 GV$视图存在。 
 
GV$视图的产生是为了满足 OPS/RAC 环境的需要,在 OPS/RAC 环境中,查询 GV$视图返回所有实例信息,而每个 V$视图是基于 GV$视图,增加了 INST_ID 列的 WHERE 条件限制建立,只包含当前连接实例信息。
总结一下,Oracle 的 GV$视图和 V$视图是在数据库创建过程中建立起来的,内置于数据库中,Oracle 通过 v$fixed_view_definition 视图为我们展现这些定义。

②.GV_$,V_$视图和 V$,GV$同义词

在 GV$和 V$之后,Oracle 建立了 GV_$和 V_$视图,随后为这些视图建立了公用同义词。这些工作都是通过 catalog.sql 脚本(该脚本位于$ORACLE_HOME/rdbms/admin/目录下)实现的。 

从 catalog.sql 脚本中摘录一段: 
create or replace view v_$fixed_table as select * from v$fixed_table; 
create or replace public synonym v$fixed_table for v_$fixed_table; 
 
create or replace view gv_$fixed_table as select * from gv$fixed_table; 
create or replace public synonym gv$fixed_table for gv_$fixed_table; 

实际上通常大部分用户访问的 V$对象,并不是视图,而是指向 V_$视图的同义词;而 V_$视图是基于真正的 V$视图(这个视图是基于 X$表建立的)创建的。 

5.动态性能视图与数据库启动
由于动态性能视图是在数据库启动过程中自动创建的,所以在数据库启动的不同阶段,我们能够访问的视图也各不相同。
①. 在 Nomount 阶段 
当数据库启动到 nomount 状态时,实际上仅仅启动了数据库实例,此时的实例信息主要来自参数文件,因此和参数文件记录的相关信息可以查询,以下是这一阶段可以获
取信息的主要视图: 
V$PARAMETER、V$SPPARAMETER 
V$SGA、V$SGASTAT、V$BH、V$INSTANCE 
V$OPTION、V$VERSION 
V$PROCESS、V$SESSION 
. 在 Mount 阶段 
当数据库启动到 Mount 状态时,控制文件被读取,和控制文件相关的视图此时可以进行查询,以下是这一阶段可以获取信息的主要视图: 
V$THREAD、V$CONTROLFILE、V$DATABASE、 
V$DATAFILE、V$LOGFILE、V$DATAFILE_HEADER 

③. 在 Open 阶段 
当数据库 Open 之后,所有的动态性能视图和数据字典都可以被查询。 




二.数据字典里的同义词:

SQL> select file#,name from v$datafile; (同义词)
     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf
         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf
         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf
         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf

SQL> select file#,name from v_$datafile;

     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/prod/disk3/system01.dbf
         2 /u01/app/oracle/oradata/prod/disk3/sysaux01.dbf
         3 /u01/app/oracle/oradata/prod/disk3/undotbs01.dbf
         4 /u01/app/oracle/oradata/prod/disk3/users01.dbf


三.模糊查询视图名称
select * from dictionary where table_name like ‘DBA‘;


四.数据字典的视图:(重点)

数据字典视图的分类,静态(static)和动态(dynamic) 

1.动态视图
大部分在mount下就可以访问,反映数据库实时的状态
大部分v$开头,多用单数,从控制文件和内存汇总读出。
从v$fixed_table 这个视图查到所有的动态视图的名称。
用于调优和数据库监控。
v$_单数   单实例的动态视图。
Gv$_单数  rac环境的动态视图


SQL> select count(*) from v$fixed_table;

  COUNT(*)
----------
      1396

常用静态视图:
select name from v$tablespace;
select file#,name from v$datafiles;
select * from v$log;
select * from v$logfile;
select name from v$archived_log;



2.静态视图
在数据库的open状态下访问,用于了解数据库的物理结构信息。
大部分以dba、all、user开头,并用复数形式
user_:存储当前用户所拥有的对象的相关信息
all_:存储当前用户能够访问的对象
dba_:存储所有用户对象的信息(默认只能有sys/system用户访问)

例: 
查看区信息
select segment_name ,segment_type,tablespace_name, bytes/1024 k,extents,blocks from dba_segments;
#查看数据文件
SQL> select file_id,file_name,tablespace_name,bytes/1024/1024 m from dba_data_files;




五.字符集:














【oracle11g,8】数据字典 和字符集