4.1 数据字典简介
数据字典存放数据库和数据库对象的信息,ORACLE依赖这些信息来管理和维ORACLE数据库,
ORACLE服务器在数据库创建时通过运行sql.bsq来自动生成这些基表.在任何数据库中基表永远是被最新创建的物件. ORACLE以简捷(最快)的方式操作数据字典的基表.所以基表中所存的数据就像天书一样,几乎没有什么人可以看懂,所以很少有人直接访问这些基表.取而代之的是是绝大多数用户包括数据库管理员(DBA)都是通过访问数据字典视图来得到数据库的相关信息.
数据字典视图是通过运行catalog.sql脚本档来产生的.$ORACLEHOME\rdbms\admin,如果用户是用图形接口创建数据库catalog.sql脚本档是自动运行的.
4.2 数据字典中所存的信息
* 数据库的逻辑结构和物理结构,如表空间和数据文件的信息
* 所有数据库对象定义的信息.这些对象包括:表、索引、视图、序列号、同义词、过程、函数、软件包和触发器等。
* 所有数据库对象的磁盘空间分配的信息,如对象所分配的磁盘空间和当前正在使用的磁盘空间.
* Oracle用户名.
* 每个用户所授予的权限和角色
* 完整性约束的信息
* 列的默认值
* 审计信息等
4.3 数据字典的操作和使用
通常只有ORACLE服务器可以修改数据字典中的数据。在ORACLE数据库运行期间,如果数据库的结构发生了变化,ORACLE服务器会及时地修改相应的数据字典以记录这种变化。
哪些SQL语句可以可以引起ORACLE服务器修改数据字典呢?
首先是DDL,如增加减少用户或者表空间。其次是DCL语句,如授予回收用户权限等。
另外,某些DML语句也会,如引起表的磁盘空间的扩展的insert或update.
NOTE:
1. 任何人都不能直接使用DML语句修改数据字典。
2. 以AUD$开头的表除外,这些表可以修改。
4.4 数据字典视图
数据字典视图分为3大类:
l USER_*:用户自己创建的对象的信息。
l ALL_*:用户自己创建的对象的信息再加上其他用户创建的对象但改用户有权限访问的信息。
l DBA_*:有关整个数据库中对象的信息。
l 这里的*可以为TABLE、INDEXES、OBJECTS等。
NOTE:ALL and DBA_* 多出一列OWNER.
SQL> desc user_objects;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> desc all_objects;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED NOT NULL DATE
LAST_DDL_TIME NOT NULL DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> desc dba_objects;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
所有数据字典视图都是静态视图。数据库发生变化,ORACLE服务器并不及时地刷新这些视图中的信息。只有当执行了Oracle的ANALYZE命令之后,这些视图才会被刷新。比较新的Oracle也可以通过运行DBMS_STATS软件包来刷新这些视图。
数据字典视图包括:
l 对象的属主
l 用户所拥有的权限
l 对象的创建时间
l 对象存储参数的设置
l 对象存储空间的使用情况等
4.6 如何使用数据字典视图
查看自己帐号下面有哪些Table:
SQL> select table_name from user_tables;
想知道哪些表可以用:
SQL> select table_name,owner from all_tables where owner not like '%SYS%';
一个用户可以用User_catalog看到他所有的表的名字和类型:
SQL> desc user_catalog;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------
TABLE_NAME NOT NULL VARCHAR2(30)
TABLE_TYPE VARCHAR2(11)
NOTE:user_catalog有一个别名叫做cat
SQL> select * from cat;
4.7 动态性能表(视图)/数据库调优工具
动态性能表是一组虚表,在数据库运行期间,这些虚表存在内存中。Oracle服务器将当前数据库的活动记录在这组虚表中。他的信息来自于内存和控制文件,实时反应了数据库运行的状态。利用动态性能表可以得到如下信息:
l 会话活动的信息
l 对象打开或关闭的信息
l 对象在线或离线的信息等
NOTE: 动态性能表不允许进行DML操作
SQL> select * from dictionary; /// v$fixed_table
4.9 什么是控制文件及引入的目的
控制文件是一个比较小的二进制文件,它记载了物理数据库的当前状态,每一个控制文件只属于一个数据库,一个数据库有不止一个控制文件,但内容是一致的。
4.10 控制文件中所存的内容
* 数据库名字
* 数据库标识
* 数据库创建时间戳
* 联机重做日志文件的名字和准确位置。
* 当前日志的序列号
* 校验点信息
* 日志的历史信息
* 归档日志文件的准确位置和状态
* 数据文件的名字和准确位置
* 表空间的信息
* 备份的准确位置和状态
4.11 从控制文件中获取信息的数据字典
* v$archived
* v$archived_log
* v$backup
* v$database
* v$datafile
* v$log
* v$logfile
* v$loghist
* v$tablespace
* v$tempfile
4.13 怎样查看控制文件的配置
控制文件中全部记录的相关信息:v$controlfile_record_section
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
DATABASE 316 1 1
CKPT PROGRESS 8180 11 0
REDO THREAD 256 8 1
REDO LOG 72 16 5
DATAFILE 428 100 10
FILENAME 524 2298 28
TABLESPACE 68 100 12
TEMPORARY FILENAME 56 100 3
RMAN CONFIGURATION 1108 50 0
LOG HISTORY 56 292 120
OFFLINE RANGE 200 163 1
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
ARCHIVED LOG 584 28 0
BACKUP SET 40 409 0
BACKUP PIECE 736 200 0
BACKUP DATAFILE 116 282 0
BACKUP REDOLOG 76 215 0
DATAFILE COPY 660 223 0
BACKUP CORRUPTION 44 371 0
COPY CORRUPTION 40 409 0
DELETED OBJECT 20 818 0
PROXY COPY 852 249 0
BACKUP SPFILE 36 454 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
DATABASE INCARNATION 56 292 2
FLASHBACK LOG 84 2048 0
RECOVERY DESTINATION 180 1 1
INSTANCE SPACE RESERVATION 28 1055 1
REMOVABLE RECOVERY FILES 32 1000 0
RMAN STATUS 116 141 0
THREAD INSTANCE NAME MAPPING 80 8 8
MTTR 100 8 1
DATAFILE HISTORY 568 57 0
STANDBY DATABASE MATRIX 400 10 10
GUARANTEED RESTORE POINT 212 2048 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
RESTORE POINT 212 2083 0
已选择34行。
查看控制文件的位置:
SQL> select value from v$parameter where name = 'control_files';
VALUE
D:\DISK3\CONTROL01.CTL, D:\DISK6\CONTROL02.CTL, D:\DISK9\CONTROL03.CTL
SQL> col name for a45
SQL> select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- --------------------------------------------- --- ---------- --------------
D:\DISK3\CONTROL01.CTL NO 16384 430
D:\DISK6\CONTROL02.CTL NO 16384 430
D:\DISK9\CONTROL03.CTL NO 16384 430
4.14 怎样添加和移动控制文件
具体步骤如下:
(1) 利用数据字典v$controlfile 来获取现有控制文件名字。
(2) 正常关闭Oracle数据库,如shutdown或shutdown immediate.
(3) 将新的控制文件名添加到参数文件的CONTROL_FILES参数中。
(4) 使用操作系统的复制命令将现控制文件复制到指定位置。
(5) 重新启动Oracle数据库
(6) 利用数据字典v$controlfile 来验证新的控制文件名字是否正确。
(7) 如果有误,重做上述操作,如果无误,删除无用的旧控制文件。
如果使用了服务器初始化参数文件(SPFILE),其步骤会略有不同,以下是一个已经安装的Oracle数据库中使用二进制初始化参数文件添加或移动控制文件的具体步骤:
(1) 利用数据字典v$controlfile 来获取现有控制文件名字。
(2) 修改SPFILE,使用alter system set control_file命令来改变控制文件的位置。
(3) 正常关闭数据库,如shutdown 或 shutdown immediate.
(4) 使用打操作系统的复制命令将现控制文件复制到指定位置。
(5) 重新启动Oracle数据库。
(6) 利用数据字典v$controlfile 来验证新的控制文件名字是否正确。
(7) 如果有误,重新上述操作,如果无误,删除无用的旧控制文件。
例 4 就是一个在第二步使用oracle 中的alter system set control_file 命令
SQL> alter system set control_files
2 'D:\Disk3\CONTROL01.CTL',
3 'D:\Disk6\CONTROL02.CTL',
4 'D:\Disk9\CONTROL03.CTL' scope=SPFILE;
提示:
如果您读过其他oracle数据库管理的书,可能会发现多数的这类书上只有4步,即没有本书的第(1),(6),(7)步,从理论上讲,如果您的操作系统100%的正确,这样做也是可以的(不过还会留下一些垃圾文件),但在管理生产数据库时,建议您还是使用本书的方法来操作,千万不要过分自信。