oracle 数据库基本操作


1 oracle 数据库基本操作 更多 oracle 资料下载,请收藏以下网址: http://www.database8.com 编制时间 :2010 年 2 月 12 日/4 月 30 日 2 一、表空间操作................................................................................................................................ 4 1、文件系统: ............................................................................................................................. 4 2、裸卷: ..................................................................................................................................... 5 3.ASM 存储管理表空间操作...................................................................................................... 6 二、用户、角色、权限 .................................................................................................................... 6 1、用户创建、修改、删除 ......................................................................................................... 6 2、角色创建、修改、删除 ......................................................................................................... 9 3、权限增加和收回 ..................................................................................................................... 9 三、表操作........................................................................................................................................ 9 1、单表创建 ................................................................................................................................. 9 2、分区表创建 ............................................................................................................................11 3、分区操作 ............................................................................................................................... 15 4、表状态查询 ........................................................................................................................... 18 5、DDL 语句操作 ....................................................................................................................... 18 四、视图操作 .................................................................................................................................. 20 1、视图创建 ............................................................................................................................... 20 2、视图操作 ............................................................................................................................... 21 3、视图删除 ............................................................................................................................... 22 五、索引、约束操作 ...................................................................................................................... 22 1、单表索引 ............................................................................................................................... 22 2、分区表索引 ........................................................................................................................... 24 3、主键、约束和唯一索引 ....................................................................................................... 25 六、存储过程/job/函数/触发器操作.............................................................................................. 30 1、存储过程和函数 ................................................................................................................... 30 2、程序包 ................................................................................................................................... 40 3、操作练习 ............................................................................................................................... 52 4、触发器 ................................................................................................................................... 52 5、Job 创建和操作...................................................................................................................... 54 6、后台脚本 ............................................................................................................................... 58 七、同义词操作.............................................................................................................................. 59 1、创建同义词 ........................................................................................................................... 59 2、删除同义词 ........................................................................................................................... 59 八、dblink 操作.............................................................................................................................. 59 1、dblink 创建............................................................................................................................. 59 2、dblink 操作............................................................................................................................. 59 3、dblink 删除............................................................................................................................. 60 九、Sequences 操作 ....................................................................................................................... 60 1、Sequences 创建 .................................................................................................................... 60 2、Sequences 删除 ...................................................................................................................... 61 十、数据库操作必须掌握技巧 ...................................................................................................... 61 1、中断正在执行的 session 连接................................................................................................ 61 2、用户密码修改和用户账号加锁、解锁 ............................................................................... 62 3 3、核心参数修改,数据库启动(必须 sys 用户权限): ........................................................ 62 3、日志切换和初始化文件创建 ............................................................................................... 63 4、归档日志设臵 ....................................................................................................................... 65 5、创建参数文件 ....................................................................................................................... 66 6、控制文件备份和重建 ........................................................................................................... 67 7、操作小技巧 ........................................................................................................................... 68 8、ORACLE 10G RAC 信息查看 ....................................................................................... 122 9、审计开启 ............................................................................................................................. 130 10、TNS 密码设臵.................................................................................................................... 130 11、访问限制数据库主机 ....................................................................................................... 131 12、文本文件向表的转换 ....................................................................................................... 132 十一、oracle 锁管理 ...................................................................................................................... 133 1、ORACLE 锁模式 ................................................................................................................. 133 2、ORACLE 直接锁表方法 ..................................................................................................... 135 十二、数据备份和迁移 ................................................................................................................ 136 1、exp 和 imp 工具 ................................................................................................................. 136 2、直接通过 dblink 进行表的 insert ........................................................................................ 137 3、rman 备份........................................................................................................................... 139 4、直接文件 copy ..................................................................................................................... 167 十三、ORACLE 性能调优问题 .................................................................................................... 168 1、Oracle 优化细则 .................................................................................................................. 168 2、常见 oracle hint 方法 .......................................................................................................... 172 3、动态性能视图(V$).............................................................................................................. 175 4、问题查看 sql 语句 ................................................................................................................ 274 5、oracle 性能监控工具配臵 ................................................................................................... 277 附件 网厅内存使用情况 ......................................................................................................... 281 4 一、表空间操作 1、文件系统: 创建表空间: 数据表空: create tablespace tablespace_name logging datafile '/XXX/xxx/datafile_name1.ora' size 4095M; 临时表空间: create temporay tablespae tmp_tablespace_name tempfile '/XXX/xxx/datafile_name1.ora' size 4095M; 回滚表空间: create undo tablespace undotbs_tablespace datafile '/XXX/xxx/datafile_name1.ora' size 4095M; 增加表空间: 数据表空间: alter tablespace tablespace_name add datafile '/XXX/xxx/datafile_name1.ora' size 4095M; 临时表空间: alter tablespace temp_tablespace_name add tempfile '/XXX/xxx/datafile_name1.ora' size 4095M; 回滚表空间: alter tablespace undotbs_tablespace_name add datafile '/XXX/xxx/datafile_name1.ora' size 4095M; 删除表空间: 数据表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 临时表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 注意,应该先创建好临时表空间,并使之生效,然后才能再删除现有临时表空间 回滚段表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 注意,应该先创建好回滚段表空间,并使之生效,然后才能再删除现有回滚段表空间 表空间大小查看: select df.tablespace_name "tablespace_name", totalspace "totalspacem", freespace "freespacem", round((1 - freespace / totalspace) * 100, 2) "usedspace%" from (select tablespace_name, round(sum(bytes) / 1024 / 1024) totalspace from dba_data_files group by tablespace_name) df,(select tablespace_name, round(sum(bytes) / 1024 / 1024) freespace from dba_free_space group by tablespace_name) fs where df.tablespace_name = fs.tablespace_name order by 4 asc; 5 2、裸卷: 创建表空间: 数据表空间: create tablespace tablespace_name datafile '/dev/vgname/rlv_name1.dbf' size 4095M; 临时表空间: create tablespace temp tablespace_name datafile '/dev/vgname/rlv_name2.dbf' size 4095M; 回滚段表空间: create undo tablespace undotbs_tablespace_name datafile 'dev/vgname /rlv_name1.dbf' SIZE 4095M 增加表空间: 数据表空间: alter tablespace tablespace_name add datafile '/dev/vgname/rlv_name1.dbf' size 4095M; 临时表空间: alter tablespace tmp_tablespace_name add datafile '/dev/vgname/rlv_name1.dbf' size 4095M; 回滚段表空间: alter tablespace undotbs_tablespace_name add datafile '/dev/vgname/rlv_name1.dbf' size 4095M; 删除表空间: 数据表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 临时表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 注意,应该先创建好临时表空间,并使之生效,然后才能再删除现有临时表空间 回滚段表空间: drop tablespace tablespace_name; alter database datafile '/xxx/xxx/undotbs_datafile_name1.dbf' offline drop 注意,应该先创建好回滚段表空间,并使之生效,然后才能再删除现有回滚段表空间 表空间大小查看: select df.tablespace_name "tablespace_name", totalspace "totalspacem", freespace "freespacem",round((1 - freespace / totalspace) * 100, 2) "usedspace%" from (select tablespace_name, round(sum(bytes) / 1024 / 1024) totalspace from dba_data_files group by tablespace_name) df, (select tablespace_name, round(sum(bytes) / 1024 / 1024) freespace from dba_free_space group by tablespace_name) fs where df.tablespace_name = fs.tablespace_name order by 4 asc; 6 3.ASM 存储管理表空间操作 创建表空间 Create tablespace tablespace_name datafile ‗+ORA_DATA_group_name/xxx/datafile/datafile_name,ora‘ size xxxM autoextend on; 如下: create tablespace ora_data1 datafile '+ORA_DATA1/racdb/datafile/ora_data1.ora' size 2048M autoextend on; create tablespace ora_data1_ind datafile '+ORA_DATA1/racdb/datafile/ora_data1_ind.ora' size 2048M autoextend on; alter database datafile '+ora_data1/racdb/datafile/system.256.722174987' resize 512M 二、用户、角色、权限 1、用户创建、修改、删除 用户创建 create user username profile default identified by "user_passwd" default tablespace tablespace_name account unlock; 修改用户密码: alter user username identified by char_name; 修改用户使用状态 alter user username account unlock 用户赋权限: grant connect,resource,select any table,update any table,delete any table,insert any table,select any dictionary,create any procedure,execute any procedure,create any TRIGGER,create any view, unlimited tablespace, drop any view,create any sequence,select any sequence,drop any sequence,CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK,CREATE ANY synonym,DROP ANY synonym, CREATE PUBLIC synonym,DROP PUBLIC SYNONYM,SELECT_CATALOG_ROLE to &u; 给某一个用户赋予某张表的某种权限: grant privilege_name(select insert update) table_name to username; 例如: grant update ON TABLE_NAME TO username; grant delete ON TABLE_NAME TO username; 7 grant insert ON TABLE_NAME TO username; 用户权限回收: revoke role_name from username; alter user username default role all; 用户删除: Drop user username cascade (如果有数据,带 cascade 参数) 查看用户属性和状态: select * from dba_users; select * from dba_sys_privs select * from dba_tab_privs 权限名称: administer database trigger debug any procedure administer resource manager debug connect session alter any cluster delete any table alter any dimension dequeue any queue alter any evaluation context drop any cluster alter any index drop any context alter any indextype drop any dimension alter any library drop any directory alter any outline drop any evaluation context alter any procedure drop any index alter any role drop any indextype alter any rule drop any library alter any rule set drop any operator alter any sequence drop any outline alter any snapshot drop any procedure alter any table drop any role alter any trigger drop any rule alter any type drop any rule set alter database drop any sequence alter profile drop any snapshot alter resource cost drop any synonym alter rollback segment drop any table alter session drop any trigger alter system drop any type alter tablespace drop any view alter user drop profile analyze any drop public database link audit any drop public synonym audit system drop rollback segment backup any table drop tablespace 8 become user drop user comment any table enqueue any queue create any cluster execute any evaluation context create any context execute any indextype create any dimension execute any library create any directory execute any operator create any evaluation context execute any procedure create any index execute any rule create any indextype execute any rule set create any library execute any type create any operator exempt access policy create any outline flashback any table create any procedure force any transaction create any rule force transaction create any rule set global query rewrite create any sequence grant any object privilege create any snapshot grant any privilege create any synonym grant any role create any table insert any table create any trigger lock any table create any type manage any queue create any view manage tablespace create cluster on commit refresh create database link query rewrite create dimension restricted session create evaluation context resumable create indextype select any dictionary create library select any sequence create operator select any table create procedure under any table create profile under any type create public database link under any view create public synonym unlimited tablespace create role update any table create rollback segment create snapshot create rule create synonym create rule set create table create sequence create tablespace create session create trigger create user create type create view 9 2、角色创建、修改、删除 角色创建 create role role_name; 角色权限修改 grant privilege_name to role_name revoke privilege_name from role_name 角色删除 drop role role_name 系统角色: AQ_ADMINISTRATOR_ROLE IMP_FULL_DATABASE AQ_USER_ROLE JAVADEBUGPRIV AUTHENTICATEDUSER JAVAIDPRIV CONNECT JAVASYSPRIV CTXAPP JAVAUSERPRIV DBA JAVA_ADMIN DELETE_CATALOG_ROLE JAVA_DEPLOY EJBCLIENT LOGSTDBY_ADMINISTRATOR EXECUTE_CATALOG_ROLE OEM_MONITOR EXP_FULL_DATABASE RECOVERY_CATALOG_OWNER GATHER_SYSTEM_STATISTICS RESOURCE HS_ADMIN_ROLE SALES_HISTORY_ROLE WKUSER SELECT_CATALOG_ROLE WM_ADMIN_ROLE XDBADMIN 3、权限增加和收回 grant privilege_name to role_name (增加权限) revoke privilege_name from role_name (收回权限) 三、表操作 1、单表创建 直接创建 Create table table_name ( 10 字段 1 类型 1, 字段 2 类型 2, 、、、、、 字段 n 类型 n ) tablespace_name; 创建类似表 Create table table_name as select * from table_name1; 创建表结构: Create table table_name as select * from table_name 字段 1=字段 2; 表查询: Select * from table_name; Select * from table_name where 条件 Select 字段 1 别名 1,字段 2 别名 2,字段 n 别名 n from table_name 字段中可以进行代数运算,包括:+ - × ÷,count sun avge trunk round 等函数 表插入: Insert 字段 1,字段 2、、字段 n into table_name value (字段值 1,字段值 2、、字段值 n ); 循环插入: begin for i in 1..10 loop insert into table_name values (...); end loop; end; 表更新: Update table_name set 字段 1 where 条件 表删除: drop table table_name 表记录删除: delete table_name where 条件; truncate table table_name 清空表记录,保留表结构 表名修改: rename table_name1 to table_name2 注意:表名修改后,索引还在 表迁移,(从一个表空间迁移到另外一个表空间) alter table table_name move tablespace tablespace_name nologging parallele 4 ; 注意:将表从一个表空间迁移到另外一个表空间,必须进行索引重建,存储过程、触发器、其 他程序包都需要编译,以免执行报错。例如: 表压缩: 不同表空间: alter table table_name move tablespace tablespace_name compress; 相同表空间:alter table table_name move compress; 11 表统计信息收集 exec dbms_stats.gather_table_stats(ownname => 'username',tabname =>'table_name',degree =>10,cascade =>true,estimate_percent =>25); 例如: exec dbms_stats.gather_table_stats(ownname => 'test',tabname =>'data_table1_name1',degree =>4,cascade =>true,estimate_percent =>30); select a.row2_id, sum(nvl(b.item_value, 0)) from zk.name _201001 a, zk.table_name _201001 b where a.so_row1 = b.so_row1 and a.row_a in (1, 4, 5) and a.row2_id = XXXXXXX and book_row3_id in (NNNNNXXX1, NNNNNXXX2, NNNNNXXX3, NNNNNXXX4, NNNNNXXX5, NNNNNXXX6) group by a.row _id; 表语句执行很慢,检查执行计划,zk.table_name_201001 b 不引用索引,做表分析、重建索引都无 效,执行计划中均没有引用索引,最后强制使用索引效果明显,执行计划改变,索引引用。效果明 显 select /*+ index(b pk_table_name_201001)*/ a.serv_id, sum(nvl(b.item_value, 0)) from zk.name_201001 a, zk. table_name _201001 b where a. so_row1 = b.so_row1 and a.busi_code in (1, 4, 5) and a.row2_id = XXXXXXX and book_row3_id in (NNNNNXXX1, NNNNNXXX2, NNNNNXXX3, NNNNNXXX4, NNNNNXXX5, NNNNNXXX6) group by a.row2_id; 2、分区表创建 为了使大量的数据在读写操作和查询中速度更快,Oracle 提供了对表和索引进行分区的技术, 以改善大型应用系统的性能。使用分区的优点: A、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; B、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可; C、均衡 I/O:可以把不同的分区映射到磁盘以平衡 I/O,改善整个系统性能; D、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度 Oracle 数据库提供对表或索引的分区方法有三种: 1、范围分区 2、Hash 分区(散列分区) 3、列表分区 12 4、范围—散列分区 5、范围—列表分区 2.1、范围分区表 分区表表创建:一般都是按照时间来创建 create table table_name ( row1 char1 not null, row2 char2 not null, 、、、、、、 rown number not null ) partition by range (paration_row) ( partition partition_name1 values less than (to_date('value_name', 'yyyy-mm-dd', 'nls_calendar=gregorian')) tablespace tablespace_name1, partition partition_name2 values less than (to_date('value_name', 'yyyy-mm-dd', 'nls_calendar=gregorian')) tablespace tablespace_name2, 、、、、、、、、、、 partition partition_namen values less than (to_date('value_name', 'yyyy-mm-dd', 'nls_calendar=gregorian')) tablespace tablespace_namen, partition partmax values less than (maxvalue) tablespace ora_data pctfree 10 initrans 16 maxtrans 255 storage ( initial 64k minextents 1 maxextents unlimited )) 表插入: Insert into table_name1 as select * from table_name2 表分区删除: alter table 表名 truncate partition 分区名称 drop storage; 注意:分区删除以后,需要重新创建索引。 分区分割: alter table table_name split partition partmax at(to_date('values_name', 'yyyy-mm-dd')) into (partition prtition_namexx tablespace tablespace_name , partition partmax); 分区查询: 13 select * from table_name partition (partition_name); 2.2、hash 分区表(散列分区) Hash 分区表创建:hash 分区表的分区数量一般是 2 的 n 次幂,这样记录分布在各个分区上就 比较均匀,可以进行 I/O 的均衡。 create table table_name ( row1 char1 not null, row2 char2 not null, 、、、、、、 rown NUMBER not null ) partition by hash (paration_row) ( partition partition_name1 tablespace tablespace_name1, partition partition_name2 tablespace tablespace_name2, partition partition_name3 tablespace tablespace_name3 、、、、、、、、、、 partition partition_nameX tablespace tablespace_nameX ) 表插入: insert into table_name1 as select * from table_name2 分区查询: Select * From table_name Partition (partition_name); hash 分区表一般由于数据分布均衡性,查 询不是 通过对分区的操作进行的。update 、insert 操作同普通表。 2.3、列表分区表 散列分区表创建: create table table_name ( row1 char1 not null, row2 char2 not null, 、、、、、、 rown number not null ) partition by list (paration_row) ( partition partition_name1 tablespace_name1, partition partition_name2 tablespace_name2, values values (row_value1,row_value3,row_value8) (row_value4,row_value6,row_value7) tablespace tablespace 14 partition partition_name3 values (row_value9,row_value10,row_value11,row_value12,row_value15) tablespace tablespace_name3 、、、、、、、、、、 partition partition_nameX values (default) tablespace tablespace_nameX ) 表的插入、更新、删除和普通表相同,在 hash 分区和 list 分区中,比较困难的操作是:从一张 5 千万以上的表中,要删除一千万条记录比较困,可以通过以下方法进行清理: 第一种方法: a 创建中间表和表备份,b 进行数据插入,c 进行锁表,d 进行表名修改,e 进行索引创建 和存储过程编译,f 进行表 truncate 操作 第二种方法:直接创建 job 进行 delete 删除:这样长期做,会降低表的执行效果 a 进行备份数据,b 进行表记录删除,每次删除 1000——2000 条记录,不然会发生锁表,c 重 建索引,d 进行表分析。 declare v_lognum number; -- 数据库中拥有的日志文件数 v_needarc number; -- 需要归档的日志文件数 begin select count(1) into v_lognum from v$log; loop loop select count(1) into v_needarc from v$archive; if v_needarc < v_lognum - 1 then exit; end if; end loop; delete from 对象.table_name where 条件 1 and 条件 2 and rownum<1000; if sql%rowcount = 0 then exit; end if; commit; end loop; end; ––––––————— -- - - - - - - - - - - - - - - - - - - - - - - create or replace procedure procedure_name(exp_date1 varchar2 ,exp_date2 varchar2) as del_sql varchar2(1024); v_c integer; begin 15 del_sql:='delete from 对象.表名 a where exists (select 1 from 对象.表名 b where 条件 1 and 条件 2 and 、、、、 条件 n )and rownum<1000'; for i in 1..10000 loop execute immediate del_sql using exp_date1,exp_date2; if sql%rowcount = 0 then exit; end if; commit; end loop; end procedure_name; 3、分区操作 添加分区 alter table table_partition_name add partition partition_name values less than (to_date('row_values','yyyy-mm-dd')); 注意:以上添加的分区界限应该高于最后一个分区界限。 alter table table_partition_name modify partition partition_name subpartition_name values('row_values'); add subpartition 删除分区 以下代码删除表分区: alter table table_partition_name drop partition partition_name storage; 注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除 表 截断分区 截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表 中即使只有一个分区时,也可以截断该分区。通过以下代码截断分区: alter table table_partition_name truncate partition partition_name; 合并分区 合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能 将分区合并到界限较低的分区。以下代码实现了 partition_name1 与 partition_name 分区的合并: alter table table_partition_name merge partitions partition_name1,partition_name2 into partition partition_name2; 16 拆分分区 拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对 HASH 类型的分 区进行拆分。 alter table table_partition_name sblit partition partition_name1 at(to_date('row_value','yyyy-mm-dd')) into (partition partition_name1,partition partition_name2); 接合分区(coalesca) 结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加 散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。通过以下代码进行接合 分区: alter table table_hash_partition_name coalesca partition; 重命名表分区 以下代码将 partition_name1 更改为 partition_name2 alter table table_partition_name rename partition partition_name1 to partition_name2; 相关查询 跨分区查询 select sum( *) from (select count(*) cn from table_partition_name partition (partition_name1) union all select count(*) cn from table_partition_name partition (partition_name2)); 查询表上有多少分区 select * from user_tab_partitions where table_name ='table_partition_name' 查询索引信息 select object_name,object_type,tablespace_name,sum(value) from v$segment_statistics where statistic_name in ('physical reads','physical write','logical reads')and object_type='index' group by object_name,object_type,tablespace_name order by 4 desc --显示数据库所有分区表的信息: select * from dba_part_tables --显示当前用户可访问的所有分区表信息: select * from all_part_tables --显示当前用户所有分区表的信息: select * from USER_PART_TABLES --显示表分区信息 显示数据库所有分区表的详细分区信息: select * from dba_tab_partitions 17 --显示当前用户可访问的所有分区表的详细分区信息: select * from all_tab_partitions --显示当前用户所有分区表的详细分区信息: select * from user_tab_partitions --显示子分区信息 显示数据库所有组合分区表的子分区信息: select * from dba_tab_subpartitions --显示当前用户可访问的所有组合分区表的子分区信息: select * from all_tab_subpartitions --显示当前用户所有组合分区表的子分区信息: select * from user_tab_subpartitions --显示分区列 显示数据库所有分区表的分区列信息: select * from dba_part_key_columns --显示当前用户可访问的所有分区表的分区列信息: select * from all_part_key_columns --显示当前用户所有分区表的分区列信息: select * from user_part_key_columns --显示子分区列 显示数据库所有分区表的子分区列信息: select * from dba_subpart_key_columns --显示当前用户可访问的所有分区表的子分区列信息: select * from all_subpart_key_columns --显示当前用户所有分区表的子分区列信息: select * from user_subpart_key_columns --怎样查询出 oracle 数据库中所有的的分区表 select * from user_tables a where a.partitioned='yes' --删除一个表的数据是 truncate table table_name; --删除分区表一个分区的数据是 alter table table_partition_name truncate partition partition_nameN drop storage; 18 4、表状态查询 Select * From Dba_Tab_Partitions Where Table_Name=‘%表名%‘; Select owner,index_name,status,degree,table_name from dba_indexes where table_name=‘table_name ‘; select owner,bytes/1024/1024,segment_nam,segment_type,tablespace_name from dba_segments where segment_name=‘table_name‘ and segment_type=‘TABLE‘ ; 5、DDL 语句操作 创建表 基本语法: create [global temporary] table table_name( column_name type [constraint constraint_def default default_exp] [,column_name type [constraint constraint_def default default_exp] ...]) [on commit {delete | preserve} rows] tablespace tab_space; 其中: 1)global temporary 说明改表的行都是临时的,这种表就称为临时表。 行的有效期由 on commit 字句指定。临时表对于所有的会话都是可见的,但是这些行则是特定于 某个会话的。 2)table_name 指定了要分配给该表的名称。 3)column_name 指定了要分配给某个列的名称。 4)type 指定了对某个列的类型。 5)constraint_def 指定了对某个列的约束的定义。 6)default_def 指定了一个表达式,用来为某个列赋予默认值。 7)on commit 控制临时表中行的有效期。delete 说明这些行在事务的末尾要被删除。 preserve 说明这些行在会话的末尾要被删除。若对临时表没有指定 on commit 选项,那末默认值是 delete。 8)tab_space 为该表指定表空间。若没有指定表空间,该表就被存储在该用户的默认表空间中。 获得有关表的信息可以通过如下操作获取有关表的信息: 对表执行 describe 命令。 desc order_status_temp --注意 desc 是 SQL*PLUS 命令,在 SQL 中不能执行。 查询 user_tables,它是数据字典的一部分。另:查询用户可访问的表的相关信息,可以查询 all_tables。 select table_name, tablespace_name, temporary from user_tables where table_name in ('table_name', 'ORDER_STATUS_TEMP'); 19 获得表中列的信息 从 user_tab_columns 中可以获得有关表中各列的信息,另:通过访问 all_tab_columns,可以获得有关 可以访问的表中所有列的信息。 select column_name, data_type, data_length, data_precision, data_scale from user_tab_columns where table_name = 'table_name'; 修改表 alter table 语句可以用于对表进行修改。 alter table 语句可以执行以下任务: 1)添加、修改、删除列; 2)添加或删除约束; 3)启用或禁用约束。 添加列 alter table table_name add modified_by integer; alter table table_name add rowname 类型 [date default sysdate not null]; 修改列 1)修改列的长度,条件是该列的类型的长度可以修改,比如 char 或 varchar2; 2)修改数字列的精度; 3)修改列的数据类型; 4)修改列的默认值。 修改列的长度 alter table table_name modify rowname 类型(长度); 只有在表中还没有任何行或所有列都为空值的情况下才可以减小列的长度。 修改数字列的精度 alter table table_name modify column 类型; 只有在表中还没有任何行或列为空值时才可以减小数字列的精度。 修改列的数据类型 alter table table_name modify column 类型; 若一个表中还没有任何行或列为空值,就可以将列修改为任何一种数据类型。否则,就只能将列的 数据类型修改为一种兼容的数据类型。 例如,可以将 varchar2 类型修改为 char,条件是没有缩短列的长度;但是不能将 date 修改为 number。 修改列的默认值 alter table table_name modify column column_name; 默认值只适用于新插入表中的行。 20 删除列 alter table table_name drop column column_name; 重命名表 rename 语句可以用于对表进行重命名。 rename table_name1 table_name2; 删除表数据,保留表结构 truncate table table_name 四、视图操作 视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数 据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询 语句。视图的数据都来自于某些表,这些表被称为基表。通过视图来查看表,就像是从不同的角度 来观察一个(或多个)表。 视图有如下一些优点: a 可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访 问表的全部行和列。 b 简化了对数据的查询,隐藏了查询的复杂性。视图的数据来自一个复杂的查询,用户对视图的 检索却很简单。 c 一个视图可以检索多张表的数据,因此用户通过访问一个视图,可完成对多个表的访问。 d 视图是相同数据的不同表示,通过为不同的用户创建同一个表的不同视图,使用户可分别访 问同一 个表的不同部分。 视图可以在表能够使用的任何地方使用,但在对视图的操作上同表相 比有些限制,特别是插入和修改操作。对视图的操作将传递到基表,所以在表上定义的约束条件和 触发器在视图上将同样起作用。 1、视图创建 create [or replace] [force|noforce] view view_name [(alias[,alias]...)] as subquery [with check option [constraint constraint]] [with read only] 例如: 创建视图 empv,该属兔仅包含 10 部门雇员的细节信息。 create view empv as select empno,ename,job from emp where deptno=10; 别名的使用 21 例 1:create or replace view salv as select empno employee_id,ename name,sal salary from emp where deptno=30; 例 2:create or replace view salv (employee_id,name,salary) as select empno,ename,sal from emp where deptno=30; 创建复杂视图 例:创建一个基于两个表并且含有组函数的复杂视图 create or replace view dept_sum_v(name,minsal,maxsal,avgsal) as select d.dname,min(e.sal),max(e.sal),avg(e.sal) from emp e,dept d where e.deptno=d.deptno group by d.dname; 2、视图操作 查看视图 数据字典 USER_VIEWS select view_name,text from user_views; 从视图检索数据 select * from salv; 视图上执行 DML 操作 a) 如果视图包含以下内容,则不能实现对数据的修改: -GROUP 函数、GROUP BY 子句、DISTINCT 关键字 -使用表达式定义的列 -ROWNUM 伪列 b) 如果视图中包含以下内容则不能删除数据行 -GROUP 函数 -GROUP BY 子句 -DISTINCT 关键字 -ROWNUM 伪列 WITH CHECK OPTION 子句 -如果要 确保在视图上执行的 插入、更新操作仅 限于一定的范围 ,便可使用 OPTION 子句 例: create or replace view empv as select * from emp where deptno=20 WITH CHECK 22 with check option constraint empv_ck; 测试一:update empv set deptno=10 where empno=7369 结果: ERROR 位于第 1 行: ORA-01402: 视图 WITH CHECK OPTIDN 违反 where 子句 测试二:update empv set sal=2000 where empno=7369 结果:已更新 1 行。 拒绝 DML 操作 -在视图定义时使用 WITH READ ONLY 选项可以确保不能对视图执行 DML 操作 例: create or replace view empv(employee_id,employ_name,job_title) as select empno,ename,job from emp where deptno=10 with read only; 3、视图删除 删除视图并不会删除数据,因为视图是基于数据库中的基表 DROP VIEW view_name; 例:DROP VIEW empv; 五、索引、约束操作 类似书的目录结构; Oracle 的‚索引‛对象,与表关联的可选对象,提高 SQL 查询语句的速度; 索引直接指向包含所查询值的行的位臵,减少磁盘 I/O; 与所索引的表是相互独立的物理结构; Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引; 语法:CREATE INDEX index ON table (column[, column]...); B-tree 结构(非 bitmap) 1、单表索引 索引创建: create [unique | bitmap] index index_name on table_name(col_name) pctfree 20 storage(initial 100k next 100k pctincrease 0 maxextents 100) tablespace tablespace_name; 23 索引重建: 重建索引(可以同时使用存储子句和参数,不重建时也可直接使用) alter index index_name rebuild tablespace tablespace_name nologging parallel 4; alter index index_name noparallel; 在线重建索引. 可以减少加锁时间,从而开放使用 DML 类型操作 alter index index_name rebuild tablespace tablespace_name nologging online; 手动拓展索引的空间 alter index index_name allocate extent; 收回未用到的空间 alter index index_name deallocate unused; 索引碎片整理 alter index index_name coalesce; 标识索引是否使用过 alter index index_name monitoring usage; 查询: select * from v$ object_usage; 取消监控 alter index index_name nomonitoring usage 索引压缩: alter index index_name rebuild nologging online tablespace tablespace_name compress; 索引删除: drop index index_name 索引查看: 索引相关信息 select owner,index_name,table_name,tablespace_name,index_type,degree,status from dba_indexes; 索引列对照信息 select index_name,table_name,column_name,index_owner,table_owner from dba_ind_columns; 索引存储信息 select index_name,pct_free,pct_increase,initial_extent,next_extent,min_extents, max_extents from dba_indexes; 24 2、分区表索引 索引创建: 局部索引 create index index_name on table_name (column) local ( partition partition_name1 tablespace index_tablespace_name1, partition partition_name2 tablespace index_tablespace_name2, partition partition_name3 tablespace index_tablespace_name3 ) 全局索引 create [unique] index index_name on table_name(column) global partition by range(column) ( partition partition_name1 value less than(first range value) tablespace index_tablespace_name1, partition partition_name2 value less than(second range value) tablespace index_tablespace_name 2, 、、、、、、、 partition partition_nameN value less than(maxvalue) tablespace index_tablespace_nameN ) create [unique] index index_name on table_name(column,[column2]) global partition by hash(column,[column2]) ( partition partition_name1 tablespace index_tablespace_name1, partition partition_name2 tablespace index_tablespace_name 2, 、、、、、、、、 partition partition_nameN tablespace index_tablespace_nameN ) 索引重建: alter index index_name rebuild tablespace tablespace_name nologging online parallel 4; alter index index_name noparallel; 索引删除: drop index index_name; 索引查看: 索引相关信息 select owner,index_name,table_name,tablespace_name,index_type,degree,status from dba_indexes; 25 索引列对照信息 select index_name,table_name,column_name,index_owner,table_owner from dba_ind_columns; 索引存储信息 select index_name,pct_free,pct_increase,initial_extent,next_extent,min_extents,max_extents from dba_indexes; 3、主键、约束和唯一索引 唯一索引 唯一索引不允许两行具有相同的索引值。如果现有数据中存在重复的键值,则大多数数据库都 不允许将新创建的唯一索引与表一起保存。当新数据将使表中的键值重复时,数据库也拒绝接受此 数据。例如,如果在 books_table 表中的书名 (book_name) 列上,创建了唯一索引,则所有书不能 同名。 主键索引 主键索引是唯一索引的特殊类型,数据库表通常有一列或列组合,其值用来唯一标识表中的每一 行。该列称为表的主键。在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯 一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允 许快速访问数据。 主键和唯一索引的一些比较: (1)对于主健 unique/constraint oracle 自动建立唯一索引 (2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的 (3)主健可作外健,唯一索引不可, (4)主健不可为空,唯一索引可, (5)主健也可是多个字段的组合. (6)主键不同的是 a.有 not null 属性 b.每个表只能有一个 约束和唯一索引比较: 主键索引和主键约束的创建与删除顺序 创建主键索引 --> 创建主键约束 删除主键约束 --> 删除主键索引 A 分区字段不是主键的情况下,只可以创建全局分区索引,不可以创建本地主键分区索引.只有分 区字段为主键时才可以创建本地主键分区索引. B 如果创建本地唯一分区索引,除指定索引字段外还要加上表分区字段.这种索引意义不大:因为 这样 成复合索引,索引改变,约束也改变了. C 如果创建非唯一索引则不需要表分区字段. D 创建全局分区索引后可以创建约束. 26 唯一索引创建: create unique index index_name on table_name (column) local ( partition partition_name1 tablespace index_tablespace1, partition partition_name2 tablespace index_tablespace2, 、、、、、、 partition partition_nameN tablespace index_tablespaceN ) 单表创建唯一索引:create unique index index_name on table_name (column); 唯一索引重建: alter index index_name rebuild tablespace tablespace_name nologging parallel 8 online alter index index_name noparallel; 唯一索引删除: 如果有约束:先关闭约束 alter table table_name1 disable constraint constraint_name cascade; 再 drop 索引:drop index index_name 索引查看: DBA 查看索引分区 select * from dba_ind_partitions USER 查看索引分区 select * from user_ind_partitions DBA 查看索引分区类型 select * from dba_part_indexes US ER 查看索引分区类型 select * from user_part_indexes 约束创建: 在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法 信息进入数据库,满足管理员和应用开发人员所定义的规则集. ORACLE 使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开发人 员可以定义完整性规则,增强商业规则,限制数据表中的数据.如果一个 DML 语句执行的任何结果破 坏了完整性约束,ORACLE 就会回滚语句,返回错误信息. 约束是通过使用 create table 或 alter table 语句生成的.(建立表时或者表建立后修改都可)如果相关 的约束定义在单列上,可以在列这一级指定约束的定义;多列约束必须定义在数据表级,相关的列要 在括号中指定,用逗号分隔.如果没有为约束提供一个名字,那么 ORACLE 会分配一个系统生成的唯 一名字,以 SYS_开头,你可以使用关键字 CONSTRAINTS 后面跟随相关的约束名字来为约束指定名 字. ORACLE 支持五种类型的完整性约束 NOT NULL (非空)--防止 NULL 值进入指定的列,在单列基础上定义,默认情况下,ORACLE 允许 27 在任何列中有 NULL 值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现 NULL 值,一个表只能有一 个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定 义的外部键可以指向主键或者其他表的唯一键. 约束定义存储在数据字典中,查询 user_constraints 可以获得相关信息. 定义约束 create table [schema.]table (column datatype [default expr] [column_constraint], ... [table_constraint][,...]); 创建约束: create table employees (employee_id number(6), first_name varchar2(20), ... job_id varchar2(10) not null, constraints emp_emp_id_pk primary key (employee_id)); 列级的约束定义 column [CONSTRAINT constraint_name] constraint_type, 表级约束的定义 column,.. [constraint constraint_name] constraint_type (column,...) NOT NULL 约束 只能定义在列级,不能定义在表级: create table table_name1 (row_id number(6), row_time varchar2(25) not null, row_salary number(8,2), row_pct number(2,2), row_date date constraint constraint_name1 not null); UNIQUE 约束 用来保护一个表中的一个或者多个列没有任何两行在收到保护的列中具有重复的数据.ORACLE 在 唯一键列上自动生成一个唯一索引以实现唯一性: create table table_name1 (row_id number(6), row_time varchar2(25) not null, 28 row_salary number(8,2), row_pct number(2,2), row_date date constraint constraint_name1 UNIQUE(row_id)); PRIMARY KEY 约束 唯一键的所有特征都适用于主键约束,只是在主键列中不允许有 NULL 值.一个表只能有一个主键: create table table_name1 (row_id number(6), row_time varchar2(25) not null, row_salary number(8,2), row_pct number(2,2), row_date date constraint constraint_name1 PRIMARY KEY(row_id)); foreign key 约束 用来保护一个表中的一个或者多个列,它会通过一个主键主键或者唯一键保证对于每个非 NULL 值在数据库的其他地方都有一个数据可用.这个外部键就是在生成此约束的表(子表)中的一个或多 个列,在父级表和子表中,相关列的数据类型必须匹配.外部键列和引用键(reference key)列可以位于 相同的表中(自引用完整性约束). create table table_name1 (row_id number(6), row_time varchar2(25) not null, row_salary number(8,2), row_pct number(2,2), row_date date not null, dep_id number(6), constraint constraint_name1 foreign key(row_id) references table_name2(dep_id), constraint constraint_name2 unique(dep_id)); 上例中是在表级定义外部键约束,如果在列级定义,不同的是: create table table_name1 (..., dep_id number(4) constraint constraint_name1 references table_name2(dep_id), ...); //没有关键字 FOREIGN KEY FOREIGN KEY 约束还有两个关键字是 ON DELETE CASCADE --当删除所引用的父表记录时,删除子表中相关的记录 ON DELETE SET NULL--与上面不同的是删除时,转换子表中相关记录为 NULL 值 默认情况下,如果没有指定以上两个中任一,则父表中被引用的记录将不能被删除. CHECK 约束 [CONSTRAINT ] CHECK ( ) 这里 CHECK 子句中的 CONDITION 应该求值为一个布尔值结果,并且可以引用相同行中其他列的 值;不 能包含子查询,序列,环境函数(SYSDATE,UID,USER,USERENV)和伪列 29 (ROWNUM,LEVEL,CURRVAL,NEXTVAL),一个列上可以定义多个 CHECK 约束,如果所定义的条 件为 FALSE,则语句将回滚. CREATE TABLE table_name1 (..., row_sal NUMBER(8,2) CONSTRAINT constraint_name1 CHECK (row_sal>0), ...); 添加约束 alter table table_name1 ADD CONSTRAINT constraint_name FOREIGN KEY(rowmagr_id) REFERENCES table_name2(name_id); 删除约束 alter table table_name1 drop constraint constraint_name; alter table table_name1 drop primary key cascade; 对于 NOT NULL 约束,用 ALTER TABLE MODIFY 子句来删除 alter table table_name1 modify row_name null; 关闭约束 alter table table_name1 disable constraint constraint_name cascade; //如果没有被引用则不需 CASCADE 关键字 当你生成一个约束时,约束自动打开(除非你指定了 DISABLE 子句,当用 DISABLE 关闭 UNIQUE 或 者 PRIMARY KEY 约束时,ORACLE 会自动删除相关的唯一索引,再次打开时,ORACLE 又会自动 建立. 打开约束 alter table table_name enable constraint constraint_name; //注意,打开一个先前关闭的被引用的主键约束,并不能自动打开相关的外部键约束 约束信息查看: 可以从 USER_CONSTRAINTS 表和 USER_CONS_COLUMNS 视图中查询约束的信息 select constraint_name,constraint_type,search_condition from user_constraints where table_name='table_name1'; 约束类型 C--CHECK 和 NOT NULL 都算为 C TYPE P--PRIMARY KEY R--REFERENTIAL INTEGRITY 就是外部键约束 U--UNIQUE 30 select constraint_name,column_name from user_cons_columns where table_name='table_name1'; 六、存储过程/job/函数/触发器操作 1、存储过程和函数 存储过程和函数也是一种 pl/sql 块,是存入数据库的 pl/sql 块。但存储过程和函数不 同于已经介绍过的 pl/sql 程序,我们通常把 pl/sql 程序称为无名块,而存储过程和函数 是以命名的方式存储于数据库中的。和 pl/sql 程序相比,存储过程有很多优点,具体归 纳如下: a)存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优 点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调 用或修改代码。 b)存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储 过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用 函数。 c)存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块, 用户编写的 pl/sql 程序或其他存储过程都可以调用它(但存储过程和函数不能调用 pl/sql 程序)。一个重复使用的功能,可以设计成为存 储过程,比如:显示一张工资统计表 , 可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号 返回雇员的姓名,可以设计成存储函数。 d)像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递 也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通 过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名 的调用返回函数值。 存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。 创建存储过程,需要有 create procedure 或 create any procedure 的系统权限。该权限可由 系统管理员授予。创建一个存储过程的基本语句如下: create [or replace] procedure 存储过程名[(参数[in|out|in out] 数据类型...)] {as|is} [说明部分] begin 可执行部分 [exception 错误处理部分] end [过程名]; 其中:可选关键字 or replace 表示如果存储过程已经存在,则用新的存储过程覆 盖,通常用于存储过程的重建。 参数部分用于定义多个参数(如果没有参数,就可以省 31 略)。参数有三种形式:in、out 和 in out。如果没有指明参数的形式,则默认为 in,关 键字 as 也可以写成 is,后跟过程的说明部分,可以在此定义过程的局部变量,编写 存 储过程可以使用任何文本编辑器或直接在 sql*plus 环境下进行,编写好的存储过程必须 要在 sql*plus 环境下进行编译,生成编译代码,原代码和编译代码在编译过程中都会被 存入数据库。编译成功的存储过程就可以在 oracle 环境下进行调用了。 一个存储过 程 在不需要时可以删除。删除存储过程的创建者或者拥有 drop any procedure 系统权限的 人。删除存储过程的语法如下: 语法格式:drop procedure 存储过程名; 如果要重新编译一个存储过程,则只能是过程的创建者或者拥有 alter any procedure 系统权限的人。语法如下: alter procedure 存储过程名 compile; 执行(或调用)存储过程的人是过程的创建者或是拥有 execute any procedure 系统权 限的人或 是被拥有者授予 execute 权限的人。执行的方法如下: 方法 1: execute 模式名.存储过程名[(参数...)]; 方法 2: begin 模式名.存储过程名[(参数...)]; end; 【训练 1】创建一个显示雇员总人数的存储过程。 步骤 1:登录 scott 账户(或学生个人账户)。 步骤 2:在 sql*plus 输入区中,输入以下存储过程: create or replace procedure dyk_count as v_total1 number(10); v_total2 number(10); v_total3 number(10); begin select count(*) into v_total1 from dyk_table1; dbms_output.put_line('雇员总人数为:'||v_total1); delete dyk_table1 where owner In ('XDB','CTSSYS','OUTLN','WMSYS'); select count(*) into v_total2 from dyk_table1; dbms_output.put_line('剩余总人数为:'||v_total2); insert into dyk_table1 nologging select * from dba_objects; select count(*) into v_total3 from dyk_table1; dbms_output.put_line('增加后的总人数为:'||v_total3); end; 步骤 3:按―执行‖按钮进行编译。 32 如果存在错误,就会显示: 警告: 创建的过程带有编译错误。 如果存在错误,对脚本进行修改,直到没有错误产生。 如果编译结果正确,将显示:(sql 代码) 过程已创建。 步骤 4:调用存储过程,在输入区中输入以下语句并执行: sql 代码 set serverout on /从 sql 提示符下输出存储过程变量值 execute dyk_count; 显示结果为: 雇员总人数为:337386 剩余总人数为:336456 增加后的总人数为:386254 说明:在该训练中,v_total 变量是存储过程定义的局部变量,用于接收查询到的雇员总人数。 注意:在 sql*plus 中输入存储过程,按―执行‖按钮是进行编译,不是执行存储过程。 如果在存储 过程中引用了其他用户的对象,比如表,则必须有其他用户授予的对象访问权限。一个存储过程一 旦编译成功,就可以由其他用户或程序来引用。但存储过程或函数的所有者必须授予其他用户执行 该过程的权限。 存储过程没有参数,在调用时,直接写过程名即可。 【训练 2】在 pl/sql 程序中调用存储过程。 步骤 1:登录 scott 账户。 步骤 2:授权 student 账户使用该存储过程,即在 sql*plus 输入区中,输入以下的命令: sql 代码 grant execute on emp_count to student sql 代码 授权成功。 步骤 3:登录 student 账户,在 sql*plus 输入区中输入以下程序: sql 代码 set serveroutput on begin scott.emp_count; end; 步骤 4:执行以上程序,结果为: sql 代码 雇员总人数为:14 pl/sql 过程已成功完成。 说明:在本例中,存储过程是由 scott 账户创建的,studen 账户获得 scott 账户的授权后,才能调 用该存储过程。 注意:在程序中调用存储过程,使用了第二种语法。 【训练 3】 编写显示雇员信息的存储过程 emp_list,并引用 emp_count 存储过程。 步骤 1:在 sql*plus 输入区中输入并编译以下存储过程: sql 代码 33 create or replace procedure emp_list as cursor emp_cursor is select empno,ename from emp; begin for emp_record in emp_cursor loop dbms_output.put_line(emp_record.empno||emp_record.ename); end loop; emp_count; end; 过程已创建。 步骤 2:调用存储过程,在输入区中输入以下语句并执行: sql 代码 execute emp_list execute emp_list 显示结果为: sql 代码 7369smith 7499allen 7521ward 7566jones 执行结果: 雇员总人数为:14 pl/sql 过程已成功完成。 说明:以上的 emp_list 存储过程中定义并使用了游标,用来循环显示所有雇员的信息。然后调用已 经成功编译的存储过程 emp_count,用来附加显示雇员总人数。通过 execute 命令来执行 emp_list 存储过程。 【练习 1】编写显示部门信息的存储过程 dept_list,要求统计出部门个数。 参数传递:参数的作用是向存储过程传递数据,或从存储过程获得返回结果。正确的使用参数可以 大大增加存储过程的灵活性和通用性,参数的类型有三种,如下所示。 sql 代码 in 定义一个输入参数变量,用于传递参数给存储过程 out 定义一个输出参数变量,用于从存储过程获取数据 in out 定义一个输入、输出参数变量,兼有以上两者的功能 in 定义一个输入参数变量,用于传递参数给存储过程 out 定义一个输出参数变量,用于从存储过程获取数据 in out 定义一个输入、输出参数变量,兼有以上两者的功能 参数的定义形式和作用如下: 参数名 in 数据类型 default 值; 定义一个输入参数变量,用于传递参数给存储过程。在调用存储过程时,主程序的实际参数可 34 以是常量、有值变量或表达式等。default 关键字为可选项,用来设定参数的默认值。如果在调用 存储过程时不指明参数,则参数变量取默认值。在存储过程中,输入变量接收主程序传递的值,但 不能对其进行赋值。 参数名 out 数据类型; 定义一个输出参数变量,用于从存储过程获取数据,即变量从存储过程中返回值给主程序。 在调用存储过程时,主程序的实际参数只能是一个变量,而不能是常量或表达式。在存储过程中, 参数变量只能被赋值而不能将其用于赋值,在存储过程中必须给输出变量至少赋值一次。 参数名 in out 数据类型 default 值; 定义一个输入、输出参数变量,兼有以上两者的功能。在调用存储过程时,主程序的实际参数只能 是一个变量,而不能是常量或表达式。default 关键字为可选项,用来设定参数的默认值。在存储 过程中,变量接收主程序传递的值,同时可以参加赋值运算,也可以对其进行赋值。在存储过程中 必须给变量至少赋值一次。 如果省略 in、out 或 in out,则默认模式是 in。 【训练 1】编写给雇员增加工资的存储过程 change_salary,通过 in 类型的参数传递要增加工资的 雇员编号和增加的工资额。 步骤 1:登录 scott 账户。 步骤 2:在 sql*plus 输入区中输入以下存储过程并执行: sql 代码 create or replace procedure change_salary(p_empno in number default 7788,p_raise number default 10) as v_ename varchar2(10); v_sal number(5); begin select ename,sal into v_ename,v_sal from emp where empno=p_empno; update emp set sal= sal+p_raise where empno=p_empno; dbms_output.put_line('雇员'||v_ename||'的工资被改为'||to_char(v_sal+p_raise)); commit; exception when others then dbms_output.put_line('发生错误,修改失败!'); rollback; end; 过程已创建。 步骤 3:调用存储过程,在输入区中输入以下语句并执行: sql 代码 execute change_salary(7788,80) 显示结果为: sql 代码 雇员 scott 的工资被改为 3080 说明:从执行结果可以看到,雇员 scott 的工资已由原来的 3000 改为 3080。 参数的值由调用者传递,传递的参数的个数、类型和顺序应该和定义的一致。如果顺序不一致,可 以采用以下调用方法。如上例,执行语句可以改为: 35 execute change_salary(p_raise=>80,p_empno=>7788); 可以看出传递参数的顺序发生了变化,并且明确指出了参数名和要传递的值,=>运算符左侧是参 数名,右侧是参数表达式,这种赋值方法的意义较清楚。 【练习 1】创建插入雇员的存储过程 insert_emp,并将雇员编号等作为参数。 在设计存储过程的时候,也可以为参数设定默认值,这样调用者就可以不传递或少传递参数了。 【训练 2】 调用存储过程 change_salary,不传递参数,使用默认参数值。 在 sql*plus 输入区中输入以下命令并执行: sql 代码 execute change_salary 显示结果为: sql 代码 雇员 scott 的工资被改为 3090 说明:在存储过程的调用中没有传递参数,而是采用了默认值 7788 和 10,即默认雇员号为 7788, 增加的工资为 10。 【训练 3】 使用 out 类型的参数返回存储过程的结果。 步骤 1:登录 scott 账户。 步骤 2:在 sql*plus 输入区中输入并编译以下存储过程: sql 代码 create or replace procedure emp_count(p_total out number) as begin select count(*) into p_total from emp; end; 执行结果为: sql 代码 过程已创建。 步骤 3:输入以下程序并执行: sql 代码 declare v_empcount number; begin emp_count(v_empcount); dbms_output.put_line('雇员总人数为:'||v_empcount); end; 显示结果为: sql 代码 雇员总人数为:14 pl/sql 过程已成功完成。 说明:在存储过程中定义了 out 类型的参数 p_total,在主程序调用该存储过程时,传递了参数 v_empcount。在存储过程中的 select...into...语句中对 p_total 进行赋值,赋值结果由 v_empcount 36 变量带回给主程序并显示。 以上程序要覆盖同名的 emp_count 存储过程,如果不使用 or replace 选项,就会出现以下错误: sql 代码 error 位于第 1 行: ora-00955: 名称已由现有对象使用。 【练习 2】创建存储过程,使用 out 类型参数获得雇员经理名。 【训练 4】 使用 in out 类型的参数,给电话号码增加区码。 步骤 1:登录 scott 账户。 步骤 2:在 sql*plus 输入区中输入并编译以下存储过程: sql 代码 create or replace procedure add_region(p_hpone_num in out varchar2) as begin p_hpone_num:='0755-'||p_hpone_num; end; 、 执行结果为: 过程已创建。 步骤 3:输入以下程序并执行: sql 代码 set serveroutput on declare v_phone_num varchar2(15); begin v_phone_num:='26731092'; add_region(v_phone_num); dbms_output.put_line('新的电话号码:'||v_phone_num); end; 显示结果为: sql 代码 新的电话号码:0755-26731092 pl/sql 过程已成功完成。 说明:变量 v_hpone_num 既用来向存储过程传递旧电话号码,也用来向主程序返回新号码。新的 号码在原来基础上增加了区号 0755 和-。 创建和删除存储函数 创建函数,需要有 create procedure 或 create any procedure 的系统权限。该权限可由系统管理员授 予。创建存储函数的语法和创建存储过程的类似,即 create [or replace] function 函数名[(参数[in] 数据类型...)] return 数据类型 {as|is} [说明部分] begin 37 可执行部分 return (表达式) [exception 错误处理部分] end [函数名]; 其中,参数是可选的,但只能是 in 类型(in 关键字可以省略)。 在定义部分的 return 数据类型,用来表示函数的数据类型,也就是返回值的类型,此部分不可省 略。 在可执行部分的 return(表达式),用来生成函数的返回值,其表达式的类型应该和定义部分说 明的函数返回值的数据类型一致。在函数的执行部分可以有多个 return 语句,但只有一个 return 语句会被执行,一旦执行了 return 语句,则函数结束并返回调用环境。 一个存储函数在不需要时可以删除,但删除的人应是函数的创建者或者是拥有 drop any procedure 系统权限的人。其语法如下: drop function 函数名; 重新编译一个存储函数时,编译的人应是函数的创建者或者拥有 alter any procedure 系统权限 的人。重新编译一个存储函数的语法如下: alter procedure 函数名 compile; 函数的调用者应是函数的创建者或拥有 execute any procedure 系统权限的人,或是被函数的拥 有者授予了函数执行权限的账户。函数的引用和存储过程不同,函数要出现在程序体中,可以参加 表达式的运算或单独出现在表达式中,其形式如下: 变量名:=函数名(...) 【训练 1】 创建一个通过雇员编号返回雇员名称的函数 get_emp_name。 步骤 1:登录 scott 账户。 步骤 2:在 sql*plus 输入区中输入以下存储函数并编译: sql 代码 create or replace function get_emp_name(p_empno number default 7788) return varchar2 as v_ename varchar2(10); begin elect ename into v_ename from emp where empno=p_empno; return(v_ename); exception when no_data_found then dbms_output.put_line('没有该编号雇员'); return (null); when too_many_rows then dbms_output.put_line('有重复雇员编号!'); return (null); when others then dbms_output.put_line('发生其他错误!'); return (null); end; 38 步骤 3:调用该存储函数,输入并执行以下程序: sql 代码 begin dbms_output.put_line('雇员 7369 的名称是:'|| get_emp_name(7369)); dbms_output.put_line('雇员 7839 的名称是:'|| get_emp_name(7839)); end; 显示结果为: sql 代码 雇员 7369 的名称是:smith 雇员 7839 的名称是:king pl/sql 过程已成功完成。 说明:函数的调用直接出现在程序的 dbms_output.put_line 语句中,作为字符串表达式的一部分。 如果输入了错误的雇员编号,就会在函数的错误处理部分输出错误信息。试修改雇员编号,重新运 行调用部分。 【练习 1】创建一个通过部门编号返回部门名称的存储函数 get_dept_name。 【练习 2】将函数的执行权限授予 student 账户,然后登录 student 账户调用。 存储过程和函数的查看可以通过对数据字典的访问来查询存储过程或函数的有关信息,如果要查询 当前用户的存储过程或函数的源代码,可以通过对 user_source 数据字典视图的查询得到。user_source 的结构如下: sql 代码 describe user_source 结果为: sql 代码 名称 是否为空? 类型 ------------------------------------------------------------- ------------- ----------------------- name varchar2(30) type varchar2(12) line number text varchar2(4000) 说明:里面按行存放着过程或函数的脚本,name 是过程或函数名,type 代表类型(procedure 或 function),line 是行号,text 为脚本。 【训练 1】 查询过程 emp_count 的脚本。 在 sql*plus 中输入并执行如下查询: sql 代码 select text from user_source where name='emp_count'; 结果为: sql 代码 text -------------------------------------------------------------------------------- 39 procedure emp_count(p_total out number) as begin select count(*) into p_total from emp; end; 【训练 2】 查询过程 get_emp_name 的参数。 在 sql*plus 中输入并执行如下查询: sql 代码 describe get_emp_name 结果为: sql 代码 function get_emp_name returns varchar2 参数名称 类型 输入/输出默认值? -------- ------- -------------------- p_empno number(4) in default 【训练 3】 在发生编译错误时,显示错误。 sql 代码 show errors 以下是一段编译错误显示: sql 代码 line/col error ---------- ------------------- -------------- 4/2 pl/sql: sql statement ignored 4/36 pls-00201: 必须说明标识符 'empp' 说明:查询一个存储过程或函数是否是有效状态(即编译成功),可以使用数据字典 user_objects 的 status 列。 【训练 4】查询 emp_list 存储过程是否可用: sql 代码 select status from user_objects where object_name='emp_list'; 结果为: sql 代码 status ------------ valid 说明:valid 表示该存储过程有效(即通过编译),invalid 表示存储过程无效或需要重新编译。当 oracle 调用一个无效的存储过程或函数时,首先试图对其进行编译,如果编译成功则将状态臵成 valid 并 执行,否则给出错误信息。 当一个存储过程编译成功,状态变为 valid,会不会在某些情况下变成 invalid。结论是完全可能的。比如一个存储过程中包含对表的查询,如果表被修改或删除,存储过 程就会变成无效 invalid。所以要注意存储过程和函数对其他对象的依赖关系。 如果要检查存储过程或函数的依赖性,可以通过查询数据字典 user_denpendencies 来确定,该表结 构如下: 40 sql 代码 describe user_dependencies; 结果: sql 代码 名称 是否为空 类型 ----- ---------- ------------ name not null varchar2(30) type varchar2(12) referenced_owner varchar2(30) referenced_name varchar2(64) referenced_type varchar2(12) referenced_link_name varchar2(128) schemaid number dependency_type varchar2(4) 说明:name 为实体 名,type 为实 体类型, referenced_owner 为涉 及到的实 体拥有者账 户, referenced_name 为涉及到的实体名,referenced_type 为涉及到的实体类型。 【训练 5】 查询 emp_list 存储过程的依赖性。 sql 代码 select referenced_name,referenced_type from user_dependencies where name='emp_list'; 执行结果: sql 代码 referenced_name referenced_type ------------------------------ --------------------------- standard package sys_stub_for_purity_analysis package dbms_output package dbms_output synonym dbms_output non-existent emp table emp_count procedure 说明:可以看出存储过程 emp_list 依赖一些系统包、emp 表和 emp_count 存储过程。如果删除 了 emp 表或 emp_count 存储过程,emp_list 将变成无效。还有一种情况需要我们注意:如果一个 用户 a 被授予执行属于用户 b 的一个存储过程的权限,在用户 b 的存储过程中,访问到用户 c 的表, 用户 b 被授予访问用户 c 的表的权限,但用户 a 没有被授予访问用户 c 表的权限,那么用户 a 调用 用户 b 的存储过程是失败的还是成功的呢?答案是成功的。如果读者有兴趣,不妨进行一下实际测 试。 2、程序包 包的概念和组成 包是用来存储相关程序结构的对象,它存储于数据字典中。包由两个分离的部分组成:包头(package) 41 和包体(package body)。包头是包的说明部分,是对外的操作接口,对应用是可见的;包体是包的 代码和实现部分,对应用来说是不可见的黑盒。 包中可以包含的程序结构如下所示。 sql 代码 过程(procudure) 带参数的命名的程序模块 函数(function) 带参数、具有返回值的命名的程序模块 变量(variable) 存储变化的量的存储单元 常量(constant) 存储不变的量的存储单元 游标(cursor) 用户定义的数据操作缓存区,在可执行部分使用 类型(type) 用户定义的新的结构类型 异常(exception) 在标准包中定义或由用户自定义,用于处理程序错误 说明部分可以出现在包的三个不同的部分:出现在包头中的称为公有元素,出现在包体中的称 为私有元素,出现在包体的过程(或函数)中的称为局部变量。它们的性质有所不同,如下所示。 sql 代码 公有元素(public) 在包头中说明,在包体中具体定义 在包外可见并可以访问,对整个应用的全 过程有效 私有元素(private) 在包体的说明部分说明 只能被包内部的其他部分访问 局部变量(local) 在过程或函数的说明部分说明 只能在定义变量的过程或函数中使用 在包体中出现的过程或函数,如果需要对外公用,就必须在包头中说明,包头中的说明应该和包体 中的说明一致。 包有以下优点: * 包可以方便地将存储过程和函数组织到一起,每个包又是相互独立的。在不同的包中,过程、函 数都可以重名,这解决了在同一个用户环境中命名的冲突问题。 * 包增强了对存储过程和函数的安全管理,对整个包的访问权只需一次授予。 * 在同一个会话中,公用变量的值将被保留,直到会话结束。 * 区分了公有过程和私有过程,包体的私有过程增加了过程和函数的保密性。 * 包在被首次调用时,就作为一个整体被全部调入内存,减少了多次访问过程或函数的 i/o 次数。 创建包和包体 包由包头和包体两部分组成,包的创建应该先创建包头部分,然后创建包体部分。创建、删除和编 译包的权限同创建、删除和编译存储过程的权限相同。 创建包头的简要语句如下: create [or replace] package 包名 {is|as} 公有变量定义 公有类型定义 公有游标定义 公有异常定义 函数说明 过程说明 end; 创建包体的简要语法如下: 42 create [or replace] package body 包名 {is|as} 私有变量定义 私有类型定义 私有游标定义 私有异常定义 函数定义 过程定义 end; 包的其他操作命令包括: 删除包头: drop package 包头名 删除包体: drop package body 包体名 重新编译包头: alter package 包名 compile package 重新编译包体: alter package 包名 compile package body 在包头中说明的对象可以在包外调用,调用的方法和调用单独的过程或函数的方法基本相同, 惟一的区别就是要在调用的过程或函数名前加上包的名字(中间用―.‖分隔)。但要注意,不同的会话 将单独对包的公用变量进行初始化,所以不同的会话对包的调用属于不同的应用。 系统包 oracle 预定义了很多标准的系统包,这些包可以在应用中直接使用,比如在训练中我们使 用的 dbms_output 包,就是系统包。put_line 是该包的一个函数。常用系统包下所示。 sql 代码 dbms_output 在 sql*plus 环境下输出信息 dbms_ddl 编译过程函数和包 dbms_session 改变用户的会话,初始化包等 dbms_transaction 控制数据库事务 dbms_mail 连接 oracle*mail dbms_lock 进行复杂的锁机制管理 dbms_alert 识别数据库事件告警 dbms_pipe 通过管道在会话间传递信息 dbms_job 管理 oracle 的作业 dbms_lob 操纵大对象 dbms_sql 执行动态 sql 语句 dbms_output 在 sql*plus 环境下输出信息 dbms_ddl 编译过程函数和包 dbms_session 改变用户的会话,初始化包等 dbms_transaction 控制数据库事务 dbms_mail 连接 oracle*mail dbms_lock 进行复杂的锁机制管理 dbms_alert 识别数据库事件告警 dbms_pipe 通过管道在会话间传递信息 43 dbms_job dbms_lob dbms_sql 包的应用 管理 oracle 的作业 操纵大对象 执行动态 sql 语句 在 sql*plus 环境下,包和包体可以分别编译,也可以一起编译。如果分别编译,则要先编译包头, 后编译包体。如果在一起编译,则包头写在前,包体在后,中间用―/‖分隔。 可以将已经存在 的存储过程或 函数添加到包 中,方法是去 掉过程或函数创 建语句的 create or replace 部分,将存储过程或函数复制到包体中 ,然后重新编译即可。 如果需要将私有过程或函数变成共有过程或函数的话,将过程或函数说明部分复制到包头说明 部分,然后重新编译就可以了。 【训练 1】 创建管理雇员信息的包 employe,它具有从 emp 表获得雇员信息,修改雇员名称,修 改雇员工资和写回 emp 表的功能。 步骤 1:登录 scott 账户,输入以下代码并编译: sql 代码 create or replace package employe --包头部分 is procedure show_detail; procedure get_employe(p_empno number); procedure save_employe; procedure change_name(p_newname varchar2); procedure change_sal(p_newsal number); end employe; / create or replace package body employe --包体部分 is employe emp%rowtype; -------------- 显示雇员信息 --------------- procedure show_detail as begin dbms_output.put_line(‗----- 雇员信息 -----‘); dbms_output.put_line('雇员编号:'||employe.empno); dbms_output.put_line('雇员名称:'||employe.ename); dbms_output.put_line('雇员职务:'||employe.job); dbms_output.put_line('雇员工资:'||employe.sal); dbms_output.put_line('部门编号:'||employe.deptno); end show_detail; ----------------- 从 emp 表取得一个雇员 -------------------- procedure get_employe(p_empno number) as begin select * into employe from emp where empno=p_empno; dbms_output.put_line('获取雇员'||employe.ename||'信息成功'); exception 44 when others then dbms_output.put_line('获取雇员信息发生错误!'); end get_employe; ---------------------- 保存雇员到 emp 表 -------------------------- procedure save_employe as begin update emp set ename=employe.ename, sal=employe.sal where empno= employe.empno; dbms_output.put_line('雇员信息保存完成!'); end save_employe; ---------------------------- 修改雇员名称 ------------------------------ procedure change_name(p_newname varchar2) as begin employe.ename:=p_newname; dbms_output.put_line('修改名称完成!'); end change_name; ---------------------------- 修改雇员工资 -------------------------- procedure change_sal(p_newsal number) as begin employe.sal:=p_newsal; dbms_output.put_line('修改工资完成!'); end change_sal; end employe; create or replace package employe --包头部分 is procedure show_detail; procedure get_employe(p_empno number); procedure save_employe; procedure change_name(p_newname varchar2); procedure change_sal(p_newsal number); end employe; / create or replace package body employe --包体部分 is employe emp%rowtype; -------------- 显示雇员信息 --------------- procedure show_detail as begin dbms_output.put_line(‗----- 雇员信息 -----‘); 45 dbms_output.put_line('雇员编号:'||employe.empno); dbms_output.put_line('雇员名称:'||employe.ename); dbms_output.put_line('雇员职务:'||employe.job); dbms_output.put_line('雇员工资:'||employe.sal); dbms_output.put_line('部门编号:'||employe.deptno); end show_detail; ----------------- 从 emp 表取得一个雇员 -------------------- procedure get_employe(p_empno number) as begin select * into employe from emp where empno=p_empno; dbms_output.put_line('获取雇员'||employe.ename||'信息成功'); exception when others then dbms_output.put_line('获取雇员信息发生错误!'); end get_employe; ---------------------- 保存雇员到 emp 表 -------------------------- procedure save_employe as begin update emp set ename=employe.ename, sal=employe.sal where empno= employe.empno; dbms_output.put_line('雇员信息保存完成!'); end save_employe; ---------------------------- 修改雇员名称 ------------------------------ procedure change_name(p_newname varchar2) as begin employe.ename:=p_newname; dbms_output.put_line('修改名称完成!'); end change_name; ---------------------------- 修改雇员工资 -------------------------- procedure change_sal(p_newsal number) as begin employe.sal:=p_newsal; dbms_output.put_line('修改工资完成!'); end change_sal; end employe; 步骤 2:获取雇员 7788 的信息: sql 代码 set serveroutput on execute employe.get_employe(7788); 结果为: 46 sql 代码 获取雇员 scott 信息成功 pl/sql 过程已成功完成。 步骤 3:显示雇员信息: sql 代码 execute employe.show_detail; 结果为: sql 代码 ------------------ 雇员信息 ------------------ 雇员编号:7788 雇员名称:scott 雇员职务:analyst 雇员工资:3000 部门编号:20 pl/sql 过程已成功完成。 步骤 4:修改雇员工资: sql 代码 execute employe.change_sal(3800); 结果为: sql 代码 修改工资完成! pl/sql 过程已成功完成。 步骤 5:将修改的雇员信息存入 emp 表 sql 代码 execute employe.save_employe; 结果为: sql 代码 雇员信息保存完成! pl/sql 过程已成功完成。 说明:该包完成将 emp 表中的某个雇员的信息取入内存记录变量,在记录变量中进行修改编辑, 在确认显示信息正确后写回 emp 表的功能。记录变量 employe 用来存储取得的雇员信息,定义为 私有变量,只能被包的内部模块访问。 【练习 1】为包增加修改雇员职务和部门编号的功能。 阶段训练 下面的训练通过定义和创建完整的包 emp_pk 并综合运用本章的知识,完成对雇员表的插入、删除 等功能,包中的主要元素解释如下所示。 sql 代码 程序结构 类型说明 v_emp_count 公有变量 跟踪雇员的总人数变化,插入、删除雇员的同时修改该变量的值 init 公有过程 对包进行初始化,初始化雇员人数和工资修改的上、下限 47 list_emp 公有过程 显示雇员列表 insert_emp 公有过程 通过编号插入新雇员 delete_emp 公有过程 通过编号删除雇员 change_emp_sal 公有过程 通过编号修改雇员工资 v_message 私有变量 存放准备输出的信息 c_max_sal 私有变量 对工资修改的上限 c_min_sal 私有变量 对工资修改的下限 show_message 私有过程 显示私有变量 v_message 中的信息 exist_emp 私有函数 判断某个编号的雇员是否存在,该函数被 insert_emp、delete_emp change_emp_sal 等过程调用 和 【训练 1】 完整的雇员包 emp_pk 的创建和应用。 步骤 1:在 sql*plus 中登录 scott 账户,输入以下包头和包体部分,按―执行‖按钮编译: create or replace package emp_pk --包头部分 is v_emp_count number(5); --雇员人数 procedure init(p_max number,p_min number); --初始化 procedure list_emp; --显示雇员列表 procedure insert_emp(p_empno number,p_enamevarchar2,p_job varchar2, p_sal number); --插入雇员 procedure delete_emp(p_empno number); --删除雇员 procedure change_emp_sal(p_empno number,p_sal number); --修改雇员工资 end emp_pk; /create or replace package body emp_pk --包体部分 is v_message varchar2(50); --显示信息 v_max_sal number(7); --工资上限 v_min_sal number(7); --工资下限 function exist_emp(p_empno number) return boolean; --判断雇员是否存在函数 procedure show_message; --显示信息过程 ------------------------------- 初始化过程 ---------------------------- procedure init(p_max number,p_min number) is begin select count(*) into v_emp_count from emp; v_max_sal:=p_max; v_min_sal:=p_min; 48 v_message:='初始化过程已经完成!'; show_message; end init; ---------------------------- 显示雇员列表过程 --------------------- procedure list_emp is begin dbms_output.put_line('姓名 职务 工资'); for emp_rec in (select * from emp) loop dbms_output.put_line(rpad(emp_rec.ename,10,'')||rpad(emp_rec.job,10,' ')||to_char(emp_rec.sal)); end loop; dbms_output.put_line('雇员总人数'||v_emp_count); end list_emp; ----------------------------- 插入雇员过程 ----------------------------- procedureinsert_emp(p_empno number,p_enamevarchar2,p_job varchar2,p_sal number) is begin if not exist_emp(p_empno) then insert into emp(empno,ename,job,sal) values(p_empno,p_ename,p_job,p_sal); commit; v_emp_count:=v_emp_count+1; v_message:='雇员'||p_empno||'已插入!'; else v_message:='雇员'||p_empno||'已存在,不能插入!'; end if; show_message; exception when others then v_message:='雇员'||p_empno||'插入失败!'; show_message; end insert_emp; --------------------------- 删除雇员过程 -------------------- procedure delete_emp(p_empno number) is begin if exist_emp(p_empno) then delete from emp where empno=p_empno; commit; v_emp_count:=v_emp_count-1; v_message:='雇员'||p_empno||'已删除!'; else v_message:='雇员'||p_empno||'不存在,不能删除!'; 49 end if; show_message; exception when others then v_message:='雇员'||p_empno||'删除失败!'; show_message; end delete_emp; --------------------------------------- 修改雇员工资过程 ------------------------------------ procedure change_emp_sal(p_empno number,p_sal number) is begin if (p_sal>v_max_sal or p_sal80 ) begin :new_value.commission_pct :=0; end; / 触发器的组成部分: 的 1)触发器名称 2)触发语句 3)触发器限制 4)触发操作 触发器名称: create trigger biufer_employees_department_id 命名习惯: biufer(before insert update for each row) employees 表名 department_id 列名 触发语句 比如: 表或视图上的 dml 语句 ddl 语句 数据库关闭或启动,startup shutdown 等等 before insert or update of department_id on employees referencing old as old_value 54 for each row 说明: new as new_value 1)无论是否规定了 department_id ,对 employees 表进行 insert 的时候 2)对 employees 表的 department_id 列进行 update 的时候 3)触发器限制 when (new_value.department_id<>80 ) 限制不是必须的。此例表示如果列 department_id 不等于 80 的时候,触发器就会执行。 其中的 new_value 是代表更新之后的值。 触发操作: 是触发器的主体 begin :new_value.commission_pct :=0; end; 主体很简单,就是将更新后的 commission_pct 列臵为 0 触发: insert into employees(employee_id, last_name,first_name,hire_date,job_id,email,department_id,salary,commission_pct ) values( 12345,‘chen‘,‘donny‘, sysdate, 12, ‗donny@hotmail.com‘,60,10000,.25); select commission_pct from employees where employee_id=12345; 触发器不会通知用户,便改变了用户的输入值。 触发器类型: 1) 语句触发器 2) 行触发器 3) instead of 触发器 4) 系统条件触发器 5) 用户事件触发器 5、Job 创建和操作 1)设臵初始化参数 job_queue_processes alter system set job_queue_processes=n;(n>0)job_queue_processes 最大值为 1000 查看 job queue 后台进程 select name,description from v$bgprocess; 2)dbms_job package 用法介绍 包含以下子过程: broken()过程;change()过程;interval()过程;isubmit()过程;next_date()过程; 55 remove()过程;run()过程;submit()过程;user_export()过程;what()过程; (1)broken()过程更新一个已提交的工作的状态,典型地是用来把一个已破工作标记为未破工作。 这个过程有三个参数:job 、broken 与 next_date。 procedure broken (job in binary_integer,broken in boolean,next_date in date :=sysdate) job 参数是工作号,它在问题中唯一标识工作。 broken 参数指示此工作是否将标记为破——true 说明此工作将标记为破,而 flase 说明此工作 将标记为未破。 next_date 参数指示在什么时候此工作将再次运行。此参数缺省值为当前日期和时间。 job 如果由于某种原因未能成功之行,oracle 将重试 16 次后,还未能成功执行,将被标记为 broken 重新启动状态为 broken 的 job,有如下两种方式; a、利用 dbms_job.run()立即执行该 job begin dbms_job.run(:jobno) 该 jobno 为 submit 过程提交时返回的 job number end; / b、利用 dbms_job.broken()重新将 broken 标记为 false begin dbms_job.broken (:job,false,next_date) end; / (2) change()过程用来改变指定工作的设臵。 这个过程有四个参数:job、what 、next_date 与 interval。 procedure change (job in binary_integer, what in varchar2, next_date in date, interval in varchar2) 此 job 参数是一个整数值,它唯一标识此工作。 what 参数是由此工作运行的一块 pl/sql 代码块。 next_date 参数指示何时此工作将被执行。 interval 参数指示一个工作重执行的频度. (3)interval()过程用来显式地设臵重执行一个工作之间的时间间隔数。这个过程有两个参数:job 与 interval。 procedure interval (job in binary_integer,interval in varchar2) job 参数标识一个特定的工作。interval 参数指示一个工作重执行的频度。 (4) isubmit()过程用来用特定的工作号提交一个工作。这个过程有五个参数:job、what、next_date、 interval 与 no_parse。 procedure isubmit (job in binary_ineger, what in varchar2, next_date in date, interval in varchar2, no_parse in booean:=false) 56 这个过程与 submit()过程的唯一区别在于此 job 参数作为 in 型参数传递且包括一个由开发者提 供的工作号。如果提供的工作号已被使用,将产生一个错误。 (5)next_date()过程用来显式地设定一个工作的执行时间。这个过程接收两个参数:job 与 next_date。 procedure next_date(job in binary_ineger,next_date in date) job 标识一个已存在的工作。next_date 参数指示了此工作应被执行的日期与时间。 (6)remove()过程来删除一个已计划运行的工作。这个过程接收一个参数: procedure remove(job in binary_ineger); job 参数唯一地标识一个工作。这个参数的值是由为此工作调用 submit()过程返回的 job 参数 的值。已正在运行的工作不能由调用过程序删除。 (7)run()过程用来立即执行一个指定的工作。这个过程只接收一个参数: procedure run(job in binary_ineger) job 参数标识将被立即执行的工作。 (8)使用 submit()过程,工作被正常地计划好。 这个过程有五个参数:job、what、next_date、interval 与 no_parse。 procedure submit ( job out binary_ineger, what in varchar2, next_date in date, interval in varchar2, no_parse in booean:=false) job 参数是由 submit()过程返回的 binary_ineger。这个值用来唯一标识一个工作。 what 参数是将被执行的 pl/sql 代码块。 next_date 参数指识何时将运行这个工作。 interval 参数何时这个工作将被重执行。 no_parse 参数指示此工作在提交时或执行时是否应进行语法分析——true 指示此 pl/sql 代码在 它第一次执行时应进行语法分析,而 false 指示本 pl/sql 代码应立即进行语法分析。 (9)user_export()过程返回一个命令,此命令用来安排一个存在的工作以便此工作能重新提交,此程序 有两个参数:job 与 my_call。 procedure user_export(job in binary_ineger,my_call in out varchar2) job 参数标识一个安排了的工作。my_call 参数包含在它的当前状态重新提交此工作所需要的 正文。 (10)what()过程应许在工作执行时重新设臵此正在运行的命令。这个过程接收两个参数:job 与 what procedure what (job in binary_ineger, what in out varchar2) ---job 参数标识一个存在的工作。what 参数指示将被执行的新的 pl/sql 代码。 3)查看相关 job 信息 (1)相关视图 57 dba_jobs all_jobs user_jobs dba_jobs_running 包含正在运行 job 相关信息 (2)查看相关信息 select job, next_date, next_sec, failures, broken from dba_jobs; job next_date next_sec failures b ------- --------- -------- -------- - 9125 01-jun-01 00:00:00 4 n 14144 24-oct-01 16:35:35 0 n 9127 01-jun-01 00:00:00 16 y 3 rows selected. 正在运行的 job 相关信息 select sid, r.job, log_user, r.this_date, r.this_sec from dba_jobs_running r, dba_jobs j where r.job = j.job; sid job log_user this_date this_sec ----- ---------- ------------- --------- -------- 12 14144 hr 24-oct-94 17:21:24 25 8536 qs 24-oct-94 16:45:12 2 rows selected. job queue lock 相关信息 select sid, type, id1, id2 from v$lock where type = 'jq'; sid ty id1 id2 --------- -- --------- --------- 12 jq 0 14144 1 row selected. 4)实例操作 创建测试表 create table test(a date); ------create table 58 创建一个自定义过程 create or replace procedure myproc as begin insert into test values(sysdate); end; / --------------过程已创建。 创建 job variable job1 number; begin dbms_job.submit(:job1,'myproc;',sysdate,'sysdate+1/1440'); 运行 test 过程一次 end; / pl/sql 过程已成功完成。 运行 job begin dbms_job.run(:job1); end; / --每天 1440 分钟,即一分钟 pl/sql 过程已成功完成。 sql> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from test; 时间 ------------------- 2001/01/07 23:51:21 2001/01/07 23:52:22 2001/01/07 23:53:24 删除 job begin dbms_job.remove(:job1); end; / 6、后台脚本 编辑文件:dyk_name_mtable1.sql 写入以下内容: alter table owner.table_name1 move tablespace tablespace_name1; alter table owner.table_name2 move tablespace tablespace_name2; 编辑文件 dyk_name_mtable1.sh 59 sqlplus username/passwdString @TNSstring <>dyk_name_mtable2.out @ dyk_name_mtable1.sql ! 执行命令: Nohup dyk_name_mtable1.sh & 七、同义词操作 1、创建同义词 公共同义词 create public synonym table_name for owner.synonym_name; 私有同义词 create synonym table_name for owner.synonym_name; 2、删除同义词 删除公共同义词 drop synonym synonym_name public; 删除私有同义词 drop synonym synonym_name; 八、dblink 操作 1、dblink 创建 create [public] database link dblink_name connect to username identified by password using ‗connectstring‘ 例如:create public database link db_file_name1 connect to oracle identified by oracle_123 using CC 2、dblink 操作 select * from dba_objects_name1@db_file_name1 60 update table table_name@db_file_name1 set 字段=、、、 3、dblink 删除 drop [public] database link dblink_name 九、Sequences 操作 1、Sequences 创建 1)创建 sequence: 先要有 create sequence 或者 create any sequence 权限,执行以下命令就行: create sequence sequence_name increment by name_values1 -- 每次加几个 start with name_values1 -- 从 1 开始计数 nomaxvalue -- 不设臵最大值 nocycle -- 一直累加,不循环 cache 10; 一旦定义了 sequence_name,你就可以用 currval,nextval currval=返回 sequence 的当前值 nextval=增加 sequence 的值,然后返回 sequence 值 比如: sequence_name.currval sequence_name.nextval 可以使用 sequence 的地方: - 不包含子查询、snapshot、view 的 select 语句 - insert 语句的子查询中 - nsert 语句的 values 中 - update 的 set 中 可以看如下实例: insert into table_name values (empseq.nextval, 'row1', 'row2',7902, sysdate, 1200, null, 20); select empseq.currval from dual; 但是要注意的是: - 第一次 nextval 返回的是初始值;随后的 nextval 会自动增加你定义的 increment by 值,然后返回 61 增加后的值。currval 总是返回当前 currval,否则会出错。 sequence 的值,但是在第一次 nextval 初始化之后才能使用 一次 nextval 会增加一次 sequence 的值,所以如果你在同一个语句里面使用多个 nextval,其值就 是不一样的. - 如果指定 cache 值,oracle 就可以预先在内存里面放臵一些 sequence,这样存取的快些。cache 里面的取完后, oracle 自动再取一组到 cache。 使用 cache 或许会跳号, 比如数据库突然不正常 down 掉(shutdown abort),cache 中的 sequence 就会丢失. 所以可以在 create sequence 的时候用 nocache 防止这种情况。 2)alter sequence 你或者是该 sequence 的 owner,或者有 alter any sequence 权限才能改动 sequence. 可以 alter 除 start 至以外的所有 sequence 参数.如果想要改变 start 值,必须 drop sequence 再 re-create . alter sequence 的实例 alter sequence sequence_name increment by 10 maxvalue 10000 cycle -- 到 10000 后从头开始 nocache; 影响 sequence 的初始化参数: sequence_cache_entries =设臵能同时被 cache 的 sequence 数目。 2、Sequences 删除 drop sequence sequence_name; 十、数据库操作必须掌握技巧 1、中断正在执行的 session 连接 在 Oracle 数据库中,可以通过 kill session 的方式来终止一个进程,语法结构如下: alter system kill session 'sid,serial#' ; 被 kill 掉的 session,状态会被标记为 killed,Oracle 会在该用户下一次 touch 时清除该进程. 当一 个 session 被 kill 掉以后,该 session 的 paddr 被修改,如果有多个 session 被 kill,那么多个 session 的 paddr 都被更改为相同的进程地址: select s.pid, s.addr, a.sid, a.serial#, a.program, a.status, a.username, a.machine, a.command, a.sql_hash_value from v$process s, v$session a where s.addr = a.paddr and a.username is not null and a.username <> 'SYS' 62 很多时候,status 状态是 killed,这种情况下资源是无法释放的,要查询对应的 spid,在操作系统 级来 kill 这些进程,但是由于此时 v$session.paddr 已经改变,我们无法通过 v$session 和 v$process 关联来获得 spid。这样,需要知道当前进程的 addr 值,通过以下语句可以进行: 注意,查询 x$ksupr 视图需要 sys 用户才可以查看) select s.username, s.status, x.addr, x.ksllapsc, x.ksllapsn, x.ksllaspo, x.ksllid1r, x.ksllrtyp, decode(bitand(x.ksuprflg, 2), 0, null, 1) from x$ksupr x, v$session s where s.paddr(+) = x.addr and bitand(ksspaflg, 1) != 0 and s.username <> 'SYS'; 通过以上语句,找到进程的 addr 值,通过 addr 值就可以在 v$process 中找到 spid,然后可以 使用 Kill 或者 orakill 在系统级来杀掉这些进程。 当在 Oracle 中 kill session 以后, Oracle 只是简单的把相关 session 的 paddr 指向同一个虚拟地 址. 此时 v$process 和 v$session 失去关联,进程就此中断。然后 Oracle 就等待 PMON 去清除这些 Session. 所以通常等待一个被标记为 Killed 的 Session 退出需要花费很长的时间.如果此时被 Kill 的 process, 重新尝试执行任务,那么马上会收到进程中断的提示,process 退出,此时 Oracle 会立即启动 PMON 来清除该 session.这被作为一次异常中断处理: a)查看进程号: select s.pid, s.addr from v$process s where s.addr=‘ADDR_VALUES‘ b)kill 操作系统上进程,在 oracle 用户下执行如下命令: kill -9 进程号 2、用户密码修改和用户账号加锁、解锁 a) 用户修改密码: select username,password from dba_users where username='USER_NAME'; alter user user_name identified by passwd_char; conn user_name/passwd_char b)用户账号锁定: oracle 用户账号加锁:alter user user_name account lock; oracle 用户账号解锁:alter user user_name account unlock; 3、核心参数修改,数据库启动(必须 sys 用户权限): db_files 参数,在 UNIX 上存储方式是裸卷时,该参数值如果太小,如果当前裸设备文件的数 量超过默认 db_files 默认值,在当前表空间上添加空间,会报错 ORA-00059: maximum number of DB_FILES exceeded,只有修改当前的 db_files 值才可以解决(一般修改到 4000 以上),执行如下 步骤: 1)修改参数 63 show parameter db_files; alter system set db_files=values_number scope=spfile ; 2)重启数据库 shutdown immediate/startup show parameter db_files; process 参数值如果太小,则终端不能连接(一般修改到 4000 左右),执行如下命令: 1)参数修改 show parameter processes; alter system set processes=values_number scope=spfile ; 2)重启数据库 shutdown immediate/startup show parameter processes; 字符集修,改修改 server 端字符集(不建议使用) 在 oracle 8 之前,可以用直接修改数据字典表 props$来改变数据库的字符集。 但 oracle8 之后,至少有三张系统表记录了数据库字符集的信息,只改 props$表并不完全, 可能引起严重的后果。正确的修改方法如下: 1)连接数据库: sqlplus /nolog conn / as sysdba; 2)字符集修改(若此时数据库服务器已启动,则先执行 shutdown immediate 命令关闭数据库服务 器,然后执行以下命令): startup mount; alter system enable restricted session; alter system set job_queue_processes=0; alter system set aq_tm_processes=0; alter database open; alter database character set zhs16gbk; alter database national character set zhs16gbk; shutdown immediate; startup 3)查看字符集 select userenv('language') from dual select nls_charset_name(to_number('0354','xxxx')) from dual; 3、日志切换和初始化文件创建 管理联机重做日志文件 联机重做日志文件主要特点: 64 a 对数据库做的任何改变都会被记录在联机重做日志中 b 提供了一种恢复机制 c 必须组成组 d 至少需要两组 一个 oracle 数据库至少有两个重做日志文件,一个组一个。如果同一个组有两个文件,LGWR 会向两个文件写入相同的信息,同一组的每个成员都有一个相同的日志序列号。Log switch:将一个 日志组切换到另一个日志组,Log switch 引发了 checkpoint,Checkpoint:就修改过的数据回写到磁 盘的数据文件中。 LGWR 什么时候开始写 a 当一个事务 commit 的时候(一个事务 commit 并不是把数据写到数据文件中,而是写到联机 重做日志文件中) b 每 3 秒钟写一次 c 当 Redo Log Buffer 达到 1/3 满的时候 d Redo Log Buffer 中有超过 1M 内容的时候 e 在一个 check point 执行之前,LGWR 先把信息写到联机重做日志文件中。 手工切换日志 alter system switch logfile; 手工启动检查点 alter system checkpoint; 查询当前系统中日志的情况 select * from v$logfile; 增加一个新组 文件系统:alter database a dd logfile group 4 ('/directory_name/redo_name.log') size xxxxM; 裸卷:alter database add logfile group 4 ('/dev/vgX/rredo_xx_NN') size 1023M; 给日志组增加一个新成员 文件 系统: alter database add logfile member '/directory_name/redo_name.log' to group 4; 裸卷:alter database add logfile member '/dev/vgX/rredo_xx_NN' to group 2; 删除一个成员(只是在控制文件中删除相关信息,在 OS 中还是真实存在) alter database drop logfile member '/directory_name/redo_name.log'; alter database drop loggile member '/dev/vgX/rredo_xx_NN'; active 或 current 状态的组不能够被 drop 删除一个组 alter database drop logfile group 2; 重新放臵和重命名联机重做日志文件(在做此操作前,必须要对数据库进行全备份)有两种方法: a、使用 alter database rename file 命令 1) 关闭数据库 2) 拷贝联机重做日志文件到新目录下 65 3) 将数据库臵于 MOUNT 状态 4) 执行命令 alter database rename file '/directory_name/redo_name1.log ' to '/directory_name/redo_name2.log '; 5) 将数据库臵于 OPEN 状态 b、增加一个新成员,删除旧成员 alter database add logfile member '/directory_name/redo_name.log' to group 2; alter database drop logfile member '/directory_name/redo_name.log'; alter system switch logfile; 4、归档日志设臵 1)获取归档日志信息,主要在如下视图: v$archvied_log、v$archvie_dest、v$log_history、v$database、v$archive_processes archive log list; 2)ORACLE9i 单机归档模式修改: (1) archive log list; /察看归档模式 (2) shutdown immediate; (3) startup mount /重起数据库到 mount 状态 (4) alter database archivelog/noarchivelog; /修改数据库到归档模式 (5) alter system set log_archive_dest_1 = 'location=/archlog'; /修改归档日志存放目录 (6) show parameter log_archive_start; /查看数据库是否是自动归档 (7) alter system set log_archive_start=true scope=spfile; /修改数据库是自动归档 alter system set log_archive_format=‘XXX_ %t_%s.dbf‘ scope=spfile; /修改数据库归档文件名 (8) alter database open; /启动数据库 (9) show parameter log_archive_start; /检查修改自动归档是否成功 (10) alter system switch logfile; alter system switch logfile; (11) select name, value from v$parameter where name like 'log_archive_dest%'; 3)ORACLE10G 单机归档模式修改: (1) archive log list; /察看归档模式 (2) shutdown immediate; (3) startup mount /重起数据库到 mount 状态 (4) alter database archivelog/noarchivelog; /修改数据库到归档模式 (5) alter system set log_archive_dest_1 = 'location=/archlog'; /修改归档日志存放目录 (6) show parameter log_archive_start; /查看数据库是否是自动归档 (7) alter system set log_archive_start=TRUE scope=spfile;/修改数据库是自动归档 alter system reset log_archive_start scope=spfile sid='testdb1'; /一定是 sid 的命名字符串 执行:shutdow immediat;startup mount;create pfile form spfile; alter system set log_archive_format='XXX_%t_%s_%r.dbf' scope=spfile; /修改数据库归档文件 名 执行:shutdow immediat;startup mount;create pfile form spfile; (8) alter database open; /启动数据库 66 (9) show parameter log_archive_start; /检查修改自动归档是否成功 (10) alter system switch logfile; alter system switch logfile; (11) select name, value from v$parameter where name like 'log_archive_dest%'; 注意: alter system archive log start 如果是非自动启动 5、创建参数文件 pfile(initialization parameter file)用于 oracle8i,在 oracle9i 中也可以用,以文本形式存在,可 以用文本编辑器对其中参数进行修改;spfile(server-side initialization parameter file)用于 oracle9i, 以二进制文本形式存在,不能用文本编辑器对其中参数进行修改。spfile 改正了 pfile 管理混乱的问 题,在多结点的环境里,pfile 会有多个 image,启动时候需要跟踪最新的 image。这是个烦琐的过 程。用 spfile 以后,所有参数改变都写到 spfile 里面(只要定义 scope=spfile 或 both) 1)查看 spfile location(show parameter pfile/spfile;) show parameter spfile 2)从 spfile 获取 pfile sqlplus /nolog connect / as sysdba create pfile='/directory_name1/pfilesid.ora' from '/directory_name2/spfile'; create pfile='/directory_name1/pfilesid.ora' from spfile='/directory_name2/spfile'; sqlplus /nolog connect / as sysdba create pfile='/directory_name1/pfilesid.ora' from spfile; create pfile='/directory_name1/pfilesid.ora' from spfile='/directory_name2/spfile'; 3)从 pfile 获取 spfile shutdown immediate create '/directory_name1/spfile' from pfile='/directory_name2/pfile' create spfile='/directory_name1/spfile' from pfile='/directory_name2/pfile' shutdown immediate create '/directory_name1/spfile' from pfile='/directory_name2/pfile' create spfile='/directory_name1/spfile' from pfile='/directory_name2/pfile' 4)动态修改参数 alter system set parameter=value scope=spfile|both|memory alter system set parameter=value scope=spfile|both|memory (1)scope=spfile 对参数的修改仅记录在服务器初始化参数文件中。该选项同时适用于动态与静态的初始化参数。修 改后的参数只有下一次启动数据库时更改才会生效。 (2)scope=memory 67 对参数的修改记录在内存中,对于动态初始化参数,更改立即生效。修改并不会被记录在服务器端 的初始化参数中。下一次启动数据库时更改失效,不能用于静态初始化参数。 (3)scope=both 对参数的修改同时记录在内存中和服务器端的初始化参数文件中。为默认使用值。 5)查看初始化参数 show parameters 6)执行 startup 时,按如下顺序寻找初始化参数文件: (1)spfile.ora (2)pfile.ora (3)都没找到,则在默认位臵寻找默认名称的服务器端初始化参数文件。 (4)还没找到,则在默认位臵寻找默认名称的文本初始化参数文件。 7)查看系统全局区大小: show sga; select * from v$sga; 8)使用 pfile/spfile 启动数据库 如果你想使用 pfile 启动数据库,你可以在启动时指定 pfile 或者删除 spfile. startup pfile='/directory_name/pfile/init.ora'; 不能以同样的方式指定 spfile,但是可以创建一个包含 spfile 参数的 pfile 文件,指向 spfile. spfile 是一个自 oracle9i 引入的初始化参数,类似于 ifile 参数。spfile 参数用于定义非缺省路径的 spfile 文件。可以在 pfile 链接到 spfile 文件,同时在 pfile 中定义其他参数,如果参数重复设臵,后读取的 参数将取代先前的设臵。 9)查看系统是以 pfile 还是 spfile 启动 (1)查询 v$parameter 动态视图,如果以下查询返回空值,那么你在使用 pfile. select name,value from v$parameter where name='spfile'; (2)可以使用 show 命令来显示参数设臵,如果以下结果 value 列返回空值,那么说明你在使用 pfile: show parameter spfile (3)查询 v$spparameter 视图 如果以下查询返回 0 值,表示你在使用 pfile,否则表明你使用的是 spfile: select count(*) from v$spparameter where value is not null; 或者使用以下查询,如果 true 值返回非 0 值,那么说明我们使用的是 spfile. select isspecified, count(*) from v$spparameter group by isspecified; 10)查询 oracle 游标使用情况的方法 select * from v$open_cursor where user_name = 'TRAFFIC'; 6、控制文件备份和重建 1)备份数据库。修改控制文件过程中,出现的任何一个错误都会破坏用户的数据库,所以操作 68 以前做好完善的数据备份。 2)发出 alter database backup control file to trace 命令,建立了一个用户追踪文件,文件位臵 (user_dump_dest)该文件带有重建当前控制文件所需要的命令。 3)编辑在前面步骤中所产生的追踪文件,除 createcontrol file 语句外,删除追踪文件中的所有 行,设臵新的参数值。 4)正常关库,(shutdown normal)。将旧的控制文件移除到备份目录,确保 ORACLE 在数据库 启动时,不能在目录中找到控制文件的任何的副本,否则下一步操作会出现失败。 5)启动数据库。执行 startup nomount 启库,运行 create control file 追踪文件,这将重建新 参数值的控制文件。 6)执行 alter database open ,命令执行成功后,至此完成。 7、操作小技巧 1)Oracle 安装完成后用户初始口令 internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_temp 2)ORACLE9I AS WEB CACHE 的初始默认用户和密码 administrator/administrator 3)怎么创建数据库 oracle 8.0.5 怎么创建数据库? 用 orainst。如果有 motif 界面,可以用 orainst /m oracle 8.1.7 怎幺创建数据库? dbassist oracle 9i 怎幺创建数据库? dbca 4)oracle 中的裸设备指的是什么 裸设备就是绕过文件系统直接访问的储存空间,一般称之为裸卷 5)oracle 中如何区分 64-bit/32bit 版本 sqlplus '/ as sysdba' sql*plus: release 9.0.1.0.0 - production on mon jul 14 17:01:09 2003 (c) copyright 2001 oracle corporation. all rights reserved. connected to: oracle9i enterprise edition release 9.0.1.0.0 - production with the partitioning option jserver release 9.0.1.0.0 - production 或者直接从视图中查找: select * from v$version; oracle9i enterprise edition release 9.0.1.0.0 - production pl/sql release 9.0.1.0.0 - production 69 core 9.0.1.0.0 production tns for solaris: version 9.0.1.0.0 - production nlsrtl version 9.0.1.0.0 - production 6)oracle8i 中的 SVRMGR 什么意思 svrmgrl,Server Manager. 9i 下没有 svrmgrl 操作,已经改为用 sqlplus 工具 sqlplus /nolog -------变为归档日志型的 7)请问如何分辨某个用户是从哪台机器登陆 oracle 的 select machine , terminal from v$session; 8)用什么语句查询字段呢? desc table_name 可以查询表的结构 select field_name,... from ... 可以查询字段的值 select * from all_tables where table_name like '%' select * from all_tab_columns where table_name='??' 9)怎样得到触发器、过程、函数的创建脚本? desc user_source user_triggers 10)怎样计算一个表占用的空间的大小 Select owner,bytes/1024/1024,segment_name,segment_type,tablespace_name from dba_segments where segment_name=‘TABLE_NAME‘ 11)如何查看最大会话数? select * from v$parameter where name like 'proc%'; show parameter processes NAME TYPE VALUE ------------------------------ aq_tm_processes integer 1 db_writer_processes integer 1 job_queue_processes integer 4 log_archive_max_processes integer 1 processes integer 200 ---------这里为 200 个用户。 select * from v$license; 其中 sessions_highwater 纪录曾经到达的最大会话数 12)如何查看系统被锁的事务时间? select * from v$locked_object; 13)怎幺获取有哪些用户在使用数据库 select username from v$session; 14)数据表中的字段最大数是多少? 表或视图中的最大列数为 1000 15)怎样查得数据库的 SID ? select name from v$database; ----------也可以直接查看 init.ora 文件 70 16)如何在 Oracle 服务器上通过 sqlplus 查看本机 IP 地址: select sys_context('userenv','ip_address') from dual; 如果是登陆本机数据库,只能返回 127.0.0.1 17) unix 下怎幺调整数据库的时间:在 root 用户下执行 date 命令 su –root date -u 08010000 18)如何用 bbb 表的资料去更新 aaa 表的资料(必须要有关联的字段) update aaa set bns_snm= (select bns_snm from bbb where aaa.dpt_no=bbb.dpt_no) where bbb.dpt_no is not null; 19)如何查询 server 是不是 ops select * from v$option; 如果 parallel server=true 则是 ops 20)如何查询每个用户的权限? select * from dba_sys_privs; 21)如何将表移动表空间? alter table table_name move tablespace_name; 22)如何将索引移动表空间? alter index index_name rebuild tablespace tablespace_name; 23)在 linux,unix 下如何激活 dba studio? oemapp dbastudio 24)锁查询对象: v$lock, v$locked_object, v$session, v$sqlarea, v$process ; 查询锁的表的方法: select s.sid session_id, s.username, decode(lmode, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(lmode)) mode_held,decode(request, 0, 'none', 1, 'null', 2, 'row-s (ss)', 3, 'row-x (sx)', 4, 'share', 5, 's/row-x (ssx)', 6, 'exclusive', to_char(request)) mode_requested,o.owner || '.' || o.object_name || ' (' || o.object_type || ')', s.type lock_type, l.id1 lock_id1, l.id2 lock_id2 from v$lock l, sys.dba_objects o, v$session s where l.sid = s.sid and l.id1 = o.object_id; 25)如何解锁怎样解除 PROCEDURE 被意外锁定? alter system kill session ‗sid,serir#‘; (不过先要查出链接的 session sid) or 把该过程重新命名即可。 26)sqlplus 下如何修改编辑器 DEFINE _EDITOR=‚<编辑器的完整路经>‛ -- 必须加上双引号来定义新的 编辑器,也可以把这个写在$ORACLE_HOME/sqlplus/admin/glogin.sql 里面使它永久有效。 27)oracle 产生随机函数 dbms_random.random 28)linux 下查询磁盘竞争状况命令? sar -d 71 linux 下查询 cpu 竞争状况命令? sar –r 29)查询当前用户对象 select * from user_objects; select * from dba_segments; 30)如何获取错误信息和 dblink 链接状况 select * from user_errors; select * from dba_db_links; 31)查看数据库字符状况和查询表空间信息 select * from nls_database_parameters; select * from v$nls_parameters; select * from dba_data_files; 32)oracle 的 interal 用户要口令 修改 sqlnet.ora sqlnet.authentication_services=(nts) 33)出现 JAVA.EXE 的解决办法? 一般是将 oracleorahomexihttpserver 改成手工激活可以的 x 是 8 或 9 34)如何给表、列加注释? sql>comment on table 表 is '表注释';注释已创建。 sql>comment on column 表.列 is '列注释';注释已创建。 sql> select * from user_tab_comments where comments is not null; 35)如何查看各个表空间占用磁盘情况 sql> col tablespace format a20 select b.file_id 文 件 id 号 , b.tablespace_name 表 空 间 名 , b.bytes 字 节 数 , (b.bytes - sum(nvl(a.bytes, 0))) 已使用, sum(nvl(a.bytes, 0)) 剩余空间, sum(nvl(a.bytes, 0)) / (b.bytes) * 100 剩余百分比 from dba_free_space a, dba_data_files b where a.file_id = b.file_id group by b.tablespace_name, b.file_id, b.bytes order by b.file_id 36)如把 oracle 设臵为 mts 或专用模式 #dispatchers="(protocol=tcp) (service=sidxdb)" 加上就是 mts,注释 就是专用模式,sid 是指你的实例名。 37)如何才能得知系统当前的 SCN 号(必须要 sys 用户执行) select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe; 38)如何在 ORACLE 中取毫秒 9i 之前不支持,9i 开始有 timestamp. 9i 可以用 select systimestamp from dual; 39)如何在字符串里加回车? select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from dual ; 40)中文是如何排序的? oracle9i 之前,中文是按照二进制编码进行排序的。在 oracle9i 中新增了按照拼音、部首、笔 画排序功能。设臵 nls_sort 值 72 schinese_radical_m 按照部首(第一顺序)、笔划(第二顺序)排序 schinese_stroke_m 按照笔划(第一顺序)、部首(第二顺序)排序 schinese_pinyin_m 按照拼音排序 41)Oracle8i 中对象名是否可以用中文 可以 42)如何改变 win 中 sql*plus 启动选项 sql*plus 自身的选项设臵我们可以在 $oracle_home/sqlplus/admin/glogin.sql 中设臵。 43)怎样修改 oracel 数据库的默认日期格式 alter session set nls_date_format='yyyymmddhh24miss'; or 在 init.ora 中加上一行 nls_date_format='yyyymmddhh24miss' 44)如何将小表放入 keep 池中 alter table xxx storage(buffer_pool keep); 45)如何检查是否安装了某个 patch check that oraInventory 46)如何使 select 语句使查询结果自动生成序号 select rownum,COL from table; 47)如何知道数据库中某个表所在的 tablespace select tablespace_name from user_tables where table_name='TEST'; select * from user_tables 中有个字段 TABLESPACE_NAME,( oracle); select * from dba_segments where …; 48)怎样可以快速做一个和原表一样的备份表 create table new_table as (select * from old_table); 49)怎样在 sqlplus 下修改 procedure? select line,trim(text) t from user_source where name =‘A‘ order by line; 50)SQL Reference 是个什幺东西? 是一本 sql 的使用手册,包括语法、函数等等,oracle 官方网站的文档中 心有下载. 51)如何查看数据库的状态? unix 下 ps -ef | grep ora windows 下看服务是否起来,是否可以连上数据库 52)改变数据文件的大小? 用 alter database tablespace_name datafile /directory_name/datafile_name; 手工改变数据文件的大小,对于原来的 数据文件有没有损害。 53)怎样查看 oracle 中有哪些程序在运行之中 查看 v$sessions 表 54)怎幺可以看到数据库有多少个 tablespace_name select * from dba_tablespaces; 55)如何查出一条记录最后更新时间 可以用 logminer 察看 73 56)如何在 PL/SQL 中读写文件 utl_file 包允许用户通过 pl/sql 读写操作系统文件。 57)怎样把‚&‛放入一条记录中 insert into a values (translate ('at{&}t','at{}','at')); 58)exp 如何加 query 参数 exp user/pass file=a.dmp tables(bsempms) query='"where emp_no=\'s09394\'\"; 59)关于 oracle8i 支持简体和繁体的字符集问题 ZHS16GBK 可以支 60)Data Guard 是什么软件 就是 Standby 的换代产品 61)内核参数的应用? shmmax 含义:这个设臵并不决定究竟 Oracle 数据库或者操作系统使用多少物理内存,只决定了最多 可以使用的内存数目。这个设臵也不影响操作系统的内核资源,设臵方法:0.5*物理内存 实例:Set shmsys:shminfo_shmmax=10485760 shmmin 含义:共享内存的最小大小。 设臵方法:一般都设臵成为 1。 实例:Set shmsys:shminfo_shmmin=1: shmmni 含义:系统中共享内存段的最大个数。 实例:Set shmsys:shminfo_shmmni=100 shmseg 含义:每个用户进程可以使用的最多的共享内存段的数目。 实例:Set shmsys:shminfo_shmseg=20: semmni 含义:系统中 semaphore identifierer 的最大个数。 设臵方法:把这个变量的值设臵为这个系统上的所有 Oracle 的实例的 init.ora 中的最大的那个 processes 的那个值加 10。 实例:Set semsys:seminfo_semmni=100 semmns 含义:系统中 emaphores 的最大个数。 设臵方法:这个值可以通过以下方式计算得到:各个 Oracle 实例的 initSID.ora 里边的 processes 的值的总和(除去最大的 Processes 参数)+最大的那个 Processes ×2+10×Oracle 实例的个数。 实例:Set semsys:seminfo_semmns=200 semmsl: 含义:一个 set 中 semaphore 的最大个数。 设臵方法:设臵成为 10+所有 Oracle 实例的 InitSID.ora 中最大的 Processes 的值。 实例:Set semsys:seminfo_semmsl=-200 62)怎样查看哪些用户拥有 SYSDBA、 SYSOPER 权限 SQL>conn sys/change_on_install SQL>select * from V_$PWFILE_USERS; 74 63)如何对 CLOB 字段进行全文检索 select * from a where dbms_lob.instr(a.a,'k',1,1)>0; 64)如何显示当前连接用户 show user 65)如何查看数据文件放臵的路径 SQL>col file_name format a50 SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; 66)如何查看现有回滚段及其状态 ? sql> col segment format a30 sql>select segment_name,owner,tablespace_name, segment_id,file_id,status from dba_rollback_segs; 67)如何改变一个字段初始定义的 Check 范围 SQL> alter table xxx drop constraint constraint_name; 之后再创建新约束: SQL> alter table xxx add constraint constraint_name check(); 68)Oracle 常用系统文件有哪些 通过以下视图显示这些文件信息: v$database v$datafile -----数据文件 v$logfile -----日志文件 v$controlfile ---控制文件 v$parameter ----参数文件 69)如何内连接 INNER JOIN,如何外连接 select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+); select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no; 70)如何执行脚本 SQL 文件 sql>@$path/filename.sql; 71)如何快速清空一个大表 sql>truncate table table_name; 72)如何查有多少个数据库实例? sql>select * from v$instance; 73)如何查询数据库有多少表 sql>select * from all_tables; 74)如何测试 SQL 语句执行所用的时间? sql>set timing on ; sql>select * from tablename; 75)CHR()的反函数是? ascii() select char(65) from dual; select ascii('a') from dual; 75 76)字符串的连接 select concat(col1,col2) from table ; select col1||col2 from table ; 77)怎么把 select 出来的结果导到一个文本文件中 sql>spool c:\abcd.txt; sql>select * from table; sql >spool off; 78)怎样估算 SQL 执行的 I/O 数 ? sql>set autotrace on ; sql>select * from table; or sql>select * from v$filestat ; 可以查看 IO 数 79)如何在 sqlplus 下改变字段大小 alter table table_name modify (field_name varchar2(100)); 改大行,改小不行(除非都是空的) 80)如何查询某天的数据? select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm-dd'); 81) sql 语句中如何插入全年日期 create table BSYEAR (d date); insert into BSYEAR select to_date('20030101','yyyymmdd')+rownum-1 from all_objects where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd'); 82)如果修改表名? alter table old_table_name rename to new_table_name; 83)如何取得命令的返回状态值? sqlcode=0 84)如何知道用户拥有的权限 select * from dba_sys_privs; 85)怎样判断数据库是运行在归档模式下还是运行在非归档模式下 进入 dbastudio,历程--〉数据库---〉归档查看。 86)sql>startup pfile 和 ifile,spfiled 有什么区别? pfile 就是 Oracle 传统的初始化参数文件,文本格式的。ifile 类似于 c 语言里的 include,用 于把另一个文件引入 spfile 是 9i 里新增的并且是默认的参数文件,二进制格式 startup 后应该只 可接 pfile 87)如何搜索出前 N 条记录 select * from employee where rownum < n order by empno; 88)如何知道机器上的 Oracle 支持多少并发用户数? SQL>conn internal ; SQL>show parameter processes ; 89)db_block_size 是否可以修改 一般不可以﹐不建议这样做的。 76 90)如何统计两个表的记录总数 select (select count(id) from table_nameA)+(select count(id) from table_nameB) 总数 from dual; 91)怎样用 Sql 语句实现查找一列中第 N 大值? select * from (select t.*,dense_rank() over (order by sal) rank from employee)where rank = N; 92)如何在给现有的日期加上 2 年 select add_months(sysdate,24) from dual; 93)USED_UBLK 为负值表示什么意思 It is "harmless". 94)connect string 是指什么 应该是 tnsnames.ora 中的服务名后面的内容 95)怎样扩大 REDO LOG 的大小 建立一个临时的 redolog 组,然后切换日志,删除以前的日志,建立新的日志 96)返回大于等于 n 的最小整数值、返回小于等于 n 的最小整数值、返回当前月的最后一天 select ceil(n) from dual; select floor(n) from dual; select last_day(sysdate) from dual; 97)如何不同用户间数据导入 imp system/manager file=aa.dmp fromuser=user_old touser=user_new rows=y indexes=y ; 98)如何查找数据库表的主键字段的名称 sql>select * from user_constraintswhere constraint_type='p' and table_name='table_name'; 99)两个结果集互加的函数、两个结果集互减的函数 sql>select * from bsempms_old intersect select * from bsempms_new; sql>select * from bsempms_old union select * from bsempms_new; sql>select * from bsempms_old union all select * from bsempms_new; -------------------------------------------- sql>select * from bsempms_old minus select * from bsempms_new; 100)日期的各部分的常用的的写法 取时间点的年份的写法: select to_char(sysdate,'yyyy') from dual; 取时间点的月份的写法: select to_char(sysdate,'mm') from dual; 取时间点的日的写法: select to_char(sysdate,'dd') from dual; 取时间点的时的写法: select to_char(sysdate,'hh24') from dual; 取时间点、分的写法: select to_char(sysdate,'mi') from dual; 取时间点、秒的写法: select to_char(sysdate,'ss') from dual; 取时间点的日期的写法: select trunc(sysdate) from dual; 取时间点的时间的写法: select to_char(sysdate,'hh24:mi:ss') from dual; 77 日期,时间形态变为字符形态 select to_char(sysdate) from dual; 将字符串转换成日期或时间形态: select to_date('2003/08/01') from dual; 返回参数的星期几的写法: select to_char(sysdate,'d') from dual; 返回参数一年中的第几天的写法: select to_char(sysdate,'ddd') from dual; 返回午夜和参数中指定的时间值之间的秒数的写法: select to_char(sysdate,'sssss') from dual; 返回参数中一年的第几周的写法: select to_char(sysdate,'ww') from dual; currval 和 nextval 为表创建序列 create sequence empseq ... ; select empseq.currval from dual ; 自动插入序列的数值 insert into emp values (empseq.nextval, 'lewis', 'clerk', 7902, sysdate, 1200, null,20) ; 101)ROWNUM 按设定排序的行序号、ROWID 返回行的物理地址 SELECT * FROM emp WHERE ROWNUM < 10 ; SELECT ROWID, ename FROM emp WHERE deptno = 20 ; 102)将 N 秒转换为时分秒格式 set serverout on declare N number := 1000000; ret varchar2(100); begin ret := trunc(n/3600) || ' 小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ; dbms_output.put_line(ret); end; 103)如何查询做比较大的排序的进程 select b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, a.username, a.osuser, a.status from v$session a,v$sort_usage b where a.saddr = b.session_addr order by b.tablespace, b.segfile#, b.segblk#, b.blocks ; 104)如何查询做比较大的排序的进程的 SQL 语句 select /*+ ORDERED */ sql_text from v$sqltext a where a.hash_value = ( select sql_hash_value from v$session b where b.sid = &sid and b.serial# = &serial) order by piece asc ; 78 105)如何查找重复记录、如何删除重复记录 select * from table_name where rowid!=(select max(rowid) from table_name d where table_name.col1=d.col1 and table_name.col2=d.col2); ---------------------------------------------------- delete from table_name where rowid!=(select max(rowid) from table_name d where table_name.col1=d.col1 and table_name.col2=d.col2); 106)如何快速编译所有视图 sql >spool view1.sql sql >select ‗alter view ‗||tname||‘ compile;‘ from tab; sql >spool off 然后执行 view1.sql 即可。 sql >@view1.sql; 107)ora-01555 snapshot too old 的解决办法 增加 minextents 的值,增加区的大小,设臵一个高的 optimal 值。事务要求的回滚段空间不 够,表现为表空间用满(ora-01560 错误),回滚段扩展到达参数 maxextents 的值(ora-01628) 的解决办法.向回滚段表空间添加文件或使已有的文件变大;增加 maxextents 的值。 108)如何加密 ORACLE 的存储过程 下列存储过程内容放在 AA.SQL 文件中 create or replace procedure testccb(i in number) as begin dbms_output.put_line('输入参数是'||to_char(i)); end; sql>wrap iname=a.sql; pl/sql wrapper: release 8.1.7.0.0 - production on tue nov 27 22:26:48 2001 copyright (c) oracle corporation 1993, 2000. all rights reserved. processing aa.sql to aa.plb 运行 aa.plb sql> @aa.plb ; 109)如何监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" from v$session_Wait group by event order by 4; 110)如何查看回滚段争用情况 select name, waits, gets, waits/gets "ratio" from v$rollstat c, v$rollname d where c.usn = d.usn; 111)如何监控表空间的 I/O 比例 select b.tablespace_name name,b.file_name "file",a.phyrds pyr, 79 a.phyblkrd pbr,a.phywrts pyw, a.phyblkwrt pbw from v$filestat a, dba_data_files b where a.file# = b.file_id order by b.tablespace_name; 112)如何监控文件系统的 I/O 比例 select substr(c.file#,1,2) "#", substr(c.name,1,30) "name", c.status, c.bytes, d.phyrds, d.phywrts from v$datafile c, v$filestat d where c.file# = d.file#; 113)如何在某个用户下找出所有索引 select user_indexes.table_name, user_indexes.index_name,uniqueness,column_name from user_ind_columns, user_indexes where user_ind_columns.index_name = user_indexes.index_name and user_ind_columns.table_name = user_indexes.table_name order by user_indexes.table_type, user_indexes.table_name, user_indexes.index_name, column_position; 114)如何监控 SGA 的命中率 select a.value + b.value "logical_reads", c.value "phys_reads", round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "buffer hit ratio" from v$sysstat a, v$sysstat b, v$sysstat c where a.statistic# = 38 and b.statistic# = 39and c.statistic# = 40; 115)如何监控 SGA 中字典缓冲区的命中率 select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" from v$rowcache where gets+getmisses <>0 group by parameter, gets, getmisses; 116)如何监控 SGA 中共享缓存区的命中率,应该小于 1% select sum(pins) "Total Pins", sum(reloads) "Total Reloads", sum(reloads)/sum(pins) *100 libcache from v$librarycache; select sum(pinhits-reloads)/sum(pins) "hit radio", sum(reloads)/sum(pins) "reload percent" from v$librarycache; 117)如何显示所有数据库对象的类别和大小 select count(name) num_instances ,type ,sum(source_size) source_size , sum(parsed_size) parsed_size ,sum(code_size) code_size , sum(error_size) error_size, sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required from dba_object_size group by type order by 2; 118)监控 SGA 中重做日志缓存区的命中率,应该小于 1% 80 select name, gets, misses, immediate_gets, immediate_misses, decode(gets,0,0,misses/gets*100) ratio1, decode(immediate_gets+immediate_misses,0,0, immediate_misses/(immediate_gets+immediate_misses)*100) ratio2 from v$latch where name in ('redo allocation', 'redo copy'); 119)监控内存和硬盘的排序比率,最好使它小于 0.1,否则增加 sort_area_size select name, value from v$sysstat where name in ('sorts (memory)', 'sorts (disk)'); 120)如何监控当前数据库谁在运行什么 SQL 语句 select osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece; 121)如何监控字典缓冲区 select (sum(pins - reloads)) / sum(pins) "lib cache" from v$librarycache; select (sum(gets - getmisses - usage - fixed)) / sum(gets) "row cache" from v$rowcache; select sum(pins) "executions", sum(reloads) "cache misses while executing" from v$librarycache; 后者除以前者,此比率小于 1%,接近 0%为好。 select sum(gets) "dictionary gets",sum(getmisses) "dictionary cache get misses" from v$rowcache 122)监控 MTS select busy/(busy+idle) "shared servers busy" from v$dispatcher; 此值大于 0.5 时,参数需加大 select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher'; select count(*) from v$dispatcher; select servers_highwater from v$mts; servers_highwater 接近 mts_max_servers 时,参数需加大 123)如何知道当前用户的 ID 号 sql>show user; or sql>select user from dual; 124)如何查看碎片程度高的表 select segment_name table_name , count(*) extents from dba_segments where owner not in ('sys', 'system') group by segment_name having count(*) = (select max( count(*) ) from dba_segments group by segment_name); 125)如何知道表在表空间中的存储情况 select segment_name,sum(bytes),count(*) ext_quan from dba_extents 81 where tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name; 126)如何知道索引在表空间中的存储情况 select segment_name,count(*) from dba_extents where segment_type='index' and owner='&owner' group by segment_name; 127)如何知道使用 CPU 多的用户 session -------- 11 是 cpu used by this session select a.sid,spid,status,substr(a.program,1,40) prog, a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 128)如何知道监听器日志文件、如何知道监听器参数文件、如何知道 tns 连接文件? 以 8i 为例 $oracle_home/network/log/listener.log 以 8i 为例 $oracle_home/network/admin/listener.ora 以 8i 为例 $oracle_home/network/admin/tnsnames.ora 如何知道 sql*net 环境文件 以 8i 为例 $oracle_home/network/admin/sqlnet.ora 如何知道警告日志文件 以 8i 为例 $oracle_home/admin/sid/bdump/sidalrt.log 如何知道基本结构 以 8i 为例 $oracle_home/rdbms/admin/standard.sql 如何知道建立数据字典视图 以 8i 为例 $oracle_home/rdbms/admin/catalog.sql 如何知道建立审计用数据字典视图 以 8i 为例 $oracle_home/rdbms/admin/cataudit.sql 如何知道建立快照用数据字典视图 以 8i 为例 $oracle_home/rdbms/admin/catsnap.sql 129)sql 语句的优化方法(主要基于 oracle9i 的) /*+all_rows*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: select /*+all+_rows*/ emp_no,emp_nam,dat_in 82 from bsempms where emp_no='ccbzzp'; /*+first_rows*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.例如: select /*+first_rows*/ emp_no,emp_nam,dat_in from bsempms where emp_no='ccbzzp'; /*+choose*/ 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;表明 如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;例如: select /*+choose*/ emp_no,emp_nam,dat_in from bsempms where emp_no='ccbzzp'; /*+rule*/ 表明对语句块选择基于规则的优化方法.例如: select /*+ rule */ emp_no,emp_nam,dat_in from bsempms where emp_no='ccbzzp'; /*+full(table)*/ 表明对表选择全局扫描的方法.例如: select /*+full(a)*/ emp_no,emp_nam from bsempms a where emp_no='ccbzzp'; /*+rowid(table)*/ 提示明确表明对指定表根据 rowid 进行访问.例如: select /*+rowid(bsempms)*/ * from bsempms where rowid>='aaaaaaaaaaaaaa' and emp_no='ccbzzp'; /*+cluster(table)*/ 提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.例如: select /*+cluster */ bsempms.emp_no,dpt_no from bsempms,bsdptms where dpt_no='tec304' and bsempms.dpt_no=bsdptms.dpt_no; /*+index(table index_name)*/ 表明对表选择索引的扫描方法.例如: select /*+index(bsempms sex_index) use sex_index because there are fewmale bsempms */ from bsempms where sex='m'; /*+index_asc(table index_name)*/ 表明对表选择索引升序的扫描方法.例如: select /*+index_asc(bsempms pk_bsempms) */ from bsempms where dpt_no='ccbzzp'; /*+index_combine*/ 为指定表选择位图访问路经,如果 index_combine 中没有提供作为参数的索引,将选择出位图索 引的布尔组合方式.例如: select /*+index_combine(bsempms sal_bmi hiredate_bmi)*/ * from bsempms where sal<5000000 and hiredate /*+index_join(table index_name)*/ 提示明确命令优化器使用索引作为访问路径.例如: select /*+index_join(bsempms sal_hmi hiredate_bmi)*/ sal,hiredate from bsempms where sal<60000; 83 /*+index_desc(table index_name)*/ 表明对表选择索引降序的扫描方法.例如: select /*+index_desc(bsempms pk_bsempms) */ from bsempms where dpt_no='ccbzzp'; /*+index_ffs(table index_name)*/ 对指定的表执行快速全索引扫描,而不是全表扫描的办法.例如: select /*+index_ffs(bsempms in_empnam)*/ * from bsempms where dpt_no='tec305'; /*+add_equal table index_nam1,index_nam2,...*/ 提示明确进行执行规划的选择,将几个单列索引的扫描合起来.例如: select /*+index_ffs(bsempms in_dptno,in_empno,in_sex)*/ * from bsempms where emp_no='ccbzzp' and dpt_no='tdc306'; /*+use_concat*/ 对查询中的 where 后面的 or 条件进行转换为 union all 的组合查询.例如: select /*+use_concat*/ * from bsempms where dpt_no='tdc506' and sex='m'; /*+no_expand*/ 对于 where 后面的 or 或者 in-list 的查询语句,no_expand 将阻止其基于优化器对其进行扩展. 例如: select /*+no_expand*/ * from bsempms where dpt_no='tdc506' and sex='m'; /*+nowrite*/ 禁止对查询块的查询重写操作. /*+rewrite*/ 可以将视图作为参数. /*+merge(table)*/ 能够对视图的各个查询进行相应的合并.例如: select /*+merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (selet dpt_no,avg(sal) as avg_sal from bsempms b group by dpt_no) v where a.dpt_no=v.dpt_no and a.sal>v.avg_sal; /*+no_merge(table)*/ 对于有可合并的视图不再合并.例如: select /*+no_merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (selet dpt_no,avg(sal) as avg_sal from bsempms b group by dpt_no) v where a.dpt_no=v.dpt_no and a.sal>v.avg_sal; /*+ordered*/ 根据表出现在 from 中的顺序,ordered 使 oracle 依此顺序对其连接.例如: 84 select /*+ordered*/ a.col1,b.col2,c.col3 from table1 a,table2 b,table3 c where a.col1=b.col1 and b.col1=c.col1; /*+use_nl(table)*/ 将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.例如: select /*+ordered use_nl(bsempms)*/ bsdptms.dpt_no, bsempms.emp_no,bsempms.emp_nam from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; /*+use_merge(table)*/ 将指定的表与其他行源通过合并排序连接方式连接起来.例如: select /*+use_merge(bsempms,bsdptms)*/ * from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; /*+use_hash(table)*/ 将指定的表与其他行源通过哈希连接方式连接起来.例如: select /*+use_hash(bsempms,bsdptms)*/ * from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; /*+driving_site(table)*/ 强制与 oracle 所选择的位臵不同的表进行查询执行.例如: select /*+driving_site(dept)*/ * from bsempms,dept@bsdptms where bsempms.dpt_no=dept.dpt_no; /*+leading(table)*/ 将指定的表作为连接次序中的首表. /*+cache(table)*/ 当进行全表扫描时,cache 提示能够将表的检索块放臵在缓冲区缓存中最近 最少列表 lru 的最近使用端例如: select /*+full(bsempms) cahe(bsempms) */ emp_nam from bsempms; /*+nocache(table)*/ 当进行全表扫描时,cache 提示能够将表的检索块放臵在缓冲区缓存中最近最少列表 lru 最近使用端,例如: select /*+full(bsempms) nocahe(bsempms) */ emp_nam from bsempms; /*+append*/ 直接插入到表的最后,可以提高速度. insert /*+append*/ into test1 select * from test4 ; /*+noappend*/ 通过在插入语句生存期内停止并行模式来启动常规插入. insert /*+noappend*/ into test1 select * from test4 ; 130)oracle 內部函数、字符串篇 如何得到字符串的第一个字符的 ascii 值? ascii(char) select ascii('abcde') from dual; 的 85 結果: 65 如何得到数值 n 指定的字符? chr(n) select chr(68) from dual; 結果: d 如何连接两个字符串? concat(char1,char2) select concat('abc','defgh') from dual; 結果: 'abcdefgh' 如何將列中的数值替代为字符串? decode(char,n1,char1,n2,char2...) select decode(day,1,'sun',2,'mon') from dual; initcap(char) 將字符串 char 的第一个字符为大写,其余为小写. select initcap('abcde') from dual; length(char) 取一字符串 char 的长度. select length('abcde') from dual; lower(char) 将字符串 char 全部变为小写. select lower('abcde') from dual; lpad(char1,n,char2) 用字符串 char2 包括的字符左填 char1,使其长度为 n. select lpad('abcdefg',10'123') from dual; 結果: '123abcdefg' ltrim(char,set) 从字符串 char 的左邊移去字符串 set 中的字符,直到第一个不是 set 中的字符为止. select ('cdefg','cd') from dual; 結果: 'efg' nls_initcap(char) 取字符 char 的第一个字符大写,其余字符为小写. select nls_initcap('abcde') from dual; nls_lower(char) 將字符串 char 包括的字符全部小写. select nls_lower('aaaa') from dual; nls_upper(char) 將字符串 char 包括的字符全部大写. select nls_upper('aaaa') from dual; replace(char1,char2,char3) 用字符串 char3 代替每一个列值为 char2 的列,其結果放在 char1 中. select replace(emp_no,'123','456') from dual; rpad(char1,n,char2) 用字符串 char2 右填字符串 char1,使其长度为 n. select rpad('234',8,'0') from dual; 86 rtrim(char,set) 移去字符串 char 右边的字符串 set 中的字符,直到最后一个不是 set 中的字符为止. select rtrim('abcde','de') from dual; substr(char,m,n) 得到字符串 char 从 m 处开始的 n 个字符. 双字节字符,一个汉字为一个字符的. select substr('abcde',2,3) from dual; substrb(char,m,n) 得到字符串 char 从 m 处开始的 n 个字符. 双字节字符,一个汉字为二个字符的. select substrb('abcde',2,3) from dual; translate(char1,char2,char3) 將 char1 中的 char2 的部分用 char3 代替. select translate('abcdefgh','de','mn') from dual; upper(char) 將字符串 char 全部为大写. add_months(d,n) 將 n 个月增加到 d 日期. select add_months(sysdate,5) from dual; last_day(d) 得到包含 d 日期的月份的最后的一天的日期. select last_day(sysdate) from dual; month_between(d1,d2) 得到两个日期之间的月数. select month_between(d1,d2) from dual; next_day(d,char) 得到比日期 d 晚的由 char 命名的第一个周日的日期. select next_day(to_date('2003/09/20'),'satday') from dual; rount(d,fmt) 得到按指定的模式 fmt 舍入到的最近的日期. select rount('2003/09/20',month) from dual; sysdate 得到当前系统的日期和时间. select sysdate from dual; to_char(d,fmt) 将日期 date 转换为 fmt 的字符串. select to_char(sysdate,'yyyy/mm/dd') from dual; to_date(char,fmt) 将字符串 char 按 fmt 的格式转换为日期. select to_date('2003/09/20','yyyy/mm/dd') from dual; abs(n) 得到 n 的绝对值. select abs(-6) from dual; ceil(n) 得到大于或等于 n 的最大整数. select ceil(5.6) from dual; 87 cos(n) 得到 n 的余弦值. select cos(1) from dual; sin(n) 得到 n 的正弦值. select sin(1) from dual; cosh(n) 得到 n 的双曲余弦值. select cosh(1) from dual; exp(n) 得到 n 的 e 的 n 次幂. select exp(1) from dual; floor(n) 得到小于或等于 n 的最小整数. select floor(5.6) from dual; ln(n) 得到 n 的自然对数.select ln(1) from dual; log(m,n) 得到以 m 为底 n 的对数. select log(2,8) from dual; mod(m,n) 得到 m 除以 n 的余数. select mod(100,7) from dual; power(m,n) 得到 m 的 n 冪. select power(4,3) from dual; round(n,m) 将 n 舍入到后 m 小数点位. select (78.87653,2) from dual; sign(n) 当 n<0 时,得到-1;当 n>0 时,得到 1;当 n=0 时,得到 0; select sign(99) from dual; sinh(n) 得到 n 的双曲正弦值. select sinh(1) from dual; sort(n) 得到 n 的平方根,n>=0;select sort(9) from dual; tan(n) 得到 n 的正切值.select tan(0) from dual; tanh(n) 得到 n 的双曲正切值.select tanh(0) from dual; trunc(n,m) 得到在 m 位截断的 n 的值. select trunc(7.7788,2) from dual; 88 count() 计算满足条件的记录数. select count(*) from table1 where col1='aaa'; max() 对指定的列求最大值. select max(col1) from table1; min() 对指定的列求最小值. select min(col1) from table1; avg() 对指定的列求平均值. select avg(col1) from table1; sum() 计算算列的和. select sum(col1) from dual; to_number(char) 將包含外部语法 rowid 的 char 或 varchar2 数值转换为內部的二进制语法, 参数 char 必須 是包含外部语法的 rowid 的 18 字符的字符串. chartorowid(char) select name from bsempms where rowid=chartorowid('aaaafzaabaaacp8aao'); name : leixue convert(char,dest_char_set,source_char_set) convert 將字符串 char 中的字符从 source_char_set 标识的字符集转换为由 dest_char_set 标识的字符集 select convert('grob','us7ascii','we8hp') 'conversion' from pubs; conversion: gross hextoraw(char) 將包含十六进制的 char 转换为一个 raw 数值. insert into bsempms(raw_column) select hextoraw('7d') from test; rawtohex(raw) 將 raw 数值转换为一个包含十六进制的 char 值. select rawtohex(raw_column) 'conversion' from bsempms; conversion: 7d rowidtochar(rowid) 將一个 rowid 数值转换为 varchar2 数据类型. select rowid from bsempms where rowidtochar(rowid) like '%br1aab%'; to_multi_byte(char) 將 char 中的单字节转换为等价的多字节字符. select to_multi_byte('asfdfd') from test; to_single_byte(char) 將 char 中的多字节转换为等价的单字节字符. select to_single_byte('asfdfd') from test; translate using(text using {char_cs|nchar_cs}) 89 將文本 text 按照指定的转换方式转换成数据库字符集和民族字符集.其中 text 是待转换 的.using char_cs 参数转换 text 为数据库字符集,输出数据类型是 varchar2。using nchar_cs 参数 转 换 text 为 数 据 库 字 符 集 , 输 出 数 据 类 型 是 nvarchar2.create table test(char_col char(20),nchar_col nchar(20));insert into test values('hi,n'bye'); select * from test; dump(expr,return_format,start_position,length) 返回一个包含数据类型代码,字节长度等內部表示信息的 varchar2 值.返回結果是当前数据 库字符集,数据类型按照下面規定的內部数据类型的编码作为一 个数字进行返回: 代码数据类型,0 varchar2、1 number、8 long、12 date、23 raw、24 long raw、 69 rowid、96 char、106 msslabel 参数 retuen_format 指定按照下面的基数表示返回的数值. return_format result 8 进制、10 10 进制、16 16 进制、17 单字符表示如果参数 return_format 沒有指定,则按十进制 表示返回.如果参数 start_position 和 length 被指定,则從 start_position 開始的长 为 length 的字节將被返回,缺省是返回整数表示. select dump('abc',1016) from test; select dump(ename,8,3,2) 'example' from emp where name='ccbzzp'; empty_b|clob() 返回一个空的 lob 定位符,用在初始化 lob 變量,或用在 insert 及 update 声聲明去初始化 lob 列或將其属性臵为空. insert into table1 values(empty_blob()); update table1 set clob_col=empty_blob(); bfilename('directory','filename') 返回一个 bfile 定位符,相同的二进制 lob 物理文件在服务器的文件系統上. 目录 directory 是指在服务器的文件系統上实际搜索路径全名的別名. filename 是指服务器的文件系統的文件名. insert into file_tab values(bfilename('lob_dir','image1.gif')); greatest(expr,expr,...) greatest 返回参数的最大值. select greatest('harry','harriot','harold') 'sample' from table1; least(expr,expr,...) least 返回参数的最小值. select least('harry','harriot','harold') 'sample' from table1; nls_charset_decl_len(bytecnt,csid) 返回一个 nchar 列的寬度. select nls_charset_decl_len(200,nls_charset_id('ja16eefdfdf')) from table1; nls_charset_id(text) 返回相应于 nls 字符集名字的 nls 字符集 id 数. select nls_charset_d('jadfdffdf') from table1; nls_charset_name(n) 返回相应于 id 数 n 的 nls 字符集名称. select nls_charset_name(2) from table1; nvl(expr1,expr2) 若 expr1 是 null,则返回 expr2,否则返回 expr1. select name,nvl(to_char(comm),'not application') from table1; 90 uid 返回唯一标识当前数据库用户的整数. select uid from table1; user 用 varchar2 数据类型返回当前 oracle 用戶的名称. select user,uid from table1; userenv(option) 返回当前的会话信息. option='isdba'若当前是 dba 角色,则为 true,否则 false. option='language'返回数据库的字符集. option='sessionid'为当前会话标识符. option='entryid'返回可审计的会话标识符. option='lang'返回会话语言名称的 iso 简记. option='instance'返回当前的实例. select userenv('language') from dual; vsize(expr) 返回 expr 內部表示的字节数. select name,vsize(name) from table1; deref(e) 返回参数 e 的对象引用. select deref(c2) from table1; reftohex(r) 将参数 r 转换为 16 进制. select reftohex(c2) from table1; make_ref(table,key,key...) 通过把給定的键作为主键来创建給定视图对象中一行的引用. create type t1 as object(a number,b number); create table tb1(c1 number,c2 number,primary key(c1,c2)); create view v1 of t1 with object oid(a,b) as select * from tb1; select make_ref(v1,1,3) from pubs; stddev(distinct|all x) stddev 給出一組行值的标准差. select stddev(salary) as example from employee; variance(distinct|all x) variance 返回一組行中所有 value 的方差. select variance(salary) as example from employee; 131)9i 管理的 v$视图 v$access 显示当前被锁定的数据库中的对象及正在访问他们的会话. v$active_instances 为当前安装的数据库中出现的所有实例建立从实例名到实例号的映射. v$active_sess_pool_mth 所有活动的会话池资源分配方法. 91 v$aq 当前数据库中的队列的统计量. v$archive 归档所需的重做日志文件中的信息. v$archive_dest 当前实例的所有归档日志目的文件及它们的当前值,模式,状态. v$archive_processes 为一个实例提供不同的 arch 进程状态的信息. v$archive_log 控制文件中的归档日志信息. v$backup 所有联机数据文件的备份状态. v$backup_async_io 从控制文件中显示备份集的信息. v$backup_corruption 从控制文件中显示数据文件备份中有关损坏的信息. v$backup_datafile 从控制文件中显示备份数据文件和备份控制文件的信息. v$backup_device 显示关于支持备份设备的信息. v$backup_piece 从控制文件中显示备份块的信息. v$backup_redolog 从控制文件中显示关于备份集中归档日志的信息. v$backup_set 从控制文件中显示备份集的信息. v$backup_sync_io 从控制文件中显示备份集的信息. v$bgprocess 描述后台进程. v$bh 是 9i 的实时应用集群视图.为系统全局区中的每一个缓冲区给出了状态和探查次数. v$bsp 显示用在缓存中块服务器后台进程上的统计信息. v$buffer_pool 显示实例缓冲池的信息. v$buffer_pool_statistics 显示实例缓冲池的信息. v$cache 包含当前实例的 sga 中的每一个块的头部信息. v$cache_lock 包含当前实例的 sga 中的每一个块的头部信息. 和 v$cache 非常相似,除特使平台锁管理 器标识符号不同外. v$cache_transfer 92 除了只显示那些被探查了至少一次的块的信息外,和 v$cache 功能相同. v$circuit 包含关于虚电路的信息,是用户通过调度程序和服务器到数据库的所有连接. v$class_ping 显示每一个块类中被探查块的数目. v$compatibility 显示数据库实例使用的特征,可以阻止数据库回到早期的版本中去. v$compatseg 显示数据库实例使用的永久性特征,可以阻止数据库回到早期的版本中去. v$context 列出当前对话的设臵属性. v$controlfile 列出控制文件的名称. v$controlfile_record_section 显示控制文件记录部分的信息. v$copy_corruption 显示控制文件中数据文件损坏的信息. v$cr_block_server 显示用在缓存中块服务器后台进程上的统计信息. v$database 包含控制文件中数据库的信息. v$datafile 包含控制文件中数据库文件的信息. v$datafile_copy 包含控制文件中数据库文件副本的信息. v$datafile_header 显示数据文件头部的数据文件信息. v$db_cache_advice 根据缓存的大小估计出物理读的数量. v$db_object_cache 缓存在库缓存中的数据库对象. v$db_pipes 显示实例中的共享池当前描绘的管道. v$dbfile 列出组成数据库的所有数据文件. v$dblink 查询会话所打开的所有数据库连接. v$deleted_object 显示控制文件中被删除归档日志. v$dispatcher 提供调度进程的信息. v$dispatcher_rate 为调度进程提供优质提供速率统计量. v$dlm_all_locks 93 列出当前所有锁的信息. v$dlm_convert_local 本地锁转换操作所消耗的时间. v$dlm_convert_remote 远程锁转换操作所消耗的时间. v$dlm_latch 它是过时的,参见 v$latch v$dlm_locks 这些是锁管理器已知的被阻塞或阻塞其他对象的锁信息. v$dlm_misc 显示多种 dlm 统计量. v$dlm_ress 显示当前锁管理器已知的全部资源的信息. v$enabledprive 显示被授予的特权. v$enqueue_lock 显示排队对象所拥有的全部锁. v$event_name 包含等待事件的信息. v$execution 显示并行执行中的信息. v$false_ping 可能得到探查失败的缓冲区. v$fast_start_servers 执行并行操作事务恢复的所有从属操作的信息. v$fast_start_transactions 恢复中的事务进展信息. v$file_cache_transfer 显示每个数据文件中探查的块的数量. v$file_ping 显示每个数据文件被探查的块数目. v$filestat 包含文件关于读/写统计量信息. v$fixed_table 显示数据库中所有动态性能表和视图及导出表. v$fixed_view_definition 显示所有固定视图的定义. v$gc_elements_with_collisions 可以找到保护多缓存的锁. v$ges_blocking_enqueue 这些是锁管理器已知的被阻塞或阻塞其他对象的锁信息. v$ges_convert_local 本地锁转换操作所消耗的时间. v$ges_convert_remote 94 远程锁转换操作所消耗的时间. v$ges_enqueue 显示当前锁管理员知道的所有的锁. v$ges_latch 参见 v$latch v$ges_resource 显示当前锁管理器已知的全部资源的信息. v$ges_statistics 显示多种 dlm 统计量. v$global_blocked_locks 显示全局块锁. v$global_transaction 显示当前激活的全局事务的信息. v$hs_agent 标识当前运行在一个给定的主机上的 hs 代理的集合. v$hs_session oracle 服务器打开的 hs 会话集. v$indexed_fixed_column 显示建立索引的动态性能表中的列(x$表). v$instance 显示当前实例的状态. v$instance_recovery 用来监视执行用户指定恢复读次数的限制机制. v$latch 为非双亲简易锁列出统计量. v$latch_children 关于子简易锁的统计量. v$latch_misses 试图获得一个简易锁失败的统计量. v$latch_parent 包含关于双亲简易锁的统计量. v$latchholder 当前简易锁持有者的信息. v$latchname 包含关于显示在 v$latch 中的简易锁的解码简易锁名字的信息. v$librarycache 关于高速缓存性能和活动的统计量. v$license 许可证限制的信息. v$loadcstat 包含在一个直接装载执行过程中所编译的 sql*loader 统计量. v$lock 当前 oracle 所持有的锁. 95 v$lock_activity 显示当前实例的 dlm 锁操作活动. v$lock_element 每一个被缓存使用的 pcm 锁在 v$lock_elements 中都有一个条目. v$locked_object 列出每个事务所获得的全部锁. v$lock_with_collisions 可以查询出保护多缓冲区的锁. v$log 控制文件中日志文件的信息. v$log_history 控制文件中日志文件的历史信息. v$logfile 包含重做日志文件的信息. v$loghist 控制文件中日志文件的日志历史信息. v$logmnr_contents 日志历史信息. v$logmnr_dictionary 日志历史信息. v$logmnr_logs 日志信息. v$logmnr_parameters 日志信息. v$mts 包含调节多线程的服务器的信息. v$mystat 当前会话的统计量. v$nls_parameters 当前 nls 参数信息. v$nls_valid_values 列出所有 nls 参数的有效值. v$object_dependency 能够通过当前装载在共享池中的包,过程或游标来决定依赖哪一个对象. v$object_usage 来监视索引的使用. v$obsolete_parameter 列出陈旧的参数. v$offine_range 显示控制文件中数据文件的脱机信息. v$open_cursor 列出每一个会话当前打开的和解析的游标. 96 v$option 列出 oracle 服务安装的状况. v$parallel_degree_limit_mth 显示所有有效的并行度限制资源分配的方法. v$parameter 列出关于初始化参数的信息. v$parameter2 列出了当前影响会话的参数和参数值. v$pgastat 列出 oracle 内存使用统计. v$ping 与 v$cache 一样. v$pq_sesstat 列出并行查询会话的统计信息. v$pq_slave 一个实例上每个活动并行执行服务器的统计量. v$pq_sysstat 列出并行查询的系统的统计量. v$pq_tqstat 包含并行执行操作上的统计量.帮助在一个查询中测定不平衡的问题. v$process 包含关于当前活动进程的信息. v$proxy_archivedlog 包含归档日志备份文件的描述信息,这些备份文件带有一个称为 proxy 副本的新特征. v$proxy_datafile 包含数据文件和控制文件备份的描述信息,这些备份文件带有一个称为 proxy 副本的新特征. v$pwfile_users 列出被授予 sysdba 和 sysoper 特权的用户. v$px_process 包含正在运行并行操作的会话的信息. v$px_process_sysstat 包含正在运行并行操作的会话的信息. v$px_session 包含正在运行并行操作的会话的信息. v$px_sesstat 包含正在运行并行操作的会话的信息. v$queue 包含多线程消息队列的信息. v$queueing_mth 显示所有可用的查询资源分配方法. v$recover_file 显示需要介质恢复的文件状态. v$recovery_file_status 包含对每个恢复命令的每一数据文件的一行信息. 97 v$recovery_log 列出需要完成介质恢复的归档日志的信息.这个信息来自 v$log_history v$recovery_process 能够用来跟踪数据库恢复操作,以便他们不会被终止执行.也用来估算进程中完成这个操作所需的 时间. v$recovery_status 包含当前恢复进程的统计量. v$reqdist 列出 mts 调度程序请求次数的直方图的统计量. v$reserved_words 给出 pl/sql 编译器所使用的关键字的列表. v$resource 包含资源名和地址信息. v$resource_limit 显示系统资源的全局资源使用的信息. v$rollname 列出所有联机回滚段的信息. v$rollstat 包含回滚段的统计量. v$rowcache 显示活动数据字典的统计量. v$rowcache_parent 显示数据字典中所有双亲对象的信息. v$rowcache_subordinate 显示数据字典中从属对象的信息. v$rsrc_consumer_group 显示与当前活动资源消费者用户组相关联的数据. v$rsrc_consumer_group_cpu_mth 为资源消费者用户组显示所有可用的资源的分配方法. v$rsrc_plan 显示当前所有活动资源方案的名称. v$rsrc_plan_cpu_mth 显示所有用于资源方案的可用 cpu 资源分配方法. v$sess_io 为每个用户会话列出 i/o 统计. v$session 列出当前每一个会话的会话信息. v$session_connect_info 显示当前会话的网络连接的信息. v$session_cursor_cache 显示当前会话的游标用法的信息. 98 v$session_event 列出一个会话在等待一个事件的信息. v$session_longops 显示一个长时间运行操作的状态. v$session_object_cache 显示本地服务器上当前用户对话的对象高速缓存的统计量. v$session_wait 列出正在等待的活动会话的资源或事件. v$sesstat 列出用户会话统计量. v$sga 包含系统全局区的总统计量. v$sgastat 包含系统全局区的详细信息. v$shared_pool_reserved 列出能帮助你调节共享池中保留池和空间的统计量. v$shared_server 包含共享服务器进程的信息. v$shared_server_monitor 包含调试共享服务器进程的信息. v$sort_segment 包含一个给定实例中每一个排序段的信息. v$spparameter 列出 spfile 的内容. v$sql 列出 sql 共享区的统计量. v$sql_bind_data 如果数据在服务器中可用,它将对查询这个视图的会话所拥有的每个游标中的每一个不同的连 接变量,显示客户端发送的实际连接数据. v$sql_bind_metadata 对查询这个视图的会话所拥有的每个游标中的每一个不同的连接变量,显示客户端提供的连接 元数据. v$sql_cursor 显示与查询这个视图的会话相关的每一个游标的 debug 信息. v$sql_plan 包含装载到库缓存中每个子游标的执行计划信息. v$sql_shared_cursor 为啥一个特定的子游标没有与存在的子查询的共享的解释. v$sql_shared_memeory 关于共享内存快照的游标的信息. v$sql_redirection 标识重定向的 sql 语句. v$sql_workarea 显示被 sql 游标使用的工作区信息. 99 v$sql_workarea_active 包含当前由系统分配的工作区的昫间信息. v$sqlarea 共享 sql 的统计量. v$sqltext 包含 sga 中属于共享 sql 游标的 sql 语句文本. v$sqltext_with_newlines 不能用空格代替新行制表符外,和 v$sqltext 功能一样. v$statname 显示 v$sesstat 和 v$systat 表中的统计量的译码统计名字. v$subcache 显示当前装载于库高速缓存中的从属高速缓存的信息. v$sysstat 列出系统统计量. v$system_cursor_cache 系统范围的信息. v$system_event 包含等待一个事件的全部信息. v$system_parameter 包含系统参数信息. v$system_parameter2 oracle 实例中当前影响的参数和参数的值. v$tablespace 控制文件中表空间的信息. v$temp_cache_transfer 显示每个数据文件中探查块的数量. v$temp_extent_map 显示所有临时表空间的每一个单元的状态信息. v$temp_extent_pool 显示被一个给定实例使用的临时空间缓存的状态. v$temp_ping 显示每一个数据文件探查的块数. v$temp_space_header 显示每一个临时表空间中每一个文件的聚集信息,涉及每个空间首部中当前使用多少空间和有多 少自由空间. v$tempfile 显示临时文件的信息. v$temporary_lobs 显示临时的 lob. v$tempstat 包含文件读/写的统计信息. v$thread 包含控制文件中的线程信息. v$timer 100 列出以 1%秒计的流逝时间. v$timezone_names 列出合法的时区名称. v$transaction 列出系统中的活动事务. v$transaction_enqueue 显示事务状态对象所拥有的锁. v$type_size 列出不同数据库组件的大小,以便用来估算数据块的容量大小. v$undostat 显示一个历史统计数据来显示系统工作的如何. v$version 列出 oracle 服务器中核心库组件的版本号. v$vpd_policy 列出与当前在库缓存中的游标相关的所有安全策略. v$waitstat 列出块竞争统计量. 132)oracle9i 管理的数据字典 dba 视图 dba_pc_neighbors 包含未决事务的引入或流出的连接信息. dba_all_tables 显示数据库中所有表的描述. dba_application_roles 所有的具有函数定义的验证策略的角色. dba_associations 显示用户定义的统计信息. dba_audit_exists 列出 audit not exists 和 audit exists 产生的审计跟踪. dba_audit_object 系统中所有对象的审计跟踪记录. dba_audit_session 列出关于 connect 和 disconnect 的所有审计跟踪信息. dba_audit_statement 列出关于 grant,revoke,audit,noaudit,alter system 语句的审计跟踪信息. dba_audit_trail 列出所有的审计跟踪条目. dba_blockers 列出正有人等待一个会话持有的锁的所有会话,但并非它们自己在等待一个锁. dba_base_table_mviews 描述数据库中所有的物化视图. dba_catalog 列出所有数据库标,视图,同义词和序列. dba_clu_columns 101 列出表列到聚集列的映射. dba_cluster_hash_expressions 列出所有聚集的散列 hash 函数. dba_clusters 包含数据库中所有聚集的描述. dba_col_comments 所有表和视图的列的注解. dba_col_privs 列出数据库中授予列的所有特权. dba_coll_types 显示数据库中所有命名的集合类型. dba_cons_columns 包含在约束定义中的,可访问的列的信息. dba_constraints 所有表上约束的定义. dba_context 所有上下文名字空间的信息. dba_data_files 数据库文件的信息. dba_db_links 数据库中的所有数据库链接. dba_ddl_locks 数据库所持有的所有的 ddl 锁. dba_dependencies 列出对象之间的依赖性. dba_dim_attributes 代表维级和功能依赖的列之间的关系. dba_dim_join_key 代表两个维之间的连接. dba_dim_level_key 代表一个维级的列. dba_dim_levels 代表一个维级. dba_dimensions 代表维对象. dba_directories 提供数据库所有对象的信息. dba_dml_locks 列出数据库中所有的 dml 锁,和对一个 dml 锁的所存未决请求. dba_errors 列出数据库中所有存储的对象的当前错误. dba_exp_files 包含导出文件的信息. dba_exp_objects 102 列出以增量方式导出的对象. dba_exp_version 包含最后导出会话的版本号. dba_extents 列出数据库中组成所有段的信息. dba_external_tables 描述数据库中的所有的外部表. dba_free_space 列出所有表空间中的空闲分区. dba_free_space_coalesced 包含表空间中合并空间的统计数据. dba_histograms 是 dba_tab_histograms 的同义词. dba_ind_columns 包含在所有表和聚集中组成索引的列的描述. dba_ind_expressions 包含在所有表和聚集中函数型索引的表达式. dba_ind_partitions 为每一个索引分区,描述分区级的分区信息,分区的存储参数和 analyze 决定的各种分区统计数据. dba_ind_subpartitions 为当前用户拥有的每一个索引分区,描述分区级的分区信息,分区的存储参数和 analyze 决定的各 种分区统计数据. dba_indexes 数据库中所有索引的描述. dba_indextype_comments 数据库中所有的用户定义的索引类型. dba_indextype_operators 列出索引类型支持的所有操作符. dba_indextypes 所有的索引类型. dba_internal_triggers 数据库中所有的内部触发器. dba_jobs 数据库中的所有的作业. dba_jobs_runing 数据库中的所有当前运行的作业. dba_join_ind_columns 描述数据库中的所有的连接条件. dba_kgllock 列出在 kgl 对象上所有的锁和 pins. dba_libraries 列出数据库中的所有的库. dba_lob_partitions 包含在表中的用户可访问的 job. 103 dba_lob_subpartitions 显示 lob 数据子分区中的分区级属性. dba_lobs 包含在所有表中的 lob. dba_lock_internal 包含每个被持有的锁或简易锁的一行信息,及每一个未决请求的一行信息. dba_locks 列出数据库中持有的锁或简易锁,及每一个未决请求信息. dba_log_group_columns 描述在日志组中指定的数据库中的所有列的信息. dba_method_params 数据库中类型的方法参数的描述. dba_method_results 数据库中所有类型的方法结果的描述. dba_mview_aggregates 在聚集实例化视图的 select 列表中出现的分组函数. dba_mview_analysis 代表潜在地支持查询重写. dba_mview_log_filter_cols 列出所有记录在物化视图日志中的所有列. dba_mview_refresh_times 描述在数据库中所有物化视图的刷新时间. dba_mviews 描述在数据库中所有物化视图. dba_nested_tables 在所有表中嵌套表的描述. dba_obj_audit_opts 列出一个用户所有对象的审计选项. dba_object_size 列出各类对象用字节表示的大小. dba_object_tables 显示数据库中所有对象表的描述. dba_objects 列出数据库中所有的对象. dba_opancillary 列出操作连接符的附加信息. dba_oparguments 列出操作连接符的参数信息. dba_orphan_key_table 报告那些在基表下有坏块的索引中的键值. dba_outline_hints 列出组成概要的提示符. dba_outlines 列出有关概要的信息. 104 dba_part_col_statistics 所有分区表的列统计数据和直方图信息. dba_part_histograms 所有表分区上直方图的直方图数据. dba_part_indexes 所有分区索引的对象级分区信息. dba_part_key_columns 所有分区对象的分区关键字列. dba_part_lobs 描述分区 lob 的表级信息. dba_part_tables 列出所有分区表的对象级分区信息. dba_partial_drop_tabs 描述部分删除的表. dba_pending_transactions 提供关于未完成事务的信息. dba_policies 列出数据库中的所有的安全策略. dba_priv_audit_opts 通过系统和由用户审计的当前系统特权. dba_procedures 所有函数及过程和他们的相关属性. dba_profiles 显示所有启动文件及限制. dba_proxies 显示系统中所有代理连接的信息. dba_published_columns 描述所有存在源列的表. dba_queue_schedules 描述当前传播信息的方案. dba_queue_tables 描述在数据库中建立的所有队列表中的队列的名称和类型. dba_queues 描述数据库中每一个队列的操作特性. dba_rchild 列出任何刷新组中的所有子组. dba_refresh 列出所有刷新组. dba_refresh_children 列出刷新组中的所有对象. dba_refs 数据库中所有表的对象类型列中的 ref 列和 ref 属性. dba_registered_mview_groups 列出了在该地点所有重组的物化视图. 105 dba_registered_mviews 数据库中所有注册了的物化视图. dba_registered_snapshot_groups 列出该场地的所有快照登记组. dba_registered_snapshots 检索本地表的远程快照的信息. dba_repair_table 通过 dba_repair.check_object 过程发现的任何损坏. dba_resumable 列出了在系统中执行的可恢复的语句. dba_rgroup 列出所有刷新组. dba_role_privs 列出授予用户角色的角色. dba_roles 数据库中存在的所有角色. dba_rollback_segs 包含回滚段的描述. dba_rsrc_consumer_group_privs 列出所有已被授权的资源管理员消费组,用户和角色. dba_rsrc_consumer_groups 数据库中所有资源消费组. dba_rsrc_manager_system_privs 列出所有已授予属于资源管理员系统特权的用户和角色. dba_rsrc_plan_directives 数据库中存在的所有资源计划的指示. dba_rsrc_plans 数据库中存在的所有资源计划. dba_segments 分配给所有数据库段的存储信息. dba_sequences 数据库中所有序列的描述. dba_snapshot_log_filter_cols 列出记录在快照日志上的所有过滤列. dba_snapshot_logs 数据库中所有的快照日志. dba_snapshot_refresh_times 列出快照刷新次数. dba_snapshots 数据库中所有的快照. dba_source 数据库中所有存储对象的来源. dba_source_tables 允许发行者查看所有现有的源表. 106 dba_sqlj_type_attrs 数据库中所有关于 sqlj 对象的所有属性. dba_sqlj_type_methods 数据库中所有类型的方法. dba_sqlj_types 数据库中所有关于 sqlj 对象类型信息. dba_stmt_audit_opts 描述通过系统并由用户审计的当前系统审计选项. dba_stored_settings 列出具有执行特权的存储 pl/sql 单元的永久参数设臵信息. dba_subpart_col_statistics 列出表子分区的列统计数据和直方图信息. dba_subpart_histograms 列出表子分区中直方图的实际数据. dba_subpart_key_columns 允许发行者查看他们预定的所有发行的列. dba_subpart_tables 允许发行者查看他们预定的所有发行的表. dba_subscriptions 允许发行者查看所有的预定. dba_synonyms 数据库中所有同义词. dba_sys_privs 授予用户和角色的系统特权. dba_tab_col_statistics 包含在 dba_tab_columns 视图中的列统计数据和直方图信息. dba_tab_columns 所有表,视图和聚集的描述列的信息. dba_tab_comments 数据库中所有列和表的注解. dba_tab_histograms 所有表中列的直方图. dba_tab_modifications 显示数据库中所有的上次统计后被修改了的表. dba_tab_partitions 对表的分区,描述它的分区级分区信息,分区的存储参数和由 analyze 决定的各种分区统计数据. dba_tab_privs 列出授予用户的角色的系统特权. dba_tab_subpartitions 对表的子分区,描述它的分区级分区信息,分区的存储参数和由 analyze 决定的各种分区统计数 据. dba_tables 数据库中所有关系表的描述. dba_tablespaces 107 所有表空间的描述. dba_temp_files 数据库临时文件信息. dba_transformations 数据库中所有消息传递信息. dba_trigger_cols 所有触发器列的用法. dba_triggers 数据库中所有的触发器. dba_ts_quotas 所有用户的表空间的限额. dba_type_attrs 数据库类型的属性. dba_type_methods 描述数据库中所有类型的方法. dba_types 数据库中所有的抽象数据类型. dba_undo_extents 在撤消表空间的每个范围的提交时间. dba_unused_col_tabs 对所有未使用列的描述. dba_updatable_columns 对可在一个连接视图中,由数据库管理员更新的列的描述. dba_users 数据库所有用户信息. dba_ustats 当前用户信息. dba_varrays 用户可以访问的视图的文本. dba_views 数据库中所有视图的文本. dba_waiters 列出所有正在等待一个锁的会话,以及列出正在阻止它们获得该锁的会话. 133) 9i 管理的数据字典 user 视图 user_all_tables 包含对用户可用的表的描述. user_arguments 列出对用户可存取的对象中的参数. user_associations 当前用户所拥有的相关对象的用户定义的统计. user_audit_object 关于对象的语句审计跟踪记录. user_audit_session 108 关于用户连接或断开的全部审计跟踪记录. user_audit_statement 列出用户发出的 grant,revoke,audit,noaudit,alter system 语句的审计跟踪条目. user_audit_trail 与用户有关的审计跟踪条目. user_base_table_mviews 当前用户拥有的所有使用物化视图日志的物化视图. user_catalog 用户拥有的表,视图,同义词和序列. user_clu_columns 用户表的列到聚集列的映射. user_cluster_hash_expressions 用户可存取的所有聚集及哈希函数. user_clusters 用户拥有的聚集的说明. user_col_comments 列出用户表或视图的列上的注释. user_col_privs 列出列上的授权,用户是所有者,授予者或被授予者. user_col_privs_made 列出用户拥有对象的列上的全部授权. user_col_privs_recd 列出列上的授权,用户是被授予者. user_coll_types 用户的命名集合类型. user_cons_columns 用户拥有的约束定义中的列信息. user_constraints 用户表上的约束定义. user_db_links 数据库链信息. user_dependencies 因户的对象之间的依赖关系. user_dim_attributes 当前用户模式下维级别和功能依赖之间的关系. user_dim_child_of 当前用户拥有的 1 到 n 维水平的层次关系. user_dim_hierarchies 当前用户拥有的维的层次. user_dim_join_key 当前用户拥有的维之间的连接. user_dim_level_key 当前用户拥有的一个维级的列. user_dim_levels 109 当前用户拥有的一个维列. user_dimensions 当前用户模式下维对象. user_errors 用户的所有存储对象上的当前错误. user_extents 属于用户对象的段的范围. user_external_tables 当前用户拥有的所有的外部对象. user_free_space 用户可存取表空间中的空闲范围. user_histograms 该视图是 user_histograms 的同义词. user_ind_columns 用户索引和表上的列. user_ind_expressions 当前用户拥有的表上基于函数的索引的表达式. user_ind_subpartitions 当前用户拥有的每个字分区的属性,分区级别的分区信息,子分区的存储参数,analyze 分区统计. user_indexes 当前用户拥有的索引的说明. user_indextype_comments 当前用户拥有的用户定义的索引类型的所有注释. user_indextype_operators 当前用户拥有的索引类型的所有操作. user_indextypes 当前用户拥有的所有索引类型. user_internal_triggers 当前用户拥有的所有表上的内部触发器. user_jobs 用户拥有的所有作业. user_join_ind_columns 当前用户拥有的数据库中所有的连接条件. user_libraries 列出用户拥有的所有库. user_lob_partitions 当前用户拥有的 lob 数据子分区中的分区级属性. user_lobs 显示用户表中包含的 lob. user_log_group_columns 当前用户拥有的在日志中指定的列. user_log_groups 数据库中当前用户拥有的所有表的日志组定义. 决定的各种 110 user_method_params 当前用户拥有的用户类型的方法参数. user_mview_aggregates 当前用户拥有的在聚集实例化视图的 select 列表中出现的分组函数. user_mview_analysis 当前用户拥有的所有的物化视图用来潜在地支持查询重写并有可用于应用程序分析的附加信 息. user_mview_detail_relations 代表命名细节关系. user_mview_joins 描述在一个实例化视图的 where 子句中,两个列之间的连接. user_mview_keys 物化视图基于当前用户模式的在 select 列表中的列或表达式. user_mview_refresh_times 数据库中当前用户拥有的所有的物化视图的刷新时间. user_mviews 数据库中当前用户拥有的所有的物化视图. user_nested_tables 当前用户拥有的表中的嵌套表. user_obj_audit_opts 用户拥有的表和视图的审计选项. user_object_size 用户拥有的 pl/sql 对象的大小. user_object_tables 用户拥有的对象表. user_object 用户拥有的对象. user_opancillary 当前用户拥有的操作的辅助信息. user_oparguments 当前用户拥有的操作的论据信息. user_opbindings 当前用户拥有的操作的绑定. user_operator_comments 当前用户拥有的用户自定义的操作的所有注释. user_operators 当前用户拥有的所有操作. user_outline_hints 当前用户拥有的组成概要的暗示的设臵. user_outlines 当前用户拥有的所有概要. user_part_col_statistics 当前用户拥有的表分区的列统计和柱状图数据. user_part_histograms 111 当前用户可存取的表分区上柱状图数据. user_part_key_columns 当前用户拥有的分区对象的分区键列. user_part_indexes 当前用户拥有的所有分区所有的对象级分区信息. user_part_lobs 当前用户拥有的分区大型对象的表级信息. user_part_tables 当前用户拥有的分区表的对象级分区信息. user_partial_drop_tabs 当前用户模式下有部分删除表操作的所有表. user_password_limits 分配给用户的口令参数文件. user_policies 当前用户拥有的所有对象的安全策略. user_procedures 当前用户拥有的所有的函数和过错以及它们的相关属性. user_proxies 当前用户被允许代理的连接信息. user_published_columns 描述有特权的所有存在的源表列. user_queue_schedules 关于队列时间表的信息. user_queue_tables 只描述用户模式中创建的队列表中的队列. user_queues 用户模式中的每个队列的所有刷新组. user_refresh 当前用户拥有的所有刷新组. user_refresh_children 列出刷新组中的所有对象. user_refs 用户表的对象类型列中的 ref 列和 ref 属性. user_registered_mviews 当前用户拥有的所有注册的物化视图. user_registered_snapshots 当前用户拥有的所有注册的快照. user_resource_limits 当前用户的资源限制. user_resumable 列出当前用户执行的可恢复语句. user_rols_privs 列出授予用户的角色. user_rsrc_consumer_group_privs 112 列出授予用户的所有的资源消耗组. user_rsrc_manager_system_privs 列出所有被授予了 dbms_resource_manager 包的系统特权的用户. user_segments 列出属于用户对象的数据库段的存储分配信息. user_sequences 用户序列的说明. user_snapshot_logs 用户拥有的所有快照日志. user_snapshot_refresh_times 快照刷新的次数. user_snapshots 用户可查看的快照. user_source 属于用户的所有存储对象的文本来源. user_sorce_tables 允许你查看所有有预定特权的现有的源表. user_sqlj_type_attrs 当前用户拥有的关于 sqlj 对象的所有属性. user_sqlj_type_methods 当前用户拥有的类型方法. user_sqlj_types 当前用户拥有的关于 sqlj 对象类型信息. user_stored_settings 当前用户拥有的存储的 pl/sql 单元的永久参数设臵. user_subpart_col_statistics 显示当前用户拥有的子分区对象的子分区的列统计和柱状图信息. user_subpart_histograms 显示当前用户拥有的表子分区中柱状图的实际柱状图数据. user_subpart_key_columns 显示当前用户拥有的子分区对象的子分区的列统计和柱状图信息. user_subscribed_columns 允许发行者查看所有的预定的所有发行的列. user_subscribed_tables 允许发行者查看所有的预定的所有发行的表. user_subscriptions 允许发行者查看所有的预定. user_sysnonyms 当前用户拥有的私人同义词. user_sys_privs 授予用户的系统特权. user_tab_col_statistics 包含 user_tab_columns 视图中的列统计和柱状图信息. user_tab_columns 113 用户表或视图或聚集上的列的信息. user_tab_comments 用户拥有表或视图上的注释. user_tab_histograms 用户表的列上的柱状图. user_tab_modifications 用户拥有了的所有上次统计后被修改了的表. user_tab_partitions 用户拥有的每个表子分区的名称,存储属性,其所属表和分区名. user_tab_privs 对象上的特权. user_tab_privs_made 用户拥有对象上的全部特权. user_tab_privs_recd 包含对象上的特权,用户为被授予者. user_tab_subpartitions 用户拥有的每个子分区的名称,存储属性,其所属表和分区名. user_tables 用户拥有的关系表的描述. user_tablespaces 可存取的表空间的描述. user_transformations 特定用户拥有的转变信息. user_trigger_cols 用户触发器中列的用法. user_triggers 用户触发器的说明. user_types 表中用户的类型. user_type_attrs 用户的类型的属性. user_ts_quotas 用户的表空间限额. user_methods 用户的方法类型. user_unused_col_tabs 包含了未用列的所有表. user_updatable_columns 在连接视图中对用户可修改的列的描述. user_users 当前用户的信息. user_ustats 用户拥有的用户定义统计. user_varrays 114 用户拥有的所有数组. user_views 用户拥有的视图的文本. 134)oracle9i 管理的数据字典 all 视图。 all_all_tables 用户可存取的所有表. all_arguments 用户可存取的对象的所有参数. all_associations 用户定义的统计信息. all_base_table_mviews 用户可存取的所有物化视图信息. all_catalog 用户可存取的全部表,同义词,视土和序列. all_cluster_hash_expressions 用户可存取的聚集的 hash 函数. all_clusters 用户可存取的所有聚集. all_col_comments 用户可存取的表或视图上注释. all_col_privs 列出列上的授权,用户或 public 是授予者. all_col_privs_made 列出列上的授权,用户是属主或授权者. all_col_privs_recd 列出列上的授权,用户或 public 是授权者. all_coll_types 用户可存取的命名的集合类型. all_cons_columns 包含在约束定义中可存取列的信息. all_constraints 列出可存取表上的约束定义. all_context 显示活动的上下问信息. all_db_links 用户可存取的数据链. all_def_audit_opts 包含在对象建立时所应用的缺省对象审计选项. all_dependencies 用户可存取的的对象之间的依赖关系. all_dim_hierarchies 显示维的层次. all_dim_join_key 115 描述两个维之间的连接. all_dim_level_key 描述维级的列. all_dim_levels 描述维级别. all_dimensions 包含维对象的信息. all_directories 用户可存取的所有目录描述. all_errors 用户可存取的所有对象上的当前错误. all_external_tables 用户可存取的外部表. all_histograms 等于 all_tab_histograms 别名. all_ind_columns 用户可存取的索引列. all_ind_expressions 用户可存取的表上的功能索引表达式. all_ind_partitions 为索引分区,描述分区级的分区信息. all_ind_subpartitons 为索引子分区,描述子分区级的分区信息. all_indexes 用户可存取的表上的索引描述. all_indextype_commnets 用户可存取的用户定义的索引类型. all_indextype_operators 显示索引类型支持的所有操作符. all_indextypes 显示所有的索引类型. all_internal_triggers 用户可存取的内部触发器. all_jobs 数据库中的所有作业. all_join_ind_columns 描述你存取的位映射连接索引的连接条件. all_libraries 用户可存取的所有库. all_lob_partitions 用户可存取的表中包含 lob. all_lob_subpartitions 显示 lob 数据子分区的分区级别. all_lobs 116 用户可存取的表中包含 lob. all_log_group_columns 用户可存取的定义在日志组中的列. all_log_groups 用户可存取的表上的日志组定义. all_method_params 用户可存取的类型的方法参数. all_method_results 用户可存取的类型的方法结果. all_mview_aggregates 合计类的物化视图的 select 列表中出现的分组函数. all_mview_analysis 描述可能支持查询重写和有可用于应用程序分析的额外信息的物化视图,但不包含远程和非静 态的. all_mview_detail_relations 描述物化视图 from 列表中的,或间接被 from 列表中视图引用的命名细节关系. all_mview_joins 描述物化视图 where 子句中两列间的连接. all_mview_keys 描述物化视图 from 列表中的,或间接被 from 列表中视图引用的命名细节关系. all_mview_refresh_times 用户可存取的物化视图的刷新时间. all_mviews 用户可存取的所有的物化视图. all_nested_tables 用户可存取的表中的嵌套表. all_object_tables 用户可存取的对象表的描述. all_opancillary 显示操作符的辅助信息. all_oparguments 显示操作符捆绑的变元信息. all_opbindings 显示操作符捆绑. all_operator_comments 用户可存取的用户定义操作的所有注释. all_operators 用户可存取的操作符. all_outline_hints 用户可存取的概要的提示. all_outlines 用户可存取的所有概要. all_part_col_statistics 用户可存取的表分区的列统计和柱状图信息. 117 all_part_histograms 用户可存取的表分区的柱状数据. all_part_indexes 当前用户可存取的所有分区索引的对象级分区信息. all_part_key_columns 当前用户可存取的分区对象的分区键值. all_part_lobs 当前用户可存取的分区 lob 的表级信息. all_part_tables 当前用户可存取的分区表的对象级分区信息. all_partial_drop_tabs 当前用户可存取的有局部删除表的表. all_policies 当前用户可存取的所有表和视图上的所有策略. all_procedures 列出所有的函数和过程及相关属性. all_published_columns 描述用户有特权的存在的源表列. all_queue_tables 当前用户可存取的队列表的所有队列. all_queues 显示用户有入队或出队特权的队列信息. all_refresh 当前用户可存取的所有刷新组. all_refresh_children 列出刷新组中的所有对象. all_refresh_dependencies 显示当前模式中所有概要或快照的依赖细节或容器表名称. all_refs 当前用户可存取的对象类型列中的 ref 列和 ref 属性. all_registered_mviews 当前用户可存取的所有物化视图. all_registered_snapshots 列出所有注册的快照. all_sequences 当前用户可存取的所有序列. all_snapshot_logs 当前用户可存取的物化视图日志. all_snapshot_refresh_times 快照刷新次数. all_source 当前用户可存取的所有存储对象的文本源. all_source_tables 允许发行者查看所有存在的源表. 118 all_sqlj_type_attrs 当前用户可存取的关于 sqlj 对象的所有属性. all_sqlj_type_methods 当前用户可存取的类型方法. all_sqlj_types 当前用户可存取的关于 sqlj 对象类型信息. all_stored_settings 当前用户有其执行特权的存储 pl/sql 单元的永久参数设臵. all_subpart_col_statistics 包含 user_tab_columns 的列统计和柱状信息. all_subpart_histograms 显示表子分区中柱状图的实际柱状图信息. all_subpart_key_columns 显示使用复合范围/hash 方法分区的表的子分区键值. all_subscribed_columns 允许发行者查看他们预定的所有发行的列. all_subscribed_tables 允许发行者查看他们预定的所有发行的表. all_subscriptions 允许发行者查看他们所有的预定. all_sumdelia 用户可存取的直接路径装载条目. all_synonyms 用户可存取的所有同义词. all_tab_col_statistics 包含 all_tab_columns 的列统计和柱状信息. all_tab_columns 用户可存取的所有表,视图和聚集的列. all_tab_comments 用户可存取的表和视图中的注释. all_tab_histograms 用户可存取的表和视图中的柱状信息. all_tab_modifications 用户可存取的上次统计后被修改了的表. all_tab_privs 列出对象上的授权,用户或 public 用户是被授予者. all_tab_privs_made 列出用户的授权和用户对象上的授权. all_tab_privs_recd 列出对象上的授权,用户和 public 是被授予者. all_tab_subpartitions 用户可存取的每个表子分区的名称,存储属性,其所属的表和分区名. all_tables 用户可存取的关系表的描述. 119 all_triggers 用户拥有的触发器. all_trigger_cols 用户拥有的触发器的列及用法. all_type_attrs 用户可存取的类型的属性. all_type_methods 用户可存取的类型的方法. all_types 用户可存取的类型. all_unused_col_tabs 包含未使用列的所有表. all_updatable_columns 包含莫连接视图中可以修改的所有列的描述. all_users 数据库中所有用户的信息. all_ustats 用户可存取的用户定义统计. all_varrays 用户可存取的所有数组. all_views 用户可存取的视图的文本. 135)oracle9i 的数据字典. chained_rows 存储带 list chained rows 子句的 analyze 命令的输出. chainge_sources 允许发行者查看现有的变化资源. change_sets 允许发行者查看现有的变化设臵. change_tables 允许发行者查看现有的变化表. code_pieces oracle 存取这个视图用于创建关于对象大小的视图. code_size oracle 存取这个视图用于创建关于对象大小的视图. cols user_tab_columns 同义词. column_privileges 列出列上的授权状况. database_properties 列出当前缺省的临时表空间的名称. dbms_alert_info 描述注册了的警告. 120 dbms_lock_allocated 描述用户分配了的锁. deptree 有 utldtree.sql 创建,包好对象依赖树的信息. dict_columns 包含数据字典表和视图列的描述. dictionary 包含数据字典表和视图列的描述. error_size oracle 存取这个视图用于创建关于对象大小的视图. exceptions 包含完整约束的违反信息. file_locks 实时应用集群视图,显示到 gc_files_to_locks 中指定数据文件的 pcm 锁映象. file_ping 实时应用集群视图,显示每个数据文件连接的块数. global_name 当前数据库的全局名. hs_all_caps 包含关于非 oracle(fds)数据存储有关的所有兼容性信息. hs_all_dd 包含关于非 oracle(fds)数据存储的数据字典信息. hs_all_inits 包含关于非 oracle(fds)数据存储的初始化参数信息. hs_base_caps 包含关于非 oracle(fds)数据存储的基本性能信息. hs_base_dd 显示基本数据字典翻译表的信息. hs_class_caps 包含属于非 oracle(fds)数据存储的类指定性能信息. hs_class_init 包含关于非 oracle(fds)类指定初始化参数信息. hs_external_object_privileges 包含授予用户的对象上的特权的信息. hs_external_objects 包含 oracle 服务器可存取的所有分布式外部对象的信息. hs_fds_class 包含合法的非 oracle(fds)类的信息. hs_fds_inst 包含合法的非 oracle(fds)实例的信息. hs_inst_caps 包含实例指定的性能信息. hs_inst_dd 显示非 oracle(fds)实例特定的数据字典翻译的信息. 121 hs_inst_init 显示非 oracle(fds)实例指定的初始化参数的信息. ideptree 列出依赖树. index_histogram 包含 the analyze index ... validate structure 命令的信息. index_stats 包含 analyze index ... validate structure 命令的信息. nls_database_prameters 列出数据库中永久的 nls 参数信息. nls_instance_parameters 列出实例中永久的 nls 参数信息. nls_session_parameters 列出会话中永久的 nls 参数信息. parsed_pieces oracle 存取这个视图用于创建关于对象大小的视图. parsed_size oracle 存取这个视图用于创建关于对象大小的视图. plan_table 是 explan plan 语句的结果表. pluggable_set_check 包含可插入的设臵检查. product_component_version 包含组成产品的版本和状态信息. proxy_users 描述那些能假设其他用户身份的用户. pstubtbl 包含 pstub 程序生成的根上的信息,以便 oracle form3.0 客户可以调用 oracle 数据库中的存储过 程. public_deptendency 列出对象的依赖. pubucsyn 包含公共同义词上的信息. queue_privileges 显示那些特权授予给了会话的高级查询对象. resource_cost 列出每个资源的开销. resource_map 包含资源的描述. role_role_privs 包含授予其它角色的角色信息. role_sys_privs 包含授予角色的系统特权的信息. role_tab_privs 122 包含授予角色的表特权的信息. session_context 列出当前会话的属性和值设臵. session_privs 列出当前对用户可用的特权. session_roles 列出当前对用户启用的角色. source_size oracle 存取这个视图用于创建关于对象大小的视图. stmt_audit_option_map 包含审计选项类型代码的信息. syscatalog 该视图用于与 oracle5 版本保持兼容,建议不使用之. sysfiles 该视图用于与 oracle5 版本保持兼容,建议不使用之. syssegobj 该视图用于与 oracle5 版本保持兼容,建议不使用之. system_privilege_map 包含系统特权代码的信息. sys_objects 将对象 id 映射到对象类型和段数据块地址. table_privilege_map 包含关于存取特权代码的信息. table_privileges 包含对象上的特权信息. tabquotas 该视图用于与 oracle5 版本保持兼容,建议不使用之. trusted_servers 显示服务器是信任的还是不信任的. ts_pitr_check 提供可能禁止表空间及时点恢复继续的依赖或约束信息. ts_pitr_objects_to_be_dropped 列出作为执行表空间及时点恢复的结果而丢失的所有对象. uni_pluggable_set_check 保护可插的检查信息. 8、ORACLE 10G RAC 信息查看 本节提供了几个可用于验证 Oracle RAC 10g 配臵的 srvctl 命令和 SQL 查询。 有五个为 SRVCTL 定义的节点级任务: 添加和删除节点级应用程序 设臵和取消设臵节点级应用程序的环境 管理节点应用程序 123 管理 ASM 实例 启动和停止一组包含虚拟 IP 地址、监听器、Oracle 通知服务和 Oracle 企业管理器代理的程序 (出于维护目的)。 所有实例和服务的状态 $ srvctl status database -d orcl 实例 orcl1 正在节点 wwptdb1 上运行 实例 orcl2 正在节点 wwptdb2 上运行 单个实例的状态 $ srvctl status instance -d orcl -i orcl1 实例 orcl1 正在节点 wwptdb1 上运行 $srvctl status instance -d orcl -i orcl2 实例 orcl2 正在节点 wwptdb2 上运行 在数据库全局命名服务的状态 $ srvctl status service -d orcl -s orcl 服务 orcl 正在实例 orcl2, orcl1 上运行 启动/停止 servic 命令: srvctl start service -d orcl srvctl stop database -d orcl srvctl start database -d orcl /u01/app/oracle/product/10.2.0/crs_1/bin/crs_stat –t 30 06 * * * /backup/exp.sh 特定节点上节点应用程序的状态 $ srvctl status nodeapps -n wwptdb1 VIP 正在运行的节点: wwptdb1 GSD 没有运行的节点: wwptdb1 监听程序正在节点上运行: wwptdb1 ONS 守护程序未在节点上运行:wwptdb1 $ srvctl status nodeapps -n wwptdb2 VIP 正在运行的节点: wwptdb2 GSD 没有运行的节点: wwptdb2 监听程序正在节点上运行: wwptdb2 ONS 守护程序未在节点上运行:wwptdb2 ASM 实例的状态 $ srvctl status asm -n wwptdb1 ASM 实例 +ASM1 正在节点 wwptdb1 上运行。 $ srvctl status asm -n wwptdb2 124 ASM 实例 +ASM2 正在节点 wwptdb2 上运行。 列出配臵的所有数据库 $ srvctl config database orcl 显示 RAC 数据库的配臵 $ srvctl config database -d orcl wwptdb1 orcl1 /u01/app/oracle/product/10.2.0/db_1 wwptdb2 orcl2 /u01/app/oracle/product/10.2.0/db_1 显示指定集群数据库的所有服务 $ srvctl config service -d orcl orcltest PREF:orcl2 orcl1 AVAIL: 显示节点应用程序的配臵 -(VIP、GSD、ONS、监听器) $ srvctl config nodeapps -n wwptdb1 -a -g -s -l VIP 已存在。: /wwptdb1-vip/9.49.143.230/255.255.255.0/eth0 GSD 已存在。 ONS 守护程序已存在。 监听程序已存在。 $ srvctl config nodeapps -n wwptdb2 -a -g -s -l VIP 已存在。: /wwptdb2-vip/9.49.143.231/255.255.255.0/eth0 GSD 已存在。 ONS 守护程序已存在。 监听程序已存在。 显示 ASM 实例的配臵 $ srvctl config asm -n wwptdb1 +ASM1 /u01/app/oracle/product/10.2.0/db_1 $ srvctl config asm -n wwptdb2 +ASM2 /u01/app/oracle/product/10.2.0/db_1 集群中所有正在运行的实例 SELECT inst_id , instance_number inst_no , instance_name inst_name , parallel , status , database_status db_status , active_state state 125 , host_name host FROM gv$instance ORDER BY inst_id; INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE HOST -------- -------- ---------- --- ------- ------------ --------- ------- 1 1 orcl1 YES OPEN ACTIVE NORMAL wwptdb1 2 2 orcl2 YES OPEN ACTIVE NORMAL wwptdb2 位于磁盘组中的所有数据文件 select name from v$datafile union select member from v$logfile union select name from v$controlfile union select name from v$tempfile; NAME -------------------------------------------------------------------------------- +ORCL_DATA1/orcl/controlfile/current.260.574972043 +ORCL_DATA1/orcl/controlfile/current.261.574972043 +ORCL_DATA1/orcl/datafile/mas.274.574976949 +ORCL_DATA1/orcl/datafile/sysaux.257.574971959 +ORCL_DATA1/orcl/datafile/system.256.574971959 +ORCL_DATA1/orcl/datafile/undotbs1.258.574971961 +ORCL_DATA1/orcl/datafile/undotbs2.267.574972125 +ORCL_DATA1/orcl/datafile/users.259.574971961 +ORCL_DATA1/orcl/onlinelog/group_1.262.574972047 +ORCL_DATA1/orcl/onlinelog/group_1.263.574972051 +ORCL_DATA1/orcl/onlinelog/group_2.264.574972055 NAME -------------------------------------------------------------------------------- +ORCL_DATA1/orcl/onlinelog/group_2.265.574972057 +ORCL_DATA1/orcl/onlinelog/group_3.268.574972205 +ORCL_DATA1/orcl/onlinelog/group_3.269.574972209 +ORCL_DATA1/orcl/onlinelog/group_4.270.574972211 +ORCL_DATA1/orcl/onlinelog/group_4.271.574972215 +ORCL_DATA1/orcl/tempfile/temp.266.574972073 17 rows selected. 属于―ORCL_DATA1‖磁盘组的所有 ASM 磁盘 126 SELECT path FROM v$asm_disk WHERE group_number IN (select group_number from v$asm_diskgroup where name = 'ORCL_DATA'); PATH ---------------------------------- ORCL:VOL1 ORCL:VOL2 ORCL:VOL3 启动和停止集群(只需从单个节点运行)此时,我们已经完全安装并配臵了 Oracle RAC 10g 并 拥有了一个功能完善的集群化数据库。 至此完成所有工作后,您可能会问―那我又怎样启动和停止 服务呢?‖如果您遵循了本指南中的说明,则所有服务(包括 CRS、所有 Oracle 实例、企业管理 器数据库控制台等)应在 Wwptdb 节点每次重新引导时自动启动。 但有时您可能想要关闭某个节点,然后手动重新启动它。或者,您可能发现企业管理器没有而 需要启动它。本节提供了启动和停止集群环境的命令(使用 SRVCTL)。 确保您是以 oracle UNIX 用户登录的。我们将从 wwptdb1 运行本节中的所有命令: # su - oracle $ hostname wwptdb1 停止 Oracle RAC 10g 环境 第一步是停止 Oracle 实例。当此实例(和相关服务)关闭后,关闭 ASM 实例。最后,关闭节点 应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。 export ORACLE_SID=orcl1 emctl stop dbconsole srvctl stop instance -d orcl -i orcl1 srvctl stop asm -n wwptdb1 srvctl stop nodeapps -n wwptdb1 启动 Oracle RAC 10g 环境 第一步是启动节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。当成功启动节点应用程 序后,启动 ASM 实例。最后,启动 Oracle 实例(和相关服务)以及企业管理器数据库控制台。 export ORACLE_SID=orcl1 srvctl start nodeapps -n wwptdb1 srvctl start asm -n wwptdb1 srvctl start instance -d orcl -i orcl1 emctl start dbconsole 使用 SRVCTL 启动/停止所有实例 启动/停止所有实例及其启用的服务。我只是觉得有意思就把此步骤作为关闭所有实例的一种方法 127 加进来了! srvctl start database -d orcl srvctl stop database -d orcl /u01/app/oracle/product/10.2.0/crs_1/bin/crs_stat –t 远程管理集群(只需从单个节点运行) 启动和停止 iSQL*Plus: isqlplusctl start isqlplusctl stop iSQL*Plus URL: http://wwptdb1:5560/isqlplus iSQL*Plus DBA URL: http://wwptdb1:5560/isqlplus/dba Enterprise Manager URL: http://wwptdb1:1158/em Ultra Search URL: http://wwptdb1:5620/ultrasearch http://wwptdb1:5620/ultrasearch/admin ORACLE 透明故障切换 企业通常需要他们的企业应用程序提供 99.99%(甚至 99.999%)的可用性。想一想,要确保 全年停机时间不超过 0.5 小时或者甚至没有停机时间得花费多大代价!为了满足众多这种高可用 性要求,企业正投资于可以在一个参与系统出现故障时提供自动故障切换的机制。就 Oracle 数据 库的可用性而言,Oracle RAC 10g 通过它的高级故障切换机制提供了一个卓越的解决方案。Oracle RAC 10g 包含了提供持续可用性所需的必要组件,这些组件均在一个集群配臵中工作;当集群中 的某个参与系统出现故障时,用户将被自动移植到其他可用系统。 透明应用程序故障切换 (TAF) 选件是 Oracle RAC 10g 一个负责处理故障切换的主要组件。 所有断开的数据库连接(和进程)将被重新连接到集群的其他节点上。故障切换对用户是完全透明 的。 这最后一节简短介绍了 TAF 在 Oracle RAC 10g 中的工作方式。请注意,对 Oracle RAC 10g 中的故障切换进行全面介绍可能需要单独的一篇文章,我在此处只想提供一个简短概述。 一个重要的说明是,TAF 自动在 OCI 库中发生。也就是说,您的应用程序(客户端)代码 不需要更改便可以利用 TAF。但您需要在 Oracle TNS 文件 tnsnames.ora 中执行某些配臵步骤。 设臵 tnsnames.ora 文件 在演示 TAF 之前,我们需要核实在一个非 RAC 客户端计算机(如果您有一台安装了 Windows 计算机)上的 tnsnames.ora 文件中存在一个有效的条目。确保您安装了 Oracle RDBMS 软件。(实际上,您只需要在客户端上安装 Oracle 软件。) 128 在本指南的创建集群化数据库过程中,我们创建了一个将命名为 ORCL 的服务用于测试 TAF。 它为负载平衡和故障切换提供了所有必需的配臵参数。可以将此条目的内容复制到客户端计算机 (本示例中使用了我的 Windows 便携式计算机)上的 %ORACLE_HOME%\network\admin\tnsnames.ora 文件中: ... ORCL = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = wwptdb1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = wwptdb2-vip)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA= (SERVER = DEDICATED) (SERVICE_NAME = orcl.wwpt.org) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5) ) ) ) ... TAF 演示 从 Windows 计算机(或其他非 RAC 客户端计算机)中,以 SYSTEM 用户登录使用 orcltest 服 务的集群化数据库: C:\> sqlplus system/manager@orcl COLUMN instance_name FORMAT a13 COLUMN host_name FORMAT a9 COLUMN failover_method FORMAT a15 COLUMN failed_over FORMAT a11 SELECT instance_name , host_name , NULL AS failover_type , NULL AS failover_method , NULL AS failed_over FROM v$instance UNION SELECT NULL , NULL 129 , failover_type , failover_method , failed_over FROM v$session WHERE username = 'SYSTEM'; INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER ------------- --------- ------------- --------------- ----------- orcl1 wwptdb1 不要注销上面的 SQL*Plus 会话! 我们已经运行了上面的查询,现在我们应该使用 abort 选项来关闭 wwptdb1 上的 orcl1 实例。 要执行这一操作,我们可以使用 srvctl 命令行实用程序,如下所示: $ srvctl status database -d orcl 实例 orcl1 正在节点 wwptdb1 上运行 实例 orcl2 正在节点 wwptdb2 上运行 $ srvctl stop instance -d orcl -i orcl1 -o abort $ srvctl status database -d orcl 实例 orcl1 没有在 wwptdb1 节点上运行 实例 orcl2 正在节点 wwptdb2 上运行 现在让我们返回到我们的 SQL 会话,然后重新运行缓冲中的 SQL 语句: COLUMN instance_name FORMAT a13 COLUMN host_name FORMAT a9 COLUMN failover_method FORMAT a15 COLUMN failed_over FORMAT a11 SELECT instance_name , host_name , NULL AS failover_type , NULL AS failover_method , NULL AS failed_over FROM v$instance UNION SELECT NULL , NULL , failover_type , failover_method , failed_over 130 FROM v$session WHERE username = 'SYSTEM'; INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER ------------- --------- ------------- --------------- ----------- orcl2 wwptdb2 SQL> exit 从上面的演示中,我们可以看到上述会话现在已经被故障切换到了 wwptdb2 上的实例 orcl2 上。 9、审计开启 开启数据库审计功能,例如:审计 session 登录事件 SQL> alter system set audit_trail=db scope=spfile; SQL> audit session; 重新启动数据库实例,可以在 sys.aud$表查询记录 SQL> select * from sys.aud$; 10、TNS 密码设臵 [oracle@newtest admin]$ lsnrctl LSNRCTL for Linux: Version 9.2.0.8.0 - Production on 26-MAY-2010 09:56:13 Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> LSNRCTL> set password Password: The command completed successfully LSNRCTL> LSNRCTL> change_password Old password: New password: Reenter new password: Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=newtest)(PORT=1521))) Password changed for LISTENER The command completed successfully LSNRCTL> LSNRCTL> save_config Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=newtest)(PORT=1521))) Saved LISTENER configuration parameters. 131 Listener Parameter File /oracle/app/oracle/product/9.2.0/network/admin/listener.ora Old Parameter File /oracle/app/oracle/product/9.2.0/network/admin/listener.bak The command completed successfully LSNRCTL> LSNRCTL> status Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=newtest)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 9.2.0.8.0 - Production Start Date 26-MAY-2010 10:09:46 Uptime 0 days 0 hr. 2 min. 49 sec Trace Level off Security ON SNMP OFF Listener Parameter File /oracle/app/oracle/product/9.2.0/network/admin/listener.ora Listener Log File /oracle/app/oracle/product/9.2.0/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=newtest)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Service "monitor" has 2 instance(s). Instance "monitor", status UNKNOWN, has 1 handler(s) for this service... Instance "monitor", status READY, has 1 handler(s) for this service... Service "oraback" has 2 instance(s). Instance "oraback", status UNKNOWN, has 1 handler(s) for this service... Instance "oraback", status READY, has 1 handler(s) for this service... Service "orabackXDB" has 1 instance(s). Instance "oraback", status READY, has 1 handler(s) for this service... The command completed successfully 11、访问限制数据库主机 在 Oracle9i 以上版本数据库中,我们可以通过 SQLNET.ora 文件实现地址访问限制 在 SQLNET.ora 文件中设臵以下参数可以实现 IP 访问限制: $ pwd /u01/app/oracle/product/10.2.0/db_1/network/admin $ vi sqlnet.ora tcp.validnode_checking=yes #确定是否对客户机 IP 地址进行检查 132 tcp.invited_nodes=(ip1,ip2......) #列举允许连接的客户机的 IP 地址,以逗号分隔 tcp.excluded_nodes=(ip1,ip2......) #列举不允许连接的客户机的 IP 地址,以逗号分隔 设臵后需要重启监听: $ lsnrctl reload 在设臵这些参数前后可以通过‚tnsping 网络连接串‛来测试是否可连: $ tnsping tnsmy10g 通过监听器的限制,通常属于轻量级,比在数据库内部通过触发器进行限制效率要高。 需要注意的地方: 1、tcp.invited_nodes 与 tcp.excluded_nodes 都存在,以 tcp.invited_nodes 为主。 2、一定要许可或不要禁止服务器本机的 IP 地址,否则通过 lsnrctl 将不能启动或停止监听,因为 该过程监听程序会通过本机的 IP 访问监听器,而该 IP 被禁止了,但是通过服务启动或关闭则不影 响。 3、修改之后,一定要重起监听才能生效,而不需要重新启动数据库。 4、任何平台都可以,但是只适用于 TCP/IP 协议。 以下是我修改的内容: [oracle@admindb1 admin]$ more sqlnet.ora # SQLNET.ORA Network Configuration File:/u01/app/oracle/product/10.2.0/db_1/network/admin # Generated by Oracle configuration tools NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) tcp.validnode_checking=yes ------ 有效检测是否放开 tcp.invited_nodes=(192.168.1.16,192.168.1.15,192.168.75.15,192.168.75.16) ---允许访问的 ip 地址 tcp.excluded_nodes=(192.168.1.116,192.168.1.117,192.168.1.118) -------拒绝访问的 ip 地址 12、文本文件向表的转换 在 oracle 中,通过工具 sqlldr 将文本文件转换成表记录,具体方法是:以 oracle(也可是其他 用户,但是必须能执行 sqllus 命令)用户登录数据库主机,在一个目录下进行,文本文件创建,控 制文件创建,数据库对应表创建,执行脚本创建。完成后,直接执行脚本即可。 通过如下步骤: 1) 先创建文本文件和转换对应格式,2010zwdbindex.txt,内容如下所示: zc tpk_bill_id_94520091207 zc acc_bill_094520091207 unique 1 bill_id yz_bill05 zc itdx_acct_id_94520091207 zc acc_bill_094520091207 nonunique 1 acct_id yz_bill05 zc tidx_serv_id_94520091207 zc acc_bill_094520091207 nonunique 1 serv_id yz_bill05 zg idx_acc_bde_acctid_0939200912 zg acc_woff_book_dtl_e_0939200912 133 nonunique 1 acct_id yz_bill06_ind zg idx_acc_bde_billtid_0939200912 zg acc_woff_book_dtl_e_0939200912 nonunique 1 bill_id yz_bill06_ind ------------ 字段与字段直接都用空格或者 ‚|‛ 相隔。 2) 创建控制文件,并建立表转换对应的表,如上例可知: dyk_zwdb_a.ctl 文件内容如下: load DATA Append INTO TABLE oracle.dyk_text_a FIELDS TERMINATED BY " " ( pid, ppid, virpages, cirbytes, phypages, phybytes, swapages, swapbytes, program_name, host_ip ) 3) 创建执行脚本文件 test_int.sh,内容如下: sqlldr userid=oracle/oracle_dyk@tnstestdb data=dyk_text_b.txt control=dyk_a.ctl log=dyk_text_a.log bad=dyk_text_a.bad errors=10000; sqlldr userid=oracle/oracle_dyk@tnstestdb data=dyk_text_a.txt control=dyk_b.ctl log=dyk_text_b.log bad=dyk_text_b.bad errors=10000; sqlldr userid=oracle/oracle_dyk@tnstestdb data=zwdb20091225.txt control=dyk_zwdb_a.ctl log=dyk_zwdb_a.log bad=dyk_zwdb_a.bad errors=10000; 4)根据以上内容,在特别目录下进行脚本执行即可 5)登录数据库检查表的转换情况 十一、oracle 锁管理 1、ORACLE 锁模式 Oracle 锁概述: 134 Oracle RDBMS 的封锁类型可分为如下三类: 1)内部级封锁 内部级封锁是用于保护 ORACLE 内部结构,由系统内部实现,用户不能访问,因此我们不必对 此做过多的了解。 2)DDL 级封锁(字典/语法分析封锁)DDL 级封锁也是由 ORACLE RDBMS 来控制,它用于 保护数据字典和数据定义改变时的一致性和完整性。它是系统在对 SQL 定义语句作语法分析时自 动地加锁,无需用户干予。字典/语法分析封锁共分三类: (1)字典操作锁:用于对字典操作时,锁住数据字典,此封锁是独占的,从而保护任何一个时 刻仅能对一个字典操作。 (2)字典定义锁:用于防止在进行字典操作时又进行语法分析,这样可以避免在查询字典的同 时改动某个表的结构。 (3)表定义锁:用于 一个 SQL 语句正当访问某个表时,防止字典中与该表有关的项目被修改。 3)DML 级封锁 DML 级封锁用于控制并发事务中的数据操纵,保证数据的一致性和完整性,其封锁对象可以是表 或行。对用户的数据操纵,Oracle 可以自动为操纵的数据进行封锁,但如果有操纵授权,则为满足 并发操纵的需要另外实施封锁。DML 封锁可由一个用户进程以显式的方式加锁,也可通过某些 SQL 语句隐含方式实现。 Oracle 锁模式说明: 0:none 1:null 空 select 2:row-s 行共享(rs):行级共享锁;其他对象只能查询这些数据行 select for update、lock for update、lock row share 3:row-x 行专用(rx):行级排它锁,用于行的修改,在提交前不允许做 dml 操作 insert、update、 delete、lock row share 4:share 共享锁(s):阻止其他 dml 操作; create index、lock share 5:s/row-x 共享行专用(srx):共享行级排它锁;阻止其他事务操作, lock share row exclusive 6:exclusive 专用(x):排它锁;独立访问使用, alter table、drop able、drop index、truncate table 、 lock exclusive 数字越大锁级别越高, 影响的操作越多。 一般的查询语句如 select ... from ... ;是小于 2 的锁, 有时会在 v$locked_object 出 select ... from ... for update; 是 2 的锁,当对话使用 for update 子串打开一个游标时,所有返回集中 的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行 update、delete 或 select...for update 操作,insert / update / delete ... ; 是 3 的锁。 没有 commit 之前插入同样的一条记录会没有反应,因为后一个 3 的锁会一直等待上一个 3 的锁, 必须释放掉上一个才能继续工作;创建索引的时候也会产生 3,4 级别的锁。 locked_mode 为 2,3,4 不影响 DML(insert,delete,update,select)操作, 但 DDL(alter,drop 等)操作 会提示 ora-00054 错误,有主外键约束时 update / delete ... ; 可能会产生 4,5 的锁;DDL 语句时是 6 的锁。 以 DBA 角色, 查看当前数据库里锁的情况可以用如下 SQL 语句: select object_id,session_id,locked_mode from v$locked_object; select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 135 where t1.session_id=t2.sid order by t2.logon_time; 如果有长期出现的一列,可能是没有释放的锁,可以用下面 SQL 语句杀掉长期没有释放非正常的 锁: alter system kill session 'sid,serial#'; 如果出现了锁的问题, 某个 DML 操作可能等待很久没有反应,出现这种情况不要用 OS 系统命 令$kill process_num 或者 $kill -9 process_num 来终止用用户连接等连接操作,因为一个用户进程 可能产生一以上锁, 杀 OS 进程并不能彻清除锁的问题.记得在数据库级别用 alter system kill session 'sid,serial#'; 杀掉不正常的锁。 相关视图名描述以及主要字段说明: v$session 查询会话的信息和锁的信息。 sid,serial#:表示会话信息,program:表示会话的应用 程序信息。row_wait_obj#:表示等待的对象,和 dba_objects 中的 object_id 相对应。 v$session_wait 查询等待的会话信息。 sid:表示持有锁的会话信息。Seconds_in_wait:表示等 待持续的时间信息,Event:表示会话等待的事件。 v$lock 列出系统中的所有的锁。 Sid:表示持有锁的会话信息。Type:表示锁的类型。值包括 TM 和 TX 等。ID1:表示锁的对象标识。lmode,request:表示会话等待的锁模式的信息。用数字 0 -6 表示,和表 1 相对应。 dba_locks 对 v$lock 的格式化视图。 Session_id:和 v$lock 中的 Sid 对应。 Lock_type:和 v$lock 中的 type 对应,Lock_ID1: 和 v$lock 中的 ID1 对应, Mode_held,mode_requested:和 v$lock 中的 lmode,request 相对应。 v$locked_object 只包含 DML 的锁信息,包括回滚段和会话信息。 Xidusn,xidslot,xidsqn:表 示回滚段信息。和 v$transaction 相关联,Object_id:表示被锁对象标识。Session_id:表示持有锁 的会话信息。Locked_mode:表示会话等待的锁模式的信息,和 v$lock 中的 lmode 一致。 所查看语句: select a.owner, c.sid, c.serial#, b.os_user_name, b.process, c.command, c.program, a.object_name, a.object_type, a.last_ddl_time, c.machine, c.logon_time, b.locked_mode from dba_objects a, v$locked_object b, v$session c where a.object_id = b.object_id and b.session_id = c.sid ---------and c.command=0 and program like 'plsqldev.exe%' 2、ORACLE 直接锁表方法 操作语法: lock table table_name1 [,table_2, ..., table_n] in lock_mode mode nowait 操作模式: lock table table_name in share mode; lock table table_name in exclusive mode nowait; lock table table_name in share update mode; 136 lock table table_name in row exclusive mode nowait; lock table table_name in share row exclusive mode; lock table table_name in row share mode nowait; 十二、数据备份和迁移 1、exp 和 imp 工具 1)直接从后台导入、导出 导入文件格式: userid=username/passwdchar@TMS_name buffer=300000000 tables= ( Table_name1 Table_name2 、、、、、、、、、 Table_nameM ) file=/directory_name/imp_name1.dmp log=/directory_name/imp_name1.log CONSTRAINTS=no indexes=N grants=N ignore=Y nohup imp parfile=/directory_name/imp_filename.par & 导出文件格式: userid=username/passwdchar@TMS_name buffer=300000000 tables= ( Table_name1 Table_name2 、、、、、、、、、 Table_nameM ) file=/directory_name/exp_name1.dmp log=/directory_name/exp_name1.log CONSTRAINTS=no indexes=N grants=N 137 ignore=Y -----------nohup imp parfile=/directory_name/exp_filename.par & -------分区表应该创建好后,再进行导入 2)用手工的方式导入、导出 (1)按表导: 导出: exp oracle/oracle file=D:\htm\oracle1.dmp tables=(oracle.BOOK_B,oracle.BOOK_C) log=D:\htm\oracle.log 导入: imp oracle/oracle file=D:\htm\oracle1.dmp tables=(BOOK_B,BOOK_C) log=D:\htm\oracle.log (2)按用户导: 导出: exp oracle/oracle@oraibss file=d:\htm\user%date:~0,10%.dmp log=d:\htm\user%date:~0,10%.log compress=n buffer=8092 consistent=y direct=n constraints=y feedback=10000 grants=y record=y indexes=y triggers=y rows=y 导入: imp oracle/oracle fromuser=(oracle) touser=(oracle) file="d:\htm\user%date:~0,10%.dmp" log="d:\htm\user%date:~0,10%.log" (3)全库导: 导出: exp system/oracle@oraibss full=y direct=n buffer=8192 compress=y file=d:\htm\full%date:~0,10%.dmplog=d:\htm\full%date:~0,10%.log exp system/oracle@oraback full=y direct=n buffer=8192 compress=y file=d:\htm\fulloracle.dmp log=d:\htm\fulloracle.log 导入: imp system/oracle@oratest full=y buffer=8192 file=d:\htm\full%date:~0,10%.dmp log=d:\htm\fullimp%date:~0,10%.log imp system/oracle@oratest full=y buffer=8192 file=/backup/back/full.$DATELOG.01.dmp log=/backup/back/full.$DATELOG.log 2、直接通过 dblink 进行表的 insert 1)在两个数据库之间创建 dblink,通过创建 dblink 进行进行 2 个数据库之间的数据迁移 2)进行数据迁移脚本 建表脚本准备:_crt_tab.sql select 'CREATE TABLE '||OWNER||'.'||TABLE_NAME ||' TABLESPACE TS_TEST NOLOGGING AS SELECT * FROM '||OWNER||'.'||TABLE_NAME||'@dblink_name;' from dba_tables where owner IN ('name1','name2','name3',....,'nameN') 138 and table_name not LIKE '%string1%' and table_name not LIKE '%string2%' 、、、、、、 and table_name not LIKE '%stringN%' ; --table size select count(*),sum(bytes)/1048576/1024 from dba_segments where (owner,segment_name ) in ( select owner,table_name from dba_tables where owner IN ('name1','name2','name3',....,'nameN') and table_name not LIKE '%string1%' and table_name not LIKE '%string2%' 、、、、、、 and table_name not LIKE '%stringN%' ; 创建索引视图导出表准备:(prepare to create idx) DROP TABLE ALL_idx; CREATE TABLE ALL_IDX AS select i.owner,i.index_name,i.table_owner,i.table_name,i.uniqueness, c.column_position,c.column_name,i.tablespace_name from dba_indexes i,dba_ind_columns c where i.owner=c.index_owner and i.index_name=c.index_name and i.table_owner IN ('name1','name2','name3',....,'nameN') and table_name not LIKE '%string1%' and table_name not LIKE '%string2%' 、、、、、、 and table_name not LIKE '%stringN%' ; create index idx_all_idx_iname on all_idx(owner,index_name); create index idx_all_idx_tname on all_idx(table_owner,table_name); drop table all_idx_cols; create table all_idx_cols as select /*+ parallel(i,8) */ owner,index_name,table_owner,table_name,uniqueness,tablespace_name, LTRIM(MAX(SYS_CONNECT_BY_PATH(column_name,',')) KEEP (DENSE_RANK LAST ORDER BY column_position),',') AS cols from all_idx i group by owner,index_name,table_owner,table_name,uniqueness,tablespace_name connect by column_position -1=prior column_position and owner=prior owner and 139 index_name=prior index_name start with column_position=1 ; 创建索引脚本准备:_crt_idx.sql select distinct 'create '||decode(uniqueness,'UNIQUE','UNIQUE',NULL)||' index '||owner||'.'||index_name|| ' on '|| table_owner||'.'||table_name||'('||cols||') tablespace TS_TEST NOLOGGING;' from all_idx_cols order by dbms_random.random(); 表分析脚本准备:_ana_tab.sql select 'exec dbms_stats.gather_table_stats('''||OWNER||''','''||TABle_NAME||''',method_opt => ''FOR ALL COLUMNS SIZE 1'', cascade => TRUE,estimate_percent => 25,granularity=>''all'',degree => 2)' GT from dba_tables where owner IN ('name1','name2','name3',....,'nameN') and table_name not LIKE '%string1%' and table_name not LIKE '%string2%' 、、、、、、 and table_name not LIKE '%stringN%' ; 序列创建准备:_crt_seq.sql,手工执行,不要用 runsql.sh 并发执行 select 'DROP SEQUENCE '||SEQUENCE_OWNER ||'.'||SEQUENCE_NAME||';'||CHR(10)|| 'CREATE SEQUENCE '||SEQUENCE_OWNER||'.'||SEQUENCE_NAME|| ' minvalue MIN_VALUE || ' maxvalue '||MAX_VALUE || ' start with '|| ROUND(LAST_NUMBER*1.1) || ' increment by '|| INCREMENT_BY || ' cache '|| CACHE_SIZE || DECODE (CYCLE_FLAG,'Y',' cycle',' nocycle') || decode(order_flag,'Y',' order','') || ';' str from dba_sequences s where SEQUENCE_owner IN ('name1','name2','name3',....,'nameN'); 3)生产文件,在系统上进行数据迁移执行 '|| 3、rman 备份 RMAN 准备工作: 建立恢复目录的步骤 (1)建立恢复目录表空间 sql>create tablespace dyk_rman datafile 'E:\ORACLE\ORABACK\oradb1\dyk_rman1.dbf' size 2048M; 140 (2)建立恢复目录所有者 141 sql>create user rmans identified by rman_2010 default tablespace dyk_rman (3)授予恢复目录所有者角色。恢复目录所有者必须具有 recovery_catalog_owner 角色。 另外,当建立 恢复目录时, 需要连接到数 据库,并且在 恢复目录表空间 上创建表,因 此还应该为恢复目录所有者授予 connect 和 resource 角色 sql>grant connect,resource,recovery_catalog_owner to rman (4)建立恢复目录。 c:\>rman catalog rman/rman@catadb. rman>create catalog; (5)注册目标数据库。在建立了恢复目录之后,为了将目标数据库的 rman 元数据 存放 到恢复目录中,必须连接到目标数据库,并使用 register database 命令注册目标数据库, 可以使用 report schema 命令检查是否注 册成功。 c:\>rman catalog rman/rman@oradb1 rman>connect target sys/oracle@oradb1 rman>register database rman>report schema; 一、RMAN 备份概念 通道:RMAN 允许用户对目标数据 库和辅助数据库进行备份和恢复操作,且备份 目标 的存放支持磁盘和磁带。通过引入通道的概念, RMAN 可以方便的支持上面的功能 , 而 且可以方便的实现并行、带宽控制、命名转化 等更多的功能。 备份集:RMAN 的 BACKUP 命令产生的备份集的格式是 RMAN 特有的。它和用户 管 理的备份方式 产生的数据文 件的拷贝的格 式不同。备份 集的最大特点应 该是多路复用 和压缩。RMAN 仅仅备份包含数据的 block,并把多个数据文件以一定的格式存 储在 一个备份集中。 备份类型:RMAN 支持三种类型的备份, 全备份、增量备份和差异备份。 控制文件和系统参数文件自动备份:RMAN 的新增功能,如果设臵了控制文件的自 动 备份。一旦用户发出了 BACKUP 和 COPY 命令,则自动包括控制文件和系统参数 文 件的备份。而 且,数据库的 物理结构一旦 发生变化,则 立刻自动备份控 制文件和系统 参数文件。 备份保留策略:RMAN 提供了窗口和冗余 两种策略来判断以前的备份是否已经陈旧。 备份优化策略:定义了 RMAN 在何种情况下可以跳过对只读 、脱机等自上次备份后 未 发生变化的数据文件的备份。 映像拷贝:RMAN 的 COPY 命令支持对数据 文件进行映像拷贝,这种方式生成的备份 格 式和用户管理备份方式生成的格式是一样的 。因此,也可以配臵 RMAN 支持用户 管 理备份方式生成的备份文件。 差异增量备份: 142 差异增量是备份上级或同级备份以来变化的块。 在 oracle9i 上数据恢复时间比较长 , oracle10g 上速度较快,因为在 oracle10g 数据库中。 累计增量备份: 累计增量是备份上级备份以来变化的块。如果备 份 level 1 级备份,要扫描数据库中 中 所有的 BLOCK,以检查是否有改变。level 2 级备份,需要扫描 level 1 级备份以后变 化的 block 块。累计增量增加了备份的时间,但是因为恢复的时候,需要从更少的备份 集中恢复数据,所以,为了减少恢复的时候,累计增量备份将比差异增量备份更有效 。 非归档模式下 RMAN 备份,非归档模式 下的恢复方案可选性很小,一般情况下只能有 一 种 恢复 方式 ,就 是数 据库 的冷 备份 的完 全恢 复, 仅仅 需要 拷贝 原来 的备 份就 可以 ( restore),不需要 recover;这种情况下的恢复,可以完全恢复到备份的点上,但是在 备 份之后与崩 溃之前的数据 将全部丢失; 不管毁坏了多 少数据文件或是 联机日志或是 控 制文件,都可以通 过这个办法恢复,因为这个恢复过程是 Restore 所有的冷备份文件 , 而这个备份点 上的所有文件 是一致的,与 最新的数据库 没有关系,就好 比把数据库又 放到了一个以前的"点"上; 在非归档模式下,RMAN 冷 备份效果不好,因为 RMAN 不备份联机日志,restore 不能 根本解决问题; 归档模式下 RMAN 备份:采用热备份 ,需要运行在归档模式下,可以实现数据库的 完 全恢复,也就是说,从备份后到数据库崩溃时的 数据都不会丢失;可以采用全备份数据 库的方式备份 ,对于特殊情 况,也可以只 备份特定的数 据文件,如只备 份用户表空间 (一般情况下对于某些写入操作特别频繁的数 据文件,可以单独加大备份频率);如果 在恢复过程中 ,发现损坏的 是多个数据文 件,即可以采 用单个数据文件 的恢复方法, 也可以采用整个数据库的恢复方法; 二、RMAN 命令和脚本介绍 (1) 命令介绍: validate:备份集有效性 验证命令,可以用于校验备份集有效性 操作: restore validate controlfile; 验证控制文件 备份是否有效 restore validate spfile; 验证 spfile 文件备份是否有效 restore validate database; 验证数据库备份是否 有效 list:列出备份相关信息命名 操作: 列出数据文件备份集 rman>list backup of tablespace user01; 列出控制文件备份集 rman>list backup of controlfile; 列出归档日志备份集 rman>list backup of archivelog all; 列出 spfile 备份集 rman>list backup of spfile; 143 列出数据文件映像副本 rman>list copy of database; 列出特定表空间数据文件的映像副本 rman>list copy of tablespace; 列出特定数据文件的映像副本 rman>list copy of datafile 5 列出控制文件映像副本 rman>list copy of controlfile 列出归档日志映像副本 rman>list copy of archivelog all; 列出数据库副本每次使用 resetlogs 选项打开数据库之后都会生成一个新的数据库副 本 rman>list incarnation of database; configure:备份配臵策略设臵命令 操作: 保存策略 (retention policy) configure retention policy to recovery window of 3 days; configure retention policy to redundancy 3; configure retention policy clear; 备份优化 backup optimization configure backup optimization on; configure backup optimization off; configure backup optimization clear; 默认设备 default device type configure default device type to disk; configure default device type to stb; configure default device type clear; 控制文件 controlfile configure controlfile autobackup on; configure controlfile autobackup format for device type disk to "E:\oracle\oraback\conf_%F"; configure controlfile autobackup clear; configrue controlfile autobackup format for device type disk clear; configrue snapshot controlfile name to "E:\oracle\oraback\control\_%U.snp"; configrue snapshot controlfile name clear; 并行数(通道数) device type disk|stb pallelism n; configure device type disk|stb parallelism 2; configure device type disk|stb clear; configure channel device type disk format "E:\oracle\oraback\_%U"; configure channel device type disk maxpiecesize 100m configure channel device type disk rate 1200K configure channel 1 device type disk format "E:\oracle\oraback\_%U"; configure channel 2 device type disk format "E:\oracle\oraback\_%U"; configure channel 1 device type disk maxpiecesize 100m 144 生成备份副本 datafile|archivelog backup copies configure datafile backup copies 2; configure archivelog backup copies 2; show:备 份配臵参数查看命令 show all rman 配臵参数为: configure retention policy to recovery window of 7 days; configure backup optimization on; configure default device type to disk; configure controlfile autobackup on; configure controlfile autobackup format for device type disk to 'e:\oracle\oraback\_%f'; configure device type disk parallelism 3; configure datafile backup copies for device type disk to 1; # default configure archivelog backup copies for device type disk to 1; # default configure maxsetsize to unlimited; configure snapshot controlfile name to 'e:\oracle\ora92\database\sncforadb1.ora'; # default report:显示 rman 备份物理信息 操作: 报告数据库物理结构 report schema; 报告陈旧备份 report obsolete; 报告不可恢复的数据文件 report unrecoverable; copy:建立数据文件映像副命令,只能基于数 据文件、控制文件、归档日志建立映像 副 本,而不能基本 spfile 建立映像副本。映像副本只 能建在磁盘上,而不能建在磁带 上。 o racle database 10g 之前,只能使用 copy 命令 来完成;从 oracle db 10g 开始,不 仅 可以使用 copy 命令建立映像副本,而且可以使用 backup 命令的 as copy 选项建立映 像副本。 建立数据文件映像副本。 rman> backup as copy format='e:\ora cle\oraback\df_4.dbf' datafile 4; rman> copy datafile 1 to 'e:\oracle\oraback\_1.dbf'; 建立控制文件映像副本。 rman> backup as copy format='e:\oracle\oraback\dyk.ctl' current controlfile; rman> copy current controlfile to 'e:\oracle\oraback\dyk.ctl'; 建立归档日志映像副本。 rman> backup as copy format='e:\oracle\oraback\dyk.log' archivelog sequence 23; rman> copy archivelog 'e:\oracle\oraback\dyk1.log' to 'e:\oracle\oraback\dyk2.log'; 145 并行化建立映像副本。 rman> configure device type disk parallelism 3; rman> backup as copy format='e:\oracle\oraback\dyk_%f.dfb' datafile 2,3,4; rman> configure device type disk clear; 指定映像副本标记。 rman> backup as copy format='e:\oracle\oraback\dyk_%f.dbf' datafile 4 tag=df_4; rman> copy datafile 1 to 'e:\oracle\oraback\dyk_%f.dbf' tag=df_1; backup:rman 数据库备份命令 完全数据库备份集 一致性备份。 c:\>rman target sys/oracle@mydb1 nocatalog rman> shutdown immediate rman> backup database format='e:\oracle\oraback\dyk_%d_%s.dbf'; rman> sql 'alter system archive log current'; sql 语句: alter system archive log current (2) 非一致性备份。 rman> alter database open; rman> backup database format='e:\oracle\oraback\dyk_%d_%s.dbf'; rman> sql 'alter system archive log current'; sql 语句: alter system archive log current (3) 免除表空间。 rman> configure exclude for tablespace users; rman> backup database format='e:\oracle\oraback\dyk_%d_%s.dbf'; rman> sql 'alter system archive log current'; sql 语句: alter system archive log current rman> configure exclude for ta blespace users clear; 表空间备份集 rman> backup tablespace users f ormat='e:\oracle\oraback\dyk_%d_%n_%s.dbf'; 数据文件备份集 rman> backup datafile 4 format='e:\oracle\oraback\dyk_ %d_%n_%f_%s.dbf'; 控制文件备份集 rman> backup current controlfile format='e:\oracle\oraback\dyk_%d_%s.ctl'; 备份数 据文件 1 时, 会自动 备份当 前控制 文件。 当备份 其他数 据文件 时, 通过指 定 include current controlfile 选项可以同时备份控制文件 rman> backup datafile 4 format='e:\oracle\oraback\dyk_%d_%s.dbf' include current controlfile; spfile 备份集 rman> backup spfile format='e:\oracle\oraback\dyk_%d_%s.par'; 归档日志备份集 rman> backup format='e:\oracle\oraback\dyk_%d_%s.arc' archivelog from time='sysdate-1' until time='sysdate'; 并行化备份集 rman> backup database format='e:\oracle\oraback\dyk_%d_%s.dbf'; 146 建立多重备份 rman> backup copies 3 tablespace users format='e:\oracle\oraback\dyk1_%d_%n_%s.dbf','e:\oracle\oraback\dyk2_%d_%n_ % s.dbf','e:\oracle\oraback\dyk3_%d_%n_%s.dbf'; 备份备份集 rman> backup backupset 60 format='e:\oracle\oraback\dyk_%d_%s.bak'; 建立多个备份片 rman> configure channel device type disk maxpiecesize 500m; rman> backup device type disk format='e:\oracle\oraback\dyk_%d_%s_%p.dbf' database; rman> configure device type disk clear; 建立压缩备份集 rman> backup as compressed backupset tablespace users fo rmat='e:\oracle\oraback\dyk_%d_%n_%s.dbf'; 备份数据文件和归档日志 rman> backup format 'e:\oracle\oraback\dyk_%d_%s.bak' tablespace users plus archivelog; 指定备份集标记 rman> backup format 'e:\oracle\oraback\dyk_%d_%s.bak' tablespace users tag='sj_data'; 增量备份 差异增量备份。 增量备份是指 备份更低级别 或相同级别最 近一次备份以 来变化的数据块 ,增量备份的 基础是增量 0 级备份。 rman> backup incremental level 0 format='e:\oracle\oraback\dyk%d_%s.dbf' tablespace sj_data; rman> backup incremental level 2 format='e:\oracle\oraback\dyk%d_%s.dbf' tablespace sj_data; rman> backup incremental level 1 format='e:\oracle\oraback\dyk%d_%s.dbf' tablespace sj_data; 累积增量备份。 累积备份是指备份更低级别或 n-1 级别最近一次备份以来变化的数据 块。 rman> backup incremental level 0 format='e:\oracle\oraback\dyk%d_%s.dbf' tablespace sj_data; rman> backup incremental level 2 format='e:\oracle\oraback\dyk%d_%s.dbf' tablespace sj_data; rman> backup incremental level 2 cumulative format='e:\oracle\oraback\dyk%d_%s.dbf' tablesp ace sj_data; rman> backup incremental level 1 format='e:\oracle\oraback\dyk%d_%s.dbf' t ablespace sj_data; 147 restore:rman 数据转储命令 转储数据库所有数据文件,该命令只能在 mount 下使用: restore database; 转储特定表空间的数据文件,该命令只能在 open 下使用: restore tablespace; 转储特定数据文件,该命令既可以在 open 下使用,也可以在 mount 下使用: restore datafile; 转储控制文件,该命令只能在 nomount 下使用: restore controlfile; 转储归档日志,该命令既可以在 mount 下使用,也可以在 open 下使用: restore archivelog; 转储服务器参数文件,该命令只能在 nomount 状态下使 用: restore spfile; recover:rman 数据库恢复命令 恢复数据: recover database; 恢复数据库表空间对应文件: recover datafile 12; crosscheck:该命令用于核对磁盘和磁带上的备份文件 ,以确保 rman 资料库与备份文 件 保持同步。该命令只会检查 rman 资料库所记载的备份文件。当执行 crosscheck 命 令 时,如果资料 库记录不匹配 于备份文件的 物理状态,那 么该命令会更新 资料库记录的 状态信息。当使用 crosscheck 命令核对备份文件之后,备份文件的状态会 包括 avaliable、 unavaliable 和 expired 三种,如果备份文件处于 expired 状态,则说明物理文件已经被 手工删除或者损坏。注意,如果备份文件处于 expired 状态,应该使用 delete 命令删除 该 备份文件: 核对所有备份集 rman>crosscheck backup; 核对所有数据文件的备份集 rman>crosscheck backup of database; 核对特定表空间的备份集 rman>crosscheck backup of tablespace system; 核对特定数据文件的备份集 rman>crosscheck backup of datafile 4; 核对控制文件的备份集 rman>crosscheck backup of controlfile; 核对 spfile 的备份集 rman>crosscheck backup of spfile; 核对归档日志的备份集 rman>crosscheck backup of archivelog sequence 3; 核对所有映像副本 rman>crosscheck copy; 148 核对所有数据文件的映像副本 rman>crosscheck copy of database; 核对特定表空间的映像副本 rman>crosscheck copy of tablespace users; 核对特定数据文件的映像副本 rman>crosscheck copy of datafile 4; 核对控制文件的映像副本 rman>crosscheck copy of controlfile; 核对归档日志的映像副本 rman>crosscheck copy of archivelog sequence 4; change:备份属性设臵命名 改变备份集状态: 可用 change backupset .. unavailable/available 来改变 一个备份集的状态 rman>change backupset 22 unavailable 改变映像副本状态: 数据文件:change datafilecopy .. available/unavailable 控制文件:change controlfilecopy .. available/unavailable 归档日志:change archivelog .. available/unavailable rman>change datafilecopy 'e:\oracle\oraback\sj_data.bak' unavailable; 建立长期备份 :长期备份是 指被长期保留 的备份文件, 使用长期备份的 目的是为了可 以将数据库恢复到过去的特定时间点。当设臵了长期备份之后 ,rman 会从设备冗 余策 略中免除该备份文件,也就是说,长期备份文件 不会被标记为陈旧备份。 命令:change .. keep/nokeep 使备份集 17 永久保留 rman>change backupset 17 keep forever logs; 使备份集 12 保留 60 天 rman>change backupset 12 keep until time 'sysdate+60' logs; 免除备份集 15 的保留期限 rman>change backupset 15 nokeep delete:删除 rman 备份记录及相应的物理文件 操作: 删除陈旧备份 rman>delete obsolete; 删除 expired 备份集 当使用 os 命令删 除了备份集对应的备份片文件后,如果执行 crosscheck 命令核对 备份 集,那么会将该备份集标记为 expired 状态。 rman>delete noprompt expired backup; 删除 expired 副本 rman>delete noprompt expired copy; 删除特定备份集 rman>delete noprompt backupset 19; 删除特定备份片 149 rman>delete noprompt backuppiece 'e:\oracle\oraback\sj_data.bak'; 删除所有备份集 rman>delete noprompt backup; 删除特定映像副本 rman>delete noprompt datafilecopy 'e:\oracle\oraback\sj_data.bak'; 删除所有映像副本 rman>delete noprompt copy; 在备份后删除输入对象当使用 backup 命令备份归档日 志或备份集时,在备份完成之 后 可以删除原有输入对象 rman>backup archivelog all delete input; rman>backup backupset 22 format='e:\oracle\oraback\sj_%u.bak' delete input; 注意:以下是 RMAN 备份相关的命令: allocate, alter, backup,beginline, blockrecover, catalog, change, connect, copy, create, crosscheck, configure, duplicate, debug, delete, drop, exit, endinline, host, {, library, list, mount, open, print, quit, recover, register, release, replace, report, renormalize, reset, restore, resync, rman, run, rpctest, set, setlimit, sql, spool, startup, shutdown, send, show, test, upgrade, validate (2)脚本介绍: 批处理命令 run: rman 命令执行方式:在运行 rman 命令的方式,共有 4 种运行方 式。 1)单个执行 rman>backup database; 2)批处理:批处理方式实质是将原来单个执行的命 令组合到一起,并放在 run{}之间, 这种方式最大的好处是所有在 run 中的命令被视为一个作业,如果作业中任何一 条命 令 执行失败, 则整个命令停 止执行,即失 败命令后的其 它命令都不会再 被执行。这种 方 式是最常使用的方式,特别对于后台执行。 rman>run{ ...... } 3)运行脚本: rman target / @backup_db.rman rman> @backup_db.rman rman> run { @backup_db.rman } 运行存储在恢复目录中的脚本(需要首先为 rman 创建 恢复目录) rman> run { execute script backup_whole_db }; 4)操作系统脚本(linux,windows 环境下小有差异,但只是操作系统命令的不同) rman cmdfile=backup_db.rman 在写脚本之前,先明确目标: (1)每天夜间 1 点执行; (2)数据库全备,同时备份控制文件及归 档日志文件,备份文件保存至:E:\oracle\oraback 目录下,并在完成归档日志文件备份后,自动删 除已备份的归档日志; 150 (3)备份保留 7 天,过期则自动删除; 151 (4)保留操作日志备查; 1)编写 man 批处理文 件 保存至:e:\oracle\oraback\database_backup_data.rman run { configure retention policy to recovery window of 7 days; configure controlfile autobackup on; configure controlfile autobackup format for device type disk to ' e:\oracle\o raback \%f'; allocate channel ch1 device type disk format ' e:\oracle\oraback\%u'; backup database skip inaccessible filesperset 10 plus archivelog filesperset 20 delete all input; release channel ch1; } allocate channel for maintenance device type disk; crosscheck backupset; delete noprompt obsolete; SKIP INACCESSIBLE 参数介绍: SKIP 选项 说明 SKIP INACCESSIBLE:表示跳过不可读的文件。对于一些 offline 的数据文件只要存 在于磁盘上就 仍然可被读取 ,但是可能有 些文件已经被 删除或移到它处 造成不可读, 加上这个参数就会跳过这些文件; SKIP OFFLINE:跳过 offline 的数据文件; SKIP READONLY:跳过 那些所在表空间为 read-only 的数据文件; 2)编写 dos 批处理 保存至:E:\oracle\oraback\database_backup_dyk.bat 设定要备份的数据库 sid 为 oradb1,将日志按照日期输出到 E:\oracle\oraback\logs\目 录。 set oracle_sid=oradb1 rman target / msglog E:\oracle\oraback\logs\%date:~0,10%.log cmdfile=E:\oracle\oraback\database_backup_oradb1.rman 3)设定执行计划 控制面板->任务计划中添加计划,运行 E:\oracle\oraback\database_backup_dyk.bat 即可。 恢复数据库 (1) 所有数据文件被删除。 RMAN> shutdown immediate 152 RMAN> run 2> { 3> host "del E:\ORACLE\ORADATA\ORADB1\SYSTEM01.DBF"; 4> host "del E:\ORACLE\ORADATA\ORADB1\SYSAUX01.DBF"; 5> host "del E:\ORACLE\ORADATA\ORADB1\USERS01.DBF"; 6> host "del E:\ORACLE\ORADATA\ORADB1\UNDOTBS01.DBF"; 7> } RMAN> run 2> { 3> restore database; 4> recover database; 5> sql 'alter database open'; 6> } RMAN> run 2> { 3> shutdown immediate; 4> startup force mount; 5> set newname for datafile 1 to 'E:\ORACLE\ORADATA\oradb1\SYSTEM01.DBF'; 6> set newname for datafile 2 to 'E:\ORACLE\ORADATA\oradb1\UNDOTBS01.DBF'; 7> set newname for datafile 3 to 'E:\ORACLE\ORADATA\oradb1\SYSAUX01.DBF'; 8> set newname for datafile 4 to 'E:\ORACLE\ORADATA\oradb1\USERS01.DBF'; 9> restore database; 10> switch datafile all; 11> recover database; 12> sql 'alter database open'; 13> } (1) SYSTEM 表空间的数据文件被误删除。 RMAN> run 2> { 3> shutdown immediate; 4> startup force mount; 5> restore datafile 1; 6> recover datafile 1; 7> sql 'alter database open'; 8> } (2) SYSTEM 表空间数据文件所在磁盘出现故 障。 RMAN> run 153 2> { 3> shutdown immediate; 4> startup force mount; 5> set newname for datafile 1 to 'E:\ORACLE\ORADATA\oradb1\system01.dbf'; 6> restore datafile 1; 7> switch datafile 1; 8> recover datafile 1; 9> sql 'alter database open'; 10> } 11> 在 OPEN 状态下恢复关闭后意外丢失 的数据文件 SQL> conn / as sysdba 已连接到空闲例程。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1247900 bytes Variable Size 71304548 bytes Database Buffers 92274688 bytes Redo Buffers 2945024 bytes 数据库装载完毕。 ORA-01157: 无法标识/锁定数据文件 4 - 请参 阅 DBWR 跟踪文件 ORA-01110: 数据文件 4: 'E:\ORACLE\ORADATA\ORADB1\\USERS01.DBF' (1) 数据文件被误删除。 RMAN> run 2> { 3> shutdown immediate; 4> startup force mount; 5> sql 'alter database datafile 4 offline'; 6> sql 'alter database open'; 7> restore datafile 4; 8> recover datafile 4; 9> sql 'alter database datafile 4 online'; 10> } (2) 数据文件所在磁盘出现介质损坏。 RMAN> run 2> { 3> shutdown immediate; 4> startup force mount; 5> sql 'alter database datafile 4 offline'; 6> sql 'alter database open'; 154 7> set newname for datafile 4 to 'E:\ORACLE\ORADATA\oradb1\users01.dbf'; 8> restore datafile 4; 9> switch datafile 4; 10> recover datafile 4; 11> sql 'alter database datafile 4 online'; 12> } 在 OPEN 状态下恢复打开时意外丢失 的数据文件。 SQL> select * from scott.emp; select * from scott.emp * 第 1 行出现错误: ORA-00376: 此时无法读取文 件 4 ORA-01110: 数据文件 4: 'E:\ORACLE\ORADATA\ORADB1\USERS01.DBF' (1) 数据文件被误删除。 RMAN> run 2> { 3> sql 'alter database datafile 4 offline'; 4> restore datafile 4; 5> recover datafile 4; 6> sql 'alter database datafile 4 online'; 7> } (2) 数据文件所在磁盘出现故障。 RMAN> run 2> { 3> sql 'alter database datafile 4 offline'; 4> set newname for datafile 4 to 'E:\ORACLE\ORADATA\oradb1\\users01.dbf'; 5> restore datafile 4; 6> switch datafile 4; 7> recover datafile 4; 8> sql 'alter database datafile 4 online'; 9> } 11.2.5 (1) 数据文件被误删除。 RMAN> run 2> { 3> startup force mount; 4> sql 'alter database datafile 5 offline'; 5> sql 'alter database open'; 6> restore datafile 5; 7> recover datafile 5; 155 8> sql 'alter database datafile 5 online'; 9> } (2) 数据文件所在磁盘出现故障。 RMAN> run 2> { 3> shutdown immediate; 4> startup mount; 5> sql 'alter database datafile 5 offline'; 6> sql 'alter database open'; 7> set newname for datafile 5 to 'c:\demo\user03.dbf'; 8> restore datafile 5; 9> switch datafile 5; 10> recover datafile 5; 11> sql 'alter database datafile 5 online'; 12> } 全库备份脚本 run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup full tag ‗dbfull‘ format ‗/u01/oradata/backup/full%u_%s_%p‘ database include current controlfile; sql ‗alter system archive log current‘; backup fileaperset 3 format ‗/u01/oradata/backup/arch%u_%s_%p‘ archivelog all delete input; #备份归档可选,可以单独定期备份 release channel c1; release channel c2; release channel c3; } 零级备份脚本 run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup incremental level 0 tag ‗db0‘ format ‗/u01/oradata/backup/db0%u_%s_%p‘ database skip readonly; sql ‗alter system archive log current‘; backup fileaperset 3 format ‗/u01/oradata/backup/arch%u_%s_%p‘ archivelog all delete input; #备份归档可选,可以单独定期备份 release channel c1; release channel c2; 156 release channel c3; } 一级备份脚本 run{ allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup incremental level 1 tag ‗db1‘ format ‗/u01/oradata/backup/db1%u_%s_%p‘ database skip readonly; sql ‗alter system archive log current‘; backup fileaperset 3 format ‗/u01/oradata/backup/arch%u_%s_%p‘ archivelog all delete input; #备份归档可选,可以单独定期备份 release channel c1; release channel c2; release channel c3; } 三、RMAN 备份策略介绍 建立增量备份: 如果 数 据 库 运 行 于 不 归 档 模 式 下 , 只 能 在 数 据 库 干 净 关 闭的 情 况 下 ( 以 normal 、 immediate、transactional 方式关闭)才能进行一 致性的增量备份,如果数据库运行于 归 档模式下,那 即可以在数据 库关闭状态进 行,也可以在 数据库打开状态 进行备份。再 次说明了打开 归档模式的优 势,归档日志 也就是多占些 磁盘空间,可也 相当于又给数 据加了层保护。建立增量备份,实质就是一个参数 incremental level=n,在执行 backup 命令时加上即可,例如,建立一个增量级别 0 的全库 备份: rman> backup incremental level=0 database; 再例如,建立一个增量级别 1 的 users01.dbf 数据文件备份 rman> backup incremental level=1 tablespace system datafile 'e:\oracle\oraback\sj_data.dbf'; 注:rman 默认创建的增量备份是 differential 方式,如果要建立 cumulative 方式的增 量备份,在执行 backup 命令时显式指定即可,例如 : rman> backup incremental level=2 cumulative database; 建立镜像复制: rman 中的 镜像复制实质与通过操作系统 copy 命令备份相同,甚至连命令的格式 都相似,只不过直接应用操作系统的 copy 命令复制数据文件时,只是文件拷贝,而 rman 的 copy 则能够在复制的同时,验证数据的 有效性。(个人认为 rman 中的镜像复制应 用 有限,而且也体现不出 rman 的优势,所以 俺也只是大致了解了概念,没有进行过实际 操作,感兴趣的朋友可以自己做做试验,这里就 不多做介绍了) 建立冗余备份 157 rman 提供了一种更谨慎的备份策略:duplexed 方式备份,其实质即是在生成备份 集的同时,向指定位臵生成指定份数(最大 不超过 4 份)的备份集复制,以避免在灾难 性 事 故时数据库损坏和备份丢失的情况下导致完全 崩溃,提高备 份可用性。rman 中提供 了 三种方式实现 duplexed 方式备份: 1)在 rman 中执行 backup 命令时显式指定 copies 参数 。例如: rman> backup copies 3 database; 上述命令将会在全库备份的同时,自动生成当前 备份集的 2 份拷贝到默认备份目录。 2)在 run{}命令块 中利用 set backup copies 命令为该命令块中所有的 backup 命令设 臵 duplexed 方式,例如 : rman> run{ set backup copies 2; backup device type disk format 'e:\oracle\oraback\dyk1\%u','e:\oracle\oraback\dyk2\%u' ta blespace users,sales; } 上述命令将生成两份备份集,分别存储到 e:\oracle\oraback\dyk1 和 e:\oracle\oraback\dyk2 目 录。 3)通过 configure ..... backup copies 命令设臵预定义的备份 duplexed 方式 configure ... backup copies 命令 格式,可以为指定设备类型设臵默认备份拷贝 数 量。这个配臵仅适用于数据 文件与归档重做日志文件和备份,并且,只有在 使用自动 分配的通道时才能够使用 configure ... backup copies 命令设臵的配臵。例如: rman> configure default device type to disk; rman> configure datafile backup copies for device type disk to 2; rman> configure archivelog backup copies for device type disk to 2; 上述命令将 disk 设臵上数据文件与归档文件的拷备数 量设臵为 2, 当再执行 backup database 备份时,即会自动生成 2 份数据 文件的备份集。 设臵 rman 备份的保存策略 策略,如果数 据库非常大, 并且备份执行 也比较频繁, 有必要对这 些备份文件的 保 存制订合理的策略。在通过 rman 创建的备 份片段中,由于备份文件也是由 rman 创 建 和维护,所以手工删 除并不明智,并且 rman 也 提供了备份保留策略,合理制订,由 rman 自动删除陈旧备份文件更加安全也更加方便,rman 中提供了两种备份保留策 略: 基 于时间,和基于冗余数量 为 rman 设臵了备份保留策略之后,rman 会自动判断哪些备份集或镜像复制 文件 不必再保留。这些备份文件将会被标记为― 废弃(obsolete)‖,可以通 过 report obsolete 命 令查看当前处于废弃状态的备份文件,或者通过 delete obsolete 命令删除这些废弃的 备 份。例如: rman> report obsolete; rman> delete obsolete; 158 在执行删除命令时有两点需要了解: 如果被判断为废弃的备份是一个单独数据文 件的镜像复制,那么在执行 delete 命 令时将直接删 除这个镜像复 制文件;如果 被判断为废弃 的备份是一个备 份集中的一部 分,则必须等到整个备份集中所有其它文件都被 废弃之后,才能删除这个备份集。 1)基于时间的备份保留策略。 说的简单些,就是你希望 数据库最早能恢复到几天前。比如将恢复时间段设臵为 7,那 么 rman 所保留的备份即是可以保证你将数据库恢 复到一周内任何时刻下那些文件。设 臵 基于时间的备份保留策略可以通过 configure 命令,例如: rman> configure retention policy to recovery window of n days; 注:n=大于 0 的正整数执行该命令后,rman 将始终保留那些将数据库恢 复到 n 天前的 状态时需要用到的备份,比如,恢复时间段被设 臵为 7 天,那么各个数据文件的备 份必须满足如下条件: sysdate-(select checkpoint_time from v$datafile)>=7 任何不满足上述条件的备份都将被 rman 废弃并可通过 delete obsolete 命令删除。 2)基于冗余数量的备份保留策略 基于冗余数量 实质即某个数 据文件以各种 形式(包括备 份集和镜像 复制)存在的 备 份的数量。如果某个数据文件的冗余备份数量超出了指定数 量,rman 将废弃陈 旧的 备份。同样,基于数量的备份保留策略也是通过 configure 命令设臵,例如: rman> configure retention policy to recovery window of n days; 同上:n=大于 0 的正整数 也可以设臵不保留任何数据的策略 rman> configure retention policy to none; 备份优化 rman 中的备份优化(backup optimization)是 指在备份过程中,如果满足特定条件,rman 将自动跳过某 些文件而不将 它们包含在备 份集中以节省 时间和空间。通 常满足如下几 个条件情况下,才能够启用备份优化的功能: configure backup optimization 参数臵为 on; 执行的 backup database 或 backup archivelog 命令中带有 all 或 like 参数。 分配的通道仅使用了一种设备类型,也就是没 有同时分配使用 sbt(磁带)与 disk ( 磁盘)的多个通道。 打开备份优化设臵通过如下命令: rman> configure backup optimization on; 在进行备份优化时,rman 是如何判断要备份的文件是否需要被 优化,这个算法 就 相当复杂,可能影响优化算法的因素也非常多, 假如某库在上午 9 点被执行过一次 全 库备份,等下午 3 点再次执行全库 备份时,备份的文件没有变动而且也已经被备份过 时,才会跳过这部分文件。所以理论上备份优化仅对于只读表空间或 offline 表空间 起 作用。当然对于已经备份过的 archivelog 文件,它也会 跳过 3)基础补充 format 字符串替代变量,使用 format 参数时可使用的各种替换变量,如下 : %c:备份片的拷贝数(从 1 开始编号); 159 %d:数据库名称 ; %d:位于该月中的 天数 (dd); %m: 位于该年中的月份 (mm); %f: 一个基于 dbid 唯一的名称,这个格式的形式为 C-IIIIIIIIII-YYYYMMDD-QQ,其 中 IIIIIIIIII 为该数据库的 dbid,YYYYMMDD 为日期,QQ 是一个 1-256 的序列; %n:数据库名称,并 且会在右侧用 x 字符进行填充,使其保持长度为 8; %u:是一个由备份集 编号和建立时间压缩后组成的 8 字符名称。利 用%u 可以为每 个 备份集生成一个唯一的名称; %p:表示备份集中备 份片段的编号,从 1 开始编号; %u:是%u_%p_%c 的简写形式,利 用它可以为每一个备份片段(即磁盘文件)生 成 一个唯一名称,这是最常用的命名方式; %s:备份集的号; %t: 备份集时间戳; %t: 年月日格式(yyyymmdd);s 注:如 果在 backup 命令中没有指定 format 选项,则 rman 默认使 用%u 为备份片段命 名。 configure 配臵项介绍 首先,先来查看一下当前配臵,通过 show all 命令: 连接到目标数据库: jssweb (dbid=3391142503) rman> show all; 正在使用目标数据库控制文件替代恢复目录 rman 配臵参数为: configure retention policy to recovery window of 3 days; configure backup optimization off; # default configure default device type to disk; # default configure controlfile autobackup on; configure controlfile autobackup format for device type disk to 'e:\oracle\oraback\%f'; configure device type disk parallelism 1; # default configure datafile backup copies for device type disk to 1; # default configure archivelog backup copies for device type disk to 1; # default configure maxsetsize to unlimited; # default configure snapshot controlfile name to 'e:\oracle\oraback\sj_data.ora'; # default rman> show 命令在 rman 命令篇简单 介绍过,同时也知道后跟#default 表示该条配臵 仍 然是初始的默认配臵,如果想把某条更改过配臵 选项再臵为 初始设臵,用如下命令:configure ... clear;例如: rman> configure retention policy clear; configure retention policy to recovery window of 3 days; 上述的各项配臵,在前面章节中有一些已经有所 体现,以下是详细介绍: 1)configure retention policy 配臵备份保留策略 160 两种保留策略设臵: 基于时间: configure retention policy to recovery window of n days; 基于冗余数量: configure retention policy to redundancy n; 也可以取消备份保留策略: configure retention policy to none; 2)configure backup optimization 配臵备份优化 备份优化:包括 off 和 on 两个状态 打开备份优化: configure backup optimization on; 关闭备份优化: configure backup optimization off; 3)configure default device type 配臵 io 设备 类型 rman 支持的 io 设备类型有两种:磁盘 (disk)和磁带(sbt),默认 情况下为磁盘。 使用磁盘设备: configure default device type to disk; 使用磁带设臵: configure default device type to sbt; 在这里需要注意的一点是:如果 io 设备发生变化,相关配臵项也需要修改。例如: rman> configure device type disk parallelism 2; 4) configure controlfile autobackup 配臵控制文件自动备 份 是否自动备份,包含两个状态:off 和 on 打开自动备份 configure controlfile autobackup on 禁止自动备份 configure controlfile autobackup off 指定备份的控制格式和路径。例如: configure controlfile autobackup format for device type disk to 'e:\oracle\oraback\%f'; 在备份期间, 将产生一个控 制文件的快照 ,用于控制文 件的读一致性, 这个快照可以 通过如下配臵:configure snapshot controlfile name to 'e:\oracle\oraback\sj_data.ora'; 5)configure device type 设臵并行备份 rman 支持并行备份与恢复,也可以在配臵中指定默 认的并行程度。例如: configure device type disk parallelism 2; 指定在以后备份与恢复中,将采用并行度为 2,同时开启 2 个通道进行备份与恢复 , 当然也可以在 run 中指定通道来决 定备份与恢复的并行程度。并行的数目决定了开启 通道的个数。 如果指定了通 道配臵,将采 用指定的通道 ,如果没有指定 通道,将采用 默认通道配臵。默认情况下,自动分配通道的并行度为 1,如果你通过设臵 parallelism 设 臵了并行通道为 2,那么在 run 块中,它会默认使用 2 条并行通道;如果在 run 命令 块 中指定数个 allocate channel,那么 rman 在执行备份命令时会以设臵的 channel 为准, 而不管 configure 中 配臵了多个并行通 道。需要注意的是, 在 backup 命令中有一个 161 filesperset 参 数,该参数是指 rman 建立 的每个备份集中所能包含的备份片段(即磁盘 文 件)的最大数,该参数默认值为 64;如果在执行 backup 命令时没有指定该参数值, 那 么 rman 会仅使用第一个通道来执行备份,其 它通道将处于空闲状态。关于通道数 与 filesperset 值 之间也有一个大小关系,即 filesperset 值不要小于设定通 道数。 6) 设臵备份文件冗余度 configure datafile backup copies 如下: rman> run{ set backup copies 2; backup device type disk format 'e:\oracle\oraback\dyk1\%u','e:\oracle\oraback\dyk2\%u' ta blespace users,sales; } 7)configure maxsetsize 配臵备份集的最大尺寸 该配臵限制通道上备份集的最大尺寸。单位支持 bytes,k,m,g。默认值是 unlimited。 8) rman 备份相关的动态性能表 v$archived_log:本视图包含了所有归档重做日志文 件的创建情况,备份情况以及 其 他信息。 v$backup_corruption:这个 视图显示了 rman 在哪些备份集中发现了损坏的数据 坏。 在你使用 backup validate 命令对备份集进行检查时如果发现了损坏的数据块,rman 将在这个视图中写入记录。 v$copy_corruptio:本视图显示了哪些镜像复制备份文件已经被损坏。 v$backup_datafile:本视图通常 用来获取每个数据文件中非空白数据块的数量 ,从 而帮助你创建 出大小基本相 等的备份集。 另外,在视图 中也包含了数据 文件中损坏的 数据块的信息。 v$backup_redolog:本视图显示 了在现有的备份集中饮食有哪些归档重做日志文件 。 v$backup_set:本视图显示了已经创建的备份集的信息。 v$backup_piect:本视图显 示了已经创建的备份片段的信息。 可以通过如下 sql 语句获得正在进行的镜像复制操作的状态信息: select sid, serial#, context, sofar, totalwork, round(sofar / totalwork * 100, 2) "% complete" from v$session_longops where opname like 'rman:%' and opname not like 'rman:aggregate%' 通过如下 sql 获得 rman 用 来完成备份操作的服务进程的 sid 与 spid 信息: select sid,spid,client_info from v$process p,v$session s where p.addr=s.paddr and client _info like '%id=rman%' 162 rman 通道 上次基础知识讲提到了通道,rman 通道实质是一个到存储设备的数 据流。就像城 市交 通道路,多建几个环路对于缓解交通是 有意义的。在 rman 中可以通过手动方式或 自动 方式分配通道。 1)手工分配通道 在执行 backup、restore、delete 等需要进行磁盘 i/o 操作的命 令时,可以将它们与 allocate channel 命令放在一个 run 的 命令块中,利用 allocate channel 为它们分配通道。例如 : run{ allocate channel ch1 device type disk format 'e:\oracle\oraback\%u'; backup datafile 'e:\oracle\oradata\oradb1\sj_data.ora'; } 需要注意的是,rman 中执行的每一条 backup、delete 等命令都至少要求使用一个通 道, 通道数决定了这些操作执行的并行度。 2、自动分配通道 如果没有使用手工分配通道,那么 rman 在执行 backup 等操作 i/o 的命令时将会使 用 预定义配臵中的设臵来自动分配通道。 下列预定义配臵命令均可以分配通道: configure device type ... parallelism configure default device type configure channel device type configure channel n device type rman 备份类型 利用 rman 进行备份时,可以通过三种方式来对 rman 的 备份做分类: 完全备份(full backup)与增量备份(incremental backup): 全备与增备是针对数据文件而言,控制文 件和归档日志文件不能进行增量备份。当然 , 后两者可以做备份优化。 打开备份(open backup)或关 闭备份(closed backup): 数据库打开状态下进行备份即是打开备份,数据库关闭状态下(加载状态)进行的备 份即 关闭备份。 一致备份(consistent backup)与不 一致备份(inconsistent backup): 数据库打开状态或不干净关闭状态(shutdown abort)进行的备份 是不一致备份,利用 不 一致的备份修 复数据库后还 需要做数据库 的恢复。在数 据库干净关闭状 态进行的备份 是一致备份,利用一致备份修复数据库后不需要 做数据库的恢复。 增量备份的工作机制 所谓增量备份 ,顾名思义即是每 次备份仅操作那 些发生了"变化"的数据块,增量 备份 只备 份 上次 备 份以 来 变化 过 的数 据块,每个数据块都包含一个 system change number (scn),记录着该数据块的最后改变。在进 行增量备份的时候,rman 将当 前 数据块的 scn 和父级 增量备份的 checkpoint scn 进行 比较,如果该 数据块的 scn 大于 等 于父级的 checkpoint scn,rman 将备 份该数据块;rman 中增量备份有两种: differential 方式和 cumulative 方式。 163 增量备份的工作机制 所谓增量备份,顾名思义即是每次备份仅操作那些发生了"变化"的数据块,增量备份只备份上 次备份以来变化过的数据块,每个数据块都包含一个 system change number (SCN),记录着该 数据块的最后改变。在进行增量备份的时候,RMAN 将当前数据块的 SCN 和父级增量备份的 CHECKPOINT SCN 进行比较,如果该数据块的 SCN 大于等于父级的 CHECKPOINT SCN, RMAN 将备份该数据块;RMAN 中增量备份有两种:Differential 方式和 Cumulative 方式。 1)差异增量备份 Differential 差分增量备份(Differential): 备份同级或者上级(如果有同级备份,先找同级)备份(差异)以 来变化的数据块。如果找不到同级或者上级(知道 LEVEL0),如果 ORACLE 版本>=10.0.0,RMAN 将 COPY 从数据文件创建开始所有的数据块作为 LEVEL1 备份;如果 ORACLE 版本<10.0.0, RMAN 将生成 LEVEL0 备份:周日:RMAN 备份所有被使用过的数据块。周一至周六:RMAN 备份自从上次 LEVEL0 或者 LEVEL1 备份以来变化的数据块。 2)累积增量备份 Cumulative: 积累增量备份(Cumulative):首先创建一个文件镜像拷贝,然后定期把从上次镜像拷贝最大 SCN 以来变化的数据块追加到镜像拷贝文件中。增量追加备份可以达到快速恢复的目的,如果是 每天进行增量追加的话,在进行恢复的时候,我们最多应用一天的 REDO 数据就可以完成恢复。 另外 backup 命令在不显式指定的情况下,默认会选择 Differential 地哟:) 1)差异增量备份 differential 差分增量备份(differential): 备份同级或者上级(如果有同级备份,先找同级)备份(差 异)以来变化 的数据块。如 果找不到同级 或者上级(知 道 level0),如 果 oracle 版 本 >=10.0.0,rman 将 copy 从数据文件创建开始所有的数据块作为 level1 备份;如果 oracle 版本<10.0.0,rman 将生成 level0 备份:周日:rm an 备份所有被使用过的数据块。周 一至周六:rman 备份自从上次 level0 或者 level1 备份以来变化的数据块。 164 2)累积增量备份 cumulative: 积累增量备份(cumulative):首先创建 一个文件镜像拷贝,然 后定期把从上次镜像 拷 贝最大 scn 以来变化的数据块追加到 镜像拷贝文件中。增量追加备份可以达到快速 恢 复的目的,如 果是每天进行 增量追加的话 ,在进行恢复 的时候,我们最 多应用一天的 redo 数据 就可以 完成恢 复。另 外 backup 命 令在不 显式 指定的 情况下 ,默认 会选 择 differential 地哟:) 备份集概述 备份集 由 rman 创建的具有特定格式的逻辑备份对象,一个备份集中可能包含多 个数 据库文件(包括数据文 件,控制文件和归档日 志文件)。rman 中通过 backup 命令 建立 备份集。一个备份集是由多个备份片段组成,每 个备份片段即是一个物理文件。 rman 恢复目录(catalog) oracle9i 版本因为控制 文件的自动备份,可以很大程 度不需要使用恢复目录。当然, 号 称使用目录 数据库控制文 件的方式将会 非常的不安全 ,因为一旦备份 文件丢失,不 仅 数据库崩溃,rman 备 份信息也将丢失恢复目录还是推荐使用恢复目 录,恢复目录 实 际 上也是一个 数据库,一般 独立于目标数 据库。因为它 自己就是个数据 库,所以一个 恢 复目录可以同时被多个目录数据库使用。 备份策略及恢复 增量备份都需要一 个 0 级备份来作为基础,0 级备份与全备份的区别在于 0 级可以 用来增量恢复,而全备份则不可以。 备份策略: 例如:对一星 期做如下备份策略 ,那么差异增量只需要使用星期 天的 0 级,星期 三的一级,星期四、五的二级就可以恢复,累积增量则需要星期天的 0 级,星期五 的 二级即可进行恢复。以上是 一个星期的备份策略,如果做 长期的备份策略则只需要把 备 份的时间延长 即可得到新的 备份策略,具 体需要看自己 备份及恢复能够 接受的程度而 顶,见最后的备份策略典型案例。 星期 差异增量 累 积增量 星期天 0 级 0 级 星期一 2 级 2 级 星期二 2 级 2 级 星期三 1 级 1 级 星期四 2 级 2 级 星期五 2 级 2 级 星期六 2 级 2 级 星期天 0 级 0 级 备份命令如下: 零级备份 backup incremental level 0 database; 一级差异增量 165 backup incremental level 1 database; 一级累计增量 backup incremental level 1 cumulative database; 备份策略典型案例: 每半年做一个数据库的全备份(包括所有的数据 和只读表空间) 每一个月做一次零级备份(不包含只读表空间) 每个星期做一次一级备份 每天做一次二级备份 任何数据库的更改需 要重新同步 catalog 目录并重新备份(如添加数据文件)或重 新备份(如修 改表空间为只 读)建议备份 一段时间归档 日志和定期备份 归档到到磁带 上 四、RMAN 备份操作实践 RMAN 恢复操作 Oracle 数 据库的 恢复实际 上包含 了两个概 念:数 据库修复 (RESTORE)与数 据库恢 复 (RECOVER): 数据库修 复:是指利用 备份的数据库 文件来替换已 经损坏的数据库 文件或者将其 恢复到一个新的位臵。RMAN 在进行修复 操作时,会利用恢 复目录(没有建立恢复目录的话就使用目标数据库的控制文件)来获取备份信息,并从 中 选 择最合适的备份进行修复操作。选择备份时 有两个原 则(1、选择距离恢复目录时刻最近;2、优先选择镜 像复制,其次才是备份集) 数据库恢 复:是指利用 重做日志或增 量备份来重建 丢失的数据。需 要注意的是: 对目标数据库 做任何形式的 修复或者恢复 之前,目标数 据库必须处于加 载状态,恢复 指定数据文件 时,也可以在 打开状态下恢 复对数据库进 行完全介质恢复 过程有三个步 骤: 1)启动数据库到加载状态 rman> shutdown immediate; rman> startup mount; 2)执行恢复操作 rman> restore database; rman> recover database delete archivelogs skip tablespace temp; 注意:delete archivelogs 和 skip tablespace 两个参数是可选 择的,作用如下: delete archivelogs:表示 rman 将 在完成恢复过程后自动删除那些在恢复过程中 修复 的归档日志文件。skip tablespace:跳过指定表空间,比如临时表,当然临时表空间即 使你不跳过它也不会恢复的。 3)打开数据库 rman> alter database open; 此 处需 要 注 意的 一 点 是, 如 果数 据 库 并非 处 于 归档 模 式 ,那 么 必 须使 用 alter database open resetlogs 来打开数 据库,因为 rman 会认为在非归档模式下是一个不 一 致的备份,执行 resetlogs 之后,oracle 将会把 scn 重新臵为 0。 166 恢复表空间 同样也可以分成三个步骤: 1)启动数据库到加载状态 rman> shutdown immediate; rman> startup mount; 2)进行恢复操作,在恢复之前,如果需要被 恢复的表空间未处于脱机状态,需要通过 alter tablespace ... offline 语句将其臵 为脱机: rman> sql 'alter tablespace jweb offline immediate'; rman> restore tablespace jweb; rman> recover tablespace jweb; rman> sql 'alter tablespace jweb online'; 3)打开数据库 rman> alter database open; 恢复数据文件 恢复表空间实际就是恢复其所对应的数据文件(一个表空间可能 对应多个数据文件) , 所以步骤与上相似。 1)启动数据库到加载状态 rman> shutdown immediate; rman> startup mount; 2)进行恢复 操作,在恢 复之前, 如果需要被 恢复的表 空间未处于 脱机状态 ,需要通过 alter tablespace ... offline 语句将其臵 为脱机,操作 数据文件时可以直接指定数据文件,也可以以数 据文件序号代替: rman>sql 'alter database datafile 10 offline; rman> restore datafile 10 ; rman> recover datafile 10; rman>sql ' alter database datafile 10 online; 3)打开数据库 rman> alter database open; 操作示例:归 档模式下,假 设某数据文件 丢失,恢复该 数据文件。模拟 一个过程,首 先创建一份数 据库的完全备 份,然后在数 据库中进行若 干操作,之后删 除该数据文件 来模拟该文件意外丢失,最后通过 rman 来恢复该数 据文件。 1)运行备份脚本:E:\oracle\oraback\script.bat; 必须输出的 log,一定要确保所有 的操作都是处于正确状态。 2)在某个数据库用户下进行一系列操作: SQL> conn dyk/***** 已连接。 SQL> create table tmp3(col varchar2(5 0)); ######创建一个临时表并插入一些数据 表已创建。 167 SQL> insert into tmp3 values ('test1'); 已创建 1 行。 SQL> insert into tmp3 values ('test2'); 已创建 1 行。 SQL> insert into tmp3 values ('test3'); 已创建 1 行。 SQL> select *from tmp3; COL -------------------------------------------------- test1 test2 test3 SQL> commit; 提交完成。 SQL> conn / as sysdba ####已 dba 用户连接并关闭 数据库 已连接。 SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> host del F:\OraHome1\oradata\jssweb\jweb.ora ######手动删除数据文件 SQL> startup ORACLE 例程已经启动。 Total System Global Area 143727516 bytes Fixed Size 453532 bytes Variable Size 109051904 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes 数据库装载完毕。 ORA-01157: 无法标识/锁定数据文件 10 - 请参 阅 DBWR 跟踪文件 ORA-01110: 数据文件 10: 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA' #######看看,启动报错了吧 SQL> select instance_name,status from v$instance; #######看看当前数据库状态,应该是处于 mount INSTANCE_NAME STATUS ---------------- ------------ jssweb MOUNTED SQL>exit 3)执行 RMAN 恢复操作: set oracle_sid=jssweb C:\Documents and Settings\Adm inistrator>rman target / 恢复管理器: 版本 9.2.0.1.0 - Production 168 Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 连接到目标数据库: JSSWEB (DBID=3391142503) RMAN> restore datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA'; #### 正在使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=11 devtype=DISK 通道 ORA_DISK_1: 正在开始恢复数据文件备份集 通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件 正将数据文件 00010 恢复到 F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA 通道 ORA_DISK_1: 已恢复备份段 1 段 handle=D:\BACKUP\1AIN4JU5_1_1 tag=TAG20070718T092837 params=NULL 通道 ORA_DISK_1: 恢复完成 完成 restore 于 18-7 月 -07 RMAN> recover datafile 'F:\ORAHOME1\ORADATA\JSSWEB\JWEB.ORA'; ########恢复数据文件 启动 recover 于 18-7 月 -07 使用通道 ORA_DISK_1 正在开始介质的恢复 完成介质的恢复 完成 recover 于 18-7 月 -07 RMAN> alter database open; ########看起来很顺利,打开数据库看看 数据库已打开 RMAN> host; Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Documents and Settings\Administrator>sqlplus jss/jss ####连到该用户 SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 7 月 18 10:33:50 2007 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 - Production SQL> select *from tmp3; ######查询我们备份 后创建的表 COL -------------------------------------------------- test1 test2 test3 #######yeah,成功恢复,没有数据丢失。 SQL> 附个 SQL:用来查询数据文件,临时文件与表空间对 应及数据文件序号: select ts.tablespace_name, df.file_name, df.file_id, tf.file_name 169 from dba_tablespaces ts, dba_data_files df, dba_temp_files tf where ts.tablespace_name = df.tablespace_name(+) and ts.tablespace_name = tf.tablespace_name(+) 4、直接文件 copy 迁移之后需要重新建立 temp 表空间;两个数据库的版本一定要一致,如果两个数据库的版本不 一致,无法迁移,查询版本:show parameter compatible 1)获取原数据库相关信息 首先要查看一下数据库的文件内容 sql> select name from v$datafile; name -------------------------------------------------------- g:\oracle\oradata\orcl\system01.dbf g:\oracle\oradata\orcl\undotbs01.dbf g:\oracle\oradata\orcl\sysaux01.dbf g:\oracle\oradata\orcl\users01.dbf g:\oracle\oradata\orcl\example01.dbf g:\oracle\oradata\orcl\hotelfile g:\oracle\oradata\orcl\memberfile e:\elitedata\elite g:\oracle\oradata\orcl\elite_bak g:\oracle\oradata\orcl\hotel0826file g:\oracle\oradata\orcl\eliteob sql> select name from v$controlfile; name -------------------------------------------- g:\oracle\oradata\orcl\control01.ctl g:\oracle\oradata\orcl\control02.ctl g:\oracle\oradata\orcl\control03.ctl sql> select member from v$logfile; member --------------------------------------- g:\oracle\oradata\orcl\redo01.log g:\oracle\oradata\orcl\redo03.log g:\oracle\oradata\orcl\redo02.log 2)移动应用数据文件 shutdown immediate 关闭数据库,拷贝以上文件到另外一个目录下,一定要保证数据库完全停 掉 3. 修改数据库文件的位臵 启动 mount 模式,将现有数据库 system01.dbf 文件指向拷贝过的 system01.dbf 文件 startup mount; alter database rename file 'e:\oracle\product\10.2.0\oradata\orcl\system01.dbf'to 170 'e:\orcl\system01.dbf'; 4)修改 pfile 文件 备份 spfile 文件到 pfile 文件,注:不要直接修改 pfile 文件,两者可能存在差异 create pfile='d:\oracle\product\10.2.0\admin\orcl\pfile\init.ora' from spfile; 修改 init.ora 文件中的内容: *.control_files='e:\orcl\control01.ctl','e:\orcl\control02.ctl','e:\orcl\control03.ctl' 5)从 pfile 重启数据库 shutdown immediate startup pfile='d:\oracle\product\10.2.0\admin\orcl\pfile\init.ora' 报错 6)rname 数据库文件路径 alter database rename file 'g:\oracle\oradata\orcl\system01.dbf'to 'e:\orcl\system01.dbf'; alter database rename file 'g:\oracle\oradata\orcl\undotbs01.dbf'to 'e:\orcl\undotbs01.dbf'; alter database rename file 'g:\oracle\oradata\orcl\sysaux01.dbf'to 'e:\orcl\sysaux01.dbf'; alter database rename file 'g:\oracle\oradata\orcl\users01.dbf'to 'e:\orcl\users01.dbf'; alter database rename file 'g:\oracle\oradata\orcl\example01.dbf'to 'e:\orcl\example01.dbf'; alter database rename file 'g:\oracle\oradata\orcl\hotelfile'to 'e:\orcl\hotelfile'; alter database rename file 'g:\oracle\oradata\orcl\memberfile'to 'e:\orcl\memberfile'; alter database rename file 'e:\elitedata\elite'to 'e:\orcl\elite'; alter database rename file 'g:\oracle\oradata\orcl\elite_bak'to 'e:\orcl\elite_bak'; alter database rename file 'g:\oracle\oradata\orcl\hotel0826file'to 'e:\orcl\hotel0826file'; alter database rename file 'g:\oracle\oradata\orcl\eliteob'to 'e:\orcl\eliteob'; alter database rename file 'g:\oracle\oradata\orcl\redo01.log'to 'e:\orcl\redo01.log'; alter database rename file 'g:\oracle\oradata\orcl\redo03.log'to 'e:\orcl\redo03.log'; alter database rename file 'g:\oracle\oradata\orcl\redo02.log'to 'e:\orcl\redo02.log'; 7)从 pfile 重启数据库,并重建 spfile shutdown immediate startup pfile='d:\oracle\product\10.2.0\admin\orcl\pfile\init.ora' create spfile from pfile='d:\oracle\product\10.2.0\admin\orcl\pfile\init.ora'; 十三、ORACLE 性能调优问题 1、Oracle 优化细则 sql 语句的执行步骤,一条 sql 语句的处 理过程要经过以下几个步骤: 1)语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义 2)语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3)视图转换 将涉及视图的查询语句转换为相应的对基表查询语句。 4)表达式转换 将复杂的 sql 表达式转换为较简单的等效连接表达式。 5)选择优化器 不同的优化器一般产生不同的‚执行计划‛ 6)选择连接方式 oracle 有三种连接方式,对多表连接 oracle 可选择适当的连接方式。 171 7)选择连接顺序 对多表连接 oracle 选择哪一对表先连接,选择这两表中哪个表做为源数据表。 8)选择数据的搜索路径 根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索 引或是其他的方式。 9)运行‚执行计划‛ 注: 嵌套的迭代联接(nested iteration join) :对左边的关系里面找到的每条元组都对右边关系进 行一次扫描。 这个策略容易实现,但是可能会很耗费时间。 融合排序联接(merge sort join) :在联接开始之前,每个关系都对联接字段进行排序。 然后 两个关系融合到一起,认为两个关系都对联接字段进行了排序。 这种联合更有吸引力,因为每个 关系都只用扫描一次。 散列联接(hash join) :右边的关系首先对它的联接字段进行散列排列。 然后扫描左边的关 系,并将找到的每条元组的合适的值作为散列键字用以定位右边关系里的元组。 oracle 的优化器: oracle 有两种优化器:基于规则的优化器(rbo,rule based optimizer),和基于代价的优化器(cbo, cost based optimizer)。较典型的问题有:有时,表明明建有索引,但查询过程显然没有用到相关的 索引,导致查询过程耗时漫长,占用资源巨大,问题到底出在哪儿呢?按照以下顺序查找,基本上 能发现原因所在。 首先,我们要确定数据库运行在何种优化模式下,相应的参数是:optimizer_mode。可在 sqlplus 中运行‚show parameter optimizer_mode"来查看。oracle v7 以来缺省的设臵应是"choose",即如 果对已分析的表查询的话选择 cbo,否则选择 rbo。如果该参数设为‚rule‛,则不论表是否分析过, 一概选用 rbo,除非在语句中用 hint 强制。 其次,检查被索引的列或组合索引的首列是否出现在 pl/sql 语句的 where 子句中,这是‚执行 计划‛能用到相关索引的必要条件。 第三,看采用了哪种类型的连接方式。oracle 的共有 sort merge join(smj)、 hash join(hj) 和 nested loop join(nl)。在两张表连接,且内表的目标列上建有索引时,只有 nested loop 才能有 效地利用到该索引。smj 即使相关列上建有索引,最多只能因索引的存在,避免数据排序过程。hj 由于须做 hash 运算,索引的存在对数据查询速度几乎没有影响. 第四,看连接顺序是否允许使用相关索引。假设表 emp 的 deptno 列上有索引,表 dept 的列 deptno 上无索引,where 语句有 emp.deptno=dept.deptno 条件。在做 nl 连接时,emp 做为外表, 先被访问,由于连接机制原因,外表的数据访问方式是全表扫描,emp.deptno 上的索引显然是用 不上,最多在其上做索引全扫描或索引快速全扫描。 第五,是否用到系统数据字典表或视图。由于系统数据字典表都未被分析过,可能导致极差的 ‚执行计划‛。但是不要擅自对数据字典表做分析,否则可能导致死锁,或系统性能下降。 第六,索引列是否函数的参数。如是,索引在查询时用不上。 第七,是否存在潜在的数据类型转换。如将字符型数据与数值型数据比较,oracle 会自动将字 符型用 to_number()函数进行转换,从而导致第六种现象的发生。 第八,是否为表和相关的索引搜集足够的统计数据。对数据经常有增、删、改的表最好定期对 表和索引进行分析,可用 sql 语句‚analyze table xxxx compute statistics for all indexes;"。oracle 掌握了充分反映实际的统计数据,才有可能做出正确的选择. 第九,索引列的选择性不高。我们假设典型情况,有表 emp,共有一百万行数据,但其中的 emp.deptno 列,数据只有 4 种不同的值,如 10、20、30、40。虽然 emp 数据行有很多,oracle 缺 省认定表中列的值是在所有数据行均匀分布的,也就是说每种 deptno 值各有 25 万数据行与之对应。 假设 sql 搜索条件 deptno=10,利用 deptno 列上的索引进行数据搜索效率,往往不比全表扫描的高, 172 oracle 理所当然对索引‚视而不见‛,认为该索引的选择性不高。但我们考虑另一种情况,如果一 百万数据行实际不是在 4 种 deptno 值间平均分配,其中有 99 万行对应着值 10,5000 行对应值 20, 3000 行对应值 30,2000 行对应值 40。在这种数据分布图案中对除值为 10 外的其它 deptno 值搜索 时,毫无疑问,如果索引能被应用,那么效率会高出很多。我们可以采用对该索引列进行单独分析, 或用 analyze 语句对该列建立直方图,对该列搜集足够的统计数据,使 oracle 在搜索选择性较高的 值能用上索引。 第十,索引列值是否可为空(null)。如果索引列值可以是空值,在 sql 语句中那些需要返回 null 值的操作,将不会用到索引,如 count(*),而是用全表扫描。这是因为索引中存储值不能为全空。 第十一,看是否有用到并行查询(pqo)。并行查询将不会用到索引。 第十二,看 pl/sql 语句中是否有用到 bind 变量。由于数据库不知道 bind 变量具体是什么值,在 做非相等连接时,如‚<‛,‚ >‛,‚like‛等。oracle 将引用缺省值,在某些情况下会对执行计划造 成影响。如果从以上几个方面都查不出原因的话,我们只好用采用在语句中加 hint 的方式强制 oracle 使用最优的‚执行计划‛。 hint 采用注释的方式,有行注释和段注释两种方式。 如我们想要用到 a 表的 ind_col1 索引的话,可采用以下方式: ‚select /*+ index(a ind_col1)*/ * from a where col1 = xxx;" 注意,注释符必须跟在 select 之后,且注释中的‚+‛要紧跟着注释起始符‚/*‛或‚--‛,否则 hint 就被认为是一般注释,对 pl/sql 语句的执行不产生任何影响。 两种有效的跟踪调试方法: oracle 提供了两种有效的工具来跟踪调试 pl/sql 语句的执行计划。 一种是 explain table 方式。用户必须首先在自己的模式(schema)下,建立 plan_table 表,执 行计 划的 每一 步骤 都将 记录 在该 表中 , 建表 sql 脚 本为 在${oracle_home}/rdbms/admin/ 下 的 utlxplan.sql。 打开 sql*plus,输入‚set autotrace on‛,然后运行待调试的 sql 语句。在给出查询结果后,oracle 将显示相应的‚执行计划‛,包括优化器类型、执行代价、连接方式、连接顺序、数据搜索路径以 及相应的连续读、物理读等资源代价。 如果我们不能确定需要跟踪的具体 sql 语句,比如某个应用使用一段时间后,响应速度忽然变慢。 我们这时可以利用 oracle 提供的另一个有力工具 tkprof,对应用的执行过程全程跟踪。 我们要先在系统视图 v$session 中,可根据 userid 或 machine,查出相应的 sid 和 serial#。 以 sys 或 其 他 有 执 行 dbms_system 程 序 包 的 用 户 连 接 数 据 库 , 执 行 ‚ execute dbms_system.set_sql_trace_in_session(sid,serial#,true);‛。 然后运行应用程序,这时在服务器端,数据库参数‚user_dump_dest‛指示的目录下,会生成 ora__xxxx.trc 文件,其中 xxxx 为被跟踪应用的操作系统进程号。 应用程序执行完成后,用命令 tkprof 对该文件进行分析。命令示例:‚tkprof tracefile outputfile explain=userid/password"。在操作系统 oracle 用户下,键入‚tkprof‛,会有详细的命令帮助。分 析后的输出文件 outputfile 中,有每一条 pl/sql 语句的‚执行计划‛、cpu 占用、物理读次数、逻辑 读次数、执行时长等重要信息。根据输出文件的信息,我们可以很快发现应用中哪条 pl/sql 语句是 问题的症结所在。 sql 语句编写注意问题: 下面就某些 sql 语句的 where 子句编写中需要注意的问题作详细介绍。在这些 where 子句中, 即使某些列存在索引,但是由于编写了劣质的 sql,系统在运行该 sql 语句时也不能使用该索引,而 同样使用全表扫描,这就造成了响应速度的极大降低。 1)is null 与 is not null 173 不能用 null 作索引,任何包含 null 值的列都将不会被包含在索引中。 任何在 where 子句中使 用 is null 或 is not null 的语句优化器是不允许使用索引的。 2)语句中的函数 语句中如有函数操作如(upper,substr 等)时,优化器是不会使用索引的,应尽量少用或不用。 3)带通配符(%)的 like 语句 如果通配符(%)在搜寻词首出现,oracle 系统不会使用索引。在很多情况下可能无法避免这 种情况,然而当通配符出现在字符串其他位臵时,优化器就能利用索引。在下面的查询中索引得到 了使用: select * from user_m where loginid like 'r%'; 4)order by 语句 order by 语句决定了 oracle 如何将返回的查询结果排序。order by 语句对要排序的列没有什么 特别的限制。但任何在 order by 语句的非索引项或者有计算表达式都将降低查询速度,应尽量少用。 5)not 在查询时经常在 where 子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可 以使用 and(与)、or(或)以及 not(非)。not 可用来对任何逻辑运算符号取反。not 运算符包含 在另外一个逻辑运算符中,这就是不等于(<>)运算符。换句话说,即使不在查询 where 子句中 显式地加入 not 词,not 仍在运算符中,见下例: select * from employee where salary<>3000; 对这个查询,可以改写为不使用 not:select * from employee where salary<3000 or salary>3000; 虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许对 salary 列使用索引,而第一种查询则不能使用索引。 6)in 和 exists 在 where 子句中使用子查询。在 where 子句中可以使用两种格式的子查询。第一种格式是使用 in 操作符:第二种格式是使用 exist 操作符: 第二种格式要远比第一种格式的效率高。应尽可能使 用 not exists 来代替 not in。 7)条件的顺序问题 条件列和索引列的顺序要保持对应 8)使用 union、intersect、minus; 消除对大型表行数据的顺序存取 对连接的列进行索引,还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但 某些形式的 where 子句强迫优化器使用顺序存取。下面的查询将强迫对 orders 表执行顺序操作: select * from orders where (customer_num=104 and order_num>1001) or order_num=1008 虽然在 customer_num 和 order_num 上建有索引,但是在上面的语句中优化器还是使用顺序存 取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句: select * from orders where customer_num=104 and order_num>1001 union select * from orders where order_num=1008 这样就能利用索引路径处理查询。 其他注意事项: 1)精确查询列及查询条件, 禁用通配符*; 2)在满足业务逻辑的情况下,分割事务大小,及时提交事务; 3)及时释放用户锁和资源,减少用户锁的使用; 4)对外键建立相应顺序的索引; 5)在可能的情况下修改不合理数据库系统的结构; 6)使用临时表加速查询 174 2、常见 oracle hint 方法 1)/*+all_rows*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: select /*+all+_rows*/ emp_no,emp_nam,dat_in from bsempms where emp_no='scott'; 2)/*+first_rows*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如: select /*+first_rows*/ emp_no,emp_nam,dat_in from bsempms where emp_no='scott'; 3)/*+choose*/ 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;表明如 果数据字典中没有访问表的统计信息,将基于规则开销的优化方法; 例如: select /*+choose*/ emp_no,emp_nam,dat_in from bsempms where emp_no='scott'; 4)/*+rule*/ 表明对语句块选择基于规则的优化方法. 例如: select /*+ rule */ emp_no,emp_nam,dat_in from bsempms where emp_no='scott'; 5)/*+full(table)*/ 表明对表选择全局扫描的方法. 例如:select /*+full(a)*/ emp_no,emp_nam from bsempms a where emp_no='scott'; 6)/*+rowid(table)*/ . 提示明确表明对指定表根据 rowid 进行访问. 例如: select /*+rowid(bsempms)*/ * from bsempms where rowid>='aaaaaaaaaaaaaa'and emp_no='scott'; 7)/*+cluster(table)*/ 提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效. 例如: select /*+cluster */ bsempms.emp_no,dpt_no from bsempms,bsdptms where dpt_no='tec304' and bsempms.dpt_no=bsdptms.dpt_no; 8)/*+index(table index_name)*/ 表明对表选择索引的扫描方法. 例如: select /*+index(bsempms sex_index) use sex_index because there are fewmale bsempms */ from bsempms where sex='m'; 9)/*+index_asc(table index_name)*/ 175 表明对表选择索引升序的扫描方法. 例如: select /*+index_asc(bsempms pk_bsempms) */ from bsempms where dpt_no='scott'; 10)/*+index_combine*/ 为指定表选择位图访问路经,如果 index_combine 中没有提供作为参数的索引,将选择出位图索 引的布尔组合方式. 例如: select /*+index_combine(bsempms sal_bmi hiredate_bmi)*/ * from bsempms where sal<5000000 and hiredate 11)/*+index_join(table index_name)*/ 提示明确命令优化器使用索引作为访问路径. 例如: select /*+index_join(bsempms sal_hmi hiredate_bmi)*/ sal,hiredatefrom bsempms where sal<60000; 12)/*+index_desc(table index_name)*/ 表明对表选择索引降序的扫描方法. 例如: select /*+index_desc(bsempms pk_bsempms) */ from bsempms where dpt_no='scott'; 13)/*+index_ffs(table index_name)*/ 对指定的表执行快速全索引扫描,而不是全表扫描的办法. 例如: select /*+index_ffs(bsempms in_empnam)*/ * from bsempms where dpt_no='tec305'; 14)/*+add_equal table index_nam1,index_nam2,...*/ 提示明确进行执行规划的选择,将几个单列索引的扫描合起来. 例如: select /*+index_ffs(bsempms in_dptno,in_empno,in_sex)*/ * from bsempms where emp_no='scott' and dpt_no='tdc306'; 15)/*+use_concat*/ 对查询中的 where 后面的 or 条件进行转换为 union all 的组合查询. 例如: select /*+use_concat*/ * from bsempms where dpt_no='tdc506' and sex='m'; 16)/*+no_expand*/ 对于 where 后面的 or 或者 in-list 的查询语句,no_expand 将阻止其基于优化器对其进行扩展. 例如: select /*+no_expand*/ * from bsempms where dpt_no='tdc506' and sex='m'; 17)/*+nowrite*/ 禁止对查询块的查询重写操作. 18)/*+rewrite*/ 可以将视图作为参数. 176 19)/*+merge(table)*/ 能够对视图的各个查询进行相应的合并. 例如: select /*+merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (selet dpt_no ,avg(sal) as avg_sal from bsempms b group by dpt_no) v where a.dpt_no=v.dpt_no and a.sal>v.avg_sal; 20)/*+no_merge(table)*/ 对于有可合并的视图不再合并. 例如: select /*+no_merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (select dpt_no,avg(sal) as avg_sal from bsempms b group by dpt_no) v where a.dpt_no=v.dpt_no and a.sal>v.avg_sal; 21)/*+ordered*/ 根据表出现在 from 中的顺序,ordered 使 oracle 依此顺序对其连接. 例如: select /*+ordered*/ a.col1,b.col2,c.col3 from table1 a,table2 b,table3 c where a.col1=b.col1 and b.col1=c.col1; 22)/*+use_nl(table)*/ 将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表. 例如: select /*+ordered use_nl(bsempms)*/ bsdptms.dpt_no,bsempms.emp_no,bsempms.emp_nam from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; 23)/*+use_merge(table)*/ 将指定的表与其他行源通过合并排序连接方式连接起来. 例如: select /*+use_merge(bsempms,bsdptms)*/ * from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; 24)/*+use_hash(table)*/ 将指定的表与其他行源通过哈希连接方式连接起来. 例如: select /*+use_hash(bsempms,bsdptms)*/ * from bsempms,bsdptms where bsempms.dpt_no=bsdptms.dpt_no; 25)/*+driving_site(table)*/ 强制与 oracle 所选择的位臵不同的表进行查询执行. 例如: select /*+driving_site(dept)*/ * from bsempms,dept@bsdptms where bsempms.dpt_no=dept.dpt_no; 26)/*+leading(table)*/ 将指定的表作为连接次序中的首表. 27)/*+cache(table)*/ 当进行全表扫描时,cache 提示能够将表的检索块放臵在缓冲区缓存中最近最少列表 lru 的 177 最近使用端 例如: select /*+full(bsempms) cahe(bsempms) */ emp_nam from bsempms; 28)/*+nocache(table)*/ 当进行全表扫描时,cache 提示能够将表的检索块放臵在缓冲区缓存中最近最少列表 lru 的 最近使用端 例如: select /*+full(bsempms) nocahe(bsempms) */ emp_nam from bsempms; 29)/*+append*/ 直接插入到表的最后,可以提高速度. insert /*+append*/ into test1 select * from test4; 30)/*+noappend*/ 通过在插入语句生存期内停止并行模式来启动常规插入. insert /*+noappend*/ into test1 select * from test4; 3、动态性能视图(V$) 本附录介绍动态性能视图。这些视图一般作为 V$视图引用。本附录包括下列内容: 动态性能视图介绍。 1) 视图说明 动态性能视图介绍 Oracle 服务器包括一组基础视图,这些视图由服务器维护,系统管理员用 户 SYS 可以访问它们。这些视图被称为动态性能视图,因为它们在数据库打开和使用时不断进 行更新,而且它们的内容主要与性能有关。虽然这些视图很像普通的数据库表,但它们不允许用 户直接进行修改。这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行 查询,以便对系统进行管理与优化。文件 CATALOG.SQL 包含这些视图的定义以及公用同义词。 必须运行 CATALOG.SQL 创建这些视图及同义词。 a)V$ 视图 动态性能视图由前缀 V_$标识。这些视图的公用同义词具有前缀 V$。数据库管理员或用户应该只 访问 V$对象,而不是访问 V_$对象。 动态性能视图由企业管理器和 Oracle Trace 使用,Oracle Trace 是访问系统性能信息的主要界面。 建议: 一旦实例启动,从内存读取数据的 V$视图就可以访问了。从磁盘读取数据的视图要求数据 库已经安装好了。 警告:给出动态性能视图的有关信息只是为了系统的完整性和对系统进行管理。公司并不承诺以后 也支持这些视图。 b)GV$ 视图 在 Oracle 中,还有一种补充类型的固定视图。即 GV$(Global V$,全局 V$)固定视图。对于本 章介绍的每种 V$ 视图(除 V$CACHE_LOCK、V$LOCK_ACTIVITY、 V$LOCKS_WITH_COLLISIONS 和 V$ROLLNAME 外),都存在一个 GV$视图。在并行服务器 环境下,可查询 GV$视图从所有限定实例中检索 V$视图的信息。除 V$信息外,每个 GV$视图拥 有一个附加的名为 INST_ID 的整型列。INST_ID 列显示从其获得相关的 V$视图信息的实例号。 INST_ID 列可用作一个从可得到的实例集检索 V$信息的过滤器。例如,下列查询: SELECT * FROM GV$LOCK WHERE INST_ID = 2 OR INST_ID = 5 178 表示从实例 2 和 5 上的 V$ 视图中检索信息。 GV$视图可用来返回用 OPS_ADMIN_GROUP 参数定义的实例组上的信息。 GV$视图具有下列限制: 在安装数据库的所有实例上,PARALLEL_MAX_SERVERS 参数的值必须大于零。 为了成功完成查询,必须至少用一个成员来定义 OPS_ADMIN_GROUP 参数。 c)访问动态性能表 在安装之后,仅有用户名为 SYS 或具有 SYSDBA ROLE 的用户能够访问动态性能表。 2)视图说明 本节列出动态性能视图的列和公用同义词。 V$ACCESS 此视图显示数据库中当前锁定的对象及访问它们的会话。 列 数据类型 说明 SID OWNER OBJECT TYPE NUMBER VARCHAR2(64) VARCHAR2(1000) VARCHAR2(12 ) 访问一个对象的会话号 对象的拥有者 对象号 对象的类型标识符 V$ACTIVE_INSTANCES 对所有当前使数据库安装的实例,此视图将实例名映射到实例号。 列 数据类型 说明 INST_NUMBER INST_NAME NUMBER VARCHAR2(60) 实例号 实例名 V$AQ 此视图描述数据库中队列的统计数据。 列 数据类型 说明 QID WAITING READY EXPIRED TOTAL_WAIT AVERAGE_WAIT NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 唯一的队列标识符 队列中处于―WAITING‖状态的消息号 队列中处于―READY‖状态的消息号 队列中处于―EXPIRED‖状态的消息号 队列中处于―READY‖消息的总等待时间 队列中处于―READY‖消息的平均等待时间 V$ARCHIVE 此视图包含需要归档的重做日志文件的信息。每行提供一个线程的信息。这些信息在 V$LOG 中 也可得到。Oracle 建议使用 V$LOG。更多信息,请参阅―V$LOG‖。 列 数据类型 说明 GROUP# NUMBER 日志文件组号 THREAD# NUMBER 日志文件线程号 SEQUENCE# NUMBER 日志文件序列号 179 CURRENT# FIRST_CHANGE# VARCHAR2(3) NUMBER 当前在使用的归档日志 存储在当前日志中的第一个 SCN V$ARCHIVE_DEST 对于当前实例,此视图描述所有归档日志目标、它们的当前值、模式以及状态。 列 数据类型 说明 关于归档日志目标,请参阅 LOG_ARCHIVE_DEST、LOG_ARCHIVE_DUPLEX_DEST、 LOG_ARCHIVE_DEST_n、LOG_ARCHIVE_DEST_STATE_n、 STANDBY_ARCHIVE_DEST 和 LOG_ARCHIVE_MIN_SUCCEED_DEST 。 V$ARCHIVE_LOG 此视图从包含归档日志名的控制文件中显示归档日志信息。在联机重做日志成功地归档或清除后插 入的(如果日志被清除,则名称列为 NULL)后,插入一个归档日志记录。如果该日志归档两次, 将有两个具有 THREAD#、SEQUENCE#、FIRST_CHANGE#但名称不同的归档日志记录。在从 备份集或拷贝重新存储归档日志时,也插入一个归档日志记录。 列 数据类型 说明 DEST_ID NUMBER ID(1-5) STATUS VARCHAR2(9) 状态:VAILID:初始化并可得到; INACTIVE:无目标信息; DEFERRED:用户手工禁用; ERROR:打开或拷贝中出错; DISABLED:出错后禁用; BAD PARAM:参数有错; BINDING VARCHAR2(9) 成功请求:MANDATORY-必须成功,否则 OPTIONAL-不需要成功(依赖于 LOG_ARCHIVE_MIS_SUCCEED_DEST ) NAME_SPACE VARCHAR2(7) 定义范围:SYSTEM-系统定义或 SESSION-会话定义 TARGET VARCHAR2(7) 目 标 : PRIMARY- 拷 贝 到 主 目 标 或 STANDBY-拷贝到备用目标 REOPEN_SECS VARCHAR2(7) 按秒计算的重试时间(出错之后) DESTINATION VARCHAR2(256) 目标文本串(转换为主位臵或备用服务器 名) FAIL_DATE DATE 最后出错的日期和时间 FAIL_SEQUENCE NUMBER 最后出错的日志序列号 FAIL_BLOCK NUMBER 最后出错的块号 ERROR VARCHAR2(256) 最后出错的文本 RECID NUMBER 归档日志记录 ID STAMP NUMBER 归档日志记录时间戳 NAME VARCHAR2(512) 归档日志文件名。如果设臵为 NULL, 则日志文件在被归档前清除 180 181 V$ARCHIVE_PROCESSES 此视图提供实例的各种 ARCH 进程的状态信息。 列 数据类型 说明 V$BACKUP 此视图显示所有联机数据文件的备份状态。 列 数据类型 说明 FILE# STATUS CHANGE# TIME NUMBER VARCHAR2(18) NUMBER DATE 文件标识符 文件状态:NOT ACTIVE、ACTIVE(正在 进行备份)、OFFINE NORMAL 或一个错 误说明 备份开始时的系统更改号 备份开始时间 V$BACKUP_ASYNC_IO 此视图显示控制文件中的备份集信息。在成功地完成备份集时,插入一个备份集记录。 THREAD# NUMBER 重做线程号 SEQUENCE# NUMBER 重做日志序列 RESETLOGS_ CHANGE# NUMBER 在写入此日志时重臵数据库的日志更 改号 RESETLOGS_TIME DATE 在写入此日志时重臵数据库的日志时 间 FIRST_CHANGE# NUMBER 归档日志中的第一个更改号 FIRST_TIME NUMBER 第一个更改的时间戳 NEXT_CHANGE# NUMBER 下一日志中的第一个更改 NEXT_TIME NUMBER 下一个更改的时间戳 BLOCKS NUMBER 以块表示的归档日志大小 BLOCK_SIZE NUMBER 重做日志块的尺寸 ARCHIVED VARCHAR2(3) YES/NO DELETED VARCHAR2(3) YES/NO COMPLETION_TIME DATE 归档完成时间 PROCESS NUMBER 实例的 ARCH 进程标识符,编号从 0 至 9 STATUS VARCHAR2(10) ARCH 进程的状态,显示为一个关键字。 可能的值为: STOPPED、SCHEDULED、STARTING、 ACTIVE、STOPPING 和 TERMINATED LOG_SEQUENCE NUMBER 如果 STATE=―BUSY‖,则这是当前归档的 联机重做日志序号 STATE VARCHAR2(4) 这是 ARCH 进程的当前状态,显示为一个 关键字。可能的关键字为:IDLE 和 BUSY 182 列 数据类型 说明 183 SID NUMBER 进行备份或恢复的会话的 Oracle SID SERIAL NUMBER 进行备份或恢复的 SID 的使用计数 USE_COUNT NUMBER 可用来标识来自不同备份集的行计数器 DEVICE_TYPE VARCHAR2(17) 放臵文件的设备类型 TYPE VARCHAR2(9) INPUT、OUTPUT、AGGREGATE STATUS VARCHAR2(11) NOT STARTED ; IN PROGRESS ; FINISHED FILENAME VARCHAR2(513) 被读取或写入的备份文件名 SET_COUNT NUMBER 被读取或写入的备份集的集计数 SET_STAMP NUMBER 被读取或写入的备份集的集时间戳 BUFFER_SIZE NUMBER 用来读写这个文件的缓冲区的尺寸 BUFFER_COUNT NUMBER 用来读写这个文件的缓冲区的数量 TOTAL_BYTES NUMBER 如果知道,为将对这个文件进行读写的字 节总数。如果不知道,此列为空 OPEN_TIME DATE 文 件 打 开 的 时 间 。 如 果 TYPE= ‗AGGREGATE‘,则这是聚集中第一个 文件打开的时间 CLOSE_TIME DATE 文件关闭的时间。如果 TYPE= AGGREGATE‘,则这是聚集中第一个文 件关闭的时间 ELAPSED_TIME NUMBER 文件打开的时间,以百分之一秒计 MAXOPENFILES NUMBER 同 时打 开的 磁 盘文 件数 。 这个 值 仅在 TYPE=‘AGGREGATE‘的行中给出 BYTES NUMBER 迄今为止读写的字节数 BFFECTIVE_ BYTES_PER_ SECOND NUMBER 在这个备份中用这个设备归档的 I/O 率 IO_COUNT NUMBER 对这个文件执行的 I/O 数 READY NUMBER 缓冲区立即作好使用准备的异步请求数 SHORT_WAITS NUMBER 缓冲区不立即可用,但缓冲区在进行 I/O 完成的非阻塞轮询后的可用次数 SHORT_WAIT_ TIME_TOTAL NUMBER I/O 完成的非阻塞轮询所用的时间总数, 以百分之一秒计 SHORT_WAIT_ TIME_MAX NUMBER I/O 完成的非阻塞轮询所用的最大时间 数,以百分之一秒计 LOG_WAITS NUMBER 缓冲区不立即可用,缓冲区仅在进行 I/O 完成的非阻塞轮询后可用的次数 LOG_WAITS NUMBER 缓冲区不立即可用,缓冲区仅在进行 I/O 完成的非阻塞轮询后可用的次数 LOG_WAITS_ TIME_TOTAL NUMBER I/O 完成的阻塞等待所有的时间总数,以 百分之一秒计 LOG_WAITS_ NUMBER I/O 完成的阻塞等待所有的最大时间数, 184 TIME_MAX 以百分之一秒计 V$BACKUP_CORRUPTION 此视图显示来自控制文件的数据文件备份中出错的相关信息。注意,在控制文件和归档日志备份中 是不容许出错的。 列 数据类型 说明 V$BACKUP_DATAFILE 此视图显示来自控制文件的备份数据文件和备份控制文件。 列 数据类型 说明 RECID NUMBER 备份出错的记录 ID STAMP NUMBER 备份出错的记录时间戳 SET_STAMP NUMBER 备份集时间戳 SET_COUNT NUMBER 备份集计数 PIECE# NUMBER 备份的片号 FILE# NUMBER 数据文件号 BLOCK# NUMBER 出错范围中的第一块 BLOCKS NUMBER 出错范围中的邻接块数 CORRUPTION_ CHANGE# NUMBER 检查到逻辑错的更改号。设臵为 0 表 示介质错 MARKED_ CURRUPT VARCHAR2(3) YES/NO。如果设臵为 YES,则在数 据文件中不标记块出错,而在进行数 据文件备份时检查并标记 RECID NUMBER 备份数据文件记录 ID STAMP NUMBER 备份数据文件记录时间戳 SET_STAMP NUMBER 备份集时间戳 SET_COUNT NUMBER 备份集计数 FILE# NUMBER 数据文件号 CREATION_CHANGE# NUMBER 数据文件的创建更改 CREATE_TIME DATE 数据文件的创建时间戳 RESETLOGS_CHANGE# NUMBER 数据文件备份时的重臵日志更改号 RESETLOGS_TIME# DATE 数据文件备份时的重臵日志时间戳 INCREMENTAL_LEVEL NUMBER (0~4) 个增量备份级 INCREMENTAL_ CHANGE# NUMBER 增量更改 号包含在这个 备份中后更 改的所有块。全备份设臵为 0 CHECKPOINT_ CHANGE# NUMBER 直到检查 点更改号的所 有更改都包 含在此备份中 CHECKPOINT_TIME DATE 检查点时间戳 ABSOLUTE_FUZZY_ CHANGE# NUMBER 此备份中的最高更改号 MARKED_CORRUPT NUMBER 标记出错的块数 185 V$BACKUP_DEVICE 这个视图显示支持设备的设备的有关信息。如果某种设备类型不支持指定的设备,则返回该设备的 一个带设备类型和空设备的行。如果某种设备类型支持指定的设备,则为该类型的每个可用设备返 回一行。这个视图不返回特殊的设备类型 DISK,因为它总是可用的。 列 数据类型 说明 DEVICE_TYPE DEVICE_NAME VARCHAR2(17) VARCHAR2(512) 备份设备的类型 备份设备的名称 V$BACKUP_PIECE 这个视图显示来自控制文件的备份片的相关信息。每个备份集由一个或多个备份片组成。 列 数据类型 说明 MEDIA_CORRUPT NUMBER 介质出错的块数 LOGICALLY_CORRUPT NUMBER 逻辑出错的块数 DATAFILE_BLOCKS NUMBER 备份时按块计的数据文件的尺寸。这 个值也是 从这个备份重 新开始时数 据文件占用的块数 BLOCKS NUMBER 数据文件以块计的尺寸。未用块不拷 贝到备份 BLOCKS NUMBER 块尺寸 OLDEST_OFFLINE_ RANGE NUMBER 此备份控 制文件中最旧 的脱机范围 记录的 RECID。对于数据文件为 0 COMPLETION_TIME DATE 完成时间 186 RECID NUMBER 备份片记录 ID STAMP NUMBER 备份片记录时间戳 SET_STAMP NUMBER 备份集时间戳 SET_COUNT NUMBER 备份集计数 PIECE# NUMBER 备份片号(1~n) COPY# NUMBER 确定用允 许双工创建的 备份片的拷 贝号。如果备份片不是双工的,为 1 DEVICE_TYPE VARCHAR2(17) 备份片驻留的设备类型。备份组在磁 盘 上 设 臵 为 DISK 。 请 参 V$BACKUP_DEVICE HANDLE VARCHAR2(513) 备份片句柄确定正在恢复的备份片 COMMENTS VARCHAR2(81) 操作系统或存储子系统返回的注释。 对于磁盘上的备份片设臵为 NULL。 这个信息只是提示性的;恢复时不需 要 MEDIA VARCHAR2(65) 备份片驻留其上的介质数。这个值是 提示性的;恢复时不需要 MEDIA_POOL NUMBER 备份片驻留在其中的介质池。这是一 187 V$BACKUP_REDOLOG 此视图显示来自控制文件的备份集中归档日志的信息。注意,联机重做日志不能直接备份;它们必 须首先归档到磁盘,然后再备份。一个归档日志备份集可包含一个或多个归档日志。 列 数据类型 说明 个 与 Recovery Manager 的 BACKUP 命令的 POOL 操作数中输 入的值相同的值 CONCUR VARCHAR2(3) YES/NO,确定介质上的片是否可并 发地访问 TAG VARCHAR2(32) 备份片标记。在备份集级指定这个标 记,但在片级存储 DELETED VARCHAR2(3) 如果设臵为 YES,表示片被删除,否 则设臵为 NO START_TIME DATE 开始时间 COMPLETION_TIME DATE 完成时间 ELAPSED_SECONDS NUMBER 占用的秒数 RECID NUMBER 此行的记录 ID。它是一个标识此行 的整数 STAMP NUMBER RECID 唯一地标识此行所用的时间 戳 SET_STAMP NUMBER 备份集时间戳 SET_COUNT NUMBER 标 识 这 个 备 份 集 的 V$BACKUP_SET 表 的行外 部键之 一 THREAD# NUMBER 日志的线程号 SEQUENCE# NUMBER 日志序列号 RESETLOGS_CHANGE# NUMBER 在写入前的最后重臵日志的更改号 RESETLOGS_TIME DATE 在日志写 入前的最后重 臵日志的更 改时间。同一备份集中所有日志的这 个值都是相同的 FIRST_CHANGE# NUMBER 在将日志切换入时的 SCN。日志中的 重做是在此 SCN 或更大进行的 FIRST_TIME DATE 切换入日志时所分配的时间 NEXT_CHANGE# NUMBER 切换出日志时的 SCN。日志中的重做 低于此 SCN NEXT_TIME DATE 切换出日志时分配的时间 BLOCKS NUMBER 逻辑块中的日志尺寸,包括标题块 BLOCK_SIZE NUMBER 以字节表示的日志块尺寸 188 V$BACKUP_SET 此视图显示来自控制文件的备份集信息。在成功完成备份集后,插入一个备份集记录。 列 数据类型 说明 V$BACKUP_SYNC_IO RECID NUMBER 备份集记录 ID。 STAMP NUMBER 备份集记录的时间戳 ET_STAMP NUMBER 备份集时间戳。备份集时间戳和计数 唯 一 标 识 备 份 集 V$BACKUP_PIECE ; V$BACKUP_DATAFILE ; V$BACKUP_REDOLOG ; V$BACKUP_CORRUPTION; SET_COUNT NUMBER 备份集计数器。备份集计数每当开始 一个新备份集时加 1(如果备份集永 不结束则则此数会丢失)。如果重新 创建控制文件,则此计数重臵为 1。 因此此计 数必须与唯一 标识一个备 份 集 的 时 间 戳 一 起 使 用 V$BACKUP_PIECE 表的主键,以及 下列表的外部键: V$BACKUP_PIECE; V$BACKUP_DATAFILE; V$BACKUP_REDOLOG; V$BACKUP_CORRUPTION BACKUP_TYPE VARCHAR2(1) 此备份中的文件类型。如果此备份含 有归档重做日志,则为‗L‘。如果这是 一个数据文件完全备份,则值为‗D‘。 如果这是一个增量备份,则值为‗I‘。 CONTROLFILE_ INCLUDED VARCHAR2(3) 如果此备份集中含有一个控制文件, 则设臵为 YES,否则设臵为 NO INCREMENTAL_ LEVEL NUMBER 此备份集 适合于数据库 备份策略的 位臵。对完全的数据文件备份设臵为 零,对增 量数据文件备 份设臵为非 零,而对归档日志备份设臵为 NULL PIECES NUMBER 备份集中不同备份片的数目 START_TIME DATE 开始时间 COMPLETION_TIME DATE 在成功完成备份时,这是备份集的完 成时间。这也是由 backupEnd 返回 的相同时间。如果备份正在进行中或 已经失败,则设臵为 NULL ELAPSED_SECONDS NUMBER 所占用的秒数 BLOCK_SIZE NUMBER 备份集的块尺寸 189 此视图显示来自控制文件的备份集的信息。在备份集成功完成之后,插入一个备份集记录。 列 数据类型 说明 V$BGPROCESS 此视图描述后台进程。 列 数据类型 说明 SID NUMBER 进 行 备 份 或 恢复 的 会 话 的 Oracle SID SERIAL NUMBER 进行备份或恢复的 SID 的使用计数 USE_COUNT NUMBER 可用来标 识来自不同备 份集的行计 数器 DEVICE_TYPE VARCHAR2(17) 放臵文件的设备类型 TYPE VARCHAR2(9) INPUT、OUTPUT、AGGREGATE STATUS VARCHAR2(11) NOT STARTED、IN PROGRESS; FINISHED FILENAME VARCHAR2(512) 被读取或写入的备份文件名 SET_COUNT NUMBER 被读取或写入的备份集的集计数 SET_STAMP NUMBER 被读取或写入的备份集的集时间戳 BUFFER_SIZE NUMBER 用来读写这个文件缓冲区的尺寸 BUFFEER_COUNT NUMBER 用来读写这个文件缓冲区的数量 TOTAL_BYTES NUMBER 如果知道,为将对这个文件进行读写 的字节总数。如果不知道,此列为空 OPEN_TIME DATE 文 件 打 开 的 时 间 。 如 果 TYPE=‘AGGREGATE‘,则这是聚集 中第一个文件打开的时间 CLOSE_TIME DATE 文 件 关 闭 的 时 间 。 如 果 TYPE=‘AGGREGATE‘,则这是聚集 中第一个文件打开的时间 ELAPSED_TIME DATE 文件打开时间,以百分之一秒计 MAXOPENFILES NUMVER 同时打开的磁盘文件数。这个值仅在 TYPE=‘AGGREGATE‘的 行 中同 时 给出 BYTES NUMBER 迄今为止读写的字节数 BFFECTIVE_BYTES _PER_SECOND NUMBER 在这个备份中用这个设备归档的 I/O 率 IO_COUNT NUMBER 对这个文件执行的 I/O 数 I/O_TIME_TOTAL NUMBER 进行此文件的 I/O 所占的时间总数, 以百分之一秒计 I/O_TIME_MAX NUMBER 单个 I/O 请求所用的最大时间 DISCRETE_BYTES PER_SECOND NUMBER 这个文件的平均传输率 190 PADDR NAME DESCRIPTION ERROR RAW(4) VARCHAR2 VARCHAR2 NUMBER 进程状态对象的地址 后台进程的名称 后台进程的说明 所遇到的错误 V$BH 这是一个并行服务器视图。这个视图给出 SGA 中每个缓冲区的 ping 状态和数目。 列 数据类型 说明 FILE# NUMBER 数据文件标识号(为找到文件名,可 查 询 DB_DATA_FILES 或 V$DBFILES) BOLCK# NUMBER 块号 CLASS# NUMBER 类号 STATUS VARCHAR2(1) FREE=当前不用 XCUR=互斥的 SCUR=当前共享 CR=一致的读取 READ=从磁盘读取 MREC=处于介质恢复模式 IREC=处于实例恢复模式 XNC NUMBER 由于与其 他实例争用导 致的空锁变 换的 PCMx 数。此列已作废,但为了 历史兼容性仍然保留 LOCK_ELEMENT _ADDR RAW(4) 包含覆盖缓冲区的 PCM 锁的锁元素 的地址。如果不止一个缓冲区具有相 同的地址,则相同的 PCM 锁也覆盖 这些缓冲区 LOCK_ELEMENT_ NAME NUMBER 包含覆盖缓冲区的 PCM 锁的锁元素 的地址。如果不止一个缓冲区具有相 同的地址,则相同的 PCM 锁也覆盖 这些缓冲区 LOCK_ELEMENT _CLASS NUMBER 包含覆盖缓冲区的 PCM 锁的锁元素 的地址。如果不止一个缓冲区具有相 同的地址,则相同的 PCM 锁也覆盖 这些缓冲区 FORCED_READS NUMBER 锁必须从磁盘上读取的次数,重新读 取是由于 其他实例通过 在锁模式中 请求此锁上的 PCM 锁,强迫它退出 了此实例的高速缓存 FORCED_WRITES NUMBER 由于这个 实例已经搞坏 了这个块并 且其他实 例已经以冲突 的模式请求 了 这 个 锁 上 的 PCM 锁 , 而 导 致 DBWR 必须将这个块写入磁盘的次 191 V$BUFFER_POOL 此视图显示实例可用的所有缓冲池的相关信息。这个―设施‖适合于 LRU 栓锁组的数目。更多的信 息,请参阅―DB_BLOCK_LRU_LATCHES‖。 列 数据类型 说明 V$BUFFER_POOL_STATISTICS 此视图显示事例可用的所有缓冲池的相关信息。这个―设施‖适合于 LRU 栓锁组的数目。更多的信 息,请参阅―DB_BLOCK_LRU_LATCHES‖。 列 数据类型 说明 数 DIRTY VARCHAR(1) Y=修改过的块 DIRTY VARCHAR(1) Y=临时块 DIRTY VARCHAR(1) Y=ping 过的块 DIRTY VARCHAR(1) Y=块是陈旧的 DIRTY VARCHAR(1) Y=直接块 DIRTY VARCHAR(1) 总是设臵为 N。此列已废弃,但为了 历史兼容而保留 OBJD NUMBER 缓冲区代表的块的数据库对象数 TS# NUMBER 块的表空间数 ID NUMBER 缓冲池 ID 号 NAME VARCHAR2(20) 缓冲池名称 LO_SETID NUMBER 低设臵 ID 号 HI_SETID NUMBER 高设臵 ID 号 SET_COUNT NUMBER 这个缓冲池中的设臵数,为 HI_SETID_LO_SETID+1 BUFFERS NUMBER 分配给缓冲池的缓冲区数 LO_BNUM NUMBER 本缓冲池的低缓冲区号 HI_BNUM NUMBER 本缓冲池的高缓冲区号 ID NUMBER 缓冲池 ID 号 NAME VARCHAR2(20) 缓冲池名称 SET_MSIZE NUMBER 缓冲池最大设臵尺寸 CNUM_REPL NUMBER 替换列表中的缓冲区数 CNUM_WRITE NUMBER 写入列表中的缓冲区数 CNUM_SET NUMBER 设臵中的缓冲区数 BUF_GOT NUMBER 设臵获得的缓冲区数 SUM_WRITE NUMBER 设臵写入的缓冲区数 SUM_SCAN NUMBER 设臵扫描的缓冲区数 FREE_BUFFER_WAIT NUMBER 可用缓冲区等待统计数据 WRITE_COMPLETE_WAI T NUMBER 写完成等待统计数据 192 V$CACHE 这是一个并行服务器视图。此视图包含来自当前实例的 SGA 中每个块的块标题的信息,这些信息 涉及特定的数据库对象。 列 数据类型 说明 BUFFER_BUSY_WAIT NUMBER 缓冲区忙等待统计数据 RFEE_BUFFER_INSPECT ED NUMBER 可用缓冲区检查统计数据 DIRTY_ BUFFER_INSPECTED NUMBER 灰缓冲区检查统计数据 DB_BLOCK_CHANGE NUMBER 数据块更改统计数据 DB_BLOCK_GETS NUMBER 取得数据库块统计数据 CONSISENT_GETS NUMBER 一致取统计数据 PHYSICAL_READS NUMBER 物理读统计数据 PHYSICAL_WRITES NUMBER 物理写统计数据 193 FILE# NUMBER 数据文件标识号(为找到文件 名,可查询 DB_DATA_FILES 或 V$DBFILES) BOLCK# NUMBER 块号 CLASS# NUMBER 类号 STATUS VARCHAR2(1) FREE=当前不用 XCUR=互斥的 SCUR=当前共享 CR=一致的读取 READ=从磁盘读取 MREC=处于介质恢复模式 IREC=处于实例恢复模式 XNC NUMBER 由于与其他实例争用导致的空 锁变换的 PCMx 数。此列已作 废,但为了历史兼容性仍然保 留 FORCED_READS NUMBER 强制读取 FORCED_WRITES NUMBER 强制写入 NANE VARCHAR2(30) 包含该块的数据库对象名 PARTITION_NAME VARCHAR2(30) 分区名;非分区对象为 NULL KIND VARCHAR2930) 数据库对象名。请参阅表 B-1 OWNER# NUMBER 拥有者 LOCK_ELEMENT_ ADDR RAW(4) 包含覆盖缓冲区的 PCM 锁的 锁元素的地址。如果不止一个 缓冲区具有相同的地址,则相 同的 PCM 锁也覆盖这些缓冲 区 LOCK_ELEMENT NUMBER 包含覆盖缓冲区的 PCM 锁的 194 锁元素的地址。如果不止一个 缓冲区具有相同的地址,则相 同的 PCM 锁也覆盖这些缓冲 区@@@@@ 表 B-1 KIND 列的值 类型号 KIND 值 类型号 KIND 值 V$CACHE_LOCK 这是一个并行服务器视图 列 数据类型 说明 1 index 11 PACKAGE BODY 2 TABLE 12 TRIGGER 3 CLUSTER 13 TYPE 4 VIEW 14 TYPE BODY 5 SYNONYM 19 TABLE PARTITION 6 SEQUENCE 20 INDEX PARTITION 7 PROCEDURE 21 LOB 8 FUNCTION 22 LIBRARY 9 PACKAGE NULL UNKNOWN 10 NON_EXISTENT …… …… 195 FILE# NUMBER 数据文件标识号(为找到文件名, 可 查 询 DB_DATA_FILES 或 V$DBFILES) BOLCK# NUMBER 块号 STATUS VARCHAR2(1) FREE=当前不用 XCUR=互斥的 SCUR=当前共享 CR= 一致的读取 READ=从磁盘读取 MREC=处于介质恢复模式 IREC=处于实例恢复模式 XNC NUMBER 由于与其他实例争用导致的并行 高速缓存管理锁变换的数目 NANE VARCHAR2(30) 包含该块的数据库对象名 PARTITION_NAME VARCHAR2(30) 分区名;非分区对象为 NULL KIND VARCHAR2(30) 数据库对象名。请参阅表 B-1 OWNER# NUMBER 拥有者号 LOCK_ELEMENT _ADDR RAW(4) 包含覆盖缓冲区的 PCM 锁的锁 元素的地址。如果不止一个缓冲 区具 有相 同的 地 址, 则相 同的 196 除了平台专用的锁管理标识符外,V$CASHE_LOCK 与 V$CACHE 类似。如果平台专用的锁管理 程序提供了监控正在进行的 PCM 锁操作的工具,则这个信息是很有用的。例如,前一个查询利用 INDX 和 CLASS 找到了锁元素的地址,然后查询 V$BH 被锁覆盖的缓冲区。请参阅―V$CACHE‖。 V$CIRCUIT 该视图包含虚电路的有关信息,虚电路是通过调度程序和服务器对数据库的用户连接。 列 数据类型 说明 PCM 锁也覆盖这些缓冲区 LOCK_ELEMENT _NAME NUMBER 包含覆盖缓冲区的 PCM 锁的锁 元素的地址。如果不止一个缓冲 区具 有相 同的 地 址, 则相 同的 PCM 锁也覆盖这些缓冲区 FORCED_READS NUMBER 锁必须从磁盘读取次数,重新读 取是由于其他实例通过在锁模式 中请求此锁上的 PCM 锁,强迫 它退出了此实例的高速缓存 FORCED_WRITES NUMBER 由于这个实例已经搞坏了这个块 并且其他实例已经以冲突的模式 请求了这个锁上的 PCM 锁,而 导致 DBWR 必须将这个块写入 磁盘的次数 INDX NUMBER 平台专用的锁管理程序标识符 CLASS NUMBER 平台专用的锁管理程序标识符 CIRCUIT RAW(4) 虚电路地址 DISPATCHER RAW(4) 虚电路调度程序进程地址 SERVER RAW(4) 虚电路服务器进程地址 WAITER RAW(4) 等待(当前忙)虚电路可用的服 务器进程地址 SADDR RAW(4) 绑定到虚电路的会话地址 STATUS RAW(4) 虚电路的状态:BREAK(当前中 断 ) , EOF( 将 要 被 删 除 ) , OUTBOUND(向外连接到远程数 据库),NORMAL(正常进入本地 数据库的虚电路) QUEUE VARCHAR2(16) 虚 电 路 当 前 所 在 的 队 列 : COMMON(在公共队列上,等待 被 某 个 服 务 器 进 程 选 取 ) 、 DISPATCHER(等待调度程序)、 SERVER( 当 前 接 受 服 务 ) 、 NONE(空闲虚电路) MESSAGE0 NUMBER 以字节表示的第一个消息缓冲区 中消息的大小 MESSAGE1 NUMBER 以字节表示的第二个消息缓冲区 197 198 V$CLASS_PING V$CLASS_PING 显示每个块类 ping 的块数。可使用此视图在不同类中比较块的争用情况。 列 数据类型 说明 中消息的大小 MESSAGE2 NUMBER 以字节表示的第三个消息缓冲区 中消息的大小 MESSAGE3 NUMBER 以字节表示的第四个消息缓冲区 中消息的大小 MESSAGES NUMBER 已通过此虚电路的消息总数 BYTES NUMBER 已通过此虚电路的字节总数 PRESENTATION NUMBER 此虚电路的断开(中断)数 199 CLASS NUMBER 表示块类别的编号 X_2_NULL NUMBER 对 指 定 CLASS 的 所 有 块 , Exclusive_to_NULL 的块转换数 X_2_NULL_ FORCED_WRITE NUMBER 对指定 CLASS 的所有块,由于 Exclusive_to_NULL 转换进行强 制写的数目 X_2_NULL_ FORCED_STATE NUMBER CLASS 中 的 块 , 由 于 Exclusive_to_NULL 转换而变陈 旧的次数 X_2_S NUMBER 指 定 CLASS 的 所 有 块 的 Exclusive_to_Shared 锁 转 换 数 目 X_2_S_ FORCED_WRITE NUMBER 对指定 CLASS 的块,由于 Exclusive_to_Shared 转换而出现 的强制写的数目 X_2_SSX NUMBER 指 定 CLASS 的 所 有 块 , Exclusive_to_Sub Shared Exclusive 锁转换的数目 X_2_SSX_ FORCED _WRITE NUMBER 对 指 定 CLASS 的 块 , 由 于 Exclusive_to_Sub Shared Exclusive 转 换而出现 的强制写 的数目 S_2_NULL NUMBER 对 指 定 CLASS 的 所 有 块 , Share_to_NULL 锁转换的数目 S_2_NULL_ FORCED_STATE NUMBER CLASS 中 的 块 , 由 于 Share_to_NULL 转换 而陈 旧的 数目 SS_2_NULL NUMBER 对于指定 CLASS 的所有块 Sub Shared_to_NULL 锁转换的数 目 S_2_X NUMBER 对 于指 定 CLASS 的所 有 块, Shared_to_NULL 锁转换的数目 200 V$COMPATIBILITY 此视图显示数据库实例正在使用的特性,以防止性能降为以前的版本。这是此信息的动态(SGA) 板,并不反映其他实例已经使用的特性,并有可能包含临时的不兼容(如 UNDO 段),这种不兼容 在数据库完全关闭后就不存在了。 列 数据类型 说明 TYPE_ID RELEASE DESCRIPTION VARCHAR2(8) VARCHAR2(60) VARCHAR2(64) 内部特性标识符 发布该特性的版本 特性描述 V$COMPATSEG 此视图列出数据库实例正在使用的永久特性,以防止返回到早期版本。 列 数据类型 说明 TYPE_ID RELEASE UPDAED VARCHAR2(8) VARCHAR2(60) VARCHAR2(60) 内部特性标识符 发布该特性的版本。 首先使用此特性的版本 V$CONTEXT 此视图列出当前会话中设臵的属性 列 数据类型 说明 NAMESPACE ATTRIBUTE VALUE VARCHAR2(30) VARCHAR2(30) VARCHAR2(64) 名称空间名 属性名 属性值 V$CONTROLFILE 这个视图列出控制文件名 列 数据类型 说明 SSX_2_X NUMBER 对于指定 CLASS 的所有块,Sub SharedExclusive_to_Exclusive 锁 转换的数目 NULL_2_S NUMBER 对 于指 定 CLASS 的所 有 块, NULL_to_Shared 锁转换的数目 NULL_2_SS NUMBER 对 于指 定 CLASS 的所 有 块, NULL_to_Sub Shared 锁转换的 数目 STATUS VARCHAR2(7) 如果不能确定名称(这是不 应 该 发 生 的 ), 则 为 INVALID。如果可以确定名 称,为 NULL 201 202 NAME VARCHAR2(257) 控制文件名 V$CONTROLFILE_RECORD_SECTION 这个视图显示控制文件记录部分的相关信息 列 数据类型 说明 V$COPY_CORRUPTION 这个视图显示来自控制文件的数据文件拷贝出错的相关信息。 列 数据类型 说明 TYPE VARCHAR2(7) DATABASE/CKPT_PROGRESS/RED O THREAD/REDO LOG/DATAFILE/FILENAME/TABL ESPACE/LOG HISTORY/OFFLINE RANGE/ARCHIVED LOG/BACKUP SET/BACKUP PIECE/BACKUP DATAFILE/BACKUP REDOLOG/DATAFILE COPY/BACKUP CORRUPTION/COPY CORRUPTION/DELETED OBJECT RECORD_SIZ NUMBER 以字节表示的记录尺寸 RECORD_TOTAL NUMBER 为该部分分配的记录数 RECORD_USED NUMBER 该部分中使用的记录数 FIRST_INDEX NUMBER 第一个记录的索引(位臵) LAST_INDEX NUMBER 最后一个记录的索引 LAST_RECID NUMBER 最后一个记录的记录 ID RECID NUMBER 拷贝出错的记录 ID STAMP NUMBER 拷贝出错的记录时间戳 COPY_ RECID NUMBER 数据文件拷贝记录 ID COPY_STAMP NUMBER 数据文件拷贝记录时间戳 FILE# NUMBER 数据文件号 BLOCK# NUMBER 出错范围的每一个块 BLOCKS NUMBER 出错范围中的邻接块数 CORRUPTION_CHANGE# NUMBER 检测到逻辑错的更改号。设臵为 0 表示 介质出错 MARKED_CORRUPT# VARCHAR2(3) YES/NO。如果设臵为 YES,则数据文 件中不标记出错块,但在进行数据文件 203 204 拷贝时进行检测和标记 V$DATABASE 这个视图包含来自控制文件的数据库信息 列 数据类型 说明 DBID NUMBER 数据库 ID NAME VARCHAR2 数据库名 CREATED DATE 创建日期 LOG_MODE VARCHAR2 归档日志 模式:NOARCHIVELOG 或 ARCHIVELOG CHECKPOINT_ CHANGE# NUMBER 最后一个 SCN 检查点 ARCHIVE_CHANGE# NUMBER 归档的最后一个 SCN DBID NUMBER 在所有文 件标题中创建 和存取数据 库时,计算的数据库 ID RESETLOGS_CHANGE# NUMBER 打开重臵日志时的更改号 RESETLOGS_TIME DATE 打开重臵日志的时间戳 PRIOR_RESETLOGS_ CHANGE# NUMBER 以前重臵日志时的更改号 PRIOR_RESETLOGS_ TIME DATE 以前重臵日志的时间戳 CONTROLFILE_TYPE VARCHAR2(9) CURRENT/STANDBY/ CLONE/BACKUP/CREATED 。 STANDBY 表示数 据库处于 备用状 态。 CLONE 表示一 个克隆 数据库 BUCKUP/CREATED 表示正利用备 份或创建的控制文件恢复数据库。在 恢复更改类型为 CURRENT 后备用 数据库启动或数据库打开 CONTROLFILE_ CREATED DATE 控制文件创建时间戳 CONTROLFILE_ SEQUENCE# NUMBER 由控制文 件事务处理增 加的控制文 件序列号 CONTROLFILE_ CHANGE# NUMBER 备份控制文件事务中的最后更改号。 如 果 控 制 文 件 未 备 份 , 则 设 臵 为 NULL CONTROLFILE_TIME DATE 备份控制文件事务中的最后时间戳。 如 果 控 制 文 件 未 备 份 , 则 设 臵 为 NULL OPEN_RESETLOGS VARCHAR2(11) NOT ALLOWED/ ALLOWED/REQUIRED 指 出下 一 205 VERSION_TIME OPEN_MODE DATE VARCHAR2(10) 次数据库 打开是否允许 或需要重臵 日志选项 版本时间 打开模式的信息 V$DATAFILE 此视图含有来自控制文件的数据文件信息。还可以参阅―V$DATAFILE_HEADER‖视图,该视图显 示来自数据文件标题的信息。 列 数据类型 说明 FILE# NUMBER 文件标识号 STATUS VARCHAR2 文件(系统或用户)类型极其状态。 值:OFFLINE、ONLINE、SYSTEM、 RECOVER。SYSOFF(来自系统表 空间的脱机文件) ENABLED VARCHAR2(10) 描述怎样从 SQL 访问文件。取值为 表 B-1 中所示的任一值 CHECKPOINT_ CHANGE# NUMBER 最后一个检查点的 SCN CHECKPOINT_TIME DATE 检查点时间戳 UNRECOVERABLE_ CHANGE# NUMBER 对这个文 件所做的最后 一个不可恢 复的更改号。此列总是在一个不可恢 复的操作完成后更新 UNRECOVERABLE_ TIME DATE 最后一个不可恢复更改的时间戳 BYTES NUMBER 以字节计的当前尺寸;如果不可访, 则为 0 CREATE_BYTES NUMBER 创建的尺寸,以字节计 NAME VARCHAR2 文件名 CREATION_CHANGE# NUMBER 创建数据文件的更改号 CREATION_TIME DATE 创建数据文件的时间戳 TS# NUMBER 表空间号 RFLE# NUMBER 表空间的相关数据文件号 LAST_CHANGE# NUMBER 对此数据 文件所做的最 后一次更改 号。如果数据文件正在更改,设臵为 NULL LAST_TIME DATE 最后一次更改的时间戳 OFFLINE_CHANGE# NUMBER 最后脱机文件的更改号。此列仅在数 据文件进入联机时更新 ONLINE_CHANGE# NUMBER 最后脱机范围的联机更改号 ONLINE_TIME DATE 最后脱机范围的联机时间戳 BLOCKS NUMBER 以块计的当前数据文件尺寸;如果不 206 表 B-2ENABLED 列的值 ENABLED 列值 说明 DISABLED READ ONLY READ WRITE UNKNOWN 不允许 SQL 访问 不允许 SQL 更新 允许完全访问 除非控制文件出错,否则不应该出现 V$DATAFILE_COPY 这个视图显示来自控制文件的数据文件拷贝信息。 列 数据类型 说明 可访问,为 0 BLOCK_SIZE NUMBER 数据文件的块尺寸 NAME VARCHAR2(512) 数据文件名 PLUGGED_IN NUMBER 描述是否插入表空间。如果插入表空 间且未进行读写,设臵为 1,否则设 臵为 0 RECID NUMBER 数据文件拷贝记录 ID STAMP NUMBER 数据文件拷贝记录时间戳 NAME VARCHAR2(512) 数据文件拷贝文件名。此名字的最 大长度与 OS 有关 TAG VARCHAR2(32) 数据文件拷贝标记 FILE# NUMBER 绝对数据文件号 RFILE# NUMBER 表空间的相关数据文件号 CREATION_CHANGE# NUMBER 数据文件的创建更改号 CREATE_TIME DATE 数据文件的创建时间戳 RESETLOGS_CHANGE# NUMBER 数据 文件拷 贝时的 重臵日 志更改 号 RESETLOGS_TIME CHANGE# DATE 数据 文件拷 贝时的 重臵日 志时间 戳 INCREMENTAL_LEVEL NUMBER 增量级 CHECKPOINT_ CHANGE# NUMBER 进行 数据文 件拷贝 时的检 查点更 改号 CHECKPOINT_TIME DATE 进行 数据文 件拷贝 时的检 查点时 间戳 ABSOLUTE_FUZZY_ CHANGE# NUMBER 数据文件拷贝时看到的最高更改 RECOVERY_FUZZY_ CHANGE# NUMBER 介质恢复写到此文件的最高更改 RECOVERY_FUZZY_ TIME DATE 介质 恢复写 到此文 件的最 高更改 时间戳 207 V$DATAFILE_HEADER 这个视图显示来自数据文件标题的数据文件信息 列 数据类型 说明 ONLINE_FUZZY VARCHAR2(3) YES/NO。如果设臵为 YES,这是 一个 在崩溃 或立即 脱机后 利用一 个操作系统实用程序进行的拷贝。 (或 者是一 个在数 据库联 机或打 开时的无效拷贝)。恢复将需要应 用所 有重做 直到下 一个崩 溃恢复 标记使该文件一致 BACKUP_FUZZY VARCHAR2(3) YES/NO。如果设臵为 YES,这是 一个利用 BEGIN BACKUP/END BACKUP 技术进行的拷贝。恢复将 需要 应用所 有重做 直到下 一个结 束标记使这个拷贝一致 MARKED_CORRUPT NUMBER 这个拷贝操作标记出错的块数。即 在原数据文件中未标记出错,但在 拷贝 操作中 检测到 并标记 为出错 的块数 MEDIA_CORRUPT NUMBER 介质出错块的总数。例如,校验和 错的块被标记为介质错 LOGICALLY_CORRUPT NUMBER 逻辑出错块的总数。例如,对不可 恢复 的操作 应用重 做将标 记涉及 的块为逻辑错 BLOCKS NUMBER 以块计的数据文件拷贝的尺寸(也 是进行拷贝时的数据文件尺寸) BLOCK_SIZE NUMBER OLDEST_OFFLINE_ RANGE NUMBER 在这 个控制 文件拷 贝中最 旧的脱 机范围记录的 RECID。数据文件拷 贝为 0 COMPLETION_TIME DATE 拷贝完成时间 DALETED VARCHA2(3) YES/NO。如果设臵为 YES,则该 数据文件拷贝已经删除或重写 FILE# NUMBER 数据文件号(来自控制文件) STATUS VARCHAR2(7) ONLINE/OFFLINE(来自控 制文件) ERROR VARCHAR2(18) 如果数据文件标题读取和验 证成功,为 NULL 如果读失 败,则其余的列为 NULL。 如果验证失败,则其余的列 可能显示无效数据。如果存 208 209 V$DBFILE 此视 图 列 出 构 成 数 据库 的 所 有 数 据 文 件。 这 个 视 图 是 为 了历 史 兼 容 而 保 存 的 。建 议 使 用 V$DATAFILE。更多的信息,请参阅 V$DATAFILE。 列 数据类型 说明 FILE# NAME NUMBER VARCHAR2 文件标识符 文件名 V$DBLINK 这 个 视 图 描 述 在 V$DBLINK 上 发 布 查 询 的 会 话 打 开 的 所 有 数 据 库 连 接 ( 带 IN_TRANSACTION=YES 的连接)。这些数据库连接在关闭前必须提交或退回。 在错误,则在数据文件可以 恢复或使用前,必须利用备 份进行修复 FORMAT NUMBER 指出标题块的格式。可能的 值为 6、7、8、0 6 表示 Oracle 版本 6 7 表示 Oracle 版本 7 8 表示 Oracle 版本 8 0 表示此格式不能确定(例 如,标题不能读出) RECOVER VARCHAR2(3) 文件需要介质恢复 FUZZY VARCHAR2(3) 文件是模糊的 YES/NO CREATION_CHANGE# NUMBER 数据文件创建的更改号 CREATION_TIME DATE 数据文件创建的时间戳 TABLESPACE_NAME VARCHAR2(30) 表空间名 TS# NUMBER 表空间号 RFILE# NUMBER 表空间的相关数据文件号 RESETLOGS_ CHANGE# NUMBER 重臵日志更改号 CHECKPOINT_ CHANGE# NUMBER 数据文件检查点更改号 CHECKPOINT_ TIME DATE 数据文件检查点时间戳 CHECKPOINT_COUNT NUMBER 数据文件检查点计数 BYTES NUMBER 以字节计的当前数据文件尺 寸 BLOCKS NUMBER 以块计的当前数据文件的文 件尺寸 NAME VARCHAR2(512) 数据文件名 210 列 数据类型 说明 V$DB_OBJECT_CACHE 这个视图显示高速缓存在数据库高速缓存中的数据库对象。这些对象包括表、索引、簇、同义词定 义、PL/SQL 过程和程序包、触发器。 列 数据类型 说明 DBLINK VARCHAR2(128) 数据连接名 OWNER_ID NUMBER 数据库连接 UID 的拥有者 LOGED_ON VARCHAR2(3) 当前数据库连接是否登录 HETEROGENEOUS VARCHAR2(3) 数据库连接是否异构 PROTOCOL VARCHAR2(6) 数据库连接的通讯协议 OPEN_CURSORS NUMBER 此数据库连接是否存在打开 的游标 IN_TRANSACTION NUMBER 此数据库连接当前是否处于 事务处理中 UPDATE_SENT VARCHAR2(3) 数据库连接上是否曾经有过 更新 COMMIT_STRENGTH NUMBER 数据库连接上的事务处理的 提交点强度 OWNER VARCHAR2 对象的拥有者 NAME VARCHAR2 对象名 DBLINK VARCHAR2 数据库连接名 NAMESPACE VARCHAR2 对象 的库 高速 缓 存名 称空 间: TABLE/PROCEDURE、BODY、 TIGGER、INDEX、 CLUSTER、OBJECT TYPE VARCHAR2 对象 类型: INDEX、 TABLE、 CLUSTER 、 VIEW 、 SET 、 SYNONYM 、 SEQUENCE 、 PROCEDURE 、 FUNCTION 、 PACKAGE、PACKAGE BODY、 TIGGER、CLASS、OBJECT、 USER、DBLINK HARARLE_MEM NUMBER 对象消耗的共享缓冲池中共享内 存量 LOADS NUMBER 对象被装载的次数。在使某个对 象无效时也增加这个计数 EXECUTIONS NUMBER 不使用。为了看到实际的执行计 数,请参阅 V$SQLAREA LOCKS NUMBER 当前锁住这个对象的用户数 PINS NUMBER 当前固定这个对象的用户数 211 212 KEPT VARCHAR2 YES 或者 NO,有赖于这个对象 是 否 已 经 利 用 PL/SQL 过 程 DBMS_SHARED_POOL.KEEP ―保持‖(永久固定在内存中) V$DB_PIPES 这个视图显示当前位于数据库中的管道 列 数据类型 说明 OWNER_ID NAME TYPE PIPE_SIZE NUMBER VARCHAR2(1000) VARCHAR2(2) NUMBER 如果这是一个私有管理,则 为拥有者 ID;否则为 NULL 管道名;例如,scott.pipe PUBLIC 或 PRIVATE 管道占用的内存量 V$DELETED_OBJECT 这个视图显示来自控制文件的删除归档日志、数据文件拷贝和备份片的相关信息。这个视图的唯一 用途是优化恢复目录的重新同步操作。在删除归档日志、数据文件拷贝或备份片时,相应的记录标 记为删除。 列 数据类型 说明 RECID STAMP TYPE OBJECT_RECID OBJECT_STAMP NUMBER NUMBER VARCHAR2(13) NUMBER NUMBER 删除对象记录的 ID 删除对象的记录时间戳 ARCHIVED LOG/DATAFILE COPY/ BACKUPPIECE。删除对 象的类型 删除对象的记录 ID 删除对象的记录时间戳 V$DISPATCHER 这个视图提供有关调度程序进程的信息 列 数据类型 说明 NAME VARCHAR2 调度进程名 NETWORK VARCHAR2 调度程序的网络地址 PADDR RAW(4) 进程地址 STATUS VARCHAR2 调 度 程 序 状 态 : WAIT( 空 闲 ) 、 SEND( 发 送 一 个 连 接 消 息 ) 、 RECEIVE( 接 收 一 个 消 息 ) 、 CONNECT( 建 立 一 个 连 接 ) 、 DISCONNECT(处 理断 开请求 )、 BREAK ( 处 理 断 开 ) 、 OUTBOUND(建立出站连接) ACCEPT VARCHAR2 这个调度程序是否接受新的连接: 213 V$DISPATCHER_RATE 这个视图提供调度程序进程的速率统计数据 列 数据类型 说明 YES、NO MESSAGES NUMBER 此调度程序处理的消息数目 BYTES NUMBER 此调度程序处理的消息大小、以字 节计 BREAKS NUMBER 这个连接中发生的断开数目 OWNED NUMBER 这个调度程序拥有的虚电路数目 CREATED NUMBER 这个调度程序创建的虚电路数目 IDLE NUMBER 这个调度程序的总空闲时间,以百 分之一秒计 BUSY NUMBER 这个调度程序的总繁忙时间,以百 分之一秒计 LISTENER NUMBER 此调 度程序 从监听 程序收 到的最 近 Oracle 错误数目 CONF_INDX NUMBER 这 个 调 度 程 序 使 用 的 MTS_DISPATCHERS 配臵的基于 零的索引 NAME VARCHAR2 调度进程名 PADDR RAW(4) 进程地址 CUR_LOOP_RATE NUMBER 循环事件的当前速率 CUR_EVENT_RATE NUMBER 事件的当前速率 CUR_EVENTS._PER_LOOP NUMBER 每个循环的当前事件 CUR_MSG_RATE NUMBER 消息的当前速率 CUR_SVR_BYTE_RATE NUMBER 服务器缓冲区当前速率 CUR_SVR_BYTE_PER_BUF NUMBER 服务器当前字节速率 CUR_CLT_BUF_RATE NUMBER 客户机缓冲区当前速率 CUR_CLT_BYTE_RATE NUMBER 客户机缓冲区当前字节速率 CUR_CLT_BYTE_PER_BUF NUMBER 客户机每个缓冲区当前字节 CUR_BUF_RATE NUMBER 缓冲区当前速率 CUR_BYTE_RATE NUMBER 当前字节速率 CUR_BYTE_PER_BUF NUMBER 每个缓冲区当前字节 CUR_IN_CONNECT_RATE NUMBER 当前入站连接 CUR_OUT_CONNECT_RATE NUMBER 当前出站连接 CUR_RECONNECT_RATE NUMBER 连接迟和复用的当前连接 MAX_LOOP_RATE NUMBER 循环事件的最大速率 MAX_EVENT_RATE NUMBER 事件的最大速率 MAX_EVENTS_PER_LOOP NUMBER 每个循环的最大事件数 MAX_MSG_RATE NUMBER 消息的最大速率 MAX_SRV_BUF_RATE NUMBER 服务器缓冲区最大速率 214 MAX_SRV_BYTE_RATE NUMBER 服务器最大字节速率 MAX_SRV_BYTE_PER_BUF NUMBER 服务器的每个缓冲区最大字节数 MAX_CLT_BUF_RATE NUMBER 客户机缓冲区最大速率 MAX_CLT_BYTE_RATE NUMBER 客户机最大字节速率 MAX_CLT_BYTE_PER_BUF NUMBER 客户机的每个缓冲区最大字节数 MAX_BUF_RATE NUMBER 缓冲区最大速率 MAX_BYTE_RATE NUMBER 最大字节速率 MAX_BYTE_PER_BUF NUMBER 每个缓冲区最大字节数 MAX_IN_CONNECT_RATE NUMBER 入站连接的最大数 MAX_OUT_CONNECT_RATE NUMBER 出站连接的最大数 MAX_RECONNECT_RATE NUMBER 连接池和复用的最大连接数 AVG_LOOP_RATE NUMBER 循环事件的平均速率 AVG_EVENT_RATE NUMBER 循环事件的平均速率 AVG_EVENTS_PER_LOOP NUMBER 每个循环的平均事件数 AVG_MSG_RATE NUMBER 消息的平均速率 AVG_SVR_BUF_RATE NUMBER 服务器缓冲区平均速率 AVG_SVR_BYTE_RATE NUMBER 服务器的平均字节速率 AVG_SVR_BYTE_PER_BUF NUMBER 服务器每个缓冲区的平均字节数 AVG_CLT_BUF_RATE NUMBER 客户机缓冲区平均速率 AVG_CLT_BYTE_RATE NUMBER 客户机平均字节速率 AVG_CLT_BYTE_PER_BUF NUMBER 客户机每个缓冲区平均字节数 AVG_BUF_RATE NUMBER 缓冲区平均速率 AVG_BYTE_RATE NUMBER 平均速率字节速率 AVG_BYTE_PER_BUF NUMBER 每个缓冲区平均字节数 AVG_IN_CONNECT_RATE NUMBER 平均入站连接数 AVG_OUT_CONNECT_RATE NUMBER 平均出站连接数 AVG_RECONNECT_RATE NUMBER 连接池和复用的平均重连接数 NUM_LOOPS_TRACKED NUMBER 跟踪循环的数目 NUM_MSG_TRACKED NUMBER 跟踪消息的数目 NUM_SRV_BUF_TRACKED NUMBER 跟踪服务器的缓冲区数目 NUM_CLT_BUF_TRACKED NUMBER 跟踪客户机的缓冲区数目 NUM_BUF_TRACKED NUMBER 跟踪缓冲区的数目 NUM_IN_CONNECT_RATE NUMBER 跟踪入站连接的数目 NUM_OUT_CONNECT_RATE NUMBER 跟踪出站连接的数目 NUM_RECONNECT_RATE NUMBER 跟踪重连接的数目 SCALE_LOOPS NUMBER 循环的规模 SCALE_MSG NUMBER 消息的规模 SCALE_SRV_BUF NUMBER 服务器缓冲区的规模 SCALE_CLT_BUF NUMBER 客户机缓冲区的规模 SCALE_BUF NUMBER 缓冲区的规模 SCALE_IN_CONNECT NUMBER 入站连接的规模 SCALE_OUT_CONNECT NUMBER 出站连接的规模 SCALE_RECONNECT NUMBER 重连接的规模 215 V$DLM_ALL_LOCKS 这是一个并行服务器视图。此视图列出锁管理程序当前已知的被其他锁阻塞或阻塞其他锁的所有锁 的信息。 列 数据类型 说明 LOCKP RAW(4) 锁指针 GRANT_LEVEL VARCHAR2(9) 锁的授权级别 REQUEST_LEVEL VARCHAR2(9) 锁的请求级别 RESOURCE_NAME1 VARCHAR2(30) 锁的资源名 RESOURCE_NAME2 VARCHAR2(30) 锁的资源名 PID NUMBER 拥有锁的进程标识 TRANSACTION_ID0 NUMBER 锁所属的事务处理标识符的 低 4 个字节 TRANSACTION_ID1 NUMBER 锁所属的事务处理标识符的 高 4 个字节 GROUP_ID NUMBER 锁的组标识符 OPEN_OPT_ DEADLOCK NUMBER 如果设臵 DAADLOCK 开放 选项,为 1,否则为 0 OPEN_OPT_ PERSISTENT NUMBER 如 果设臵 PERSISTENT 开 放选项,为 1,否则为 0 OPEN_OPT_ PROCESS_OWNED NUMBER 如 果 设 臵 PROCESS_OWNED 开放选 项, 为 1,否则为 0 OPEN_OPT_NO_XID NUMBER 如 果设 臵 NO_XID 开 放选 项,为 1,否则为 0 CONVERT_OPT_ GETVALUE NUMBER 如果设臵 GETVALUE 转换 选项,为 1,否则为 0 CONVERT_OPT_ PUTVALUE NUMBER 如果设臵 PUTVALUE 转换 选项,为 1,否则为 0 CONVERT_OPT_ NOVALUE NUMBER 如果设臵 NOVALUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ DUBVALUE NUMBER 如果设臵 DUBVALUE 转换 选项,为否则为 0 CONVERT_OPT_ NOQUEUE NUMBER 如果设臵 NOQUEUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ EXPRESS NUMBER 如果设臵 EXPRESS 转换选 项,为 1,否则为 0 CONVERT_OPT_ NODEADLOCKWAIT NUMBER 如 果 设 臵 NODEADLOCKWAIT 转换 选项,为 1,否则为 0 WHICH_QUEUE NUMBER 锁 当前所 在的 队列。 NULL 队列为 0;GRANTED 队列 为 1;CONVER 队列为 2 216 V$DLM_CONVERT_LOCAL 这个视图显示本地锁转换操作所用的时间。 列 数据类型 说明 INST_ID CONVERT_TYPE AVERAGE_CONVERT _TIME CONVERT_COUNT NUMBER VARCHAR2(64) NUMBER NUMBER 实例的 ID 列在表 B-3 中的转换类型 每种锁操作类型的平均转换 时间,以百分之一秒计 锁转换操作的数目 V$DLM_CONVERT_REMOTE V$DLM_CONVERT_REMOTE 显示远程锁转换操作的时间(见表 B-3)。 列 数据类型 说明 INST_ID CONVERT_TYPE AVERAGE_CONVERT_ TIME CONVERT_COUNT NUMBER VARCHAR2(64) NUMBER NUMBER 实例的 ID 列在表 B-3 中的转换类型 每种锁操作类型的平均转换 时间,以百分之一秒计 操作的次数 表 B-3 CONVERT_TYPE 列的值 转换类型 说 明 LOCKSTATE NUMBER 拥有者所看到的锁的状态 AST_EVENT0 NUMBER 最后一个 AST 事件 OWNER_NODE NUMBER 如果这个锁请求被其他锁请 求阻塞,为否则为 0 BLOCKER NUMBER 如果这个锁正阻塞其他锁, 为 1,否则为 0 NULL->SS NULL 模式到子共享模式 NULL->SX NULL 模式到共享互斥模式 NULL->S NULL 模式到共享模式 NULL->SSX NULL 模式到子共享互斥模式 SS->SX NULL 模式到互斥模式 SS->S 子共享模式到共享互斥模式 SS->SSX 子共享模式到子共享互斥模式 SS->X 子共享模式到互斥模式 SX->S 共享互斥模式到共享模式 SX-SSX 共享模式到子共享互斥模式 SX->X 共享互斥模式到互斥模式 S->SX 共享模式到共享互斥模式 S-SSX 共享模式到子共享互斥模式 217 S->X SSX->X 共享模式到互斥模式 共享互斥模式到互斥模式 V$DLM_LATCH 这个视图已经废弃。关于 DCM 栓锁的性能统计数据请参阅 V$LATCH。 V$DLM_LOCKS 这是一个并行服务器视图。此视图列出锁管理程序当前已知的被其他锁阻塞或阻塞其他锁的信息。 列 数据类型 说明 LOCKP RAW(4) 锁指针 GRANT_LEVEL VARCHAR2(9) 锁的授权级别 REQUEST_LEVEL VARCHAR2(9) 锁的请求级别 RESOURCE_NAME1 VARCHAR2(30) 锁的资源名 RESOURCE_NAME2 VARCHAR2(30) 锁的资源名 PID NUMBER 拥有锁的进程标识符 TRANSACTION_ID0 NUMBER 锁所属的事务处理标识符的低 4 个字节 TRANSACTION_ID1 NUMBER 锁所属的事务处理标识符的高 4 个字节 GROUP_ID NUMBER 锁的组标识符 OPEN_OPT_ DEADLOCK NUMBER 如果设臵 DAADLOCK 开放选 项,为 1,否则为 0 OPEN_OPT_ PERSISTENT NUMBER 如果设臵 PERSISTENT 开放 选项,为 1,否则为 0 OPEN_OPT_ PROCESS_OWNED NUMBER 如果设臵 PROCESS_OWNED 开放选项,为 1,否则为 0 OPEN_OPT_NO_XID NUMBER 如果设臵 NO_XID 开放选项, 为 1,否则为 0 CONVERT_OPT_ GETVALUE NUMBER 如果设臵 GETVALUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ PUTVALUE NUMBER 如果设臵 PUTVALUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ NOVALUE NUMBER 如果设臵 NOVALUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ DUBVALUE NUMBER 如果设臵 DUBVALUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ NOQUEUE NUMBER 如果设臵 NOQUEUE 转换选 项,为 1,否则为 0 CONVERT_OPT_ EXPRESS NUMBER 如果设臵 EXPRESS 转换选项, 为 1,否则为 0 NODEADLOCKWAIT NUMBER 如 果 设 臵 NODEADLOCKWAIT 转换选 项,为 1,否则为 0 218 V$DLM_MISC 这个视图显示其他 DLM 统计数据 列 数据类型 说明 STATISTIC# NAME VALUE NUMBER VARCHAR2(64) NUMBER 数据统计号 统计数据名 与统计数据有关的值 V$DLM_RESS 这是一个并行服务器视图。它显示锁管理器当前所知的所有资源的信息。 列 数据类型 说明 NODEADLOCKBLOCK NUMBER 如 果 设 臵 NODEADLOCKBLOCK 转换 选项,为 1,否则为 0 WHICH_QUEUE NUMBER 锁当前所在的队列。NULL 队 列为 0;GRANTED 队列为 1; CONVER 队列为 2 LOCKSTATE VARCHAR2(64) 拥有者所看到的锁的状态 AST_EVENT0 NUMBER 最后一个 AST 事件 OWNER_NODE NUMBER 节点标识符 BLOCKED NUMBER 如果这个锁请求被其他锁请求 阻塞,为 1,否则为 0 BLOCKER NUMBER 如果这个锁正阻塞其他锁,为 1,否则为 0 RESP RAW(4) 资源指针 RESOURCE_NAME VARCHAR2(30) 锁的十六进制表示的资源名 ON_CONVERT_Q NUMBER 如果在转换队列上,为 1,否 则为 0 ON_GRANT_Q NUMBER 如果在授权队列上,为 1,否 则为 0 PERSISTENT_RES NUMBER 如果是一个永久资源,为 1, 否则为 0 RDOMAIN_NAME VARCHAR2(25) 恢复域名 RDOMAINP RAW(4) 恢复指针域名 MASTER_NODE NUMBER 主机节点 ID NEXT_CVT_LEVEL VARCHAR2(9) 全局转换队列上转换的下一 个锁的级别 VALUE_BLK_STATE VARCHAR2(32) 值块的状态 VALUE_BLK VARCHAR2(64) 值块的前 64 字节 219 V$ENABLEDPRIVS 220 此视图显示启用的权限。这些权限可在表 SYS.SYSTEM_PRIVIELEGES_MAP 中找到。 列 数据类型 说明 PRIV_NUMBER NUMBER 启用权限的数字标识符 V$ENQUEUE_LOCK 这个视图显示排队状态对象拥有的所有锁。这个视图中的列等同于 V$LOCK 视图中的列。更多的 信息,请参阅 V$LOCK。 列 数据类型 说明 V$EVENT_NAME 这个视图包含等待事件的有关信息 列 数据类型 说明 ADDR RAW(4) 锁状态对象的地址 KADDR RAW(4) 锁地址 SID NUMBER 拥有或获得此锁的会话的标识符 TYPE VARCHAR2(2) 锁的类型。可能具有锁的用户和 系统类型列表 ID1 NUMBER 锁标识符#1(依赖于类型) ID2 NUMBER 锁标识符#2(依赖于类型) LMODE NUMBER 会话拥有此锁的锁模式: 没有 空(NULL) 行子共享模式(SS) 行共享互斥模式(SX) 共享模式(S) 行子共享互斥模式 互斥模式(X) REQUEST NUMBER 进程请求锁的模式: 没有 空(NULL) 行子共享模式(SS) 行共享互斥模式(SX) 共享模式(S) 行子共享互斥模式 互斥模式(X) CTIME NUMBER 授予当前模式以来的时间 BLOCK NUMBER 此锁正阻塞其他锁 EVENT# NUMBER 等待事件号 NAME VARCHAR2(64) 等待事件名 PARAMETER1 VARCHAR2(64) 等待事件的第一个参数的说明 221 PARAMETER2 PARAMETER3 VARCHAR2(64) VARCHAR2(64) 等待事件的第二个参数的说明 等待事件的第三个参数的说明 V$EXECUTE 这个视图并行执行的有关信息。 列 数据类型 说明 V$FALSE_PING 这个视图是一个并行服务器视图。这个视图显示可能正处于假 ping 的缓冲区。即,那些由相同的 锁随其他 ping 了 10 次以上的缓冲区保护的 ping 了 10 次以上的缓冲区。标识为假 ping 的缓冲区可 重新映射到 GC-FILE_TO_LOCKS 以减少锁冲突。 列 数据类型 说明 PID NUMBER 会话 ID DEPTH NUMBER 深度 FUCTION VARCHAR2(10) 会话系列号 TYPE VARCHAR2(7) 计划表中的 OBJECT_NODE 的 名称 NVALS NUMBER OBJECT_NODE 占用的时间 VAL1 NUMBER 编号 1 的值 VAL2 NUMBER 编号 2 的值 SEQH NUMBER 一个序列 SEQL NUMBER 一个序列 FILE# NUMBER 文件标识号(为找到文件名,可查 询 DB_DATA_FILES 或 V$DBFILES) BLOCKS# NUMBER 块号 STATUS VARCHAR2(1) 块状态: FREE=当前不用 XCUR=互斥的 CR=一致的读取 READ=从磁盘读 MREC=处于介质恢复模式 IREC=处于实例恢复模式 XNC NUMBER 由于与其他实例争用导致的 PCM 锁变换数。此例已作废,但为了历 史兼容性仍然保留 FORCED_READS NUMBER 锁必须从磁盘重新读取的次数,重 新读 取是由 于其他 实例通 过在锁 模式中请求此锁上的 PCM 锁,强 迫它退出了此实例的高速缓存 FORCED_WRITES NUMBER 由于 这个实 例已经 搞坏了 这个块 并且 其他实 例已经 以冲突 的模式 222 223 V$FAST_START_SERVERS 此视图提供执行并行事务处理恢复的恢复从服务器的有关信息 列 数据类型 说明 STATE VARCHAR2(11) 服 务 器 状 态 : IDLE 或 UNDOBLOCKSDONE PID NUMBER NUMBER RECOVERING 至今所做的分配工作的百分比 进程 ID V$FAST_START_TRANSACTIONS 这个视图包含与 Oracle 正在恢复的事务处理的进展有关的信息。 列 数据类型 说明 请求了这个锁上的 PCM 锁,而导 致 DBWR 必须将这个块写入磁盘 的次数 NAME VARCHAR2(30) 包含该块的数据库对象名 PARTITION_NAME VARCHAR2 非分区对象为 NULL KIND VARCHAR2(12) 数据库对象名。请参阅表 B-1 OWNER# NUMBER 拥有者号 LOCK_ELEMENT_ ADDR RAW(4) 包含覆 盖缓冲区的 PCM 锁的地 址。如果不止一个缓冲区具有相同 的地址,则相同的 PCM 锁也覆盖 这些缓冲区 LOCK_ELEMENT_ NAME NUMBER 包含覆 盖缓冲区的 PCM 锁的地 址。如果不止一个缓冲区具有相同 的地址,则相同的 PCM 锁也覆盖 这些缓冲区 LOCK_ELEMENT_ CLASS NUMBER 锁元素类 224 USN NUMBER 事务处理的撤消段号 SLT NUMBER 在回退段内的位臵 SEQ NUMBER 位臵的具体编号 STATE VARCHAR2(16) 事务处理的状态可能是 UNDOBLOCKSDONE NUMBER 这个 事务处 理中完 成的撤 消块数 目 TO BE RECOVERED 、 RECOVERING UNDOBLOCKSTOTAL NUMBER 需要恢复的撤消块总数 PID NUMBER 被分配给当前服务器的 ID CPUTIME NUMBER 进行恢复的已用时间,以秒计 PARENTUSN NUMBER PDML 中父级事务处理的撤消段 225 PARENTSLT PARENTSEQ NUMBER NUMBER 号 PDML 中父级事务处理的位臵 PDML 中父级事务处理的序列号 V$FILE_PING 这个视图显示每个数据文件 ping 的块号。这个信息又可以用来确定对现有数据文件的访问模式和 确定从数据文件块到 PCM 锁的新映射。 列 数据类型 说明 FILE_NUMBER NUMBER 数据文件号 FREQUENCY NUMBER 频率 X_2_NULL NUMBER 文件中所有块从互斥到空的锁转换数 X_2_NULL_FORCED^| _WRITE NUMBER 指定文件中的块由于互斥到空的转换而 强制写的数目 X_2_NULL_FORCED^| _STALE NUMBER 文件中的块由于互斥到空的转换而使其 STATE 的次数 X_2_S NUMBER 文件中所有块从互斥到共享的锁转换数 X_2_S_FORCED_ NUMBER 指定文件中的块由于互斥到共享的转换 而强制写的数目 X_2_SSX NUMBER 文件中所有块从互斥到共享互斥的锁转 换数 X_2_SSX_FORCED^| _WRITE NUMBER 指定文件中的块由于互斥到子共享互斥 的转换而强制写的数目 S_2_NULL NUMBER 文件中所有块从共享到空的锁转换数 S_2_NULL_FORCED^| _STALE NUMBER 文件中的块由于共享到空的转换而使其 STATE 的次数 SS_2_NULL NUMBER 文件中所有块从子共享到空的锁转换数 SS_2_RLS NUMBER 释放 的 PCM 锁 子共 享锁 的数 目 。在 Oracle 8.1 中为 0 WRB NUMBER 实例接收到一个跨实例调用这个文件的 写入单个缓冲区的次数 WRB_FORECD_ WRITE NUMBER 由于跨实例调用这个文件而写入单个缓 冲区导致写入的块数 RBR NUMBER 实例接收到一个跨实例调用这个文件的 重用块范围的次数 RBR_FORECD_ WRITE NUMBER 由于跨实例调用这个文件而重用块范围 的块数 RBR_FORECD_ STATE NUMBER 由于跨实例调用而重用块范围而使得这 个文件中的块 STATE 的数目 CBR NUMBER 实例接收到一个跨实例调用这个文件的 检查点块范围的次数 CBR_FORECD_ WRITE NUMBER 由于跨实例调用这个文件的检查点跨范 围所导致的写入这个文件中块的数目 226 V$FILESTAT 这个视图包含文件读写统计数据的有关信息 列 数据类型 说明 NULL_2_X NUMBER 指定文件中所有块从空到互斥的锁转换 数 S_2_X NUMBER 指定文件中所有块从共享到互斥的锁转 换数 SSX_2_X NUMBER 指定文件中所有块从子共享互斥到的互 斥的锁转换数 NULL_2_S NUMBER 指定文件中所有块从空到共享的锁转换 数转换数 NULL_2_SS NUMBER 指定文件中所有块从空到子共享的锁 OP_2_SS NUMBER 打开的 PCM 锁子共享锁的数目。Oracle 8.1 中为 0 FILE# NUMBER 文件号 PHYRDS NUMBER 所在行的物理读的次数 PHYWRTS NUMBER DBWR 要求写入的次数 PHYBLKRD NUMBER 物理块读取的次数 PHYBLKWRT NUMBER 写入磁盘的块数目;如果所有写入都是单 块,这个数与 PHYWRTS 相同 READTIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为完成读取所用的时间(以百 分之一秒计);如果该参数为 FALSE,则 为 0 WRITETIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为完成写入所用的时间(以百 分之一秒计);如果该参数为 FALSE,则 为 0 AVGIOTIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为 I/O 所用的时间(以百分之 一秒计);如果该参数为 FALSE,则为 0 LSTIOTIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE ,则为完成最后 I/O 所用的时间(以 百分之一秒计);如果该参数为 FALSE, 则为 0 LSTIOTIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE ,则为完成最后 I/O 所用的时间(以 百分之一秒计);如果该参数为 FALSE, 则为 0 MINIOTIM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为单个 I/O 所用的最小时间(以 百分之一秒计);如果该参数为 FALSE, 则为 0 227 228 V$FIXED_TABLE 这个视图显示数据库中所有动态性能表、视图和导出表。某些 V$表(如 V$ROLLNAME) 涉及实际的表,因此没有列出。 列 数据类型 说明 NAME OBJECT_ID TYPE TABLE_NUM VARCHAR2(30) NUMBER VARCHAR2(5) NUMBER 对象名 固定对象的标识符 对象类型:TABLE、VIEW 如果动态性能表为 TABLE 类型,则 为标识它的号码 V$FIXED_VIEW_DEFINITION 这个视图包含所有固定视图(以 V$起头的视图)的定义。应该仔细使用这些表。Oracle 试图保持 这些固定视图在各个版本中都相同,但还是可能会更改某些固定视图的定义而不作通知。可通过利 用动态性能表的索引列来使用这些定义以优化查询。 列 数据类型 说明 VIEW_NAME VIEW_DEFINTION VARCHAR2(30) VARCHAR2(2000) 固定视图名 固定视图定义 V$GLOBAL_BLOCKED_LOCKS 这个视图显示全局阻塞的锁。 列 数据类型 说明 MAXIOWTM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为完成单个写入所用的最大时 间(以 百分之一秒 计);如果该 参数为 FALSE,则为 0 MAXIORTM NUMBER 如 果 TIMED_STATISTICS 参 数 为 TRUE,则为完成单个读取所用的最大时 间(以 百分之一秒 计);如果该 参数为 FALSE,则为 0 229 ADDR RAW(4) 锁状态对象的地址(raw) KADDR RAW(4) 锁地址(raw) SID NUMBER 拥有或获得此锁的会话的标识 符(number) TYPE VARCHAR2(2) 资源类型(number) ID1 NUMBER 资源标识符#1(number) ID2 NUMBER 资源标识符#2(number) LMODE NUMBER 拥有的锁模式(number) REQUEST NUMBER 请求的锁模式(number) CTIME NUMBER 授予当前模式以来的时间 230 V$GLOBAL_TRANSACTION 这个视图显示当前归档的全局事务处理的有关信息 列 数据类型 说明 FORMATID GLOBALID BRANCHID BRANCHES REFCOUNT PREPARECOUNT STATE FLAGS COUPLING NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR2(18) NUMBER VARCHAR2(15) 全局事务处理的格式标识符 全局事务处理的标识符 全局事务处理的分支标识符 全局事务处理的分支总数 这个全局事务处理的同级数,必须 与分支数相同 已经 预备的 全局事 务处理 的分支 数 全局事务处理的分支状态 状态的数字表示 分支是松散耦合还是紧密耦合 V$HS_AGENT 这个视图确定当前运行在某个主机上的 HS 代理,每个代理进程采用一行。 列 数据类型 说明 AGENT_ID NUMBER 连接到代理使用的 Net8 会话标 MACHINE PROCESS PROGRAM OSUSER STARTTIME AGENT_TYPE FDS_CLASS_ID FDS_INST_ID NUMBER NUMBER NUMBER NUMBER DATE NUMBER NUMBER NUMBER 识符(listernet.ora SID) 操作系统机器名 代理的操作系统进程标识符 代理的程序名 操作系统用户 启动时间 代理的类型 外部数据存储类的 ID 外部数据存储的实例名 V$HS_SESSION 这个视图确定当前为 Oracle 服务器打开的 HS 会话组。 列 数据类型 说明 HS_SESSION_ID NUMBER 唯一的 HS 会话标识符 AGENT_ID NUMBER V$HS_AGENT 的外部键 SID NUMBER 用户 会话 标识 符( V$SESSION 的外键) DB_LINK VARCHAR2(128) 用来访问代理的服务器数据库连 接名,NULL 表示没有使用数据 库连接(即,在使用外部过程时) 231 V$INDEXED_FIXED_COLUMN 这个视图显示索引的动态性能表(X$表)中的列。X$表可以更改而不用通告。仅将此视图用于编 写针对固定视图(V$视图)的查询更为有效。 列 数据类型 说明 V$INSTANCE 这个视图显示当前实例的状态。这个版本的 V$INSTANCE 与前面版本的的 V$INSTANCE 不兼容。 列 数据类型 说明 DB_LINK_OWNER NUMBER DB_LINK 中的数据库连接的拥 有者 STARTTIME DATE 连接的启动时间 TABLE_NAME VARCHAR2(30) 索引的动态性能表的名称 INDEX_NUMBER NUMBER 区分某个列属于哪个索引的 编号 COLUMN_NAME VARCHAR2(30) 被索引的列号 COLUMN_POSITION NUMBER 索引键中列的位臵(这主要 与多列索引有关) 232 INSTANCE_NUMBER NUMBER 实例注册所用的实例号。对应与 INSTANCE _NUMBER 初始 化 参 数 。 可 参 阅 INSTANCE_NUMBER INSTANCE_NAME VARCHAR2(16) 实例名 HOST_NAME VARCHAR2(64) 主机名 VERSION VARCHAR2(17) RDBMS 版本 STARTUP_TIME DATE 实例启动的时间 STATUS VARCHAR2(7) STARTED/MOUNTED/OPEN STARTED:启动安装后或数据库 关闭后,OPEN:启动后或数据 库打开后 PARALLEL VARCHAR2(3) YES/NO:是否并行服务器模式 THREAD# NUMBER 实例打开的重做线程 ARCHIVER VARCHAR2(7) STOPPED/STARTED/FAILED; FAILED 表示归档程序最后一次 归档某个日志失败,但在 5 分钟 内将重试 LOG_SWITCH_WAIT VARCHAR2(11) 正 在 等 待 ARCHIVELOG/CLEAR LOG/ CHECKPOINT 事件日志切换。 注 意: 如 果 ALTER SYSTEM SWITCH LOGFILE 挂起,但在 233 V$INSTANCE_RECOVERY 这个视图用来监控实现恢复读取的用户特定限制的机制。 列 数据类型 说明 V$LATCH 这个视图列出非父级栓锁的统计数据和父级栓锁的汇总统计数据。即,父级栓锁的统计数据包括 从其每个子级栓锁开始的数据。 说明:列 SLEEP5、SLEEP6、…SLEEP11 是为了与以前的 Oracle 班本兼容而给出的。不累加这 些列的数据。 列 数据类型 说明 当前联机重做日志中还有空间则 这个值为 NULL LOGINS VARCHAR2(10) ALLOWED/RESTRICTED SHUTDOWN_PENDING VARCHAR2(3) YES/NO DATABASE_STATUS VARCHAR2(17) 数据库的状态 RECOVERY_ EXTIMATED_IOS NUMBER 根据快速启动检查点在内存中的值,估 计在恢复中将处理的块数 ACTUAL_REDO _BLOCKS NUMBER 恢复所需的重做块的当前实际数目 TARGET_REDO _BLOCKS NUMBER 恢复必须处理的重做块的当前目标数 目 LOG_FILE_SIZE _REDO_BLKS NUMBER 保证在检查点完成前不进行日志切换 所需重做块的最大数目 LOG_CHKPT_TIME OUT_READ_BLKS NUMBER 恢 复 中 为 满 足 LOG_CHECKPOINT_TIMEOUT 需 要处理的重做块数 LOG_CHKPT_ INTERVAL_READ_ BLKS NUMBER 恢 复 中 为 满 足 LOG_CHECKPOINT_INTERVAL 需 要处理的重做块数 FAST_START_IO_ TARGET_REDO_ BLKS NUMBER 恢 复 中 为 满 足 FAST_START_IO_ TARGET 需要处理的重做块数 234 ADDR RAW(4) 栓锁对象的地址 LATCH# NUMBER 栓锁编号 LEVEL# NUMBER 栓锁级别 NEME VARCHAR2(64) 栓锁名 GETS NUMBER 等待获得的次数 MISSES NUMBER 等待 获得但 第一次 尝试失 败的次 数 SLEEPS NUMBER 在需要等待时睡眠的次数 IMMEDIATE_GETS NUMBER 不用等待获得的次数 IMMEDIATE_MISSES NUMBER 不等待获得失败的次数 235 WAITERS_WOKEN WAITS_HOLDING _LATCH SPIN_GETS SLEEP1 SLEEP2 SLEEP3 SLEEP4 SLEEP5 SLEEP6 SLEEP7 SLEEP8 SLEEP9 SLEEP10 SLEEP11 NUMBER NMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 等待被唤醒多少次 拥有 一个不 同的栓 锁时等 待的次 数 第一次尝试失败,但在以后的轮次 中成功 睡眠 1 次的等待 睡眠 2 次的等待 睡眠 3 次的等待 睡眠 4 次的等待 睡眠 5 次的等待 睡眠 6 次的等待 睡眠 7 次的等待 睡眠 8 次的等待 睡眠 9 次的等待 睡眠 10 次的等待 睡眠 11 次的等待 V$LATCHHOLDER 这个视图包含当前栓锁拥有者的相关信息。 列 数据类型 说明 V$LATCHNAME 这个视图包含确定 V$LATCH 视图中给出栓锁的栓锁名的有关信息。V$LATCHNAME 的行与 V$LATCH 的行具有一一对应的关系。更多的信息,可参阅 V$LATCH。 列 数据类型 说明 LATCH# NAME NUMBER VARCHAR2(64) 栓锁号 栓锁名 V$LATCH_CHILDREN 这个视图包含子级栓锁的有关统计数据。这个视图包含了 V$LATCH 的所有列再加上 CHILD# 列。 注意,如果子级栓锁的 LATCH# 列互相配合,则子级栓锁具有相同的父级栓锁。更多信息,可参 阅 V$LATCH。 列 数据类型 说明 PID NUMBER 拥有栓锁的进程标识符 SID NUMBER 拥有栓锁的会话标识符 LADDR LAW(4) 栓锁地址 NAME VARCHAR2 被拥有的栓锁名称 ADDR RAW(4) 栓锁对象的地址 LATCH# NUMBER 父级栓锁的栓锁号 CHILD# NUMBER LATCH#中给出的父级栓锁的子级 236 LEVEL# NAME GETS MISSES SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES WAITERS_WORKEN WAITS_HOLDING _LATCH SPIN_GETS SLEEPn NUMBER VARCHAR2(64) NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 栓锁编号 栓锁级别 栓锁名 等待获得的次数 等待 获得但 第一次 尝试失 败的次 数 在需要等待时睡眠的次数 不用等待获得的次数 不等待获得失败的次数 等待被唤醒多少次 拥有 一个不 同的栓 锁时等 待的次 数 第一次尝试失败,但在以后的轮次 中成功 睡眠 n 次的等待 V$LATCH_MISSES 这个视图包含试图获得一个栓锁但失败的有关信息 列 数据类型 说明 V$LATCH_PARENT 这个视图包含父级栓锁的有关统计数据。此视图的列与 V$LATCH。 V$LIBRARYCACHE 这个视图包含库高速缓存性能与活动的有关统计数据。 V$LATCH 的列相同。更多的信息请参阅 列 数据类型 说明 PARENT_NAME VARCHAR2 父级栓锁名 WHERE VARCHAR2 试图获得此栓锁的位臵 NWFAIL_COUNT NUMBER 不等待获取栓锁失败的次数 SLEEP_COUNT NUMBER 导致睡眠的获取尝试的次数 WTR_SLP_COUNT NUMBER LONGHOLD_COUNT NUMBER NAMESPACE VARCHAR2(15) 名称空间 GETS NUMBER 为这 个名称 空间中 的对象 请求某 个锁的次数 GETHITS NUMBER 在内 存中找 到某个 对象的 句柄的 次数 GETHITRATIO NUMBER GETHITS 与 GETS 的比例 PINS NUMBER 为这个名称空间中的对象请求 PIN 的次数 PINHITS NUMBER 在内 存中找 到相应 库对象 的所有 237 V$LICENSE 这个视图包含有关认证限制的信息 列 数据类型 说明 V$LOADCSTAT 这个视图包含执行一个直接装载中搜集的 SQL*Loader 的统计数据。这些统计数据应用到整个装载 过程。对于这个表的任何 SELECT 都会产生―无行返回‖,因为不能同时装载数据又同时进行查询。 列 数据类型 说明 V$LOADTSTAT 列 数据类型 说明 LOADED NUMBER 装载的记录数 元数据片的次数 PINHITRATIO NUMBER PINHITS 与 PINS 的比例 RELOADS NUMBER 自某个对象句柄建立以来,进行该 对象的非第一次 PIN 的任意 PIN, 这样需要将对象从磁盘装入 INVALIDATIONS NUMBER 此名 称空间 中的对 象由于 相关的 对象被修改而无效的总次数 DLM_LOCK_ REQUESTS NUMBER GET 请求锁定实例锁的次数 DLM_PIN_REQUESTS NUMBER PIN 请求锁定实例锁的次数 DLM_PIN_RELEASES NUMBER 发布请求 PIN 实例锁的次数 DLM_INVALIDATION _REQUESTS NUMBER GET 请求无效实例锁的次数 DLM_INVALIDATIONS NUMBER 从其他实例接收到的无效 ping 的 次数 SESSIONS_MAX NUMBER 实例允许的并发用户会话的 最大数目 SESSIONS_WARNING NUMBER 实例的并发用户会话的警告 数目 SESSIONS_CURRENT NUMBER 并发用户会话的最大数目 SESSIONS_HIGHWATER NUMBER 实例启动以来的并发用户会 话的最大数目 USERS_MAX NUMBER 数据库允许的指定用户最大 数目 READ NUMBER 读取记录数 REJECTED NUMBER 拒绝的记录数 TDISCARD NUMBER 装载中废弃的记录数 NDISCARD NUMBER 从当前文件中废弃的记录数 238 V$LOCK 这个视图列出 Oracle 服务器当前拥有的锁以及未完成的锁或栓锁请求。 列 数据类型 说明 表 B-4 中用户类型上的锁可由用户应用程序获得。任何阻塞其他进程的进程都可能拥有这些锁中的 某一个。 表 B-4 用户类型 用户类型 说明 TM TX DML 排队 事务处理排队 REJECTED NUMBER 拒绝的记录数 FAILWHEN NUMBER 不能满足任意 WHEN 子句的记录 数 ALLNULL NUMBER 全空从而不装载的记录数 LEFT2SKIP NUMBER 在连续装载中要跳过的记录数 PTNLOADED NUMBER 装载 PTN 的记录数 ADDR RAW(4) 锁状态对象的地址 KADDR RAW(4) 锁地址 SID NUMBER 拥有或获得此锁的会话的标识符 TYPE VARCHAR2(2) 锁的类型。可能具有锁的用户和系 统类型列表,请参阅表 B-4 和 B-5 ID1 NUMBER 锁标识符#1(依赖于类型) ID2 NUMBER 锁标识符#2(依赖于类型) LMODE NUMBER 会话拥有此锁的锁模式: 没有 空(NULL) 行子共享模式(SS) 行共享互斥模式(SX) 共享模式(S) 行子共享互斥模式 互斥模式(X) REQUEST NUMBER 进程请求锁的锁模式: 没有 空(NULL) 行子共享模式(SS) 行共享互斥模式(SX) 共享模式(S) 行子共享互斥模式 互斥模式(X) CTME NUMBER 授予当前模式以来的时间 BLOCK NUMBER 此锁正阻塞其他锁 239 UL 用户提供 表 B-5 中系统类型上的锁被拥有的时间计短。 表 B-5 类型列的值:系统类型 用户类型 说明 BL 缓冲区散列表实例 CF 控制文件模式全局排队 CI 交叉实例功能调用实例 CU 游标绑定 DF 数据文件实例 DL 直接装载程序并行索引创建 DM 安装/启动数据库主/副实例 DR 分布式恢复进程 DX 分布式事务处理项 FS 文件集 HW 特定段上的空间管理 IN 实例号 IR 实例恢复串行全局队列 IS 实例状态 IV 库高速缓存无效实例 JQ 作业队列 KK 线程突跳 LA…LP 库高速缓存锁实例锁(A…P=名称空间) MM 安装定义全局队列 MR 介质恢复 NA…NZ 库高速缓存固定实例(A…Z=名称空间) PF 口令文件 PI,PS 并行操作 PR 进程启动 QA…QZ 行高速缓存实例(A…Z=高速缓存) RT 重做线程全局队列 SC 系统提交编号实例 SM SMON SN 序列号实例 SQ 序列号队列 SS 排序段 ST 空间事务处理队列 SV 序列号值 TA 一般队列 TS 临时段队列(ID2=0) TS 新块分配队列(ID2=1) TT 临时表队列 UN 用户名 240 US WL 撤消段 DDL 开始写重做日时局实例 表 B-5 中系统类型上的锁被拥有的时间计短。 V$LOCK_ACTIVITY 这是一个并行服务器视图。这个视图显示当前实例的 DLM 锁的操作。每行对应锁操作的一种类型。 列 数据类型 说明 V$LOCK_ELEMENT 这是一个并行服务器视图。每个 PCM 锁在此视图中有一项,这项由缓冲区高速缓存使用。对应一 个锁元素的 PCM 锁的名称为{‗BL‘,索引,类}。 列 数据类型 说明 FROM_VAL VARCHAR2(4) PCM 锁初始状态:NUL;S;X; SSX TO_VAL VARCHAR2(4) PCM 锁初始状态:NULL;S;X; SSX ACTION_VAL VARCHAR2(51) 锁转换说明 读取的锁缓冲区 写入的锁缓冲区 使缓冲区 CR(非写入)读锁为写 使缓冲区 CR(写灰缓冲区) 将写锁降为读(写灰缓冲区) 写事务处理表/撤消块 事务处理表/撤消块(写灰缓区) 使事务处理表/撤消块可共享 重新配备事务处理表写机制 COUNTER NUMBER 执行的锁操作次数 LOCK_ELEMENT_ADDR RAW(4) 包含覆盖缓冲区的 PCM 锁的锁 元素地址。如果不止一个缓冲区 具有相同的地址,则这些缓冲区 由相同的 PCM 覆盖。 LOCK_ELEMENT_NAME NUMBER 包含覆盖缓冲区的 PCM 锁的锁 的名称。 INDX NUMBER 平台专用的锁管理程序标识符 CLASS NUMBER 平台专用的锁管理程序标识符 MODE_HELD NUMBER 与平台相关的拥有锁模式的值; 一般:3=共享;5=互斥 BLOCK_COUNT NUMBER PCM 锁覆盖的块数 RELEASING NUMBER 如果 PCM 降级,则非零 ACQUIRING NUMBER 如果 PCM 升级,则非零 INVALID NUMBER 如果 PCM 锁无效,则非零(系 241 242 FLAGS NUMBER 统失败后,锁可能变得无效) LE 的进程级标志 V$LOCKED_OBJECT 这个视图列出系统上的每个事务处理所获得的所有锁。 列 数据类型 说明 V$LOCKS_WITH_COLLISIONS 这是一个并行服务器视图。利用这个视图来查找保护多个缓冲区的锁,其中每个曾经被强制写或强 制读至少 10 次。很可能这些缓冲区由于被映射到相同的锁而经历过假的固定。 列 数据类型 说明 LOCK_ELEMENT_ADDR NUMBER 撤消的段号 V$LOG 此视图包含来自控制文件的日志文件信息 列 数据类型 说明 表 B-6 给出日志 STATUS 列中的值。 表 B-6 STATUS 列的值 STATUS 含 义 XIDUSN NUMBER 撤消的段号 XIDSLOT NUMBER 位臵号 XIDSQN NUMBER 序列号 OBJECT_ID NUMBER 被锁定的对象 ID SESSION_ID NUMBER 会话 ID ORACLE_USERNAME VARCHAR2(30) Oracle 用户名 OS_USER_NAME VARCHAR2(15) OS 用户名 PROCESS VARCHAR2(9) OS 进程名 LOCKED_MODE NUMBER 锁模式 GROUP# NUMBER 日志组号 THREAD# NUMBER 日志线程号 SEQUENCE# NUMBER 日志序列号 BYTES NUMBER 以字节表示的日志大小 MEMBERS NUMBER 日志组中成员数 ARCHIVED VARCHAR2 归档状态:YES、NO STATUS VARCHAR2(16) 日志状态。STATUS 列可具有 表-6 中的值 FIRST_CHANGE# NUMBER 日志中的最低 SCN FIRST_TIME DATE 日志中的第一个 SCN 的时间 243 V$LOGFILE 这个视图包含重做日志文件的有关信息 列 数据类型 说明 GROUP# STATUS MEMBER NUMBER VARCHAR2 VARCHAR2 重做日志组标识符号 这 个 日 志 成 员 的 状 态 : INVALID( 文 件 不 可 访 问)、STATE(文件的内容不完 整)、DELETED (文件不再使 用)、或空(文件正在使用) 重做日志成员名 V$LOGHIST 这个视图包含控制文件中的日志历史信息。此视图是为历史兼容而保留的。建议使用 C$LOG_HISTORY。更多的信息,请参阅 V$LOG_HISTORY。 列 数据类型 说明 THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIME SWITCH_CHANGE# NUMBER NUMBER NUMBER DATE NUMBER 日志线程号 日志序列号 日志中的最低 SCN 日志中的第一个 SCN 时间 发生日志切换的 SCN;比日 志 中最高 SCN 更高的那个 SCN UNUSED 表示联机重做日志文件从来没有写入过。如 果不是当前重做日志,这是在刚增加的或刚 好在 RESETLOGS 后的重做日志的状态 CURRENT 指出这是当前重做日志。这表示此重做日志 是活动的。这个重做日志打开或关闭的 ACTIVE 表示此日志是活动的,但不是当前日志。需 要进行崩溃恢复。有可能正用于块恢复。它 能够或不能够归档 CLEARING 表示此日志在 ALTER DATABASE CLEAR LOGFILE 命令后正在作为空日志重建。在 清除此日志后,这个状态变为 UNUSED CLEARINGCURRENT 表示当前日志正由于关闭线程而被清除。如 果在切换中存在某种故障(如写新日志标题 的 I/O 错误),此日志可保持这种状态 INACTIVE 表示实例恢复不再需要这个日志。它可能在 用于介质恢复。它有可能归档,也有可能不 归档 244 V$LOGMNR_CONTENTS 这个视图包含日志历史信息。 列 数据类型 说明 SCN NUMBER(15) 系统更改号 TIMESTAMP DATE 时间戳 THREAD# NUMBER 线程号 LOG_ID NUMBER 日志 ID XIDUSN NUMBER 事务处理 ID 撤消段号 XIDSLOT NUMBER 事务处理 ID 位臵号 XIDSQN NUMBER 事务处理 ID 日志序列号 RBASQN NUMBER RBA 日志序列号 RBABLK NUMBER RBA 块号 RBABYTE NUMBER RBA 字节偏移量 UBAFIL NUMBER UBA 文件号 UBABLK NUMBER UBA 块号 UBAREC NUMBER UBA 记录索引 UNASQN NUMBER UBA 撤消块序列号 ABS_FILE# NUMBER 数据块绝对文件号 REL_FILE# NUMBER 数据块相对文件号 DATD_BLK# NUMBER 数据块号 DATA_OBJ# NUMBER 数据块对象号 DATA_DOBJ# NUMBER 数据块数据对象号 SEG_OWENR VARCHAR2(30) 段拥有者 SEG_NAME VARCHAR2(81) 段名 SEG_TYPE NUMBER 段类型 TABLE_SPACE_NAME VARCHAR2(30) 段的表空间名 ROW_ID VARCHAR2(18) 行 ID SESSION# NUMBER 会话号 SERIAL# NUMBER 系列号 USER_NAME VARCHAR2(30) 用户名 SESSION_INFO VARCHAR2(4000) 会话信息 ROLLBACK NUMBER 回退请求 OPERATION VARCHAR2(30) 操作 SQL_REDO VARCHAR2(4000) SQL 重做 SQL_UNDO VARCHAR2(4000) SQL 撤消 RS_ID VARCHAR2(30) 记录集 ID SSN NUMBER SQL 序列号 CSF NUMBER 连续 SQL 标志 INFO VARCHAR2(32) 通知信息 STATUS VARCHAR2(16) 状态 245 V$LOGMNR_DICTIONARY 这个视图包含日志历史信息 列 数据类型 说明 V$LOGMNR_LOGS 此视图包含日志信息。 列 数据类型 说明 TIMESTAMP DATE 建立字典的时间 DB_ID NUMBER 数据库 ID DB_NAME VARCHAR2(8) 数据库名 FILENAME VARCHAR2(513) 字典文件名 DICTIONARY_SCN NUMBER 建立字典时的系统更改号 RESET_SCN NUMBER 建立字典时重臵日志 SCN RESET_SCN_TIME NUMBER 获得重臵日志 SCN 建立字典时 的时间 ENABLED_THREAD _MAP RAW(16) 建立字典时当前启用线程的位图 INFO VARCHAR2(32) 信息/状态消息 BAD_DATE 表示 字典文件的 SCN 与日志文件的 SCN 范围不匹配 STATUS NUMBER NULL 表示日志文件列表的有效 字典文件。非 NULL 值表示进一 步 的 信 息 作 为 文 本 串 包 含 在 INFO 列中 LOG_ID NUMBER 指出日志文件。这个字段的值也在 V$LOG 的 LOG_ID 列中给出 FILENAME VARCHAR2(512) 文件名 LOW_TIME DATE 文件中任意记录的最早日期 HIGL_TIME DATE 文件中任意记录的最近日期 DB_ID NUMBER 数据库 ID DB_NAME VARCHAR2(8) 数据库名 RESET_SCN NUMBER 建立日志时重臵日志 SCN RESET_SCN_TIME NUMBER 获得重臵日志 SCN 建立字典时的 时间 THREAD_ID NUMBER 线程号 THREAD_SQN NUMBER 线程序列号 LOW_SCN NUMBER 切换入日志时分配的 SCN NEXT_SCN NUMBER 此日志后的 SCN。下一日志的低 SCN INFO VARCHAR2(32) 通 知 性 的 消 息 。 将 246 V$LOGMNR_PARAMETERS 此视图包含日志信息。 列 数据类型 说明 START_DATE END_DATE START_SCN END_SCN INFO STATUS DATE DATE NUMBER NUMBER VARCHAR2(32) NUMBER 开始搜索的日期 开始搜索的日期 开始搜索的系统更改号 结束搜索的系统更改号 通知性的消息。 状态。NULL 值表示一个参数有效。 非 NULL 值表示进一步的信息为 一个文本串包含在 INFO 列中。 V$LOG_HISTORY 这个视图包含来自控制文件的历史信息。 列 数据类型 说明 V$MLS_PARAMETERS 这是一个 Trusted Oracle 服务器视图,它列出 Trusted Oracle 服务器专用的安装参数。 V$MTS 这个视图包含优化多线程服务器的信息。 列 数据类型 说明 MISSING_LOGFILE 值分配给其 中所 需日志 文件从 日志文 件列表 中遗漏的行项 STATUS NUMBER 表示日志文件的状态。NULL 值表 示一个有效的日志文件;非 NULL 值表 示进一 步的信 息为一 个文本 串包含在 INFO 列中。如果所有日 志文件成功地加到文件列表,状态 值为 NULL THREAD# NUMBER 归档日志线程号 SEQUENCE# NUMBER 归档日志序列号 FIRST_TIME NUMBER 归档日志中的第一项的时间(最低 SCN)。此列以前名为 TIME FIRST_CHANGE# NUMBER 日志中最低 SCN。这个列以前名为 FIRST_CHANGE# NEXT_CHANGE# NUMBER 日志中最高 SCN。这个列以前名为 HOGH_CHANGE# RECID NUMBER 控制文件记录 ID STAMP NUMBER 控制文件记录时间戳 247 V$MYSTAT 这个视图包含当前会话的统计数据。 列 数据类型 说明 V$NLS_PARAMETERS 这个视图包含 NLS 参数的当前值。 列 数据类型 说明 PARAMETERS VARCHAR2 参数名: NLS_CALENDAR NLS_CHARACTERSET NLS_CURRECY NLS_DATE_LANGUAGE NLS_ISO_CURRENCY NLS_NUMEC_CHARACTERS NLS_SORT NLS_TERRITORY NLS_UNION_CURRENCY NLS_NCHAR_CHARACTERSET NLS_COMP VALUE VARCHAR2 NLS 参数值 V$NLS_VALID_VALUES 此视图列出 NLS 参数的所有有效值。 MAXIMUN_CONNECTIONS NUMBER 每个调度 程序可支持的 连接的最大 数目。这个值在启动时用 Net8 常量 和其他端口专用的信息确定,或者可 利用 MTS_DISPATCHERS 参数降 低 SERVERS_STARTED NUMBER 自实例启 动以来启动的 多线程服务 器总数(但不包括启动中的启动的那 些多线程服务器) SERVERS_TERMINATED NUMBER 自实例启 动以来一次运 行的服务器 最 大 数 目 。 如 果 这 个 值 达 到 了 MTS_MAX_SERVERS 初始化参数 设 臵 的 值 , 则 应 考 虑 提 高 MTS_SERVERS 的值。更详细的信 息,请参阅 MTS_SERVERS SID NUMBER 当前会话的 ID STATISTIC NUMBER 统计数据号 VALUE NUMBER 统计数据值 248 列 数据类型 说明 V$OBJECT_DEPENDENCY 这个视图可用来确定当前共享池中装入的程序包、过程或游标依赖于什么样的对象。例如,它可与 V$SESSION 和 V$SQL 一道用来确定某个用户当前正在执行的 SQL 语句中所用的表。更详细的信 息,请参阅 V$SESSION 和 V$SQL。 列 数据类型 说明 V$OBSOLETE_PARAMETER 此视图列出作废的参数。如果任何值为真,则应该检查为什么会这样。 列 数据类型 说明 NAME ISSPECIFIED VARCHAR2(64) VARCHAR2(5) 参数名 在配臵文件中是否给出此参 数 V$OFFLINE_RANGE 这个视图显示控制文件中的数据文件中脱机信息。注意,每个数据文件的最后脱机范围保存在 DATAFILE 记录中。详细内容,请参阅 V$DATAFILE。 脱机范围是在数据文件的表空间 ALTER 为 OFFLINE NORMAL 或 READ ONLY,然后再 ALTER 为 ONLINE 或读写时建立的。注意,如果数据文件自身 ALTER 为 OFFLINE 或如果相应 表空间 ALTER 为 OFFLINE IMMEDIATE 时,不建立脱机范围。 列 数据类型 说明 PARAMETERS VARCHAR2(64) 参数名: VALUE VARCHAR2(64) LANGUATE ; SORT ; TERRITORY CHARACTERSETNLS 参 数 值 FROM_ADDRESS RAW(4) 当前装入共享池中的过程、程序包 或游标的地址 FROM_HASH NUMBER 当前装入共享池中的过程、程序包 或游标的散列值 TO_OWNER VARCHAR2(64) 所依赖对象的拥有者 TO_NAME VARCHAR2(1000) 所依赖的对象名 TO_ADDRESS RAW(4) 所依赖对象的地址。这些地址可用 来在 V$DB_OBJECT_CACHE 中 查找关于对象的更多信息 TO_HASH NUMBER 所依赖对象的散列值。这些值可用 来在 V$DB_OBJECT_CACHE 中 查找关于对象的更多信息 TO_TYPE NUMBER 所依赖对象的类型 249 RECID STAMP FILE# OFFLINE_CHANGE# ONLINE_CHANGE# ONLINE_TIME NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 记录 ID 记录时间戳 数据文件号 脱机时的 SCN 联机时的 SCN 脱机 SCN 的时间 V$OPEN_CURSOR 这个视图列出每个用户会话当前已经打开和分析的游标。 列 数据类型 说明 V$OPTION 这个视图列出与 Oracle 一道安装的选项。 列 数据类型 说明 PARAMETERS VALUE VARCHAR2(64) VARCHAR2(64) 选项名 LANGUATE TERRITORY ; SORT ; CHARACTERSETNLS 参数值 V$PARALLEL_DEGREE_LIMIT_MTH 这个视图显示所有可用的并行度限额资源分配方法。 列 数据类型 说明 NAME VARCHAR2(40) 并行度限客资源分配方法的名称 V$PARAMETER 这个视图列出初始化参数的有关信息。 列 数据类型 说明 NUM NUMBER 参数名 SADDR RAW 会话地址 SID NUMBER 会话标识符 USER_NAME VARCHAR2(30) 登录到会话的用户 ADDRESS RAW 与 HASH--VALUE 一道用来 唯 一 地 标 识 会 话 中 执 行 的 SQL 语句 HASH_VALUES NUMBER 与 ADDRESS 一道用来唯一 地标识会话中执行的 SQL 语 句 SQL_TEXT VARCHAR2(60) 解析进入打开的游标的 SQL 语句的前 60 个字符 250 V$PING 这是一个并行服务器视图。此视图等同于 V$CACHE 视图,但只显示至少 ping 了一次的块。这个 视图包含来自当前实例的 SGA 中每个块的块标题的与特定数据库对象有关的信息。更多的信息, 请参阅 V$CACHE。 列 数据类型 说明 NAME VARCHAR2(64) 参数名 参数类型;1=布尔;2=串;3=整数 VALUE VARCHAR2(512) 参数值 ISDEFAULT VARCHAR2(9) 参数是否为缺省值 ISSES_MODIFIABLE VARCHAR2(5) TRUE= 参 数 可 用 ALTER SEEEION 更改。FALSE=参数不能 用 ALTER SESSION 更改 ISSYS_MODIFIABLE VARCHAR2(9) IMMEDIATE= 参 数 可 用 ALTER SYSTEM 更改。DEFERRED=参数 不能用 ALTER SYSTEM 更改 ISMODEIFIED VARCHAR2(10) 指出参数 怎样更改。如 果执行一条 ALTER SESSION , 则 值 将 被 MODIFIED。如果执行一条 ALTER SYSTEM (它将导致所有当前登录会 话的值被修改),则参数值将为 SYS_ MODEIFIED ISADJUSTED VARCHAR2(5) 指出关系 型数据库系统 调整输入值 即,参数值应该为素数,但用户输入 一个非素数,因此关系型数据库系统 将该值调整为下一个素数) DESCRIPTION VARCHAR2(64) 有关此参数的一个描述性的注释 FILE# NUMBER 数据文件标识号(为找到文件名, 可 查 询 DB_DATA_FILES 或 V$DBFILES) BLOCKS# NUMBER 块号 CLASS# NUMBER 类号 STATUS VARCHAR2(1) 块状态: FREE=当前不用 XCUR=互斥 SCUR=当前共享 READ=从磁盘读 MREC=处于介质恢复模式 IREC=处于实例恢复模式 XNC NUMBER 由于与其他实例争用导致的空锁 变换的 PCM 锁转换数。此例已 作废,但为了历史兼容性仍然保 留 251 252 V$PQ_SESSTAT 这个视图列出并行查询的统计数据。 注意 :这个视图在以后的版本中将作废。 列 数据类型 说明 STATISTIC LAST_QUERY SESSION_TOTAL VARCHAR2(30) NUMBER NUMBER 统计数据名,请参阅表 B-7 最后处理的统计数据的值 整个会话按时到达此点的统计值 已经为这个视图定义了表 B-7 中的统计数据(固定行)。在执行了查询或 DML 操作后,可利用从 此视图得出的信息查看所利用的从进程,以及会话与系统的其他信息。 表 B-7 STATISTIC 列中的统计数据名 统计数据(固定行) 说明 FORCED_READS NUMBER 锁必须从磁盘重新读取的次数, 重新读取是由于其他实例通过在 锁模式中请求此锁上的 PCM 锁, 强迫它退出了此实例的高速缓存 FORCED_WRITES NUMBER 由于这个实例已经搞坏了这个块 并且其他实例已经以冲突的模式 请求了这个锁上的 PCM 锁,而 导致 DBWR 必须将这个块写入 磁盘的次数 NAME VARCHAR2(30) 包含该块的数据库对象名 PARTITION_NAME VARCHAR2 非分区对象为 NULL KIND VARCHAR2(12) 数据库对象名。请参阅表 B-1 OWNER# NUMBER 拥有者号 LOCK_ELEMENT_ ADDR RAW(4) 包含覆盖缓冲区的 PCM 锁的地 址。如果不止一个缓冲区具有相 同的地址,则相同的 PCM 锁也 覆盖这些缓冲区 LOCK_ELEMENT_ NAME NUMBER 包含覆盖缓冲区的 PCM 锁的锁 名。 253 Queries Parallelized 并行运行的查询数 DML Parallelized 并行运行的 DML 操作数 DFO Trees 执行 DFO 树的数目 Server Threads 使用的并行服务器的总数 Allocation Height 每个实例服务器请求数 Allocation Width 实例的请求数 Local Msgs Sent 发送的本地(实例内)消息数 Distr Msgs Sent 发送的远程(实例间)消息数 Local Msgs Recv‘d 接收到的本地(实例内)消息数 254 Distr Msgs Recv‘d 接收到的远程(实例间)消息数 V$PQ_SLAVE 这个视图列出实例上每个活动并行执行服务器的统计数据。 说明 此视图在未来的版本中将被一个称为 V$PX_PROCESS 的视图替代或废弃。 列 数据类型 说明 V$PQ_SYSSTAT 这个查询列出并行查询的系统统计数据。 说明 此视图在未来的版本中将被一个称为 V$PX_PROCESS_SYSSTAT 的视图替代或废弃。 列 数据类型 说明 STATISTIC VARCHAR2(30) 统计数据名,请参阅表 B-8 VALUE NUMBER 统计数据的值 为这个视图定义了表 B-8 中的统计数据(固定行)。在执行一个查询或 DML 操作后,可利用从 V$PQ_SYSSTAT 得出的信息查看所利用的从进程数,以及其他系统信息。 表 B-8 STATISTIC 列中的统计数据名 统计数据(固定行) 说明 Server Busy Server Idle 这个实例上当前忙的服务器数 这个实例上当前空闲的服务器数 SLAVE_NAME VARCHAR2(4) 并行执行的服务器名 STATUS VARCHAR2(4) 并行执行服务器的当前状态(BUSY 或 IDLE) SESSIONS NUMBER 使用过这 个并行执行服 务器的会话 数目 IDLE_TIME_CUR NUMBER 当前会话 中处理语句时 空闲所占的 时间总数 BUSY_TIME_CUR NUMBER 当前会话 中处理语句时 忙所占的时 间总数 CPU_SECS_CUR NUMBER 用在当前会话的 CPU 时间总数 MSGS_SENT_CUR NUMBER 处理当前 会话的语句时 发送的消息 数 MSGS_RCVD_CUR NUMBER 处理当前 会话的语句时 接收到的消 息数 IDLE_TIME_TOTAL NUMBER 此查询服务器空闲的时间总数 BUSY_TIME_TOTAL NUMBER 这个查询服务器激活的时间总数 CPU_SECS_TOTAL NUMBER 这 个 查 询 服 务 器 用 来 处 理 语 句 的 CPU 时间总数 MSG_SENT_TOTAL NUMBER 这个查询服务器发送的消息总数 MSG_RCVD_TOTAL NUMBER 这个查询服务器接收到的消息总数 255 V$PQ_TOSTAT 这个视图包含并行执行操作的统计数据。这些统计数据在查询完成后搜索,并且只在会话期间保留。 此视图显示利用每个并行执行服务器在执行数的每个步骤处理的行数。它可以帮助确定查询执行中 的扭曲问题。 说明 此视图在以后的版本中将被重新命名为 V$PX_TQSTAT。 列 数据类型 说明 V$PQ_PROCESS 这个 视 图包 含 当 前活 动 进 程的 有 关信 息 。 在 LATCHWAIT 列 表 示 进程 等 待某 个 栓 锁时 , LATCHSPIN 表示进程正在某个栓锁上循环,Oracle 进程在某个栓锁上等待前将在其上循环。 列 数据类型 说明 ADDR PID RAW(4) NUMBER 进程状态对象的地址 Oracle 进程标识符 Server Highwater 这个实例上参与>=1 等操作的活动服务器的 数目 Server Sessions 这个实例上所有服务器中执行的操作总数 Server Started 这个实例上启动的服务器总数 Server Shutdown 这个实例上关闭的服务器总数 Server Cleaned Up 这个实例上由于进程死亡而清除的服务器总 数 Queries Initiated 这个实例上启动的并行查询总数 DML Initiated 启动的并行 DML 操作的总数 DFO Trees 这个实例上执行的 DFO 树的总数 Local Msgs Sent 这个实例上发送的本地(实例内)消息总数 Distr Msgs Sent 这个实例上发送的远程(实例间)消息总数 DFO_NUMBER NUMBER 区分查询的数据流运算符(DFO) 树号 TQ_ID NUMBER 查询内的表队列 ID,它表示查询 执行树中两个 DFO 节点间的连 接 SERVER_TYPE ARCHAR2(10) 表队列中的角色:生成者/使用者 /管理员 NUM_ROWS NUMBER 生产/使用的行数 BYTES NUMBER 生产/使用的字节数 OPEN_TIME NUMBER 表队列保持打开的时间(秒) AVG_LATENCY NUMBER 表队列保持打开的时间(毫秒) WAITS NUMBER 退出队列时遇到的等待次数 TIMEOUTS NUMBER 等待一个消息时超时的次数 PROCESS VARCHAR2(10) 进程 ID INSTANCE NUMBER 实例 ID 256 V$PROXY_ARCHIVEDLOG 这个视图包含归档日志备份的说明,这是与一个称为 Prpxy Copy 的新功能一道采用的。每行表示 一个归档日志的备份。 列 数据类型 说明 SPID VARCHAR2 操作系统进程标识符 USERNAME VARCHAR2 操作系统进程用户名。来自网络 上的任意双任务,用户在用户名 上都附加有―-T‖ SERIAL# NUMBER 进程系列号 TERMINAL VARCHAR2 操作系统终端标识符 PROGRAM VARCHAR2 正在进行中的程序 BACKGROUND VARCHAR2 后台进程为 1;普通进程为 NULL LATCHWAIT VARCHAR2 进程正在等待的栓锁地址;如果 没有,为 NULL LATCHSPIN VARCHAR2 进程正在其上循环的栓锁地址; 如果没有,为 NULL RECID NUMBER 代理拷贝记录 ID STAMP NUMBER 代理拷贝记录时间戳 DEVICE_TYPE VARCHAR2(17) 拷贝驻留的设臵类型 HANDLE VARCHAR2(513) 代理拷贝句柄标识存储的拷 贝 COMMENTS VARCHAR2(81) 操作系统或存储子系统返回 的注释。这个值只是通知性 质的;不需要存储 MEDIA VARCHAR2(65) 拷贝驻留的介质名。这个值 只是通知性质的;不需要存 储 DELETE VARCHAR2(3) 如果设臵为 YES,指出拷贝 被删除,否则设臵为 NO THREAD# NUMBER 重做线程号 SEQUENCE# NUMBER 重做日志序列号 RESETLOGS_ CHANGE NUMBER 写入这个日志时的数据库重 臵日志更改号 RESETLOGS_ TIME DATE 写入这个日志时的数据库重 臵日志时间 FIRST_CHANGE# NUMBER 归档日志中的第一个更改号 FIRST_TIME DATE 第一个更改的时间 NEXT_CHANGE# NUMBER 下一个日志中的第一个更改 号 NEXT_TIME DATE 下一个更改的时间戳 BLOCKS NUMBER 以块表示的归档日志尺寸 257 BLOCK_SIZE COMPLETION_ TIME ELAPSED_ SECONDS NUMBER DATE NUMBER 重做日志块尺寸 完成时间 占用的秒数 V$PROXY_ DATAFILE 这个视图包含数据文件和控制文件的描述,这是与称为 Proxy Copy 的新功能一道采用的。每行表 示一个数据库文件的备份。 列 数据类型 说明 RECID NUMBER 代理拷贝记录 ID STAMP NUMBER 代理拷贝记录时间戳 DEVICE_TYPE VARCHAR2(17) 拷贝驻留的设臵类型 HANDLE VARCHAR2(513) 代理拷贝句柄标识存储的拷贝 COMMENTS VARCHAR2(81) 操作系统或存储子系统返回的注释。 这个值只是通知性质的;不需要存储 MEDIA VARCHAR2(65) 拷贝驻留的介质名。这个值只是通知 性质的;不需要存储 MEDIA_POOL NUMBER 拷 贝 驻 留 的 介 质 池 。 它 与 RecoveryManager;不需要存储 TAG VARCHAR2(32) 代理拷贝标志 DELETE VARCHAR2(3) 如果设臵为 YES,指出拷贝被删除, 否则设臵为 NO FILE# NUMBER 绝对数据文件号,如果这是一个控制 文件备份,则设臵为 0 CREATION_ CHANGE# NUMBER 数据文件创建更改号 CREATION_ TIME DATE 数据文件创建时间戳 RESETLOGS_ CHANGE# NUMBER 进行这个 拷贝时的数据 文件的重臵 日志更改号 RESETLOGS_ TIME DATE 进行这个 拷贝时的数据 文件的重臵 日志时间戳 CHECKPOINT_ CHANGE# NUMBER 进行拷贝 时的数据文件 检查点更改 号 CHECKPOINT_ TIME# DATE 进行拷贝 时的数据文件 检查点时间 戳 ABSOLUTE_ FUZZY_CHANGE NUMBER 如果知道的话,为这个文件的任意块 中最高更改 RECOVERY_ FUZZY_CHANGE NUMBER 介质恢复 写到这个文件 中的最高更 改 RECOVERY_ FUZZY_CHANGE DATE 介质恢复 写到这个文件 中的最高更 改时间戳 INCREMENTAL_ NUMBER 如果这个 备份为增量备 份策略的组 258 V$PWFILE_USERS 这个视图列出从口令文件中导出的授予 SYSDBA 和 SYSOPER 权限的用户。 列 数据类型 说明 USERNAME SYSDBA SYSOPER VARCHAR2(30) VARCHAR2(5) VARCHAR2(5) 包含在口令文件中的用户名 如果此列的值为 TURE,则该用户 可利用 SYSDBA 权限进行连接 如果此列的值为 TURE,则该用户 可利用 SYSOPER 权限进行连接 V$PX_PROCESS 此视图包含进行并行执行的会话的相关信息。 列 数据类型 说明 SERVER_NAME VARCHAR2(4) 并行服务器名(P000、P001 等) LEVEL 成部分,则为 0,否则为 NULL ONLINE_FUZZY VARCHAR2(3) YES/NO。如果设臵为 YES,则这个 拷贝是在崩溃或脱机后立即做的(或 者是在数 据库打开后不正 确地进行 的拷贝的拷贝)。恢复需要应用下一 个恢复标 记前的所有重做 以便使文 件一致 BACKUP_FUZZY VARCHAR2(3) YES/NO。如果设臵为 YES,则这是 一 个 利 用 BEGIN BACKUP/END BACKUP 技术进行的拷贝。注意: BEGIN BACKUP/END BACKUP 技 术是在创 建开放文件的代 理备份时 内部使用的。恢复需要应用 下一个 恢复标记 前的所有重做以 便使这个 备份文件一致 BLOCKS NUMBER 以块表示的拷贝尺寸(也是进行拷贝 时的数据文件尺寸) BLOCK_SIZE NUMBER 数据文件块尺寸 OLDEST_OFFLINE _RANGE NUMBER 如果文件号为 0(即,这是一个控制 文件备份),则最旧的的脱机范围的 RECID 记 录在 这 个控 制文 件 拷贝 中。数据文件拷贝为 0 START_TIME DATE 开始时间 COMPLETION_ TIME DATE 完成时间 ELAPSED_ SECONDS NUMBER 占用的秒数 259 V$PX_PROCESS_SYSSTAT 这个视图包含进行并行执行的会话的有关信息。 列 数据类型 说明 STATISTIC VALUE VARCHAR2(30) NUMBER 统计数据名 统计数据的值 STATISTIC 列的值列在表 B-9 中。 表 B-9 STATISTIC 列中的统计数据名 统计数据(固定行) 说明 STATUS VARCHAR2(9) 并行服务器的状态。或者为 In Use 或者为 Available PID NUMBER 进程标识符 SPID VARCHAR2(9) 操作系统进程 ID SID NUMBER 如果使用,为从服务器的会 话 ID SERIAL# NUMBER 如果使用,为从服务器的会 话系列号 260 Servers In Use 当前执行并行操作的 PX 服务器号 Servers Available 执行并行操作可用的 PX 服务器号 Servers Started 系统必须创建 PX 服务器进程的次数 Server Shutdown PX 服务器进程被关闭的次数。如果 PX 服务 器 进 程 最近 未 使 用 , 将 被 关 闭 。 它 保 持 Available 的 时 间 长 度 由 初 始 化 参 数 PARALLEL_SERVER_IDLE_TIME 控制。 如果这个值较大,应该考虑增加该参数。由 于免除了 PX 服务器进程的创建等待时间, 所以将会提高性能 Server HWM 并发 PX 服务器进程的最大数目。如果这个 数等于初始化参数 PARALLEL_MAX_SERVERS,应该考虑增 加该参数。这样能够增加吞吐量,特别是如 果系统利用不充分,并且 V$SYSSTAT 统计 数 据 ―Parallel operations downgraded to serial‖较大时更是如此 Servers Cleaned Up PMON 必须清除某个 PX 服务器的次数。它 只应该在并行操作不正常结束时进行。如果 这个数较大,建议查处其原因 Sessions 所有 PX 服务器建立的会话总数 Memory Chunks Allocs PX 服务器分配的大内存块数 Memory Chunks Freed 空闲的大内存块数 Memory Chunks Current 当前使用的大内存块数 Memory Chunks HWM 当前分配内存块的最大数目 261 Buffers Allocated Buffers Freed Buffers Current Buffers HWM 某个消息缓冲区被分配的次数 某个消息缓冲区被释放的次数 当前使用的消息缓冲区的数目 当前分配的消息缓冲区的最大数目 V$PX_SESSION 这个视图包含进行并行执行的会话的相关信息。 列 数据类型 说明 V$PX_SESSTAT 这个视图包含进行并行执行的会话的有关信息。 列 数据类型 说明 SADDR NUMBER 会话地址 SID NUMBER 会话标识符 SERIAL# NUMBER 会话序列号 QCSID NUMBER 并行协调程序的会话标识符 QCSERIAL# NUMBER 并行协调程序的会话序列号 QCINST_ID NUMBER 并行 协调程 序在其 上运行 的实例 号 SERVER_GROUP NUMBER 此并 行服务 器进程 所属的 服务器 的逻辑组 SERVER_SET NUMBER 此并 行服务 器进程 所属的 服务器 逻辑组合。单个服务器组至少有两 个服务器组合 SERVER# NUMBER 某个 并行服 务器进 程在一 个服务 器集合内的逻辑号 DEGREE NUMBER 服务器集合所用的并行度 REQ_DEGREE NUMBER 在发布语句且优先于任意资源、多 用户或负载平衡降低时,用户所请 求的并行度 SADDR RAW(4) 会话地址 SID NUMBER 会话标识符 SERIAL# NUMBER 会话序列号 QCSID NUMBER 并行协调程序的会话标识符 QCSERIAL# NUMBER 并行协调程序的会话序列号 QCINST_ID NUMBER 并行 协调程 序在其 上运行 的实例 号 SERVER_GROUP NUMBER 此并 行服务 器进程 所属的 服务器 的逻辑组 SERVER_SET NUMBER 此并 行服务 器进程 所属的 服务器 262 V$QUEUE 这个视图包含多线程消息队列的相关信息。 列 数据类型 说明 PADDR TYPE QUEUED WAIT TOTALQ RAW(4) VARCHAR2 NUMBER NUMBER NUMBER 拥有对列的进程地址 队列的类型:COMMON(由 服务器处理)、DISPATCHER 队列中的项数 此队列中所有项等待的总时 间。除以 TOTAL 得每项的平 均等待时间 曾经在队列中的项数 V$RECOVER_FILE 这个视图显示需要介质恢复的文件状态。 列 数据类型 说明 V$RECOVER_FILE_STATUS 这个视图对每个 RECOVER 命令的每个数据文件包含一行。此视图仅在 Oracle 进程进行恢复时包 含有用信息。在 Recovery Manager 引导服务器进程完成恢复时,仅 Recovery Manager 能够查看 这个视图中的相关信息。此视图对所有其他 Oracle 用户将是空的。 列 数据类型 说明 逻辑组合。单个服务器组至少有两 个服务器组合 SERVER# NUMBER 某个 并行服 务器进 程在一 个服务 器集合内的逻辑号 DEGREE NUMBER 服务器集合所用的并行度 REQ_DEGREE NUMBER 在发布语句且优先于任意资源、多 用户或负载平衡降低时,用户所请 求的并行度 STATISTIC# NUMBER 统计数据号(标识符) VALUE NUMBER 统计数据值 FILE# NUMBER 文件标识号 ONLINE VARCHAR2 联机状态:ONLINE、OFFLINE ERROR VARCHAR2 为什么此文件需要恢复:如果不知 道原因,则为 NULL,或者如果不 需要恢复,为 OFFLINE NORMAL CHANGE# NUMBER 恢复必须开始的 SCN TIME DATE 恢复必须开始的 SCN 时间 263 FILENUM NUMBER 被恢复的文件数 264 FILENAME STATUS VARCHAR2(257) VARCHAR2(13) 被恢复的数据文件名 恢复的状态。包含下列值: IN RECOVERY;CURRENT; NOT RECOVERED V$RECOVERY_LOG 这 个 视 图 列 出 关 于 需 要 完 成 介 质 恢 复 的 归 档 日 志 的 信 息 。 这 些 信 息 是 从 日 志 历 史 视 图 V$LOG_HOSTORY 中导出的。更多的信息,请参阅―V$LOG_HISTORY‖。 此视图仅在 Oracle 进程进行恢复时含有有用的信息。在 Recover Manager 引导服务器进程完成恢 复时,仅 Recovery Manager 能够查看这个视图中的相关信息。此视图对所有其他 Oracle 用户将是 空的。 列 数据类型 说明 THREAD SEQUENCE# TIME ARCHIVE_NAME NUMBER NUMBER VARCHAR2 VARCHAR2 归档日志的线程号 归档日志的序列号 日志中的第一项(最低 SCN)时间 在归档时,使用由 LOG_ARCHIVE_ FORMAT 指定 的命名约定的文件名 V$RECOVERY_PROGRESS 此视图可用来跟踪数据库恢复操作以保证它们不停止,并估计完成正在进行中的操作所需的时间。 此视图是 V$SESSION_LONGOPS 的子视图。 列 数据类型 说明 TYPE ITEM SOFAR TOTAL VARCHAR2(64) VARCHAR2(32) NUMBER NUMBER 正执行的恢复操作的类型 正被估计的项 迄今为止所完成的工作量 预期的总工作量 V$RECOVERY_STATUS 这个视图包含当前恢复进程的统计数据。此视图仅在 Oracle 进程恢复时含有有用信息。在 Recovery Manager 引导服务进程完成恢复时,仅 Recovery Manager 能够查看这个视图中的相关信息。此视 图对所有其他 Oracle 用户将是空的。 列 数据类型 说明 RECOVERY_ CHECKPOINT DATE 恢复发生的时间点。如果没有应 用日志,这是恢复开始的时间点 THREAD NUMBER 当前正处理的重做日志线程号 SEQUENCE_ NEEDED NUMBER 恢复进程所需的日志的序列号。 如果不需要日志,这个值为 0 SCN_NEEDED VARCHAR2(16) 恢复所需的日志的低 SCN。如果 不知道或不需要日志,这个值为 0 265 V$REQDIST 这个视图列出 MTS 调度程序请求时间除以 12 个时间块或时间范围的柱状图统计数据。时间范围作 为时间块的函数按指数增长。 列 数据类型 说明 BUCKET COUNT NUMBER NUMBER 时间块数:0-11;每个块的最大 时间为(4*2^N)100 秒 其完成总时间(包括等待时间) 落入这个范围的请求计数 V$RESERVED_WORDS 这个视图给出 PL/SQL 编译程序使用的所有关键字列表。这个视图帮助开发者判断某个词是否已被 用作语言中的关键字。 列 数据类型 说明 KEYWORD LENGTH VARCHAR2(64) NUMBER 关键字名 关键字长度 V$RESOURCE 此视图包含资源的名称和地址的信息。 列 数据类型 说明 ADDR TYPE ID1 ID2 RAW(4) NUMBER NUMBER NUMBER 资源对象的地址 资源类型。资源类型列在表 中 资源标识符#1 资源标识符#2 B-3 V$RESOURCE_LIMIT 这个视图显示某些系统资源的全局资源应用信息。可利用这个视图监控资源的使用情况,以便有必 TIME_EEEDED DATE 创建日志时间。如果不知道时间 或不需要日志,这个值为 88 年 1 月 1 日午夜 PREVIOUS_LOG_ NAME VARCHAR2(257) 日志的文件名 PREVIOUS_LOG_ STATUS VARCHAR2(13) 以前日志的状态。包含下列某个 值 : RELEASY ; WRONE NAME ; MISSING NAME ; UNNEEDED NAME;NONE REASON VARCHAR(13) 合理的恢复将控制返回到用户。 包含下列某个值:NEED LOG; LOG REUSED ; THREAD DISABLED 266 要时能够采取正确的措施。许多资源对应于表 B-10 所列出的初始化参数。 表 B-10 RESOURCE_LIMIT 列的值 资源名 相应的初始化参数 某些资源(如,那些 DML 所用的)有一个初始分配(软限制)和一个硬限制,从理论上说它是无 限 的 ( 但 实际 上 要 受 SGA 尺寸 的 限 制)。 在 SGA 预定 / 初 始 化 中, 在 SGA 中 为 资源 的 INITIAL_ALLOCATION 保留一个位臵,但如果超出这个分配,可分配额外的资源,最多可达 LIMIT_VALUE 指定的值。CURRENT_UTILIZATION 列指出的是否已经超过初始分配。在超出 初始分配值时,从共享池中分配额外需要的资源,在那里它们必须与其他资源竞争空间。 恰当选择 INITIAL_ALLOCATION 的值将避免空间争用。对于大多数资源,INITIAL_ ALLOCATION 和 LIMIT_VALUE 的值相同。超过 LIMIT_VALUE 的值将出现错误。 DISTRIBUTED_TRANSACTIONS DISTRIBUTED_TRANSACTIONS:关于这 个参数的更多信息,请参阅 DISTRIBUTED_ TRANSACTIONS DML_LOCKS DML_LOCKS:关于这个参数的更多信息, 请参阅 DML_LOCKS ENQUEUE_LOCKS 这 个 值 是 Oracle 计 算 出 来 的 。 可 使 用 V$ENQUEUE_LOCK 视图获得关于排队锁 的更多信息 ENQUEUE_RESOURCES ENQUEUE_RESOURCES:关于这个参数的 更多信息,请参阅 ENQUEUE_RESOURCES LM_PROCESSES LM_PROCS:关于这个参数的更多信息,请 参阅 LM_PROCS LM_RESOURCES LM_RESS:关于这个参数的更多信息,请参 阅 LM_RESS LM_LOCKS LM_LOCKS:关于这个参数的更多信息,请 参阅 LM_LOCKS MTS_MAX_SERVERS MTS_MAX_SERVERS:关于这个参数的更 多信息,请参阅 MTS_MAX_SERVERS PARALLEL_SLAVES PARALLEL_SLAVES:关于这个参数的更多 信息,请参阅 PARALLEL_SLAVES PROCESSES PROCESSES:关于这个参数的更多信息, 请参阅 PROCESSES ROLLBACK_SEGMENTS MAX_ ROLLBACK_SEGMENTS:关于这 个 参 数 的 更 多 信 息 , 请 参 阅 MAX_ ROLLBACK_ SEGMENTS SESSIONS SESSIONS:关于这个参数的更多信息,请 参阅 SESSIONTS SORT_SEGMENT_LOCKS 这个值由 Oracle 计算 TEMPORARY_LOCKS 这个值由 Oracle 计算 TRANSACTIONS TRANSACTIONS:关于这个参数的更多信 息,请参阅 TRANSACTIONS 267 列 数据类型 说明 V$ROLLNAME 这个视图列出所有联机回退段的名称。它只有在数据库打开时访问。 列 数据类型 说明 USN NAME NUMBER VARCHAR2 回退(撤消)段号 回退段名 V$ROLLSTAT 这个视图包含回退段统计数据。 列 数据类型 说明 RESOURCE_NAME VARCHAR2(30) 资源名(见表 B-10) CURRENT_@@@@@ NUMBER 当前在用的数目(资源、锁或进程) UTILIZATION NUMBER 资源类型。资源类型列在表 B-3 中 MAX_UTILIZATION NUMBER 自最 后一个 实例启 动以来 这个资 源的最大消耗 INITIAL_ ALLOCATION VARCHAR2(10) 初始分配。这个值将等于初始化参 数文件中为此资源指定的值。(无 限制分配为 UNLIMITED) LIMIT_VALUE VARCHAR2(10) 对资源和锁无限制。它可大于初始 分配值。(无限制为 UNLIMITED) USN NUMBER 回退段号 EXTENTS NUMBER 回退段中的区数 RSSIZE NUMBER 回退段以字节极的尺寸 WRITES NUMBER 写到回退段的字节数 XACTS NUMBER 活动的事务处理数 GETS NUMBER 标题获得的数目 WAITS NUMBER 标题等待的数目 OPTSIZE NUMBER 回退段的最佳尺寸 HWMSIZE NUMBER 回退段尺寸的高水位标记 SHRINKS NUMBER 回退段尺寸减少的倍数 WRAPS NUMBER 回退段缠绕的倍数 EXTENDS NUMBER 回退段段尺寸扩展的倍数 AVESHRINK NUMBER 平均收缩尺寸 AVEACTIVE NUMBER 活动区随时间平均的当前尺寸 STATUS VARCHAR2(15) 回退段状态 CUREXT NUMBER 当前区 CURBLK NUMBER 当前块 268 V$ROWCACHE 这个视图显示数据字典活动的统计数据。每行包含一个数据字典高速缓存的统计数据。 列 数据类型 说明 V$ROWCACHE_PARENT 这个视图显示数据字典中父级对象的信息。每个锁拥有一行,每个对象的等待者有一行。这个行显 示拥有或请求的模式。对于没有拥有者的或等待者的对象,只显示单行。 列 数据类型 说明 CACHE# NUMBER 行高速缓存 ID 号 TYPE VARCHAR2 父级或子级行高速缓存类型 SUBORDINATE# NUMBER 子级集合号 PARAMETER NUMBER 确定数据字典高速缓存中项数的 初始化参数名 COUNT NUMBER 高速缓存中项的总数 USAGE NUMBER 包含有效数据的高速缓存项数 FIXED NUMBER 高速缓存中的固定项数 GETS NUMBER 请示数据对象信息的总数 GETMISSES NUMBER 导致高速缓存未中的数据请求数 SCANS NUMBER 扫描请求数 SCANMISSES NUMBER 查找高速缓存中的数据扫描失败 的次数 SCANCOMPLETES NUMBER 对于子级项的列表,完全扫描列 表的次数 MODIFICATIONS NUMBER 插入、更新与删除的次数 FLUSHES NUMBER 对磁盘进行刷新的次数 DLM_REQUESTS NUMBER DLM 请求的次数 DLM_CONFILICTS NUMBER DLM 冲突的次数 DLM_RELEASES NUMBER DLM 释放的次数 INDX NUMBER 行索引 HASH NUMBER 散列值 ADDRESS RAW(4) 父级对象的地址 CACHE# NUMBER 父级高速缓存 ID CACHE_NAME VARCHAR2(64) 父级高速缓存名 EXISTENT VARCHAR2(1) 此对象是否一个现存的对象 LOCK_MODE NUMBER 锁被占有的模式 LOCK_REQUEST NUMBER 锁被请求的模式 TXN RAW(4) 当前缩定对象的事物处理 SADDR RAW(4) 会话的地址 INST_LOCK_ REQUEST NUMBER 只与并行服务器有关。实例 锁被请求模式 INST_LOCK_ NUMBER 只与并行服务器有关。是否 269 V$ROWCACHE_SUBORDINATE 这个视图显示数据字典中子级对象的信息。 列 数据类型 说明 V$RSRC_CONSUMER_GROUP 这个视图显示与当前活动资源消耗者组有关的数据。 列 数据类型 说明 V$RSRC_CONSUMER_GROUP_CPU_MTH RELEASE 需要释放实例锁 INST_LOCK_TYPE VARCHAR2 只与并行服务器有关。实例 锁的类型 INST_LOCK_ID1 RAW(4) 只与并行服务器有关。与实 例有关的 ID INST_LOCK_ID2 RAW(4) 只与并行服务器有关。与实 例有关的 ID KEY RAW(100) 只与并行服务器有关。键的 内容 INDX NUMBER 索引 HASH NUMBER 散列值 ADDRESS RAW(4) 子级对象的地址 CACHE# NUMBER 父级高速缓存 ID SUBCACHE_NAME VARCHAR2(64) 子级高速缓存名 EXISTENT VARCHAR2(1) 此对象是否一个现存的对象 PARENT RAW(4) 父级对象的地址 KEY RAW(100) 只与并行服务器有关。键的内容 NAME VARCHAR2(32) 使用者组名 ACTIVE_SESSIONS NUMBER 这个使用者组中当前活动会话数 EXECUTION_ WAITERS NUMBER 等待执行限额的当前活动会话数 REQUESTS NUMBER 这个使用者组中执行的请求总数 CUP_WAIT_TIME NUMBER 会话等待 CPU 的时间总数 CPU_WAITS NUMBER 这个使用者组中所有会话必须等 待 CPU 的时间数 CONSUMED_CPU_ TIME NUMBER 这个使用者组中所有会话使用的 CPU 的时间总数 YIELDS NUMBER 这个使用者组中所有会话必须的 CPU 时间总数 SESSIONS_QUEUED NUMBER 等待变成活动的当前排队的会话 计数 270 这个视图显示资源使用者组的所有可用资源分配方法。 列 数据类型 说明 NAME VARCHAR2(40) CPU 资源分配方法的名称 V$RSRC_PLAN 这个视图显示所有当前活动资源计划的名称。 列 数据类型 说明 NAME VARCHAR2(32) 资源计划的名称 V$RSRC_PLAN_CPU_MTH 这个视图显示资源计划的所有可用 CPU 资源分配方法。 列 数据类型 说明 NAME VARCHAR2(32) 资源分配方法的名称 V$SESSION 这个视图列出每个当前会话的会话信息 列 数据类型 说明 SADDR RAW(4) 会话地址 SID NUMBER 会话标识符 SERIAL# NUMBER 会话序列号。用来唯一地标识绘画 对象。如果该会话结束且其他会话 以相同的会话 ID 开始,则保证会 话级 的命令 被应用 到正确 会话对 象 AUDSID NUMBER 审计会话 ID PADDR RAW(4) 拥有这个会话的进程地址 USER# NUMBER Oracle 用户标识符 USERNAME VARCHAR(30) Oracle 用户名 COMMAND NUMBER 正进行的命令(分析的最后一个语 句),关于值的列表,请参阅表 B-11 OWNERID NUMBER 如果值为 2147483644,则此列的内 容无效。否则此列包含拥有可移植 会话的用户标符。对于利用并行从 服务器的操作,将这个值解释为一 个 48 字节的值。其低位两字节表 示会话号,而高位字节表示查询协 调程序的实例 ID TADDR VARCHAR2(8) 事务处理状态对象的地址 LOCKWAIT VARCHAR2(8) 等待锁的地址;如果没有,为 NULL STATUS VARCHAR2(8) 会话的状态:ACTIVE (当前执行的 271 SQL)、 INACTIVE、 KILLED(标 记 为 终 止 ) 、 CACHED ( 为 Oracle*XA 使用而临时高速缓存)、 SNIPED(会话不活动,在客户机 上等待) SERVER VARCHAR2(9) 服 务 器 类 型 : DEDICATED 、 SHARED、PSEUDO、NONE SCHEMA# NUMBER 模式用户标识符 SCHEMANANME VARCHAR2(30) 模式用户名 OSUSER VARCHAR(15) 操作系统客户机用户名 PROCESS VARCHAR2(9) 操作系统客户机进程 ID MACHINE VARCHAR2(64) 操作系统机器名 TERMINAL VARCHAR2(10) 操作系统终端名 PROGRAM VARCHAR(48) 操作系统程序名 TYPE VARCHAR2(10) 会话类型 SQL_ADDRESS RAW(4) 与 SQL_HASH_VALUE 一道使用 标识当前正在执行的 SQL 语句 SQL_HASH_VALUE NUMBER 与 SQL_ADDRESS 一道使用标识 当前正在执行的 SQL 语句 MODULE VARCHAR2(48) 包含当前正在执行的模块名,正如 由 调 用 DBMS_APPLICATION_INFO.SE T_MODU LE 过程所设臵 MODULE_HASH NUMBER 上面 MODULE 的散列值 ACTION VARCHAR2(32) 包含当前执行活动的名称,正如由 调 用 DBMS_APPLICATION_INFO.SE T_ACTI ON 过程所设臵 ACTION_HASH NUMBER 上列活动名称的散列值 CLIENT_INFO VARCHAR2(64) 由 DBMS_APPLICATION_INFO.SE T_CLIENT_INFO 过程 设臵 的信 息 FIXED_TABLE_ SEQUENCE NUMBER 此列包含一个数,每当会话完成一 个数 据库调 用并且 存在来 自动态 性能 表的介 入选择 ,它个 数就增 加。这个列可被性能监控程序用来 监控数据库中的统计数据。每当性 能监控程序查看数据库时,只需要 查看 当前活 动的会 话或在 这个列 中具 有比上 次性能 监控程 序所看 到的最大值更大的值的会话即可。 所有 其他会 话自上 次性能 监控程 序查看数据库以来都是空闲的 272 ROW_WAIT_OBJ# NUMBER 包含 ROW_WAIT_ROW#中指定 的 ROW#的表的对象 ID ROW_WAIT_FILE# NUMBER 包含 ROW_WAIT_ROW#中指定 的 ROWID 的数据文件的标识符。 此列 仅在会 话当前 正在等 待其他 事 务 处 理 提 交 并 且 ROW_ WAIT_OBJ#不为-1 时有效 ROW_WAIT_BLOCK # NUMBER 包含 ROW_WAIT_ROW#中指定 的 ROWID 的数据文件的标识符。 此列 仅在会 话当前 正在等 待其他 事务处理提交并且 ROW_正在等 待其他事务处理提交并且 ROW_ ROW_WAIT_ROW# NUMBER 被锁定的当前 ROWID。此列仅在 会话 当前正 在等待 其他事 务处理 提交并且 ROW_ WAIT_OBJ#不为 -1 时有效 LOGON_TIME DATE 登录时间 LAST_CALL_ET NUMBER 最后一次调用 PDML_STATUS VARCHAR2(8) 如果 ENABLED, 则会话 正处于 PARALLEL DML 启用方式。如果 DISABLED , 则 此 会 话 不 支 持 PARALLEL DML 启用方式。如 果 FORCED,则会话已经更改为 强制 PARALLEL DLL PDML_ENABLED VARCHAR2(3) 此 列 已 被 PDML_ENABLED 和 PDML_ STATUS 所替代。请看上 列内容 FAILOVER_TYPE VARCHAR2(10) 如果这个会话禁止失败切换,则为 NONE ,如果客户机能够在断开之 后 失 败 切 换 其 会 话 , 则 为 SESSION,如果客户机还能失败切 换正在进行的选择,则为 SELECT FAILOVER_METHOD VARXHAR2(3) 如果这个会话禁止失败切换,则为 NONE,如果客户机能够在断开之 后重新连接,为 BASIC,如果备份 实例 能够支 持它所 支持的 每个实 例 的 所 有 连 接 , 则 为 PRECONNECT FAILED_OVER VARCHAR2(13) 如果 运行在 失败切 换方式 并进行 过失败 切换,为 TRUE, 否则为 FALSE RESOURCE_CON SU_MER_GROUP VARCHAR2(32) 会话的当前资源使用者组的名称 273 表 B-11 列出对应于会话中正在执行的命令的数字值。这些值可出现在 V$AESSION COMMAND 列中。它们还出现在数据字典视图 SYS.AUDIT_ACTIONS 中。 表 B-11 COMMAND 列的命令数字 命令数字 命令 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 正在执行的命令,在进程处于过渡状态时出现; create table insert select create cluster alter cluster update delete drop cluster create index drop index alter index drop table create sequence alter sequence alter table drop sequence grant revoke create synonym drop synonym create view drop view validate index create procedure alter procedure lock table no operation rename commit audit noaudit create database link drop database link create database alter database create rollback segment alter rollback segment 274 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 79 85 86 88 91 drop rollback segment create tablespace alter tablespace drop tablespace alter session alter user commit rollback savepoint pl/sql execute set transaction alter system switch log explain create user create role drop user drop role set role create schema create control file alter tracting create trigger alter trigger drop trigger analyze table analyze index analyze cluster create profile drop profile alter profile drop procedure drop procrdure alter resource cost create snapshot log alter snapshot drop snaphost create snaphost alter snapshot drop snapshot alter role truncate table truncate cluste alter view create function 275 92 93 94 95 96 97 98 99 alter function drop function create package alter package drop package create package body alter package body drop package body V$SESSION_CONNECT_INFO 这个视图显示当前会话的网络连接的有关信息。 列 数据类型 说明 SID AUTHENTICATION _TYPE OSUSER NETWORK_ SERVICE_BANNER NUMBER VARCHAR2(15) VARCHAR2(30) VARCHAR2(2000) 会话标识符(可用来将这个视图 与 V$SESSON 视图进行连接) 怎样验证:OS、PROTOCOL 或 NETWORK 这个数据库用户的外部用户名 用于这个连接的每个 Net8 服务 的产品标识(每个标识一行) V$SESSION_CURSOR_CACHE 这个视图显示关于当前会话的游标使用信息。 说明 V$SESSION_CURSOR_CACHE 视图不是 SESSION_CACHED_CURSORS 初始化参数的有 效性度量。 列 数据类型 说明 MAXIMUM NUMBER 高速缓存的游标最大数。一旦达到这 个数,则为了打开更多的游标,将需 要关闭某些游标。这个列中的值是从 初始化参数 OPEN_ CURSORS 导出 的 COUNT NUMBER 游标的当前数目(不管是否在用) OPENED_ONCE NUMBER 至少打开过一次游标 OPEN NUMBER 打开游标的当前数目 OPENS NUMBER 游标打开的累积总数减一。这是因为 本 查 询 当前打开 且正在使用的 游标并为计 入 OPENS 统计数据中 HITS NUMBER 游标打开命中的累计总数 HIT_RATIO NUMBER 找到打开 游标的次数除 以查找游标 的次数所得到的比例 276 V$SESSION_EVENT 此视图列出会话等待某个事件的信息。注意,TIME_WAITED 和 AVERAGE_WAIT 列在不支持快 速时间机制的平台。如果在这些平台上运行,并且希望此列反映真正的等待时间,则必须设臵参数 文件中的 TIMED_STATISTICS 为真。请注意,这样做对系统性能有轻微的负面影响。更多的信息, 请参阅 TIMED_STATISTICS。 列 数据类型 说明 V$SESSION_LONGOPS 这个视图显示某些长运操作的状态。它利用列 SOFAR 和 TOTALWORK 提供操作的进展报告。可 监控下列操作状态: 散列值的创建 备份操作 恢复操作 列 数据类型 说明 SID NUMBER 会话的 ID EVENT VARCHAR2(64) 等待事件的名称 TOTAL_WAITS NUMBER 此会话对这个事件的总等待 次数 TOTAL_TIMEOUTS NUMBER 此会话对这个事件的总等待 超时次数 TIME_WAITED NUMBER 此会话对这个事件的总等待 时间数,以百分之一秒计 AVERAGE_WAIT NUMBER 此会话对这个事件的平均等 待时间数,以百分之一秒计 MAX_WAIT NUMBER 此会话对这个事件的最大等 待时间数,以百分之一秒计 SID NUMBER 会话标识符 SERIAL# NUMBER 会话系列号 OPENNAME VARCHAR2(64) 操作名 TARGET VARCHAR2(64) 在其上进行操作的对象 TARGET_DESC VARCHAR2(32) 目标描述 SOFAR NUMBER 至今为止完成的工作计数 TOTALWORK NUMBER 总的工作量 UNITS VARCHAR2(32) 工作度量单位 START_TIME DATE 操作开始的时间 LAST_UPDATE_TIME DATE 统计数据最后一次更新的时 间 ELAPSED_SECOUNDS NUMBER 操作开始以来占用的秒数 CONTEXT NUMBER 前后关系 MESSAGE VARCHAR2(512) 统计数据摘要消息 277 V$SESSION_OBJECT_CACHE 这个视图显示本地服务器(实例)上当前用户会话的对象高速缓存统计数据。 列 数据类型 说明 V$SESSION_WAIT 这个视图列出活动的会话等待的资源或事件。下面是优化时的考虑: 除显示的数值为十六进制以外,PIRAW,P2RAW,P3RAW 显示的值与 P1、P2、P3 列的值相同。 WAIT_TIME 列在不支持快速时间机制的平台上包含值-2。如果在这些平台上运行,并且希望此列 反映真正的等待时间,则必须设臵参数文件中的 他—STATISTICS 为真。请注意,这样做对系统 性能有轻微的负面影响。更过的信息,请参阅 TIMED_STATISTICS. 在以前的版本中,WAIT_TIME 列包含一个任意大的值(而不是一个负值)以表示此平台不具备快 速时间机制。 STATE 列解释 WAIT_TIME 的值并描述当前或最近的等待状态。 列 数据类型 说明 PINS NUMBER 高速缓存中固定或查找出的对象 数 HITS NUMBER 发现对象已经在高速缓存中的对 象固定的数目 TRUE_HITS NUMBER 发现对象已经在高速缓存中并处 于所需状态(从而不需要从数据 库调入)的对象的数目 HIT_RATIO NUMBER HITS/PINS 的比例 TRUE_HIT_RATIO NUMBER TRUS_HITS/PINS 的比例 OBJECT_REFRESHES NUMBER 高速缓存中利用来自数据库的新 值进行刷新的对象数 CACHE_REFRESHES NUMBER 整个高速缓存(所有对象)进行 刷新的次数 OBJECT_FLUSHES NUMBER 高速缓存中对数据库进行刷新的 对象数 CACHE_FLUSHES NUMBER 整个高速缓存(所有对象)对数 据库进行刷新的次数 CACHE_SHRINKS NUMBER 高速缓存收缩到最佳尺寸的次数 CACHE_OBJECTS NUMBER 当前高速缓存的对象数 PINNED_OBJECTS NUMBER 当前固定的对象数 CACHE_SIZE NUMBER 以字节表示的高速缓存当前尺寸 OPTIMAL_SIZE NUMBER 以字节表示的高速缓存最佳尺寸 MAXIMUM_SIZE NUMBER 以字节表示的高速缓存最大尺寸 SID NUMBER 会话标识符 SEQ# NUMBER 唯一标识这个等待的序列号。每次 等待都增加 EVENT VARCHAR2(64) 会话等待的资源或会话 P1TEXT VARCHAR2 第一个附加参数的描述 278 279 表 B-12 定义了 V$SESSION_WAIT 的 STATE 列的值。 STATE 值 说明 V$SESSTAT 这个视图给出用户会话的统计数据。为了找到与每个统计数据号(STATISTIC#)有关的统计数据 名称,请参阅 V$STATNAME。 列 数据类型 说明 SID STATISTIC# VALUE NUMBER NUMBER NUMBER 会话标识符 统计数据名(标识符) 统计数据值 V$SESS_IO 这个视图列出每个用户会话的 I/O 统计数据 列 数据类型 说明 P1 NUMBER 第一个附加参数 P1RAW RAW(4) 第一个附加参数 P2TEXT VARCHAR2 第二个附加参数的描述 P2 NUMBER 第二个附加参数 P2RAW RAW(4) 第二个附加参数 P3TEXT VARCHAR2 第三个附加参数的描述 P3 NUMBER 第三个附加参数 P3RAW RAW(4) 第三个附加参数 WAIT_TIME NUMBER 非零值为会话的上一次等待时间。 零值表示会话当前正在等待 SECONDS_IN_WAIT NUMBER 等待的秒数 STATE VARCHAR2 等待的状态 WAITING 0 当前正在等待的会话 WAITED UNKNOWN TIME -2 未知的最后一次等待持续时间 WATIED SHORT TIME -1 最后一次等待<百分之一秒 WAITED KNOWN TIME >0 WAIT_TIME= 最后 一次等 待持续 时间 SID NUMBER 会话标识符 BLOCK_GETS NUMBER 这个会话的块存取 CONSISTENT_GETS NUMBER 此会话的一致性读取 PHYSICAL_READS NUMBER 此会话的物理读取 BLOCK_CHANGES NUMBER 此会话的块更改 CONSISTENT_ CHANGES NUMBER 此会话的一致性更改 280 V$SGA 这个视图包含系统全局区的摘要信息。 列 数据类型 说明 NAME VALUE VARCHAR2 NUMBER SGA 组件名 以字节表示的内存尺寸 V$SGASTAT 这个视图包含系统全局区的详细信息 列 数据类型 说明 NAME BYTES POOL VARCHAR2 NUMBER VARCHAR2 SGA 组件名 以字节表示的内存尺寸 指出 NAME 中内存驻留的池子。 其值可以是:LARGE POO—— 从 大 型 池 中 分 配 的 内 存 SHARED POOL—从 共 享池 中 分配的内存 V$SHARED_POOL_RESERVED 这个固定视图列出有助于优化共享存储池中保留池和空间的统计数据。 V$SHARED_POOL_RESERVED 视图的以下列仅在初始化参数 SHARED_POOL_ RESERVED_SIZE 设臵为有效值时有效。更多的信息,请参阅 SHARED_POOL_ RESERVED _SIZE。 列 数据类型 说明 FREE_SPACE NUMBER 保留列表中可用的空间总数 AVG_FREE_SIZE NUMBER 保留列表上可用内存的平均尺寸 FREE_COUNT NUMBER 保留列表上可用的内存片数量 MAX_FREE_SIZE NUMBER 保留列表上最大可用内存片的尺 寸 USED_SPACE NUMBER 保留列表上使用的内存的总数 AVG_USED_SIZE NUMBER 保留列表上使用的内存的平均尺 寸 USED_COUNT NUMBER 保留列表上使用的内存片的数量 MAX_USED_SIZE NUMBER 保留列表上最大使用内存片的尺 寸 REQUESTS NUMBER 搜索保留列表查找可用内存片的 次数 REQUESTS_MISSED NUMBER 保留列表没有满足请求的可用内 存片,从而开始利用 LRU 列表刷 新对象的次数 LAST_MISS_SIZE NUMBER 在保留列表没有满足请求的可用 281 V$SHARED_POOL_RESERVED 视 图 的 以 下 列 包 含 的 值 在 即 使 不 设 臵 初 始 化 参 数 SHARED_POOL_ RESERVED_SIZE 时也有效。 列 数据类型 说明 V$SHARED_SERVER 这个视图包含共享服务器进程的有关信息。 列 数据类型 说明 内存片,从而开始利用 LRU 列表 刷新对象的次数 MAX_MISS_SIZE NUMBER 在保留列表没有满足请求的可用 内存片,从而开始利用 LRU 列表 刷新对象时的最大请求未命中的 请求尺寸 REQUEST_FAILURES NUMBER 未找到满足请求的内存次数(即, 出现 ORA_4031 错误的次数) LAST_FAILURE_SIZE NUMBER 最后失败请求的请求尺寸(即,出 现 ORA_4031 错误的请求尺寸) ABORTED_REQUEST _THRESHOLD NUMBER 通知出现 ORA-4031 错误的的请求 的最大尺寸 ABORTED_REQUEST NUMBER 通知出现 ORA-4031 错误而不刷新 对象的请求的数目 LAST_ABORTED_SIZE NUMBER 返回一个 ORA-4031 错误而不利用 LRU 列表刷新对象的最后请求尺 寸 282 NAME VARCHAR2 服务器名 PADDR RAW(4) 服务器的进程地址 STATUS VARCHAR2 服务器状态: EXEC(执行 SQL) WAIT (ENQ)(等待一个锁) WAIT(SEND)(等待发送数据到用户) WAIT(COMMON)(空闲;等待用户 请求) WAIT(RESET)( 等 待 中断 后 重新 设 臵的虚电路) QUIT(终止) MESSAGES NUMBER 处理的消息数 BYTES NUMBER 所有消息中的总字节数 BREAKS NUMBER 中断数 CIRCUIT RAW(4) 当前正服务的虚电路地址 283 IDLE BUSY REQUESTS NUMBER NUMBER NUMBER 以百分之一秒表示的空闲总时间 以百分之一秒表示的繁忙总时间 在此服务 器的生存时间 内从公用队 列中取现的请求总数@@@@@ V$SORT_SEGMENT 这个视图包含一个给定实例中每个排序段的有关信息。此视图仅在表空间为 TEMPORARY 类型时 更新。 列 数据类型 说明 V$SORT_USAGE 这个视图描述排序用法。 列 数据类型 说明 USER SESSION_ADDR VARCHAR2(30) RAW(4) 请求临时空间的用户 共享 SQL 游标的地址 TABLESPACE_NAME VARCHAR2(31) 表空间名 SEGMENT_FILE NUMBER 第一个区的文件号 SEGMENT_BLOCK NUMBER 第一个区的块号 EXTENT_SIZE NUMBER 区尺寸 CURRENT_USERS NUMBER 段的活动用户号 TOTAL_EXTENTS NUMBER 段中区的总数 TOTAL_BLOCKS NUMBER 段中块的总数 RELATIVE_FNO NUMBER 排序段标题的相对文件号 USED_EXTENTS NUMBER 分配给活动排序的区 USED_BLOCKS NUMBER 分配给活动排序的块 FREE_EXTENTS NUMBER 未分配给任意排序的区 FREE_BLOCKS NUMBER 未分配给任意排序的块 ADDED_EXTENTS NUMBER 区分配的数目 EXTENT_HITS NUMBER 在池中找到未用区的次数 FREED_EXTENTS NUMBER 解除分配的区的数目 FREE_REQUESTS NUMBER 请求解除分配的数目 MAX_SIZE NUMBER 曾经使用过的区的最大数目 MAX_BLOCKS NUMBER 曾经使用过的块的最大数目 MAX_USED_SIZE NUMBER 所有排序使用过的区的最大 数目 MAX_USED_BLOCKS NUMBER 所有排序使用过的块的最大 数目 MAX_SORT_SIZE NUMBER 单个排序使用过的区的最大 数目 MAX_SORT_BLOCKS NUMBER 单个排序使用过的块的最大 数目 284 V$SQL 这个视图列出没有 GROUP BY 子句的共享 SQL 区的有关统计数据,而且对录入的原始 SQL 文本 的每个孩子包含一行。 列 数据类型 说明 SESSION_NUM NUMBER 会话的系列号 SQLADDR RAW(4) SQL 语句的地址 SQLHASH NUMBER SQL 语句的散列值 TABLESPACE VARCHAR2(31) 在其中分配空间的表空间 CONTENTS VARCHAR2(9) 指 出 表 空 间 是 否 是 TEMPORARY/ PERMANENT SEGFILE# NUMBER 初始区的文件号 SEGBLK# NUMBER 初始区的块号 EXTENTS NUMBER 分配给排序的区 BLOCKS NUMBER 分配给排序的以块表示的区 SEGFNO NUMBER 初始区的相对文件号 SQL_TEXT VARCHAR2(1000) 当前游标的 SQL 文本的前 8 位字符 SHARABLE_MEM NUMBER 这个子级 游标使用的以 字节表示的 共享内存量 PERSISTENT_MEM NUMBER 这个子级 游标使用的以 字节表示的 持久内存量 RUNTIME_MEM NUMBER 这个子级游标使用的临时结构尺寸 SORTS NUMBER 为这个子级游标完成的排序数 LOADED_VERSIONS NUMBER 如果装载了上下文堆栈,为 1,否则 为 0 OPEN_VERSIONS NUMBER 如果锁定了子级游标,为 1,否则为 0 USERS_OPENING NUMBER 执行相应语句的用户数目 EXECUTIONS NUMBER 自这个对象装入库高速缓存以来,在 这个对象上的执行数目 USERS_EXECUTING NUMBER 执行这个语句的用户数目 LOADS NUMBER 对象被装入或重新装入的数目 FIRST_LOAD_TIME VARCHAR2(19) 父级创建时间的时间戳 INVALIDATIONS NUMBER 使子级游标无效的次数 PARSE_CALLS NUMBER 这个子级游标的分析调用数目 DISK_READS NUMBER 这个子级游标的磁盘读取数目 BUFFER_GETS NUMBER 这个子级游标的缓冲区获取数目 ROWS_PROCESSED NUMBER 分析 SQL 语句返回的总行数 COMMAND_TYPE NUMBER Oracle 命令类型定义 OPTIMIZER_MODE VARCHAR2(10) SQL 语句在其下执行的模式 285 V$SQL_BIND_DATA 这个视图显示客户机为每个游标中每个明确绑定变量发送的绑定数据,前提是服务器中可得到这个 数据,其中游标为查询这个视图的会话所有。 列 数据类型 说明 OPTIMIZER_COST NUMBER 优化程序给出这个查询的代价 PARSING_USER_ID NUMBER 最初建立 这个子游标的 用户的用户 ID PARSING_SCHMA_ID NUMBER 最初用来 建立这个子级 游标的模式 ID KEPT_VERSIONS NUMBER 指 出 这 个 子 级 游 标 是 否 已 经 利 用 DBMS_SHARED_POOL 程 序包 标 记为固定在高速缓存中 ADDRESS RAW(4) 这个子级游标的双亲的句柄地址 TYPE_CHK_HEAP RAW(4) 这个子级 游标的类型描 述符的检查 堆栈 HASH_VALUE NUMBER 库高速缓存中的父级语句的散列值 CHILD_NUMBER NUMBER 这个子级游标的编号 MODULE VARCHAR2(64) 包含第一次分析 SQL 语句执行时的 模 块 名 , 正 如 调 用 DBMS_ APPLICATION_INFO.SET_MODE L 所设臵的那样 MODEL_HASH NUMBER 在 MODULE 列中指定的模块的散列 值 ACTION VARCHAR2(64) 包含第一次分析 SQL 语句时执行的 动 作 名 , 正 如 调 用 DBMS_ APPLICATION_INFO.SET_MODE L 所设臵的那样 ACTION_HASH NUMBER 在 ACTION 列中指定的动作的散列 值 SERIALIZABLE_ABORT NUMBER 每个游标的串行化事务处理失败,产 生 ORA-8177 错误的次数 286 CURSOR_NUM NUMBER 这个绑定的游标数 POSITION NUMBER 绑定位臵 POSITION NUMBER 绑定位臵 DATATYPE NUMBER 绑定数据类型 SHARED_MAX_LEN NUMBER 来自与这 个绑定有关的 共享游标对 象的共享最大长度 PRIVATE_MAX_LEN NUMBER 从客户机 发送的这个绑 定的私有最 大长度 ARRAY_SIZE NUMBER 数组元素 的最大数目( 仅对数组绑 定) PRECISION NUMBER 精度(对于数值绑定) 287 V$SQL_BIND_METADATA 这个视图显示客户机为每个游标中每个明确绑定变量提供的绑定元数据,其中的游标为查询这个视 图的会话所拥有。 列 数据类型 说明 V$SQL_CURSOR 这个视图显示与查询这个视图的会话有关的每个游标的调试信息。 列 数据类型 说明 SCALE NUMBER 小数点位臵(对于数值绑定) SHARED_FLAG NUMBER 共享绑定数据标志 SHARED_FLAG2 NUMBER 共享绑定数据标志(续) BUF_ADDRESS RAW(4) 绑定缓冲区内存地址 BUF_LENGTH NUMBER 绑定缓冲区长度 VAL_LENGTH NUMBER 实际的绑定值长度 BUF_FLAG NUMBER 绑定缓冲区标志 INDICATOR NUMBER 绑定指示器 VALUE VARCHAR2(4000) 绑定缓冲区的内容 ADDRESS RAW(4) 拥有这个绑定变量的子级游标的 内存地址 POSITION NUMBER 绑定位臵 DATATYPE NUMBER 绑定数据类型 MAX_LENGTH NUMBER 绑定值的最大长度 ARRAY_LEN NUMBER 数组元素的最大数目(仅对数组 绑定) BIND_NAME VARCHAR2(30) 绑定变量名(如果使用) CURNO NUMBER 游标号 FLAG NUMBER 游标中的标志设臵 STATUS VARCHAR2(9) 游标的状态:即,游标处于什么 状态 PARENT_HANDLE RAW(4) 指向父级游标句柄的指针 PARENT_LOCK RAW(4) 指向父级游标锁的指针 CHILD_LOCK RAW(4) 指向子级游标锁的指针 CHILD_PIN RAW(4) 指向子级游标固定的指针 PERS_HEAP_MEM NUMBER 从这个游标的永久堆栈中分配的 内存总量 WORK_HEAP_MEM NUMBER 从这个游标的工作堆栈中分配的 内存总量 BIND_VARS NUMBER 进入此游标的当前分析的查询中 绑定位臵的总数 DEFINE_VARS NUMBER 进入此游标的当前分析的查询中 288 BIND_MEM_LOC INST_FLAG INST_FLAG2 VARCHAR2(64) VARCHAR2(64) VARCHAR2(64) 绑定位臵的总数 绑定变量存入的内存堆栈;或者 是 UGA 或者是 CGA 安装对象标志 安装对象标志(续) V$SQL_SHARED_MEMORY 该使徒显示有关内存快照共享的游标信息。在共享池中共享的每个 SQL 语句都有一个或多个与之 相关的子对象。每个子对象包括几部分,其中一个是上下文堆栈,她拥有查询计划。 列 数据类型 说明 V$SQL AREA 本视图列出共享 SQL 区域中的统计数据,并且每个 SQL 串包含一行。它提供在内存中的、经过语 法分析的、准备执行的 SQL 语句的统计数据。 列 数据类型 说明 SQL_TEXT SHARABLE_MEM VARCHAR2(1000) NUMBER 当前游标的 SQL 文本的前 80 个字符 在父级游标中的所有子级游标的以字 SQL_TEXT VARCHAR2(1000) 此行 正显示 信息的 共享游 标子对 象的 SQL 文本 HASH_VALUE NUMBER 共享池的 SQL 文本上的散列值 HEAP_DESC RAW(4) 本行 所描述 的子级 游标的 上下文 堆栈的描述符地址 STRUCTURE VARCHAR2(16) 如果 本行描 述的内 存组块 使用格 式为―X:Y‖的说明进行分配,则这 是该说明的―X‖部分 FUNCTION VARCHAR2(16) 类似于 STRUCTURE 列,这是该 说明的―Y‖域 COMMENT VARCHAR2(16) 这是 在分配 内存组 块时提 供的整 个说明域 CHUNK_PTR RAW(4) 这是分配内存组块的起始地址 CHUNK_SIZE NUMBER 该组块所分配的内存数量 ALLOC_CLASS VARCHAR2(8) 内存组块所属的内存类。它通常为 FREEABLE 或 PERMANENT CHUNK_TYPE NUMBER 进入回收函数表的一个索引,这些 函数 告诉服 务器如 何重建 内存组 块 CHUNK_TYPE NUMBER 进入回收函数表的一个索引,这些 函数 告诉服 务器如 何重建 内存组 块 SUBHEAP_DESC RAW(4) 如果 上下文 堆栈的 父堆栈 本身是 一个子堆栈,则这是父堆栈描述符 的地址 289 节为单位的所有共享内存的总和 PERSISTENT_MEM NUMBER 在父级游标中的所有子级游标的以字 节为单位的所有永久内存的总和 RUNTIME_MEM NUMBER 所有子级游标的临时帧尺寸的总和 SORTS NUMBER 所有子级游标完成的排序数量的总和 VERSION_COUNT NUMBER 出现在父级游标高速缓存中的子级游 标的数量 LOADED_VERSIONS NUMBER 出现在高速缓存中并使用上下文堆栈 (KGL 堆栈 6)被加载的子级游标的 数量 OPEN_VERSIONS NUMBER 在当前父级游标中打开的子级游标的 数量 USERS_OPENING NUMBER 所有打开的子级游标的用户数量 EXECUTIONS NUMBER 在所有子级游标上的执行总数 USERS_EXECUTING NUMBER 在所有子级游标上执行语句的用户总 数 LOADS NUMBER 对象被加载或重新加载的次数 FIRST_LOAD_TIME VARCHAR2(19) 父级游标创建时间的时间戳 INVALIDATIONS NUMBER 所有子级游标上无效的总数 PARSE_CALLS NUMBER 对父级游标中子级游标分析调用的总 数 DISK_READS NUMBER 在所有子级游标上的磁盘读取总数 BUFFER_GETS NUMBER 在所有子级游标上的缓冲区的总数 ROWS_PROCESSED NUMBER 代表 SQL 语句处理的总的行数 COMMAND_TYPE NUMBER Oracle 命令类型定义 OPTIMIZER_MODE VARCHAR2(10) SQL 语句在其下执行的模式 PARSING_USER_ID NUMBER 分析了这个父级游标下的每个第一游 标的用户的用户 ID PARSING_SCHMA_ID NUMBER 用来分析这个子级游标的模式 ID KEPT_VERSIONS NUMBER 已经利用 DBMS_SHARED_POOL 程 序包标记为保持的子级游标的数目 ADDRESS RAW(4) 这个游标的父级游标的句柄地址 HASH_VALUE NUMBER 库高速缓存中的父级语句的散列值 MODULE VARCHAR2(64) 包含第一次分析 SQL 语句执行时的模 块 名 , 正 如 调 用 DBMS_ APPLICATION_INFO.SET_MODEL 所设臵的那样 MODEL_HASH NUMBER 在 MODULE 列中指定的模块的散列 值 ACTION VARCHAR2(64) 包含第一次分析 SQL 语句时执行的动 作 名 , 正 如 调 用 DBMS_ APPLICATION_INFO.SET_MODEL 所设臵的那样 290 ACTION_HASH SERIALIZABLE_ABORT NUMBER NUMBER 在 ACTION 列中指定的动作的散列值 串行化事务处理失败,产生 ORA-8177 错误的次数,所有子级游标上的总计 V$SQLTEXT 这个视图包含属于 SGA 共享 SQL 游标的 SQL 语句文本。 列 数据类型 说明 ADDRESS HASH_VALUE PIECE SQL_TEXT COMMAND_TYPE RAW(4) NUMBER NUMBER VARCHAR2 NUMBER 与 HASH_VALUE 一道用来唯 一标识一个高速缓存游标 与 ADDRESS 一道用来唯一标 识一个高速缓存游标 用来排序 SQL 文本片段的编号 一列包含 SQL 文本的一个片段 SQL 语句(SELECT、INSERT) 等的类型代码 V$SQLTEXT_WITH_NEWLINES 这个视图除为了增加可读性不用空格替换 SQL 语句中的新行和表外,与 V$SQLTEXT 视图相同。 更多的信息,请参阅 V$SQLTEXT。 列 数据类型 说明 V$STATNAME 这个视图显示列在 V$SESSTAT 和 V$SYSSTAT 表中的统计数据的解码统计数据名。详细信息,请 参阅 V$SESSTAT 和 SYSSTAT。 列 数据类型 说明 ADDRESS RAW(4) 与 HASH_VALUE 一道用来 唯一标识一个高速缓存游标 HASH_VALUE NUMBER 与 ADDRESS 一道用来唯一 标识一个高速缓存游标 PIECE NUMBER 用来排序 SQL 文本片段的编 号 SQL_TEXT VARCHAR2 一列包含 SQL 文本的一个片 段 COMMAND_TYPE NUMBER SQL 语 句 ( SELECT 、 INSERT)等的类型代码 STATISTIC# NUMBER 统计数据号 NAME VARCHAR2 统计数据名。参见表 B-13 CLASS NUMBER 1(用户);2(重做);4(排 队);8(高速缓存);16(操 作系统);32(并行服务器); 128(调试) 291 292 表 B-13 列出了 V$ATATNAME 返回的普通 Oracle 统计数据。 表 B-13 V$SESSETAT 和 V$SYSSTAT 的统计数据名 此会话使用的 CPU 调用开始时使用的 CPU 建立的 CR 块 引用的高速缓存提交 SCN 引用的提交 SCN 为 CR 转换的当前块 扫描的 DBWR 缓冲区 DBWR 检查点缓冲区写入 DBWR 检查点 DBWR 强制写入 找到的 DBWR 可用缓冲区 DBWRLRL 扫描 DBWR 构造可用空间请求 访问被写入缓冲区的 DBWR DBWR 事务处理表写入 DBWR 累加扫描深度 并行化 DDL 语句 DBWR 撤消块写入 并行化 DML 语句 并行化 DFO 数 读写 OShars OS 所有其他睡眠时间 OS Input 块 OS 数据页故障睡眠时间 OS Karnel 页故障睡眠时间 OS 强制上下文切换 接收到的 OS Messages OS 消息发送 OS Minor 页故障 OS 其他系统陷阱 CPU 时间 OS Output 块 OS 进程堆尺寸 OS Process 堆栈尺寸 OS 信号接收 OS 交换 OS 系统调用 CPU 时间 OS 系统调用 OS 文本叶故障睡眠时间 OS 用户级 CPU 时间 OS 用户锁等待睡眠时间 OS 主动环境切换 OS 等待 CPU(延迟时间) 接收到的 PX 本地消息 PX 本地消息发送 接收到的 PX 远程消息 PX 远程消息发送 串行卸载的并行操作 SQL*Net 从客户机往返 SQL*Net 往返数据库连接 SCN 批处理的不必要的进程清除 完成的后台检查点 后台检查点开始 后台超时 未固定缓冲区计数 固定缓冲区计数 通过 SQL*Net 从客户机接收的字节 通过 SQL*Net 从数据库连接接收到的字节 通过 SQL*Net 发送到客户机的字节 通过 SQL*Net 发送到数据库连接的字节 取得快照的 SCN 调用:kcmgss 对 kcmgas 的调用 调用 kcmgss 对 kcmgrs 的调用 更改写入时间 清除和回退一致性读获取 只清除一致性读获取 簇键扫描块获取 簇键扫描 提交清除失败;块丢失 提交清除故障:缓冲区被写入 提交清除失败;回叫失败 提交清除故障:不能固定 提交清除失败;正在进行热备份 提交清除故障:写禁止 提交清除 一致性获取 游标验证 数据库块更改 数据库块获取 延迟(当前)块清除应用程序 293 查到灰缓冲区 排队转换 排队死锁 排队释放 排队请求 排队超时 排队等待 交死锁 执行计数 查到空闲缓冲区 请求的空闲缓冲区 全局高速缓存转换时间 全局高速缓存转换超时 全局高速缓存转换 全局高速缓存 cr 块接收时间 全局高速缓存 cr 块接收 全局高速缓存从磁盘读取 全局高速缓存 cr 超时 全局高速缓存延迟 全局高速缓存顺利转换 全局高速缓存空闲列表等待 全局高速缓存获取时间 全局高速缓存转换时间 全局高速缓存排队转换 全局锁同义词转换@@@@@ 全局锁异步获取 全局锁转换时间 全局锁转换(异步) 全局锁转换(非异步) 全局锁获取时间 全局高速缓冲散栓锁等待 全局锁获取(异步) 全局锁获取(非异步) 全局锁释放 全局锁同义词转换@@@@@ 全局锁同步获取 热缓冲区移动到 LRU 的标题 立即(CR)清除应用程序 立即(CURRENT)块清除应用程序 实例恢复数据库冻结计数 kcmccs 调用取得当前 scn kcmccs 读取 scn 不转到 DCM kcmccs 等待批处理 登录累计 当前登录 收到消息 消息发送 本地散列算法执行 本地散列算术失败 不用转到 DLM 取得的下一 scm 无缓冲区固定计数 非工作一致性读获取 累计打开的游标 当前打开的游标 打开替换文件 打开请求高速缓存替换 分析计数(硬) 分析计数(总计) 分析 CPU 时间 占用的分析时间 物理读取 物理写 直接物理读取 直接物理写 非检查点物理写 非检查点物理写 查到固定换冲区 处理最后非空闲时间 并行化查询 恢复数组读取时间 恢复数组读取 恢复块读取 递归调用 递归 cpu 用法 写入重做块 重做缓冲区分配项 重做项 重做日志空间请求 重做日志空间等待时间 重做日志切换中断 重做排序标记 重做尺寸 重估同步时间 重做同步写 重做消耗 重做写时间 294 其他信息:在某些平台上,NAME 和 CLASS 列将包含其他操作系统的专门数据。 V$SUBCACHE 这个视图显示当前装入库高速缓存内存的下级高速缓存的相关信息。此视图预排库高速缓存,每个 库高速缓存对象的每个装入下级高速缓存印出一行。 列 数据类型 说明 V$SYSSTAT 这个使徒列出系统统计数据。为找到与每个统计数据号(STATISTIC#)关联的统计数据名称,请 参阅 V$STATNAME。 列 数据类型 说明 STATISTIC# NUMBER 统计数据号 重做写入程序闭锁时间 重做写 远程实例撤消块写入 远程实例撤消标题写入 应用回退更改撤消记录 回退段仅一致性读取获取 可串行终止 会话连接时间 会话游标高速缓存计数 会话游标高速缓存命中 会话逻辑读取 会话 pga 内存 最大会话 pga 内存 会话存储过程空间 会话 uga 内存 最大会话 uga 内存 排序(磁盘) 排序(内存 排序(行) 总计灰队列长度 按行标识符的表取数 表取数据连续行 获取的表扫描块 获得表扫描行 表扫描(高速缓存分区) 表扫描(直接读取) 表扫描(长表) 表扫描(行标识范围) 表扫描(短表) 总的文件打开 事务处理锁后台获取时间 事务处理锁后台获取 事务处理锁前台请求 事务处理锁前台等待时间 事务处理回退 事务处理表一致性读取回退 应用事务处理表一致性读取撤消记录 用户调用 用户提交 用户回退 OWNER_NAME VARCHAR2(64) 包含这些高速缓存项的对象的拥有者 NAME VARCHAR2(1000) 对象名 TYPE NUMBER 对象类型 HEAP_NUM NUMBER 包含这个下级高速缓存的堆栈号 CACHE_ID NUMBER 下级高速缓存 ID CACHE_CNT NUMBER 这个对象中这个高速缓存的项数 HEAP_SZ NUMBER 分配给这个堆栈的区空间量 HEAP_ALOC NUMBER 从这个堆栈中分配的区空间量 HEAP_USED NUMBER 从这个堆栈中利用的空间量 295 V$SYSTEM_CURSOR_CACHE 除这个视图的信息是系统范围的外,其显示的信息与 V$SESSION_CURSOR_CACHE 的类似。更 详细的信息,请参阅 V$SESSION_CURSOR_CACHE。 列 数据类型 说明 OPENS HITS HIT_RATIO NUMBER NUMBER NUMBER 游标打开的累计总数 游标打开命中的累计总数 找到打开游标的次数除以查 找游标的次数所得到的比例 V$SYSTEM_EVENT 这个视图包含所有等待某个事件的相关信息。注意,TIME_WAITED 和 AVERAGE_WAIT 列在那 些不支持快速时间机制的平台上将包含零值。如果在这些平台上运行,并且希望此列反映真正的等 待时间,则必须设臵参数文件中的 TIMED_STATISTICS 为 TRUE 。 请 注 意 , 这 样 做 对 系 统 性 能 有 轻 微 的 负 面 影 响 。 更 多 的 信 息 , 请 参 阅 ―TIMED_STATISTICS‖。 列 数据类型 说明 EVENT TOTAL_WAITS TOTAL_TIMEOUTS TIME_WAITED AVERAGE_WAIT VARCHAR2(64) NUMBER NUMBER NUMBER NUMBER 等待事件的名称 这个事件的总等待次数 这个事件的总等待超时次数 这个事件的总等待时间数, 以百分之一秒计 这个事件的平均等待时间, 以百分之一秒计 V$SYSTEM_PARAMETER 这个视图包含关于系统参数的信息。 列 数据类型 说明 NAME VARCHAR2 统计数据名。参见表 B-13 CLASS NUMBER 统计数据类别:1(用户);2(重做); 4(排队);8(高速缓存);16(操作 系统);32(并行服务器);64(SQL); 128(调试) VALUE NUMBER 统计数据值 CLASS NUMBER 统计数据类别: 296 NUM NUMBER 参数号 NAME VARCHAR2(64) 参数名 TYPE NUMBER 参数类型:1=布尔;2=串;3=整 数 VALUE VARCHAR2(512) 赋给此参数的值 ISDEFAULT VARCHAR2(9) 赋给此参数的值是否为缺省值 297 V$TABLESPACE 这个视图来自控制文件的信息。 列 数据类型 说明 TS# NAME NUMBER VARCHAR2(30) 表空间数 表空间名 V$TEMPFILE 这个视图显示临时文件信息。 列 数据类型 说明 ISSES_MODIFIABLE VARCHAR2(5) 此 参 数 是 否 可 用 ALTER SESSION 更改 ISSYS_MODIFIABLE VARCHAR2(9) 此 参 数 是 否 可 用 ALTER SYSTEM 更改 ISMODIFIED VARCHAR2(8) 指出参数怎样更改。如果执行一 条 ALTER SESSION,则值将被 MODIFIED 。 如 果 执 行 一 条 ALTER SYSTEM(它将导致所有 当前登录会话的值被修改),则参 数值将为 SYS_MODIFIED ISADJUSTED VARCHAR2(5) 指出关系型数据库系统调整输入 值为一个更合适的值(即,参数 值应该为素数,但用户输入一个 非素数,因此关系型数据库系统 将该值调整为下一个素数) DESCRIPTION VARCHAR2(64) 有关此参数的描述性文本 298 FILE# NUMBER 数据文件号 CREATION_CHANGE# NUMBER 创建系统更改号 CREATION_TIME DATE 创建时间 TS# NUMBER 表空间号 RFILE NUMBER 表空间中的相对文件号 STATUS VARCHAR2(7) 文件状态(脱机/联机) ENABLED VARCHAR2(10) 读和/或写的启用 BYTES NUMBER 以字节表示的文件尺寸(来 自文件标题) BLOCKS NUMBER 块中的文件尺寸(来自文件 标题) CREATE_BYTES NUMBER 文件的创建尺寸(以字节表 示) BLOCK_SIZE NUMBER 文件的块尺寸 NAME VARCHAR2(513) 文件名 299 V$TEMPORARY_LOBS 这个视图显示临时 lobs。 列 数据类型 说明 SID CACHE_LOBS NOCACHE_LOBS NUMBER NUMBER NUMBER 会话 ID 编号高速缓存临时 lobs 非高速缓存临时 lobs 的数目 V$TEMP_EXTENT_MAP 这个视图显示所有临时表空间的每个单元的状态。 列 数据类型 说明 TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS OWNER RELATIVE NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER FNO 这个单元所属的表空间名 绝对文件号 这个单元的起始块号 区中的字节数 区中的块数 拥有这个单元(串)的实例 相对文件号 V$TEMP_EXTENT_POOL 这个视图显示为某个给定实例高速缓存和使用的临时表空间的状态。注意,临时表空间高速缓存的 装载是很迟钝的,该实例可以是静止的。关于所有实例的信息可使用 GV$TEMP_EXTENT_POOL。 列 数据类型 说明 V$TEMP_PING 这个视图显示每个数据文件 ping 的块数。这个信息又可用来确定现有数据文件的访问模式,决定 从数据文件块到 PCM 锁的新映射。 列 数据类型 说明 FILE_NUMBER NUMBER 数据文件号 TABLESPACE_NAME NUMBER 这个单元所属的表空间名 FILE_ID NUMBER 绝对文件号 EXENTS_CACHED NUMBER 已经高速缓存了多少个区 EXENTS_USED NUMBER 实际正在使用的区有多少个 BLOCKS_CACHED NUMBER 高速缓存的块数 BLOCKS_USED NUMBER 使用的块数 BYTES_CACHED NUMBER 高速缓存字节数 BYTES_USED NUMBER 使用的字节数 RELATIVE_FNO NUMBER 相对文件号 300 FREQUENCY NUMBER 频率 X_2_NULL NUMBER 文件中所有块从互斥到空的锁转 换数 X_2_NULL_FORCED_WRI TE NUMBER 指定文件中的块由于互斥到空的 转换而强制写的数目 X_2_NULL_FORCED_STA LE NUMBER 文件中的块由于互斥到空的转换 而使其 STATE 的次数 X_2_S NUMBER 文件中所有块从互斥到共享的锁 转换数 X_2_S_FORCED_ WRITE NUMBER 指定文件中的块由于互斥到共享 的转换而强制写的数目 X_2_SSX NUMBER 文件中所有块从互斥到子共享互 斥的锁转换数 X_2_SSX_FORCED_WRIT E NUMBER 指定文件中的块由于互斥到子共 享互斥的转换而强制写的数目 S_2_NULL NUMBER 文件 中所有 块从共 享到空 的锁转 换数 S_2_NULL_FORCED_STA LE NUMBER 文件 中的块 由于共 享到空 的转换 而使其 STATE 的次数 SS_2_NULL NUMBER 文件 中所有 块从子 共享到 空的锁 转换数 WRB NUMBER 实例 接收到 一个跨 实例调 用这个 文件的写入单个缓冲区的次数 WRB_FORECD_ WRITE NUMBER 由于跨实例调用这个文件而写入 单个缓冲区导致写入的块数 RBR NUMBER 实例接收到一个跨实例调用这个 文件的重用块范围的次数 RBR_FORECD_ WRITE NUMBER 由于跨实例调用这个文件而重用 块范围导致写入的块数 RBR_FORECD_ TATE NUMBER 由于跨实例调用而重用块范围而 使得这个文件中的块的 STATE 的 数目 CBR NUMBER 实例接收到一个跨实例调用这个 文件的检查点块范围的次数 CBR_FORECD_ WRITE NUMBER 由于跨实例调用这个文件的检查 点跨范围所导致的写入这个文件 中块的数目 NULL_2_X NUMBER 指定文件中所有块从空到互斥的 锁转换数 S_2_X NUMBER 指定文件中所有块从共享到互斥 的锁转换数 SSX_2_X NUMBER 指定文件中所有块从子共享互斥 到的互斥的锁转换数 NULL_2_S NUMBER 指定 文件中 所有块 从空到 共享的 301 302 V$TEMP_SPACE_HEADER 这个视图显示每个临时表空间的每个文件的聚集信息,即当前已使用的内存量和每个空间标题的可 用空间量的信息。 列 数据类型 说明 TABLESPACE_NAME FILE_ID BYTES_USED BLOCK_USED BYTES_FREE BLOCKS_FREE RELATIVE_FNO VARCHAR2(30) NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER 临时表空间名 绝对文件号 已使用的字节数 已使用的块数 可用字节数 可用块数 文件的相对文件号 V$TEMPSTAT 该视图包含有关文件读/写统计的信息。 列 数据类型 说明 锁转换数 NULL_2_SS NUMBER 指定文件中所有块从空到子共享 的锁转换数 OP_2_SS NUMBER 打开的 PCM 锁子共享锁的数目。 Oracle 8.1 中为 0 303 FILE# NUMBER 文件号 PHYRDS NUMBER 完成物理读取的数量 PHYWRTS NUMBER DBWR 需要写操作的次数 PHYBLKRD NUMBER 读取物理块的数量 PHYBLKWRT NUMBER 写入磁盘的块数:如果所有的写操 作 是 针 对 单 个 块 的 , 则 PHYBLKWRT与 PHYWRTS 相同 READTIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为进行读操作所花费的 时间(以百分之一秒计);如果为 FALSE,则为 0 WRITETIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为进行写操作所花费的 时间(以百分之一秒计);如果为 FALSE,则为 0 AVGIOTIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为 I/O 所花费的时间(以 百分之一秒计);如果为 FALSE, 则为 0 LSTIOTIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为进行最近的 I/O 所花 304 V$THREAD 该视图包含控制文件中的线程信息。 列 数据类型 说明 THREAD# STATUS ENABLE ENABLE_CHANGE# ENABLE_TIME DISABLE_CHANGE# DISABLE_TIME GROUPS INSTANCE OPEN_TIME CURRENT_GROUP# SEQUENCE# CHECKPOINT _CHANGE# CHECKPOINT_TIME NUMBER VARCHAR2 VARCHAR2 NUMBER DATE NUMBER DATE NUMBER VARCHAR2 DATE NUMBER NUMBER NUMBER DATE 线程号 线程状态:OPEN、CLOSE 启用状态:DISABLED,(启 用)PRIVATE,或(启用) PUBLIC 启用线程的 SCN 启用 SCN 的时间 禁用线程的 SCN 禁用 SCN 的时间 分配给该线程的日志组的数 量 实例名 打开线程的最近时间 当前日志组 当前日志序列号 最近的检查点的 SCN 最近的检查点的时间 V$TIMER 此视图列出以百分之一秒为单位的消耗时间。时间自启动以来进行度量,它是操作系统专有的,当 该值溢出 4 字节时(大约为 497 字节),再次返回到 0。 费的时间(以百分之一秒 LSTIOTIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为进行最近的 I/O 所花 费的时间(以百分之一秒计);如 果为 FALSE,则为 0 MINOTIM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为单个 I/O 所花费的最 小时间(以百分之一秒计);如果 为 FALSE,则为 0 MAXIOWTM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为单个写操作所花费的 最大时间(以百分之一秒计);如 果为 FALSE,则为 0 MAXIORTM NUMBER 如果 TIMED_STATISTICS 参数为 TRUE,则为单个读操作所花费的 最大时间(以百分之一秒计);如 果为 FALSE,则为 0 305 列 数据类型 说明 SHECS NUMBER 占用的时间(以百分之一秒计) V$TRANSACTION 该视图列出系统的活动事务处理。 列 数据类型 说明 ADDR RAW(4) 事务处理状态对象的地址 XIDUSN NUMBER 撤消段的号 XIDSLOT NUMBER 插曹号 XIDSQN NUMBER 序列号 UBAFIL NUMBER 撤消块地址(UBA)的文件号 UBABLK NUMBER UBA 块号 UBASQN NUMBER UBA 序列号 UBAREC NUMBER UBA 记录号 STATUS VARCHAR2(16) 状态号 START_TIME VARCHAR2(20) 起始时间(挂钟) START_SCNB NUMBER 起始系统更改号(SCN)的基 点 START_SCNW NUMBER 起始 SCN 包 START_UEXT NUMBER 起始区号 START_UBAFIL NUMBER 起始 UBA 文件号 START_UBABLK NUMBER 起始 UBA 块号 START_UBASQN NUMBER 起始 UBA 序列号 START_UBAREC NUMBER 起始记录号 SER_ADDR RAW(4) 用户会话对象地址 FLAG NUMBER 标志 SPACE VARCHAR2(3) 如果为空间事务处理,则为 Yes RECURSIVE VARCHAR2(3) 如果为递归事务处理,则为 Yes NOUNDO VARCHAR2(3) 如果为撤消事务处理,则为 Yes PTX VARCHAR2(3) 如 果为 并 行 事务 处 理 ,则 为 Yes,否则设为 No PRV_XIDUSN NUMBER 上一个事务处理的撤消段的号 PRV_XIDSLT NUMBER 上一个事务处理的插槽号 PRV_XIDSQN NUMBER 上一个事务处理的序列号 PTX_XIDUSN NUMBER 父级 XID 的回退段号 PTX_XIDSLT NUMBER 父级 XID 的插曹号 PTX_XIDSQN NUMBER 父级 XID 的序列号 DSCN_B NUMBER 独立的 SCN 基点 DSCN_W NUMBER 独立的 SCN 包 USED_UBLK NUMBER 已用的撤消块数量 USED_UREC NUMBER 已用的撤消记录数量 306 LOG_IO PHY_IO CR_GET CR_CHANGE NUMBER NUMBER NUMBER NUMBER 逻辑 I/O 物理 I/O 一致性获取 一致性更改 V$TRANSACTION_ENQUEUE 显示由事务处理状态对象拥有的锁。 列 数据类型 说明 V$TYPE_SIZE 该视图列出各种数据库组件的尺寸以估计数据块的容量。 列 数据类型 说明 COMPONENT TYPE DESCRIPTION TYPE_SIZE VARCHAR2 VARCHAR2 VARCHAR2 NUMBER 组件名,如段或缓冲区标题 组件类型 组件说明 组件大小 V$VERSION Oracle 服务器的核心库组件的版本号。每个组件一行。 列 数据类型 说明 BANNER VARCHAR2 组件名和版本号 V$WAITSTAT ADDR RAW(4) 锁状态对象的地址 KADDR RAW(4) 锁地址 SID NUMBER 会话拥有或获取锁的标识符 TYPE VARCHAR2(2) 锁类型。TX=事务处理队列 ID1 NUMBER 锁标识符#1(取决于类型) ID2 NUMBER 锁标识符#2(取决于类型) LMODE NUMBER 会话拥有锁的方式:0,无; 1,空( NULL);2,行 -S(SS); 3,行-X(SX); 4,共享(S); 5,S/行-X(SSX); 6,独占 (X) REQUEST NUMBER 会话请求锁的方式:0,无; 1,空( NULL);2,行 -S(SS); 3,行-X(SX); 4,共享(S); 5,S/行-X(SSX); 6,独占 (X) CTIME NUMBER 自当前方式授权以来的时间 BLOCK NUMBER 该锁正在阻塞另一个锁 307 此视图列出块争用统计信息。此表只能在启用计时统计信息时更新。 列 数据类型 说明 CLASS COUNT TIME VARCHAR2 NUMBER NUMBER 块类 针对块类的操作的等待次数 针对块类的操作的所有等待 次数的总和 4、问题查看 sql 语句 1)检查一张表操作执行时间: select last_ddl_time from dba_objects where owner='用户' and object_name in (select index_name from dba_indexes where table_name='表名'); 2)查看一张表的索引状态,以及上次表分析时间: select owner, index_name, table_name, tablespace_name, last_analyzed, table_owner, status from dba_indexes where table_name = '表名' 3)列出数据库中相关用户和相关表的相关信息 select owner, bytes / 1024 / 1024, segment_name, partition_name, tablespace_name, header_file from dba_segments where owner in (select owner from dba_segments where owner = 'kt' or owner = 'zy' or owner = 'zk') and segment_type = 'table' and segment_name like '%bak%' order by 2 desc; 4)表的活跃: --查询段空间使用率 select owner, decode(partition_name, null,segment_name, segment_name||':'||partition_name) object_name, segment_type, sum(bytes) / 1024 / 1024 size_m from dba_segments where tablespace_name='&tablespace_name' group by owner, tablespace_name, segment_type, segment_name,partition_name having sum(bytes) / 1024 / 1024 >=100 order by sum(bytes) / 1024 / 1024 desc 308 5)数据库上的并发数: show parameter parallel_max_servers 查看索引并发数 select owner, index_name, status,degree, table_name from dba_indexes where table_name in ('table_name1', ' table_name2', ' table_name3',' table_name4', 'table_namen'); 6)查询某一天创建的表: select owner, object_name, object_type,created from dba_objects where object_type = 'TABLE' and created <= to_date(20090303, 'yyyymmdd') and created >=to_date(20090302, 'yyyymmdd'); 7)核对索引、触发器、权限、存储过程: select * from dba_tables where table_name like ' TABLE_NAME %' and owner=' username '; ------------------------- select * from dba_indexes where table_name like ' TABLE_NAME %' and owner=' username '; --------------------- select * from dba_triggers a where a.TABLE_NAME like ' TABLE_NAME owner='username'; ------------------------------ select * from DBA_TAB_PRIVS a where a.TABLE_NAME like ' TABLE_NAME %' and owner='USER_NAME'; ----------------------------- %' and select a.owner,a.object_name,a.status from dba_objects a where (a.owner,a.object_name) in( select /*+parallel(a,2)*/distinct owner,name from dba_source a where UPPER(a.text) like 'char_name1%'); alter procedure program_name compile; 8)查看索引和表数据块对应以及索引状态 select a.index_name, b.table_name, a.status, a.degree, a.last_analyzed, a.clustering_factor, b.num_rows, b.blocks from dba_indexes a, dba_tables b where a.table_name = b.table_name and b.table_name = 'TABLE_NAME' and b.owner = 'TABLE_NAME'; 309 9)查看序列: select owner.table_row_id.nextval from dual; select to_char(max_value) from dba_sequences; select * from dba_sequences where sequence_owner='USER_NAME'; 10)查看数据库中等待事件: 查看 sid 对应的操作系统进程 spid(系统进程号) select s.sid, s.serial#, t.spid, s.process, s.osuser, t.username, s.command, s.machine, s.schemaname, s.program, s.logon_time from v$session s, v$process t where s.paddr = t.addr and s.type not like '%background%' order by 1 asc 数据库后台进程数量占用情况: Select count(*) from v$process; Select count(*) from v$session; 如果 session 数量和 process 数量不匹配,执行以下语句 Select * from v$process where not in (select paddr from v$session) netstat -an | grep 1521 | wc -l 11)查看 sid 对应的操作对象以及操作 select b.inst_id, b.sid, b.serial#, a.event, b.machine, b.process, b.program, c.owner, b.osuser, a.seq#, c.object_name,a.p1, a.p1text, a.p2, p2text, a.p3, p3text, b.status, b.logon_time, b.sql_hash_value from gv$session_wait a, gv$session b, dba_objects c where a.sid = b.sid and a.event like 'sql*net message from client' and a.inst_id = b.inst_id and b.row_wait_obj# = c.object_id and owner not like '%sys%' order by 2 asc; 确定执行时间和执行操作命令 Select * From v$session_longops Where sid=387 And serial#=1515 确定操作对象以及类型 select b.inst_id, b.sid, b.serial#, a.event, b.machine, b.process, b.program, c.owner, b.osuser, a.seq#, c.object_name,c.object_type, a.p1, a.p1text, a.p2, p2text, a.p3, p3text, b.status, b.logon_time, b.sql_hash_value from gv$session_wait a, gv$session b, dba_objects c where a.sid = b.sid and a.event like 'sql*net message from client' and a.inst_id = b.inst_id and b.row_wait_obj# = c.object_id and owner not like '%sys%' order by object_type asc; 检查数据库中表的锁,以及操作对象: Select a.Owner, c.Sid, c.Serial#, b.Os_User_Name, b.Process, c.Command, c.Program, a.Object_Name, a.Object_Type, a.Last_Ddl_Time, c.Machine, c.Logon_Time, b.Locked_Mode From Dba_Objects a, V$locked_Object b, V$session c Where a.Object_Id = b.Object_Id And b.Session_Id = c.Sid ---------And c.command=0 And 310 program Like 'plsqldev.exe%' 中断当前 session: alter system kill session 'sid,serial#'; 12)查看 session 对应的 sid 号消耗 cpu 资源的大小: select s.sid, s.serial#, p.spid as "os pid",s.username, s.module, st.value/100 as "cpu sec" from v$sesstat st, v$statname sn, v$session s, v$process p where sn.name = 'cpu used by this session' -- cpu and st.statistic# = sn.statistic# and st.sid = s.sid and s.paddr = p.addr and s.last_call_et < 1800 -- active within last 1/2 hour and s.logon_time > (sysdate - 240/1440) -- sessions logged on within 4 hours order by st.value; 查看 sid 对应的应用程序消耗 cpu、内存资源情况: select k.sid, k.serial#, z.spid as "dateabase host os pid", k.machine, k.program, process, k.command, k.status,k.username, k.module, k.sql_hash_value, t.value / 100 as "cpu sec", trunc(z.pga_used_mem / 1024,2) as "used_memk",trunc(z.pga_alloc_mem / 1024,2) as "alloc_memk", trunc(z.pga_freeable_mem / 1024,2) as "freeable_memk",trunc(z.pga_max_mem / 1024,2) as "max_memk" from gv$statname s, gv$sesstat t, gv$session k, gv$process z where s.name = 'cpu used by this session' and s. statistic# = t.statistic# and t.sid = k.sid and k.paddr = z.addr and k.last_call_et <= 1800 and k.logon_time > (sysdate - 240 / 1440) and value / 100 >= 100 order by t.value desc; 5、oracle 性能监控工具配臵 1)statpack 工具配臵 statspack 系统安装准备: statspack 的安装程序在@?/rdbms/admin/下: spcreate.sql 安装 spdrop.sql 卸载 spauto.sql 生成自动采集数据任务 spreport.sql 生成分析报告 spuexp.sql 参数文件 sppurge.sql 清除不在需要的数据 sptrunc.sql 清除所有的数据 sprepsql.sql:用于根据给定的 SQL HASH 值生成 SQL 报告 为了能运行 Statspack 工具,则需要设臵以下参数: job_queue_processes>0 (如果不采用自动采集数据则可不设) timed_statistics=true (如果不采用自动采集数据则可不设) 311 安装过程: (1)建一个单独的表空间用于 Statspack 或建在 tools 表空间上(>100MB) $sqlplus ‚/ as sysdba‛ SQL>create tablespace perfstat datafile 'E:\oracle\oradata\oradb1\perfstat.dbf' size 2048M; (2)建用户 perfstat 及表 SQL>@?/rdbms/admin/spcreate.sql 要求输入表空间及临时表空间. 建完后会在本目录下生成: spauto.lis spcpkg.lis spctab.lis spcusr.lis spdtab.lis spdusr.lis (3)删除 statspack 表 SQL>@?/rdbms/admin/spdrop.sql (4)测试 statspack 采样数据 SQL> exec statspack.snap 后隔几分钟后再次采样数据 SQL> exec statspack.snap 生成报表 SQL>@?/rdbms/admin/spreport.sql Statspack 介绍: Oracle9i 调优顺序一般采用自顶向下的顺序:Statspack 源于 utlbstat 和 utlestat 工具,在执行 快照时,statspack 会从 SGA 内部的 RAW 内存结构中来采样数据,并将结果存入相应表中。 内存结构表: v$ statspack stats$内存结构表 V$sysstat stats$sysstat V$sgastat stats$sgastat V$parameter stats$parameter V$librarycache stats$librarycache Statspack 使用: (1)手工采样数据 sqlplus perfstat/perfstat SQL> exec statspack.snap 后隔几分钟后再次采样数据 SQL> exec statspack.snap 生成报表 SQL>@?/rdbms/admin/spreport.sql 312 (2)系统自动采样数据 定义定时任务,修改 spauto.sql 内容,定义采样数据的时间间隔 dbms_job.submit(:jobno,’statspack.snap;’,trunc(sysdate+1/24,‛HH‛),’trunc(sysdate+1/24,‛ HH‛),TRUE,:instno); 一天 24 小时:1440 分钟,则: 每小时一次: 1/24 (建议使用) 每 30 分钟一次:1/48 每 10 分钟一次: 1/144 每 5 分钟一次: 1/288 后执行 SQL>@?/rdbms/admin/spauto.sql:生成分析报告 SQL>@?/rdbms/admin/spreport.sql:停止定时任务 sqlplus perfstat/perfstat SQL>select job,interval from user_jobs; SQL>exec dbms_job.remove(‘:job_no’);删除历史数据 delete from stats$snapshot where snap_id:删除全部数据 SQL>@?/rdbms/admin/sptrunc.sql Statspack 报告说明,报告分为以下部分: (1)数据库总体信息 (2)每秒每事务的资源消耗情况 (3)实例的各组件的命中率 (4)共享池总体情况 (5)前 5 个等待事件 (6)DB 所有等待事件 (7)后台进程等待事件 (8)根据 BufferGets 进行排序的 SQL (9)按物理 IO 进行排序的 SQL (10)按执行次数排序的 SQL (11)按分析次数排序的 SQL (12)实例的当前活动的统计数据 (13)ablespace IO 统计数据 (14)表空间文件 IO 统计数据 (15)buffer 池统计数据 (16)实例恢复统计数据 (17)Buffer 池的参考数据 (18)Buffer 等待统计数据 (19)PGA 总体统计数据 1 (20)PGA 总体统计数据 2 (21)PGA 内存参考数据 (22)回滚段统计 (23)回滚段存储统计 (24)undo 段总体情况 (25)undo 段统计 313 (26)锁存器的当前情况 (27)锁存器睡眠等待统计 (28)锁存器失败情况 (29)数据字典 cache 性能统计 (30)库 cache 性能统计 (31)共享池性能统计 (32)SGA 区总体情况 (33)SGA 各组件的活动情况 (34)系统配臵参数 调整 STATSPACK 的收集门,Statspack 有两种类型的收集选项: 级别(level):控制收集数据的类型 门限(threshold):设臵收集的数据的阈值。 (1)级别(level) Statspack 共有三种快照级别,默认值是 5 a.level 0: 一般性能统计。包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、 会话、锁、缓冲池统计等等。 b.level 5: 增加 SQL 语句。除了包括 level0 的所有内容,还包括 SQL 语句的收集,收集结果记 录在 stats$sql_summary 中。 c.level 10: 增 加 子 锁 存 统 计 。 包 括 level5 的 所 有 内 容 。 并 且 还 会 将 附 加 的 子 锁 存 存 入 stats$lathc_children 中。在使用这个级别时需要慎 重,建议在 Oracle support 的指导下进行,可以 通过 statspack 包修改缺省的级别设臵: SQL>execute statspack.snap(i_snap_level=>0,i_modify_parameter=>‘true‘); 通过这样的设臵,以后的收 集级别都将是 0 级;如果你只是想本次改 变收集级别,可以忽略 i_modify_parameter 参数。 SQL>execute statspack.snap(i_snap_level=>10); (2)快照门限:快照门限只应用于 stats$sql_summary 表中获取的 SQL 语句,因为每一个快照都会收集 很多数据,每一行都代表获取快照时数据库中的一个 SQL 语句,所以 stats$sql_summary 很快就会 成为 Statspack 中最大的表,门限存储在 stats$statspack_parameter 表中。让我们了结一下各种门限: a. executions_th 这是 SQL 语句执行的数量(默认值是 100) b. disk_reads_tn 这是 SQL 语句执行的磁盘读入数量(默认值是 1000) c. parse_calls_th 这是 SQL 语句执行的解析调用的数量(默认值是 1000) d. buffer_gets_th 这是 SQL 语句执行的缓冲区获取的数量(默认值是 10000) 任何一个门限值超过以上参数就会产生一条记录,通过调用 statspack.modify_statspack_parameter 函数我们可以改变门限的默认值。 例如: SQL>execute statspack.modify_statspack_parameter(i_buffer_gets_th=>100000,i_disk_reads_th=>100000; 314 附件 网厅内存使用情况 Ora-04031 大块共享内存请求报错检查方法: ----------------检查子缓冲池设臵个数 sql 语句: select a.ksppinm, b.ksppstvl from x$ksppi a, x$ksppsv b where a.indx = b.indx and a.ksppinm = '_kghdsidx_count'; KSPPINM _kghdsidx_count KSPPSTVL 4 ----------- 检查 Latch 的使用情况 select child#, gets from v$latch_children where name = 'share pool' order by child# ---------子缓冲池内存使用情况 select 'share pool (' || nvl(decode(to_char(ksmdsidx), '0', '0-unused', ksmdsidx), 'total') || '):' subpool, sum(ksmsslen) bytes, round(sum(ksmsslen) / 1024/1024, 2) Mb from x$ksmss where ksmsslen > 0 group by rollup(ksmdsidx) order by subpool asc SUBPOOL share pool (1): share pool (2): share pool (3): share pool (4): share pool (total): BYTES 2.18E+08 2.18E+08 2.18E+08 2.01E+08 8.56E+08 MB 208 208 208 192 816 ---------检查子缓冲池剩余内存 select subpool, name, sum(bytes), round(sum(bytes) / 1024 / 1024, 2) MB from (select 'share pool (' || decode(to_char(ksmdsidx), '0', '0- unused', ksmdsidx) || '):' subpool, ksmssnam name, ksmsslen bytes from x$ksmss where ksmsslen > 0 315 and LOWER(ksmssnam) like LOWER('%free memory%')) group by subpool, name order by subpool asc, sum(bytes) DESC; SUBPOOL share pool (1): share pool (2): share pool (3): share pool (4): NAME free memory free memory free memory free memory SUM(BYTES) 17969608 22846368 16287936 10022216 MB 17.1 21.8 15.5 9.56 -----------检查不同子缓冲池的空闲块情况 (内存碎片) select ksmchidx "subpool", 'sga heap(' || ksmchidx || ',0)' sga_heap,ksmchcom chunkcomment, decode(round(ksmchsiz / 1000), 0,'0-1k',1,'1-2k',2,'2-3k',3,'3-4k',4,'4-5k',5,'5-6k', 6,'6-7k',7,'7-8k',8,'8-9k',9,'9-10k','> 10k') "size", count(*),ksmchcls status,sum(ksmchsiz) bytes from x$ksmsp where ksmchcom = 'free memory' group by ksmchidx, ksmchcls, 'sga heap(' || ksmchidx || ',0)', ksmchcom,ksmchcls,decode(round(ksmchsiz / 1000), 0,'0-1k',1,'1-2k',2,'2-3k',3,'3-4k',4,'4-5k',5,'5-6k', 6,'6-7k',7,'7-8k',8,'8-9k',9,'9-10k','> 10k') order by 4 desc; subpool 1 3 4 2 2 3 1 4 2 1 3 4 2 3 1 SGA_HEAP sga heap(1,0) sga heap(3,0) sga heap(4,0) sga heap(2,0) sga heap(2,0) sga heap(3,0) sga heap(1,0) sga heap(4,0) sga heap(2,0) sga heap(1,0) sga heap(3,0) sga heap(4,0) sga heap(2,0) sga heap(3,0) sga heap(1,0) CHUNKCOMMENT free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory size 0-1k 0-1k 0-1k 0-1k 1-2k 1-2k 1-2k 1-2k 2-3k 2-3k 2-3k 2-3k 3-4k 3-4k 3-4k COUNT(*) 10583 7771 7122 6761 4226 4093 3142 72 2980 681 387 4 363 68 15 STATUS free free free free free free free free free free free free free free free BYTES 2026152 1470136 1402744 1292416 4842576 3445008 3154896 49416 5443880 1168456 737096 6728 997592 195808 41528 316 4 3 2 2 2 1 4 2 1 3 4 sga heap(4,0) sga heap(3,0) sga heap(2,0) sga heap(2,0) sga heap(2,0) sga heap(1,0) sga heap(4,0) sga heap(2,0) sga heap(1,0) sga heap(3,0) sga heap(4,0) free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory free memory 3-4k 4-5k 4-5k 7-8k 8-9k 9-10k 9-10k > 10k > 10k > 10k > 10k 2 13 5 1 1 1 1 21 19 18 16 R-free free free R-free R-free R-free R-free R-free R-free R-free R-free 6472 48280 18504 6624 8264 8720 8512 4779592 5003832 4716464 4481568 更多 oracle 资料下载,请收藏以下网址: http://www.database8.com
还剩315页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 8 人已下载

下载pdf

pdf贡献者

eicps

贡献于2012-02-18

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf