以下讲解内容来源于oracle dba官方ppt
1.什么是数据字典?
数据字典是记录、验证和提供有关当前数据库信息的一些只读表和视图的集合。
在数据库创建期间,oracle服务器在数据文件中创建另外的对象结构:
1)数据字典表(静态数据字典)
2)动态性能表(动态数据字典)
2.数据字典表分类:
1)基表
a.存储数据库的描述信息
b.使用CREATE DATABASE命令创建
2)数据字典视图
a.总结基表信息
b.数据库创建完毕后运行catalog.sql脚本创建
3.数据字典视图包含以下3中静态视图
1)user_* 该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
2)all_* 该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)
3)dba_* 该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)
4.数据字典都包含哪些个信息?
1)数据库逻辑和物理结构
2)对象定义和空间分配情况
3)实体约束
4)用户信息
5)角色信息
6)权限信息
7)审计信息
5.数据字典内容什么时间变化?
当一个DDL语句执行后,oracle服务器会更新相应数据字典内容。
6.动态性能表的来源?
内存和控制文件
7.常用数据字典介绍:
1)dba_users 记录当前数据库所有用户信息:
SQL> desc dba_users
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
2)user_tables 记录当前用户所属表信息
SQL> select table_name,tablespace_name,num_rows from user_tables;
TABLE_NAME TABLESPACE_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
DEPT USERS 4
EMP USERS 14
BONUS USERS 0
SALGRADE USERS 5
DSQL_TEST USERS 0
TEST USERS 0 △
已选择6行。
SQL> analyze table test compute statistics;
表已分析。
SQL> select table_name,tablespace_name,num_rows from user_tables;
TABLE_NAME TABLESPACE_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
DEPT USERS 4
EMP USERS 14
BONUS USERS 0
SALGRADE USERS 5
DSQL_TEST USERS 0
TEST USERS 3 △
已选择6行。
3)v$instance 记录当前实例信息
SQL> desc v$instance
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
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)
SQL> select instance_name, status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN
4)v$datafile 记录数据文件信息
SQL> desc v$datafile
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE# NUMBER
CREATION_CHANGE# NUMBER
CREATION_TIME DATE
TS# NUMBER
RFILE# NUMBER
STATUS VARCHAR2(7)
ENABLED VARCHAR2(10)
CHECKPOINT_CHANGE# NUMBER
CHECKPOINT_TIME DATE
UNRECOVERABLE_CHANGE# NUMBER
UNRECOVERABLE_TIME DATE
LAST_CHANGE# NUMBER
LAST_TIME DATE
OFFLINE_CHANGE# NUMBER
ONLINE_CHANGE# NUMBER
ONLINE_TIME DATE
BYTES NUMBER
BLOCKS NUMBER
CREATE_BYTES NUMBER
BLOCK_SIZE NUMBER
NAME VARCHAR2(513)
PLUGGED_IN NUMBER
BLOCK1_OFFSET NUMBER
AUX_NAME VARCHAR2(513)
FIRST_NONLOGGED_SCN NUMBER
FIRST_NONLOGGED_TIME DATE
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
E:\ORADATA\ORCL\SYSTEM01.DBF
E:\ORADATA\ORCL\UNDOTBS01.DBF
E:\ORADATA\ORCL\SYSAUX01.DBF
E:\ORADATA\ORCL\USERS01.DBF
E:\ORADATA\ORCL\EXAMPLE01.DBF
E:\ORADATA\NEANDS3.DBF
E:\ORADATA\LPORTAL4.DBF
E:\ORADATA\NEANDS.DBF
E:\ORADATA\NEANDS3_IDX.DBF
E:\ORADATA\NEALPORTAL4.DBF
E:\ORADATA\ULOG.DBF
5)v$sql 与v$sqlarea
实验:
首先以SYS用户登录,清空共享区
C:\Documents and Settings\Administrator>sqlplus sys/admin as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 7月 8 13:13:14 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> alter system flush shared_pool;
系统已更改。
然后以SCOTT用户登录执行一条查询语句:
C:\Documents and Settings\Administrator>sqlplus scott/tiger
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 7月 8 13:13:26 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select empno, ename,sal from emp where empno=7788;
EMPNO ENAME SAL
---------- ---------- ----------
7788 SCOTT 3000
接着切换到SYS窗口执行以下sql,得到刚才SCOOT用户执行的sql信息:
SQL> @e:\oracle\sql\qv$sqlarea.sql
输入 match 的值: select empno
原值 7: where sql_text like '&match%'
新值 7: where sql_text like 'select empno%'
SQL_TEXT EXECUTIONS HASH_VALUE LOADS INVALIDATIONS
-------------------------------------------------- ---------- ---------- ---------- -------------
select empno, ename,sal from emp where empno=7788 1 3534052456 1 0
△qv$sqlarea.sql内容如下:
col sql_text for a50
set linesize 120
select sql_text,
executions,
hash_value,
loads,
invalidations
from v$sqlarea
where sql_text like '&match%';
/
6)v$fixed_table 和 dictionary
dict 是dictionary的同义词
v$fixed_table记录所有动态性能视图
注:尽量不要对数据字典进行DML操作!
PLUS:
--查询该用户拥有哪些索引
select index_name from user_indexes;
--查询该用户拥有哪些视图
select view_name from user_views;
--查询该用户拥有哪些数据库对象,对象包括表、视图、存储过程、触发器、包、索引、序列、JAVA文件等。
select object_name from user_objects;
--主要描述当前用户的信息,主要包括当前用户名、帐户id、帐户状态、表空间名、创建时间等。
select * from user_users;
-----------------------------------------------------------------------------------------------------------
--user_/all_区别:
----all_列出来的信息是当前用户可以访问的对象而不是当前用户拥有的对象。
--查询某一用户下的所有表、过程、函数等信息。
select owner , object_name ,object_type from all_objects
-----------------------------------------------------------------------------------------------------------
--对于dba_开头的需要管理员权限,
--查询表空间的信息(当前用户必须拥有DBA角色)。
select * from dba_data_files
-----------------------------------------------------------------------------------------------------------
动态数据字典
Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。
Oracle中这些动态性能视图都是以v$开头的视图.
v$access
该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session对象)。
select * from v$access
v$session
该视图列出当前会话的详细信息。
v$active_instance
该视图主要描述当前数据库下的活动的实例的信息。依然可以使用select语句来观察该信息。
v$context
该视图列出当前会话的属性信息。比如命名空间、属性值等
made by indexman.