--==============================
--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)