Monthly Archives: December 2011

限制访问表的FOR UPDATE操作

几年以前有朋友问过类似的问题,当时考虑了一下,没有想到好的解决方法,前些天有客户询问同样的问题,没有办法周末仔细琢磨了一下,总算是找到一个解决的方法。 其实现在Oracle有专门的工具可以解决这个问题,就是Oracle的FireWall,通过直连的配置方式可以阻塞预配置好的FOR UPDATE操作,不过那需要单独的软件。这里主要方案是要通过数据库现有的功能实现这个目标。 限制FOR UPDATE是有实际意义的,有时候只希望给用户分配查询权限,但是一旦分配了SELECT权限后,用户就自动拥有了FOR UPDATE能力,虽然用户并没有真正UPDATE的权限,但是仍然可以将表的记录锁定,而这有时候并不是所期望的。 SQL> conn test/test Connected. SQL> CREATE TABLE t_update (id NUMBER, name varchar2(30)); TABLE created. SQL> INSERT INTO t_update VALUES (1, ‘a’); 1 ROW created. SQL> commit; Commit complete. SQL> CREATE USER u1 IDENTIFIED BY … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

STATSPACK数据清除(三)

Oracle文档推荐的STATSPACK过期数据产生的方法是直接删除STATS$SNAPSHOT表中的记录。 这篇文章说明第一篇文章中没有描述清楚的数据清除问题。 STATSPACK数据清除(一):http://yangtingkun.itpub.net/post/468/466248 STATSPACK数据清除(二):http://yangtingkun.itpub.net/post/468/466514 之所以隔了3年才有这篇文章,完全是野花的缘故。野花前一段在折腾STATSPACK是发现了我的文章,并且对于我之前没有得出结论的数据清除问题做出了解答,之所以删除STATS$SNAPSHOT就会导致其他表的数据自动删除,并非是Oracle的什么内部机制,其实道理很简单,就是Oracle建立的是CASCADE ON DELETE约束条件。 看来自己在开发方面还是外行,一直没有想到这个问题,于是特意找到了一个9i上部署STATSPACK的数据库,验证一下: SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, STATUS, DELETE_RULE 2 FROM DBA_CONSTRAINTS 3 WHERE TABLE_NAME = ‘STATS$SNAPSHOT’ 4 AND OWNER = ‘PERFSTAT’ 5 AND CONSTRAINT_TYPE = ‘P’; CONSTRAINT_NAME C STATUS DELETE_RU —————————— – ——– ——— … Continue reading

Posted in ORACLE | Tagged , | Leave a comment

ORA-7445(kglLockIterator)错误

在客户的10.2.0.3环境中发现这个错误。 告警日志中错误为: Mon Sep 20 10:21:04 2010 Errors IN file /home/oracle/admin/ARIC/udump/aric_ora_3776.trc: ORA-07445: exception encountered: core dump [SIGSEGV] [Address NOT mapped TO object] [4294967377] [] [] []Mon Sep 20 10:21:04 2010 Errors in file /home/oracle/admin/ARIC/udump/aric_ora_3776.trc: ORA-07445: exception encountered: core dump [SIGSEGV] … Continue reading

Posted in BUG | Tagged , , , | Leave a comment

AWR中出现严重kksfbc child completion等待

一个客户压力测试的AWR报告中出现了严重的kksfbc child completion等待。 数据库版本为10.2.0.5,其TOP 5等待事件为: Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class kksfbc child completion 174,808 8,678 50 27.2 Other db file scattered read 106,665 6,807 64 21.3 User I/O log file sync 130,582 6,592 50 … Continue reading

Posted in BUG | Tagged , | Leave a comment

ORA-600(17271)错误

告警日志中发现了ORA-600(17271)错误。 详细错误信息为: Fri Mar 6 17:15:37 2009 Errors IN file /home/oracle/admin/ARIC/udump/aric_ora_28118.trc: ORA-00600: internal error code, arguments: [17271], [instantiation SPACE leak], [], [], [], [], [], [] ORA-03135: connection lost contactFri Mar 6 17:15:37 2009 Errors in file /home/oracle/admin/ARIC/udump/aric_ora_28118.trc: ORA-00600: internal … Continue reading

Posted in BUG | Tagged , , , | Leave a comment

ORA-7445(qerixGetKey)错误

执行并行查询时碰到的问题。 错误信息如下: Wed Sep 28 18:03:47 2011 Errors IN file /home/oracle/admin/ARIC/bdump/aric_p001_8093.trc: ORA-07445: exception encountered: core dump [SIGSEGV] [Address NOT mapped TO object] [21] [] [] [] Wed Sep 28 18:03:47 2011 Errors IN file /home/oracle/admin/ARIC/bdump/aric_p000_8091.trc: ORA-07445: exception encountered: core dump … Continue reading

Posted in BUG | Tagged , , , | Leave a comment

OPAQUE_TRANSFORM提示的产生

最近经常在AWR中看到带有OPAQUE_TRANSFORM提示的SQL语句,根据分析可以确认执行这个SQL的语句是通过数据库链连接到本地,但是测试时发现,普通的数据库链连接并不会导致这个提示的产生。 于是做了一个简单的例子: -bash-3.2$ sqlplus test/test SQL*Plus: Release 10.2.0.5.0 – Production ON Mon DEC 5 15:05:09 2011 Copyright (c) 1982, 2010, Oracle. ALL Rights Reserved. Connected TO: Oracle DATABASE 11g Enterprise Edition Release 11.2.0.2.0 – Production WITH the Partitioning, OLAP, DATA … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

索引重建的数据源(二)

对这个问题有了进一步的认识。 索引重建的数据源:http://yangtingkun.itpub.net/post/468/457384 上一篇文章测试的结果认为DDL也是基于CBO的,但是今天发现问题并非如此。Oracle在评估REBUILD索引时并不是根据统计信息,而是根据数据字典中非索引字段的长度: SQL> CREATE TABLE t_rebuild (id NUMBER, flag CHAR(1)); TABLE created. SQL> INSERT INTO t_rebuild SELECT rownum, ‘a’ FROM dba_objects; 15695 ROWS created. SQL> commit; Commit complete. SQL> CREATE INDEX ind_t_rebuild_id ON t_rebuild(id); INDEX created. SQL> EXPLAIN plan … Continue reading

Posted in ORACLE | Tagged , | Leave a comment

ORA-600(qerfxFetch_01)错误

在客户的9201数据库中,发现这个错误。 错误信息为: Wed Jul 29 09:23:32 2009 Errors IN file /opt/oracle/admin/eomsdb/udump/eomsdb_ora_20242.trc: ORA-00600: internal error code, arguments: [qerfxFetch_01], [], [], [], [], [], [], []Wed Jul 29 09:23:32 2009 Errors in file /opt/oracle/admin/eomsdb/udump/eomsdb_ora_20242.trc: ORA-00600: internal error code, arguments: [qerfxFetch_01], [], [], … Continue reading

Posted in BUG | Tagged , , | Leave a comment

11g收集统计信息引发wri$_optstat_histhead_history表的删除

在查看一个客户11.2.0.2的AWR报告时,发现了这个问题。 在SQL ORDER BY ELASPED TIME表中,前两项的结果如下: Elapsed Time (s) Executions %Total %CPU %IO SQL Id SQL Module SQL Text 10,752.79 0 25.86 98.20 7.49 4sff1qphjvbwn SQL*Plus BEGIN dbms_stats.gather_table_… 10,752.75 13 25.86 98.20 7.49 bqn2h1xrmhmht delete from sys.wri$_optstat_h… 可以看到,这2两个语句在花费时间,占用CPU以及IO的百分比上惊人的一致,这绝对不是一个偶然的事件。 第一个SQL是收集表的统计信息,显然这是在SQLPLUS里面执行的操作,其执行次数是0,说明在采样时间内,这个操作还没有完成。根据Elspsed Time估算,这个SQL已经运行了3个小时。 … Continue reading

Posted in BUG | Tagged , , | Leave a comment