Monthly Archives: December 2011

2011年总结

2012马上就要到了,抓紧时间总结一下2011年。 2011是比较特殊的一年,是我加入恩墨的第一年,也是我工作的第十年,同时还是我接触Oracle的第十年,而今天的更是我注册到ITPUB的十周年纪念。 大学的专业是通信工程,对于数据库的认识还停留在Foxbase的层面上,到第一家工作单位实习的时候,机缘巧合接触到了Oracle,随后不久在网上搜索资料的时候歪打误撞找到了ITPUB。 我实习的公司就是我工作的第一家公司,以大学学习的那些知识,自然不能满足企业的实际需要,因此从事什么工作完全是公司的安排。当时我和另一个女同学由一个有经验的人带,当时给我们两个方向研究,一个是通过PRO*C程序访问Oracle数据库,另一个是二叉树添加和删除节点的算法。后一个虽然复杂,但是在大学的数据结构的课程中有所涉及,而当时对于Oracle是什么则完全没有概念。显然不能把困难的任务留给女生,于是我就义无反顾的踏上了Oracle这条不归路。 如果说接触Oracle,并将工作重心转到Oracle上是偶然的,那么遇到ITPUB可以说是一个必然。之所以这么说是因为ITPUB很快就发展成为国内最大的Oracle数据库论坛,在业内拥有最大的影响力,因此加入ITPUB只是迟早的事情。虽然注册日期是12月31日,但第一次访问ITPUB肯定是之前的事情,虽然具体的细节早就不记得,但是通过这个注册还是很容易推测当时的场景。在一年快要结束的最后一个工作日里,没有什么心思干活,于是就把常访问的论坛给注册了。应该说在注册这个论坛的时候,已经有了明确的在Oracle方面发展的想法了。 不管出于偶然还是必然,总之Oracle和ITPUB陪我走过了这十个年头。无论是ITPUB还是Oracle,这十年来值得记录的东西都太多太多了。不过好像都和当前的题目不沾边,明明是总结2011,怎么快变成回忆录了。 言归正传,如果要说2011年,那么肯定离不开两个字:恩墨。到了下半年,有了资本的加入,那么还要再加上两个字:云和。不管云和也好,恩墨也罢,今年注定是开花结果的一年。可能对于公司而言,今年只是打好基础,离收获还有一段距离,但是对于技术而言,今年确实是收获的一年。第一次可以把自己几乎所有的知识储备都应用到实际工作中,也是第一次发现自己的知识储备是如此的不足,几乎每天都会碰到新的挑战,几乎每天都会学习新的知识。以前靠每天的BLOG鞭策自己保持学习的惯性,有时候经常需要思考,今天研究什么,BLOG写点什么。而现在每天处理的案例,解决的bug堆成了一堆,就是没有时间整理,到了晚上同样会发愁写点什么,所以有的时候没有选择和选择太多都是痛苦。 BLOG坚持了六年,目前还在继续,能不能继续坚持不是有没有素材可写,而是有没有时间整理了。往年这个时候,肯定会更新一下我的BLOG索引,把去年一年的文章添加进去,目前看是没有这个时间了,连我新的BLOG都没有来得及补充以往的文章,何况是这个BLOG索引了,况且很多索引文章的长度都超过了BLOG所支持的最大长度,如果要再细化,又是巨大的工作量,看看以后能不能想个简单的办法解决这个问题。 今年要比往年啰嗦很多,还是赶紧打住,去帮客户解决问题去了。

Posted in NEWS | Leave a comment

使用Huge Pages后数据库启动失败

在配置Huge Pages后,启动数据库反应很慢,数据库无法正常打开。 检查告警日志,发现下面的错误: Fri DEC 30 13:38:11 2011 Starting ORACLE instance (normal) ****************** Huge Pages Information ***************** Huge Pages memory pool detected (total: 34596 free: 34596) Memlock LIMIT too small: 67584000000 TO accommodate segment SIZE: 68587356160 Huge Pages allocation failed … Continue reading

Posted in ORACLE | Tagged , , | 1 Comment

Database Firewall管理员手册总结

最近手头的事情太多,导致文档虽然看完了,还没有动手进行过测试。 Firewall的大部分功能基本上理解了,此外Kamus在公司里面装了一套Firewall在进行测试,因此整个安装和配置的过程也有了一定了解,不过最近实在事情太多,腾不出功夫自己动手,等过一阵闲一点的时候打算深入测试一下Firewall的功能。 虽然目前Firewall在国内的销量还不是很好,但是随着国内企业对于安全性重视程度不断增加,在加上最近各种安全事故频出,相信不久以后,Firewall的市场会有很大的发展,因此现在多做些知识储备可以未雨绸缪。

Posted in BOOKS | Leave a comment

ORA-600(opixrb-4)错误

客户环境出现ORA-600(opixrb-4)错误。 错误信息为: Fri Oct 28 05:50:47 2011 Errors IN file /oracle9/app/admin/bill/udump/bill1_ora_11075632.trc: ORA-00600: internal error code, arguments: [opixrb-4], [1036], [ORA-01036: illegal variable name/NUMBER], [], [], [], [], [] Fri Oct 28 05:56:44 2011 Errors IN file /oracle9/app/admin/bill/udump/bill1_ora_11075632.trc: ORA-00600: internal error code, … Continue reading

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

ORA-600(unable to load XDB library)错误

AIX上的9206数据库出现这个错误。 在alert文件中发现大量的类似错误: Mon DEC 19 16:43:13 2011 Errors IN file /oracle9/app/admin/db/udump/db1_ora_15400980.trc: ORA-00600: internal error code, arguments: [unable TO LOAD XDB library], [], [], [], [], [], [], [] 检查对应的TRACE文件,发现是在删除PERFSTAT用户: /oracle9/app/admin/db/udump/db1_ora_15400980.trc Oracle9i Enterprise Edition Release 9.2.0.6.0 – 64bit Production WITH the … Continue reading

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

ORA-600(17087)错误

客户数据库出现这个ORA-600错误。 错误信息为: Mon Jun 28 10:27:07 2010 Errors IN file /oracle/admin/ccicdb/udump/ccicdb_ora_767494.trc: ORA-00600: internal error code, arguments: [17087], [0x70000076C3E8E90], [], [], [], [], [], [] 检查MOS发现,这是10.2.0.3上和CURSOR有关的bug,详情可参考文档Bug 7706062 – OERI [17087] following concurrent hard parses on same cursor [ID 7706062.8]。 当存在大量并发同一个cursor的硬解析存在时,可能会导致library cache … Continue reading

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

ORA-7445(kcrfw_update_blk_list)错误

客户的11.2数据库测试环境中碰到了ORA-7445(kcrfw_update_blk_list)错误。 详细的错误信息如下: Tue DEC 20 22:00:02 2011 BEGIN automatic SQL Tuning Advisor run FOR special tuning task "SYS_AUTO_SQL_TUNING_TASK" Tue DEC 20 22:00:46 2011 Exception [TYPE: SIGBUS, Non-existent physical address] [ADDR:0x62652000] [PC:0x216E0C4, kcrfw_update_blk_list()+196] [flags: 0x0, COUNT: 1] Errors IN file /u01/app/oracle/diag/rdbms/fhacdb/fhacdb/trace/fhacdb_lgwr_24506.trc … Continue reading

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

JDBC使用INSERT RETURN语句报错ORA-439

在给客户开发人员讲解LOB列的访问方式后,开发人员尝试在JDBC中使用包含RETURN的INSERT语句,但是出现了ORA-439错误。 检查后发现客户的程序使用的还是PreparedStatement语句,而RETURNING语句,则是Oracle扩展的SQL语法,因此在声明语句的时候必须使用OraclePreparedStatement方式进行声明。 除了修改SQL语句外,使用OraclePreparedStatement声明语句变量外,还需要注册输出参数,类似的代码如下: OraclePreparedStatement sqlstmt = (OraclePreparedStatement)conn.prepareStatement ("insert into t_lob values (?, ?, empty_clob()) returning contents into ?"); sqlstmt.setInt(1, 1); sqlstmt.setString(2, "a"); sqlstmt.registerReturnParameter(3, OracleTypes.CLOB); sqlstat.executeUpdate(); ResultSet resset = sqlstmt.getReturnResultSet(); IF (resset.NEXT()) { CLOB contents = (CLOB)resset.getClob(2); … } 不过即使开发人员声明了OraclePreparedStatement语句,仍然找不到registerReturnParameter过程。 当前的数据库的版本是11.2.0.2,没有道理不支持RETURN语句,何况JDBC的RETURNING语句是从10.2的JDBC就引入新特性。 … Continue reading

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

插入LOB对象的方法

其实以前写过类似的文章,但是都是在其他例子中,没有专门针对这个问题进行过描述,最近发现,还有很多人不清楚,插入一个包含LOB对象的记录需要几个步骤。 在客户的环境中,发现插入一条包含LOB的记录,居然用了四个步骤: SQL> CREATE TABLE T_LOB (ID NUMBER, NAME VARCHAR2(30), CONTENTS CLOB); 表已创建。 SQL> DECLARE 2 V_CLOB CLOB; 3 V_STR VARCHAR2(32767) := LPAD(’A’, 4000, ‘A’); 4 BEGIN 5 INSERT INTO T_LOB 6 VALUES (1, ‘A’, EMPTY_CLOB()); 7 SELECT CONTENTS 8 … Continue reading

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

批量加载性能案例

客户在大量加载数据是遇到性能问题,检查后发现客户采用的是单条插入单条提交这种最缓慢的方式,为了给客户说明优化效果,现场做了几个代码。 最简单的优化方式莫过于减少COMMIT频度,而最优化的方式是采用批量插入的方式,简单的测试代码如下: SQL> CREATE TABLE T_INSERT (ID NUMBER, NAME VARCHAR2(30)); TABLE created. SQL> SET TIMING ON SQL> BEGIN 2 FOR I IN 1..100000 LOOP 3 INSERT INTO T_INSERT VALUES (I, ‘A’ || I); 4 COMMIT; 5 END LOOP; 6 END; … Continue reading

Posted in ORACLE | Tagged , | Leave a comment