当前位置:文档之家› oracle11g数据字典

oracle11g数据字典

1.数据字典
数据字典,是很重要的数据库对象之一,它在数据库创建时由数据库服务器创建,记录了数据库创建的信息,各种对象的信息等。

1)基表:create database创建;基表的数据格式无法直接阅读;
2)数据字典视图:收集基表信息;数据字典视图对dba来说可阅读;数据字典视图通过catalog.sql创建。

2.数据字典包含的内容:
1)所有的模式(用户)对象的定义,这些对象包括表、视图、索引、族、同义词、序列、存储过程、函数、触发器等。
2)数据库的逻辑结构和物理结构,如数据文件和重做日志文件的信息等。
3)所有模式对象被分配多少存储空间,以及当前使用的空间。
4)默认列的值。
5)对象完整性约束信息。
6)用户信息。
7)用户或角色的特权信息。
8)审计信息,如哪个用户具有访问或者修改某些对象的权限。

3.使用和操作数据字典视图
数据字典视图由Oracle 数据库服务器自动创建并维护,也就是说只有Oracle 服务器可以修改数据字典中的数据,在数据库运行期间,数据库结构
或其他对象的变化信息会及时地记录在数据字典基表中,通过动态性能视图,具有权限的用户可以查看可读的数据字典基表中的信息。

举例:
1) 使用GRANT 语句对一个用户赋予一定的权限时,数据库服务器会记录用户权限的变化。
2)使用ALTER DATABASE移动了控制文件的存储目录,则在数据字典中也会记录下这个变化。
从两个例子可以看出,当使用SQL语句操纵使得某些数据库结构或对象发生变化时,这些都会引起数据库服务器修改数据字典信息。
对于访问数据字典信息需要一定的授权,不同的用户对数据字典的访问有一定的区别,有些只有DBA 用户具有可访问的权限,对于普通用户就无法
查看DBA用户查看的数据字典。

数据字典有3 个基本应用,即在什么场合需要使用数据字典。
Oracle 和普通用户都会使用数据字典,使用场合说明如下:
1)Oracle 数据库服务器用来寻找用户信息、模式对象信息(如表、索引、触发器等)和存储结构。
2)当使用DDL语句时,会触发Oracle 服务器修改数据字典。
3)普通用户或者DBA用户使用数据字典获得关于数据库的信息,如数据文件的存储位置、数据库实例名、参数文件中的参数值、控制文件的信息等。

数据字典是Oracle 数据库服务器创建和维护的,在数据库运行过程中,数据库服务器不断地更改数据字典,任何其他用户都没有修改数据字典的权利。
并且有些视图所有用户都可以访问,而有些数据字典视图只对DBA用户开放。

4.数据字典视图分类
1)DBA

_***: 该视图包含数据库中整个对象的信息,以DBA为前缀的视图只能由管理员查询,不要在这些视图上创建同义词。
2) ALL_***: 该视图包含某个用户所能看到的全部数据库信息,包括当前用户所拥有的模式对象和用户可以访问的其他公共对象,还有通过授权或
授予角色可以访问的模式对象。
3) USER_***:该视图包含当前用户访问的数据库对象信息,它反映了数据库中某个用户的全部情况,该类视图隐含了owner 信息,其全部内容为以
ALL为前缀的视图的子集。
***号表示数据库模式对象,如表TABLE、索引INDEX、视图VIEW 、对象OBJECTS 等。

数据字典视图:
1)静态数据字典视图
2)动态性能视图

5.使用数据字典视图
数据字典视图是静态视图,在数据库重新启动前,静态数据字典中的信息是不会变化的。
1) user_tables 视图,该视图可以查看当前用户所有拥有的表。

sqlplus /nolog
conn system/oracle(或conn sys/password as sysdba)
alter user scott identified by oracle;
alter user scott account unlock;

sqlplus scott/oracle;
SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
DEPT
EMP
BONUS
SALGRADE

SQL> desc dept
Name Null? Type
----------------------------------------- -------- ----------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
DEPTINFO VARCHAR2(255)

SQL> set wrap off
SQL> set linesize 120
SQL> select * from dept;

DEPTNO DNAME LOC DEPTINFO
---------- ----------------------- ------------------- --------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> alter table dept drop column deptinfo;
Table altered.

SQL> alter table dept add (deptinfo varchar2(100));
Table altered.

SQL> desc dept;
Name Null? Type
----------------------------------------------------------------- -------- --------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
DEPTINFO VARCHAR2(100)

SQL> alter table dept rename column deptinfo to deptxinxi;

Ta

ble altered.

SQL> desc dept;
Name Null? Type
----------------------------------------------------------------- -------- ---------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
DEPTXINXI VARCHAR2(100)

SQL> alter table dept rename to deptnew;
Table altered.

SQL> select table_name from user_tables;
TABLE_NAME
------------------------------------------------------------------------------------------
EMP
BONUS
SALGRADE
DEPTNEW

2) user_indexes数据字典视图,查看当前用户创建的索引,索引在某种程度上可以加快查询的速度.
SQL> select index_name from user_indexes;

INDEX_NAME
------------------------------------------------------------------------------------------
PK_DEPT
PK_EMP

3) user_views数据字典视图,查看当前用户拥有的视图.
SQL> conn nbtk/nbtk;
Connected.
SQL> select view_name from user_views;

VIEW_NAME
------------------------------------------------------------------------------------------
V_OLREALTIMETXNTB

4) user_catalog 视图,该视图包含当前用户的所有表的名字和类型。
SQL> conn scott/oracle;
SQL> select * from user_catalog;

TABLE_NAME TABLE_TYPE
------------------------------------------------------------------------------------------ -------------------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE

5) dba_users 视图,查看数据库系统上何时创建了多少个用户.
SQL> conn sys/oracle as sysdba;
Connected.
SQL> select username,created from dba_users;

USERNAME CREATED
------------------------------------------------------------------------------------------ ------------------
ENC 22-JAN-15
DIP 15-AUG-09
DBSNMP 15-AUG-09
SYSMAN 18-MAY-15
CTXSYS 15-AUG-09
FLOWS_FILES

15-AUG-09
MDSYS 15-AUG-09
WMSYS 15-AUG-09
ANONYMOUS 15-AUG-09
ORDSYS 15-AUG-09
EXFSYS 15-AUG-09
OWBSYS 15-AUG-09
OLAPSYS 15-AUG-09
MGMT_VIEW 18-MAY-15
SYS 15-AUG-09
SYSTEM 15-AUG-09
OUTLN 15-AUG-09
......
20 rows selectd.

6.动态性能视图及使用
动态性能视图只存在于运行的数据库中,它是一组虚表,通常也把这组表称为动态性能表(dynamic performance table)。

动态性能视图只有管理员用户可以查询,而其他普通用户不需要查询这些虚表中的信息。管理员可以在动态性能视图上创建视图,并将
访问权限授予其他用户。任何用户都无法修改或删除动态性能视图,所以有时这些动态性能视图也被称为固定视图(fixed view)。

SYS 用户拥有所有的动态性能视图,这些动态性能视图以v$为前缀,如v$controlfile 包含了控制文件存储目录和文件名信息,v$datafile
包含了数据库文件信息,v$fixed_table 视图包含了当前所有动态性能视图。

如果用户想知道当前运行的数据库中所有的动态性能视图,可以使用v$fixed_table 实现,不过一般该视图会输出大量的记录,不方便阅读,
最好使用spool 工具存储输出结果,再分析存储的输出信息。

查询和日志文件相关的信息:
SQL> set wrap off
SQL> set linesize 1000
SQL> select * from v$fixed_table where name like 'V$LOG%';
NAME OBJECT_ID TYPE TABLE_NUM
------------------------------------------------------------------------------------------ ---------- --------------- ----------
V$LOGFILE 4294950935 VIEW 65537
V$LOG 4294951049 VIEW 65537
V$LOGHIST

4294951051 VIEW 65537
V$LOG_HISTORY 4294951077 VIEW 65537
V$LOGMNR_CONTENTS 4294951541 VIEW 65537
V$LOGMNR_LOGS 4294951543 VIEW 65537
V$LOGMNR_DICTIONARY 4294951545 VIEW 65537
V$LOGMNR_PARAMETERS 4294951547 VIEW 65537
V$LOGMNR_LOGFILE 4294951643 VIEW 65537
V$LOGMNR_PROCESS 4294951646 VIEW 65537
V$LOGMNR_TRANSACTION 4294951649 VIEW 65537

NAME OBJECT_ID TYPE TABLE_NUM
------------------------------------------------------------------------------------------ ---------- --------------- ----------
V$LOGMNR_REGION 4294951633 VIEW 65537
V$LOGMNR_CALLBACK 4294951636 VIEW 65537
V$LOGMNR_SESSION 4294951640 VIEW 65537
V$LOGMNR_LATCH 4294952585 VIEW 65537
V$LOGMNR_DICTIONARY_LOAD 4294952588 VIEW 65537
V$LOGMNR_SYS_OBJECTS 4294952762 VIEW 65537
V$LOGMNR_SYS_DBA_SEGS 4294952764 VIEW 65537
V$LOGMNR_EXTENTS 4294952766 VIEW 65537
V$LOGMNR_DBA_OBJECTS 4294952768 VIEW 65537
V$LOGMNR_OBJECT_SEGMENTS 4294952770 VIEW 65537
V$LOGSTDBY 4294951711 VIEW 65537

NAME OBJECT_ID TYPE TABLE_NUM
--------------------------------------------------------------------

---------------------- ---------- --------------- ----------
V$LOGSTDBY_STATS 4294951714 VIEW 65537
V$LOGSTDBY_TRANSACTION 4294952181 VIEW 65537
V$LOGSTDBY_PROCESS 4294952179 VIEW 65537
V$LOGSTDBY_PROGRESS 4294952174 VIEW 65537
V$LOGSTDBY_STATE 4294952177 VIEW 65537
V$LOGMNR_STATS 4294951834 VIEW 65537

28 rows selected.

该例子查询出了所有和日志文件相关的动态性能视图,如果想了解日志文件的详细信息我们可以使用v$log 视图和v$logfile 视图。

查看日志组状态信息:
SQL> select group#,members,archived,status from v$log;

GROUP# MEMBERS ARCHIVED STATUS
-------- ---------- --------- ------------------------------------------------
1 1 NO CURRENT
2 1 NO INACTIVE
3 1 NO INACTIVE

查看重做日志文件信息:
SQL> desc v$logfile;
Name Null? Type
----------------------------------------------------------------------- -------- ------------------------------------------------
GROUP# NUMBER
STATUS VARCHAR2(7)
TYPE VARCHAR2(7)
MEMBER VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)

SQL> col member for a40
SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER IS_RECOVE
---------- --------------------- --------------------- ---------------------------------------- ---------
3 ONLINE /home/u01/oracle/oradata/jyt11g/redo03.l NO
2 ONLINE /home/u01/oracle/oradata/jyt11g/redo02.l NO
1 ONLINE /home/u01/oracle/oradata/jyt11g/redo01.l NO

为一个联合查询,查询当前正在使用的重做日志文件的信息:
SQL> select a.group#,a.archived,a.status,b.type,b.member from v$log a,v$logfile b where a.group# = b.group# and a.status = 'CURRENT';
GROUP# ARCHIVED STATUS TYPE

MEMBER
---------- --------- ------------------------------------------------ --------------------- --------------------------------------
1 NO CURRENT ONLINE /home/u01/oracle/oradata/jyt11g/redo01

从v$log 视图和v$logfile 视图的联合查询可以看出,当前数据库正在使用的日志文件组为group1,数据库运行在非归档模式,该日志组有一个日志成员
/home/u01/oracle/oradata/jyt11g/redo01


通过v$instance视图查看实例信息:
SQL> col instance_name for a20
SQL> col host_name for a15
SQL> select instance_name,host_name,version,startup_time,logins from v$instance;

INSTANCE_NAME HOST_NAME VERSION STARTUP_TIME LOGINS
-------------------- --------------- --------------------------------------------------- ------------------ ----------------------
jyt11g jytdbserver 11.2.0.1.0 15-DEC-15 ALLOWED

查看当前数据库信息:
SQL> col name for a10
SQL> select name,created,log_mode from v$database;

NAME CREATED LOG_MODE
---------- ------------------ ------------------------------------
JYT11G 22-JAN-15 NOARCHIVELOG

总之,动态性能视图很好地反映了当前数据库的运行状态信息,对于数据库性能调优和判断系统瓶颈提供信息支持,通过动态性能视图还可以查看控制文件
的信息,数据文件的信息和表空间信息等,DBA 用户经常使用的动态性能视图。

相关主题
文本预览
相关文档 最新文档