网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库分析和解决ora-4030.
.Oracle数据库无法加载_OraMTS_的.
.ORACLE SQL性能优化系列 (十).
.修改默认的undo_retention参数设.
.通过Backup Exec实施Oracle来灾难.
.Oracle错误案例:ORA-00235.
.对于数据库系统中使用临时表的思.
.表中出现block错误的恢复方法及具.
.PL/SQL 中用光标查询多条记录.
.ExactPapers Oracle 1Z0-007 200.
.关于Oracle服务器性能全面调整攻.
.我的oracle笔记一(sql语句方面).
.在oracle9i,如何在PL/SQL中读写.
.Oracle9i 分区.
.Oracle数据库系统使用经验.
.优化Web Sphere性能应用技巧集锦.
.Oracle 高效SQL.
.Oracle中屏蔽英文提示信息方法二.
.巧妙转换ORACLE数据库字符集.
.如何修改internal的口令?.

Oracle Database 10 g : 为 DBA 提供的最佳前 20 位的特性(二)

发表日期:2008-2-9


Oracle Database 10 g : 为 DBA 提供的最佳前 20 位的特性(二) 作者 Arup Nanda 来源: OTN 第 2 周
还要多长时间?:回滚监视 为用户提供对回滚操作时间的准确评估 我们还在这地方吗?还要多长时间? 听起来熟悉吗?这些问题可能是您在前往孩子们最喜爱的主题公园的路上,从汽车后座上提出来的,并且经常是不断地、越来越频繁地提出来。您不想告诉他们还确切需要多长时间吗 — 或者更简单些,您自己知道答案吗? 同样,在回滚长期运行的事务时,经常会有些用户不停地询问相同的问题。这些问题是合理的,因为该事务进行了锁定,正常的处理经常受到回滚进程的影响。 在 Oracle 9 i Database 及更低的版本中,您可以执行查询 SELECT USED_UREC FROM V$TRANSACTION; 该语句返回由当前事务所使用的重做记录的数量,而假如重复地执行该语句,将会显示连续减少的数值,因为回滚进程在其处理过程中会释放重做记录。随后您可以通过对一段间隔进行快照来计算其速率,然后推断出评估结束时间的结果。 虽然在视图 V$TRANSACTION 中有一个名为 START_TIME 的列,但该列只显示整个事务的起始时间(也就是在回滚执行之前)。因此,除了推断,您没有办法知道回滚实际上是在什么时间执行的。 事务回滚的扩展统计信息 在 Oracle Database 10 g 中,这种操作很简单。当事务回滚时,事件被记录在视图 V$SESSION_LONGOPS 中,该视图显示长期运行的事务。用于回滚,假如进程耗时超过六秒,则记录出现在该视图中。在回滚执行以后,您可能会隐藏所查看的监视屏幕并执行以下的查询: select time_remaining from v$session_longops where sid = < sid of the session doing the rollback >; 既然您意识到这个视图 V$SESSION_LONGOPS 的重要性,就让我们来看它必须提供的其他信息。该视图在 Oracle Database 10 g 的预览版中提供,但没有捕捉关于回滚事务的信息。为了以一种易读的方式显示所有的列,我们将使用由 Tom Kyte 在 AskTom.com 中所描述的 PRINT_TABLE 函数。此过程简单地以表格方式而不是常用的行方式来显示列。 SQL> set serveroutput on size 999999 SQL> exec print_table('select * from v$session_longops where sid = 9') SID : 9 SERIAL# : 68 OPNAME :Transaction Rollback TARGET : TARGET_DESC :xid:0x000e .01c .00000067 SOFAR : 20554 TOTALWORK : 10234 UNITS :Blocks START_TIME :07-dec-2003 21:20:07 LAST_UPDATE_TIME :07-dec-2003 21:21:24 TIME_REMAINING : 77 ELAPSED_SECONDS : 77 CONTEXT : 0 MESSAGE :Transaction Rollback:xid:0x000e .01c .00000067 : 10234 out of 20554 Blocks done
USERNAME : SYS SQL_ADDRESS :00000003B719ED08 SQL_HASH_VALUE : 1430203031 SQL_ID :306w 9c 5amyanr QCSID : 0 注重,此处显示对行的所有更改,即使删除并重新插入行时也是如此。 VERSION_OPERATION 列显示对该行执行的操作 (Insert/Update/Delete) 。完成这些操作不需要历史表或额外的列。 让我们仔细检查这些列中的每一列。在会话中可能会有超过多个长期运行操作 — 非凡是因为视图中包含以前的会话中所有长期运行操作的历史。列 OPNAME 显示该记录用于 “ 事务回滚 ” ,这为我们指出了正确的方向。列 TIME_REMAINING 显示所评估的剩余时间秒数,这在前面已经描述过,而列 ELAPSED_SECONDS 显示到目前为止所消耗的时间。 那么该表如何提供对剩余时间的评估呢?可以在列 TOTALWORK 中找到线索,该列显示要完成的 “ 工作 ” 总量,还有 SOFAR 显示到目前为止已经完成了多少工作。工作的单位显示在列 UNITS 中。在本例中以数据块为单位;因此,到目前为止已经回滚了 20,554 个数据块中共计 10,234 个数据块。此操作到目前为止已消耗了 77 秒。因此,剩余数据块将消耗: 77 * ( 10234 / (20554-10234) ) ? 77 秒 但您不必利用这种方法来获得该数值,它已经清楚地显示出来了。最后,列 LAST_UPDATE_TIME 显示有关当前视图内容的时间,这将用于加强您对结果的解释。 SQL 语句 另一部分重要的新信息是正在被回滚的 SQL 语句的标识符。在早先, SQL_ADDRESS 和 SQL_HASH_VALUE 用于获取正在被回滚的 SQL 语句。新的列 SQL_ID 对应于视图 V$SQL 的 SQL_ID ,如下所示: SELECT SQL_TEXT FROM V$SQL WHERE SQL_ID = < value of SQL_ID from V$SESSION_LONGOPS >; 该查询返回所回滚的语句,因此提供了额外的校验以及 SQL 语句的地址和散列值。 并行实例恢复 假如 DML 操作是并行操作,则列 QCSID 显示并行查询服务器会话的 SID 。在并行回滚事件中,如实例恢复以及随后的故障事务恢复期间,经常用到该信息经常。 例如,假设在大型的更新期间,实例异常关闭。当实例启动时,发生故障的事务被回滚。假如启用了用于并行恢复的初始化参数值,则回滚并行地而不是串行地发生,如同它发生在常规事务回滚中一样。下一步的任务是评估回滚进程的完成时间。 视图 V$FAST_START_TRANSACTIONS 显示为回滚故障事务所产生的事务。类似的视图 V$FAST_START_SERVERS 显示对回滚进行处理的并行查询服务器的数量。这两个视图都在以前的版本中提供,但显示事务标识符的新列 XID 使得联接更方便了。在 Oracle9 i Database 以及更低的版本中,您必须通过三列( USN — 重做段号, SLT — 重做段中的存储区号, SEQ — 序列号)来联接视图。其父集显示在 PARENTUSN 、 PARENTSLT 和 PARENTSEQ 中。在 Oracle Database 10 g 中,您只需将其联接到 XID 列,其父 XID 由直观的名称表示: PXID 。 最有用的信息部分来自于 V$FAST_START_TRANSACTIONS 视图中的列 RCVSERVERS 。假如发生并行回滚,则该列中显示并行查询服务器的数量。您可以查看该列,了解启动了多少并行查询进程: select rcvservers from v$fast_start_transactions; 假如输出是 1 ,则事务正在由 SMON 进程进行串行回滚 — 显然这是完成工作的一种不充分的方法。您可以将初始化参数 RECOVERY_PARALLELISM 的值改为除 0 或 1 以外的值,重新启动实例进行并行回滚。随后您可以执行 ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK = HIGH ,按 CPU 数量的 4 倍创建并行服务器。 假如上述查询的输出显示不是 1 ,则正在进行并行回滚。您可以查询同一视图 (V$FAST_START_TRANSACTIONS) 来获得父事务和子事务(父事务 id — PXID ,而子事务 id — XID )。 XID 还可用于联接此视图与 V$FAST_START_SERVERS ,以获得其他具体信息。
结论 总之,当在 Oracle Database 10 g 中回滚长期运行的事务时 — 无论是并行实例恢复会话还是用户执行的回滚语句 — 您所需做的一切就是查看视图 V$SESSION_LONGOPS 并评估还需要多少时间。 现在,假如能猜测到达主题公园的时间就好了!
上一篇:Oracle Database 10g:为 DBA 提供的最佳前 20 位的特性(一) 人气:565
下一篇:Oracle 9i新特性研究四(延续性初始化参数文件) 人气:573
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐