初识Oracle数据字典

以下讲解内容来源于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.

你可能感兴趣的:(Oracle基础)