数据字典(Data Dictionary)是Oracle数据库的一个重要组成部分,是元数据(metadata)的存储地点,Oracle的RDBMS使用数据字典记录和管理对象信息和安全信息等,用户和数据库系统管理员通过数据字典来获取数据库相关信息。
数据字典主要包括以下内容:
数据字典通常是只读的,一般有4个部分组成:内部RDBMS(X$)表、数据字典表、动态性能(V$)视图和数据字典视图。
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
数据字典表(Data dictionary table)用以存储表,索引,约束以及其他数据库结构的信息。这些对象通常以“$”(例如TAB$、OBJ$、TS$等),在创建数据库的时候通过运行sql.bsq脚本来创建。
sql.bsq是非常重要的一个文件,其中包含了数据字典表的定义以及注释说明,每个试图深入学习Oracle数据库的用户都应该仔细阅读一下该文件。该文件位于$ORACLE_HOME/rdbms/admin目录下。
由于X$表和数据字典表通常是不能直接访问,Oracle创建了静态数据字典视图来提取用户对于数据字典信息的访问,由于这些信息通常是相对稳定,不能直接修改,所以又被称为静态数据字典视图,数据字典视图在创建数据库时有catalog.sql脚本(该脚本位于$ORACLE_HOME/rdbms/admin/目录下)创建。
静态数据字典视图的分类
静态数据字典视图按照前缀的不同通常被分为3类:
在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.
动态性能(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之后,所有的动态性能视图和数据字典都可以被查询。