C/C++教程

39.Oracle之数据字典

本文主要是介绍39.Oracle之数据字典,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.数据字典的概述

  数据字典(Data Dictionary)是Oracle数据库的一个重要组成部分,是元数据(metadata)的存储地点,Oracle的RDBMS使用数据字典记录和管理对象信息和安全信息等,用户和数据库系统管理员通过数据字典来获取数据库相关信息。

  数据字典主要包括以下内容:

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

  数据字典通常是只读的,一般有4个部分组成:内部RDBMS(X$)表、数据字典表、动态性能(V$)视图和数据字典视图。

2.内部RDBMS(X$)表

  X$表是Oracle数据库的核心部分,这些表用于跟踪内部数据库信息,维持数据库的正常运行,X$表是加密命令的,不对外进行说明,Oracle通过这些X$建立起其他大量视图提供用户查询管理数据库之用。

  X$表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建,这部分表对数据库来说至关重要,所以oracle不允许sysdba之外的用户直接访问。  

SYS@orcl> select kvittag,kvitval,kvitdsc from x$kvit;

KVITTAG                 KVITVAL KVITDSC
-------------------- ---------- ------------------------------------------------------------
ksbcpurawthrcnt               4 number of raw CPU threads in the system used by Oracle
ksbcpueffthrcnt               4 number of effective CPU threads in the system used by Oracle
ksbcpucore                    4 number of physical CPU cores in the system used by Oracle
ksbcpusocket                  4 number of physical CPU sockets in the system used by Oracle
ksbcpu_hwm                    4 high water mark of number of CPUs used by Oracle
ksbcpucore_hwm                4 high water mark of number of CPU cores on system
ksbcpusocket_hwm              4 high water mark of number of CPU sockets on system
ksbcpu_actual                 4 number of available CPUs in the system
ksbcpu_dr                     1 CPU dynamic reconfiguration supported
kcbnbh                   143737 number of buffers
kcbldq                       25 large dirty queue if kcbclw reaches this
kcbfsp                       40 Max percentage of LRU list foreground can scan for free
kcbcln                        2 Initial percentage of LRU list to keep clean
kcbnbf                     1200 number buffer objects
kcbwst                        0 Flag that indicates recovery or db suspension
kcteln                        0 Error Log Number for thread open
kcvgcw                        0 SGA: opcode for checkpoint cross-instance call
kcvgcw                        0 SGA:opcode for pq checkpoint cross-instance call

 触发后台DBWR写动作的条件包括这样两个

   (1) 脏缓冲(dirty Buffers)阈值(threshold)达到。

   那么这个threshold是多少呢?从以上视图中可以知道,这个值是25%,

    kcbldq    25 large dirty queue if kcbclw reaches this

 (2) No free Buffer 也就是当进程扫描LRU一定数量的Block之后,如果还找不到足够的free空间,则触发DBWR执行写出(刷盘)

    那么这个扫描数量是多少呢?从以上视图中,可以知道,这个比例是40%

   kcbfsp    40 Max percentage of LRU list foreground can scan for free

 

3.数据字典表

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

  sql.bsq是非常重要的一个文件,其中包含了数据字典表的定义以及注释说明,每个试图深入学习Oracle数据库的用户都应该仔细阅读一下该文件。该文件位于$ORACLE_HOME/rdbms/admin目录下。

4.静态数字字典视图

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

  静态数据字典视图的分类

  静态数据字典视图按照前缀的不同通常被分为3类:

  • USER_类视图包含了用户所拥有的相关对象,用户可以通过这个视图查询自己拥有的对象信息。
  • ALL_类视图包含了用户有权限访问的所有对象的信息
  • DBA_类视图包含了数据库所有相关对象的信息,用户需要select any table权限才能访问。

 在Oracle数据库中,每个用户与方案(schema)是对应的,Schema是用户所拥有的对象的集合,数据库通过s'chema将不同用户的对象隔离开来,用户可以自由访问自己Schema的对象,但是对于其他schema对象的访问则需要获取授权。

  这里做一个简要实例说明:user_tables视图是user类视图中的典型代表,这个视图中记录了当前用户所拥有的所有表的信息。  

TEST@orcl> select table_name,tablespace_name from user_tables; 

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T

  而对于ALL_TABLES视图,不仅包含用户所拥有的表,还包括用户用权限能够访问的表,这些表可能来自其他用户的授权。

TEST@orcl> select table_name,owner from all_tables where owner in ('TEST');

TABLE_NAME                     OWNER
------------------------------ ------------------------------
T                              TEST

  而DBA_TABLES则是一个超级集合,包含了数据库所有的表对象,查询这个视图需要DBA的权限或者select any table的系统权限。

TEST@orcl> select owner,count(*) from dba_tables group by owner order by 2;

OWNER                            COUNT(*)
------------------------------ ----------
TEST                                    1
OWBSYS                                  1
FLOWS_FILES                             1
OUTLN                                   3
APPQOSSYS                               4
SCOTT                                   4
ORDSYS                                  5
DBSNMP                                 20
XDB                                    32
WMSYS                                  44
EXFSYS                                 47
CTXSYS                                 50
ORDDATA                                73
OLAPSYS                               126
MDSYS                                 129
SYSTEM                                167
APEX_030200                           360
SYSMAN                                728
SYS                                  1000

19 rows selected.

5.动态性能视图

 

  动态性能(v$)视图记录了数据库运行时信息和统计数据,大部分动态性能视图被实时更新以反应数据库的当时状态

  Oracle通过动态性能视图将Oracle数据库的状态展示出来,提供给用户和数据库管理员,

  5.1 GV$和V$视图

  GV$视图的产生是为了满足OPS/RAC环境的需要,在RAC环境中,查询GV$视图返回所有实例信息,而每个v$视图是基于GV$视图,增加了INST_ID列的WHERE条件的限制。 

SYS@orcl> desc v$instance;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INSTANCE_NUMBER                                    NUMBER
 INSTANCE_NAME                                      VARCHAR2(16)
 HOST_NAME                                          VARCHAR2(64)
 VERSION                                            VARCHAR2(17)
 STARTUP_TIME                                       DATE
 STATUS                                             VARCHAR2(12)
 PARALLEL                                           VARCHAR2(3)
 THREAD#                                            NUMBER
 ARCHIVER                                           VARCHAR2(7)
 LOG_SWITCH_WAIT                                    VARCHAR2(15)
 LOGINS                                             VARCHAR2(10)
 SHUTDOWN_PENDING                                   VARCHAR2(3)
 DATABASE_STATUS                                    VARCHAR2(17)
 INSTANCE_ROLE                                      VARCHAR2(18)
 ACTIVE_STATE                                       VARCHAR2(9)
 BLOCKED                                            VARCHAR2(3)

SYS@orcl> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
---------------- ------------
orcl             OPEN

SYS@orcl> select instance_name,status,database_status from v$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
orcl             OPEN         ACTIVE

  5.2动态性能视图与数据库启动

   由于动态性能视图是在数据库启动过程中自动创建的,所以在数据库启动的不同阶段,用户能过访问的视图也各不相同。

  (1) 在nomount阶段

    当数据库启动nomount状态时,实际上仅仅启动了数据库实例,此时的实例信息主要来自于参数文件,因此和参数文件记录的相关信息可以查询,这一阶段可以获取的信息主要视图有:v$parameter、v$spparameter、v$sga、v$sgastat、v$bh、v$instance、v$option、v$version、v$process、v$session

  (2) 在mount阶段

    当数据库启动到mount状态时,控制文件被读取,和控制文件相关的视图此时可以进行查询,这一阶段可以获取信息主要有:v$thread、v$controlfile、v$database、v$datafile、v$logfile、v$datafile_header.

  (3)在open阶段

    当数据库open之后,所有的动态性能视图和数据字典都可以被查询。

这篇关于39.Oracle之数据字典的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!