--==============================
--Oracle 数据字典和数据字典视图
--==============================
数据字典
是元数据的集合,从逻辑上和物理上描述了数据库及内容,存储于 SYSTEM 与 SYSAUX 表空间内的若干段。
SYS 用户拥有所有的数据字典表,数据字典基本一般以 $ 结尾,如 col$ , tab$ 等,这些数据字典存放在 system 表空间中。
数据字典的形成
在数据库创建阶段创建,在使用阶段维护和更新
无法通过 DML 操作来修改,只能通过相关的命令修改系统,来达到间接修改数据字典。
数据字典的特点
每个 Oracle 数据库的中枢
描述数据库和它的对象
包含只读的表和视图
存储在 SYSTEM 表空间中
拥有者是 SYS 用户
由 Oracle 服务器自己维护
用 SELECT 访问
数据字典内容 :
数据字典提供下列信息 :
逻辑和物理的数据库结构
对象的定义和空间分配
一致性限制
用户
角色
权限
审计
数据字典的主要用途:
Oracle 服务器用它查找下列信息:
用户
对象
存储结构
Oracle 服务器修改数据字典当 DDL 语句执行的时候 .
用户和管理员们利用它了解数据库的信息 .
基础表和数据字典视图:
数据字典包括两个部分 :
基础表
存储数据库的描述
CREATE DATABASE 命令创建( sql . bsq )
数据字典视图
用于简化基础表的信息
通过 PUBLIC 同义词访问
由脚本 catalog . sql 创建
数据字典基表中的数据很难看懂。因此,很少人直接访问这些基表。取而代之的是数据字典视图。
数据字典视图分为类,它们以前辍来区分,前辍分别为: USER 、 ALL 、 DBA
USER_ * 用户所拥有的对象信息
ALL_ * 用户能访问的对象信息
DBA_ * 整个数据库中的对象信息
创建数据字典视图:
建库后,运行以下脚本创建的
$ORACLE_HOME / rdbms / admin / catalog . sql 创建常用的数据字典和同义词
$ORACLE_HOME / rdbms / admin / catproc . sql 创建内建的存储过程、包等 pl / sql 对象
DBCA 建库时会自动运行这两个脚本,但如果手动建库的话,需手动运行。
常用的数据字典:
一般的概况 : TAB , DICTIONARY , DICT_COLUMNS
对象 : DBA_TABLES , DBA_INDEXES , DBA_TAB_COLUMNS , DBA_CONSTRAINTS --->user_ ,all_
空间分配 : DBA_SEGMENTS , DBA_EXTENTS
数据库结构 : DBA_TABLESPACES , DBA_DATA_FILES
动态性能视图 :
是将内存里的数据或控制文件里的数据以表的形式展现出来,它们实际都是虚拟表,并不是真正的表
只要数据库在运行,就会不断更新动态性能视图
一旦数据库关闭或崩溃,则动态性能视图里的数据就丢失,当数据库重新启动后,数据将会被更新
所有的动态性能视图名称都存放在 v$fixed_table 里。这些动态性能视图都是以 V_$ 开头,属主是 sys
oracle 为每个动态性能视图都创建了同义词,同义词将中间的 “_” 去掉了,形成以 v$ 开头
在同义词中查看 v$session
SQL > SELECT owner , synonym_name , table_owner , table_name , db_link
2 FROM dba_synonyms WHERE synonym_name = 'V$SESSION' ;
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
-------------------- -------------------- -------------------- -------------------- --------
PUBLIC V$SESSION SYS V_$SESSION
SQL > SET LONG 15000
SQL > SELECT text FROM dba_views WHERE view_name = 'V_$SESSION' ;
TEXT
--------------------------------------------------------------------------------
select "SADDR" , "SID" , "SERIAL#" , "AUDSID" , "PADDR" , "USER#" , "USERNAME" , "COMMAND" , "OW
NERID" , "TADDR" , "LOCKWAIT" , "STATUS" , "SERVER" , "SCHEMA#" , "SCHEMANAME" , "OSUSER" , "PRO
CESS" , "MACHINE" , "TERMINAL" , "PROGRAM" , "TYPE" , "SQL_ADDRESS" , "SQL_HASH_VALUE" , "SQL_
ID" , "SQL_CHILD_NUMBER" , "PREV_SQL_ADDR" , "PREV_HASH_VALUE" , "PREV_SQL_ID" , "PREV_CHI
LD_NUMBER" , "MODULE" , "MODULE_HASH" , "ACTION" , "ACTION_HASH" , "CLIENT_INFO" , "FIXED_TA
BLE_SEQUENCE" , "ROW_WAIT_OBJ#" , "ROW_WAIT_FILE#" , "ROW_WAIT_BLOCK#" , "ROW_WAIT_ROW#"
, "LOGON_TIME" , "LAST_CALL_ET" , "PDML_ENABLED" , "FAILOVER_TYPE" , "FAILOVER_METHOD" , "F
AILED_OVER" , "RESOURCE_CONSUMER_GROUP" , "PDML_STATUS" , "PDDL_STATUS" , "PQ_STATUS" , "C
URRENT_QUEUE_DURATION" , "CLIENT_IDENTIFIER" , "BLOCKING_SESSION_STATUS" , "BLOCKING_I
NSTANCE" , "BLOCKING_SESSION" , "SEQ#" , "EVENT#" , "EVENT" , "P1TEXT" , "P1" , "P1RAW" , "P2TEX
T" , "P2" , "P2RAW" , "P3TEXT" , "P3" , "P3RAW" , "WAIT_CLASS_ID" , "WAIT_CLASS#" , "WAIT_CLASS"
TEXT
--------------------------------------------------------------------------------
, "WAIT_TIME" , "SECONDS_IN_WAIT" , "STATE" , "SERVICE_NAME" , "SQL_TRACE" , "SQL_TRACE_WAI
TS" , "SQL_TRACE_BINDS" from v$session
SQL > SELECT view_definition FROM v$fixed_view_definition
2 WHERE view_name = 'V$SESSION' ;
VIEW_DEFINITION
---------------------------------------------------------------------------------
select SADDR , SID , SERIAL# , AUDSID , PADDR , USER# , USERNAME , COMMAND ,
OWNERID , TADDR , LOCKWAIT , STATUS , SERVER , SCHEMA# , SCHEMANAME , OSUSER ,
PROCESS , MACHINE , TERMINAL , PROGRAM , TYPE , SQL_ADDRESS , SQL_HASH_VALUE ,
SQL_ID , SQL_CHILD_NUMBER , PREV_SQL_ADDR , PREV_HASH_VALUE , PREV_SQL_ID ,
PREV_CHILD_NUMBER , MODULE , MODULE_HASH , ACTION , ACTION_HASH , CLIENT_INFO ,
FIXED_TABLE_SEQUENCE , ROW_WAIT_OBJ# , ROW_WAIT_FILE# , ROW_WAIT_BLOCK# ,
ROW_WAIT_ROW# , LOGON_TIME , LAST_CALL_ET , PDML_ENABLED , FAILOVER_TYPE ,
FAILOVER_METHOD , FAILED_OVER , RESOURCE_CONSUMER_GROUP , PDML_STATUS ,
PDDL_STATUS , PQ_STATUS , CURRENT_QUEUE_DURATION , CLIENT_IDENTIFIER ,
BLOCKING_SESSION_STATUS , BLOCKING_INSTANCE , BLOCKING_SESSION , SEQ# ,
EVENT# , EVENT , P1TEXT , P1 , P1RAW , P2TEXT , P2 , P2RAW , P3TEXT , P3 , P3RAW ,
WAIT_CLASS_ID , WAIT_CLASS# , WAIT_CLASS , WAIT_TIME , SECONDS_IN_WAIT ,
STATE , SERVICE_NAME , SQL_TRACE , SQL_TRACE_WAITS , SQL_TRACE_BINDS
from GV$SESSION
where inst_id = USERENV ( 'Instance' )
常用的数据字典视图、动态性能视图:
dba_objects
dba_tables
dba_users
dba_tablespaces
V$CONTROLFILE 控制文件信息
V$DATABASE 数据库信息
V$DATAFILE 数据文件信息
V$INSTANCE 实例信息
V$PARAMETER 参数信息
V$SESSION 会话信息
V$SGA SGA 信息
V$SGAINFO SGA 信息
V$TABLESPACE 表空间信息
V$THREAD
V$VERSION
V$option
v$parameter 显示的是 session 级的参数,也就是当前 session 的参数信息。
如果没有使用 alter session 单独设置当前 session 的参数值,那么默认和 system 级的参数应该是一样的。
v$system_parameter 显示的是 system 级的参数,保存的是使用 alter system 修改的值( scope = both 或者 scope = memory )。
上面两个都是当前已经生效的参数值。对于使用 spfile 的库,也可以暂时只修改 spfile 中的
值。 v$spparameter 显示的就是保存在 spfile 中的参数值( scope = spfile )。
五、更多
SQL 基础 --> ROLLUP 与 CUBE 运算符实现数据汇总
SQL 基础 --> 层次化查询 (START BY ... CONNECT BY PRIOR)