数据字典是数据库提供的“表”,是数据库中描述数据的数据,存储着数据库的信息(数据库中所有对象的名称和属性),可用于查看数据库的信息。创建或修改任何对象都会引起数据字典的更新,这样可反映那些更改。这些信息存储在由 Oracle DB 维护的基表中,不过,通过使用预定义视图(而不是直接读取表)可访问这些表。
数据库管理员也可以通过查询数据字典得知数据库的运行状态,以及数据分布、用户权限等各种系统信息。
一、Oracle的数据字典视图分类
Oracle的数据字典视图分为两类:静态数据字典视图(static data dictionary views),动态性能视图(dynamic performance views)。
静态数据字典视图的名称以DBA_、USER_、ALL_开头,分别表示整个数据库的系统信息、当前用户拥有的对象的信息、当前用户可以操作的对象的信息。静态数据字典视图的数据来源于system表空间。
动态数据字典视图不是真正的表,其中的数据一般依赖于实例运行和数据库的状态,一般记录数据库的当前活动,如内存使用情况、I/O状况,当前会话情况。在实例运行和数据库使用过程中,动态视图的内容不断更新。管理员在会话管理、备份操作和性能调优时必须要使用它们。v$视图的数据都来自于SGA内存区,或者说来源于x%基表。
动态性能视图和静态性能视图的对比
二、常用数据字典视图
三、常用信息查询
查询Oracle的所有数字字典的名称:
SQL>select table_name from dictionary;
查看数据字典包含哪些字段可以用:
desc 数据字典名
查询Oracle数据库初始化参数:
- 查询v$parameter
SQL>select name,value from v$parameter;
- 执行show parameter命令
#查询所有初始化参数
SQL>show parameter
#在show parameter后指定参数名称或部分名称,会把包含此字符串的所有参数列出
SQL>show parameter [指定参数名]
四、查询内存使用情况
使用show sga可以查看内存各个模块的粗略配置情况:
SQL> show sga
Total System Global Area 1670221824 bytes
Fixed Size 2176328 bytes
Variable Size 1174407864 bytes
Database Buffers 486539264 bytes
Redo Buffers 7098368 bytes
查询v$sgastat视图,可以得到更精细的shared_pool内存使用情况:
SQL>select * from v$sgastat;
另一种方式是使用v$memory_dynamic_components
SQL> col component for a40
SQL> col current_size for a40
SQL> select component,current_size from v$memory_dynamic_components;
COMPONENT CURRENT_SIZE
---------------------------------------- ------------
shared pool ##########
large pool ##########
java pool ##########
streams pool ##########
SGA Target ##########
DEFAULT buffer cache ##########
KEEP buffer cache ##########
RECYCLE buffer cache ##########
DEFAULT 2K buffer cache ##########
DEFAULT 4K buffer cache ##########
DEFAULT 8K buffer cache ##########
COMPONENT CURRENT_SIZE
---------------------------------------- ------------
DEFAULT 16K buffer cache ##########
DEFAULT 32K buffer cache ##########
Shared IO Pool ##########
PGA Target ##########
ASM Buffer Cache ##########
五、dual表
dual是数据字典中的一个特殊表,它只有一列DUMMY和一行数据,该行的列值是X。dual表常用在没有目标表的SELECT语句,用于计算表达式的值,并返回单个计算结果。
例如,下面一组SELECT语句中使用dual表,分别返回当前用户名、系统当前日期时间,以及一个算术表达式计算结果。
SELECT user FROM dual;
SELECT sysdate FROM dual;
SELECT (2017+8) FROM dual;