Monthly Archives: September 2011

运行ocrconfig replace ocr出现PROT-16错误

利用crsctl工具替换当前ocr时,出现了这个错误。 错误信息为: #./ocrconfig -REPLACE ocr /dev/ocr1 PROT-16: Internal Error 出现了一下metalink,发现导致这个错误的原因可能有两个,一个是当前的OCR裸设备空间的要求,Oracle推荐是128M、256M等等,如果原本OCR设备的大小小于128M,则OCR新的设备取128M,如果原本设备大小在128M到256M之间,则取256M大小。 原始设备大小为256M,而当前设置为512M,可能就是这个原因导致了错误的产生。 讲新的设备/dev/ocr1设置为相同的512M后,再次尝试上面的OCRCONFIG命令,错误依旧。 再次检查metalink,如果只有1个OCR设备,则REPLACE命令无效,因此需要首先执行./ocrconfig -replace ocrmirror /dev/ocr2,然后才能重新运行./ocrconfig -replace ocr /dev/ocr1命令。

Posted in BUG | Tagged , , , , , | 1 Comment

ORA-600(kkoipt:invalid join method)错误

客户的11.2.0.2数据库碰到了这个错误。 详细错误信息如下: Fri Sep 16 15:23:52 2011 Errors IN file /u01/diag/rdbms/ora1/ora1/trace/ora1_ora_20382140.trc (incident=169704): ORA-00600: 内部错误代码, 参数: [kkoipt:invalid JOIN method], [1], [0], [], [], [], [], [], [], [], [], [] Incident details IN: /u01/diag/rdbms/ora1/ora1/incident/incdir_169704/ora1_ora_20382140_i169704.trc Fri Sep 16 15:24:00 2011 Dumping diagnostic … Continue reading

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

ROWNUM固化外部表结果集存在问题(二)

在客户的11.2.0.2环境中碰到了这个问题,Oracle在处理包含ROWNUM固化的外部表加载数据时返回错误的结果。 这一篇描述利用ROW_NUMBER来避免错误的产生。 外部表构造描述可以参考:http://yangtingkun.net/?p=35 ROWNUM固化外部表结果集存在问题::http://yangtingkun.net/?p=38 这个例子是在本机上运行,因此只是告警日志的名称发生了变化,其他的语法和上一篇文章中的一致,当然D_ALERT目录需要指向background_dump_dest参数指定的路径: SQL> CREATE TABLE T_ALERT 2 (TEXT VARCHAR2(4000) 3 ) 4 ORGANIZATION EXTERNAL 5 (TYPE ORACLE_LOADER 6 DEFAULT DIRECTORY D_ALERT 7 ACCESS PARAMETERS 8 (RECORDS DELIMITED BY NEWLINE 9 FIELDS (TEXT (1:255) CHAR)) 10 LOCATION (’ … Continue reading

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

版本影响当前用户看到的对象

如果说版本影响当前用户可以访问的对象是正常的,但是对于DBA_OBJECTS而言,同一个用户下,在不同版本下看到的结果也是不一样的。 看一个简单的例子: -bash-3.2$ sqlplus test/test SQL*Plus: Release 11.2.0.2.0 Production ON Thu Sep 15 21:04:58 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 Mining … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

ORA-600(4415)错误

客户的11.2的DATA GUARD数据库出现了这个错误。 一般DATA GUARD数据库出现错误的可能性不大,而ORA-600错误的可能性就更小了,而且一旦出现,多半意味着DATA GUARD环境损坏,轻则需要恢复,重则需要重建。 不过这个错误并没有那么大危害: Fri Sep 16 17:57:13 2011 Errors IN file /u01/app/oracle/diag/rdbms/ora190/ora190/trace/ora190_ora_18743334.trc (incident=288185): ORA-00600: 内部错误代码, 参数: [4415], [], [], [], [], [], [], [], [], [], [], [] Incident details IN: /u01/app/oracle/diag/rdbms/ora190/ora190/incident/incdir_288185/ora190_ora_18743334_i288185.trc USE ADRCI OR Support Workbench … Continue reading

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

版本中删除对象导致当前和子版本中对象不可见

在文档中看到这部分的描述,不过有一个疑点不是很确认,于是验证了一下。 如果一个用户启用了版本,用户执行某个过程或函数时,如果在当前版本中找不到,自动会去父版本寻找,如果还找不到会去祖先版本中寻找,一直到ORA$BASE中都无法找到,才回报错对象不存在。 但是用户明确的删除操作会使得继承关系中断。一个用户如果删除当前版本中的对象,那么父版本中的对象并不会删除,只不过这个对象在当前版本中不在可见。 看到文档上的这个描述,我的疑问是,对于当前版本的子版本,能否判断父版本中对象是被删除,还是根本没有创建。换句话说,当前版本删除对象后,自版本能否绕过当前版本从父版本处继承对象。 -bash-3.2$ sqlplus test/test SQL*Plus: Release 11.2.0.2.0 Production ON Thu Sep 15 21:04:58 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, … Continue reading

Posted in ORACLE | Tagged , | Leave a comment

ITPUB名人堂第二期

感谢ITPUB将我选为名人堂第二期的嘉宾,其他废话就不多说了,下面是访谈内容。 杨总: 您好!很高兴有这个机会能对您进行采访,本次我们准备了以下一些问题需要您来解答,谢谢。 问题1:现在大家都是开始玩微博了,现在累计有两千多篇技术博客文章,您这么多年仍然坚持着每天至少一篇博客的好习惯,是什么样的一种动力让您这么多年一直坚持写下来呢? 答:其实我开始写博客的时候,博客已经流行一段时间了。一开始根本没有想过要申请一个博客,直到有一天自己通过查询文档解决了一个比较复杂的问题后,才发现自己面临一个问题:如果不把这个解决问题的步骤记录下来,那么过不了多长时间,很可能就会忘记一些关键的步骤,那么下次即使碰到同样的问题,对自己来说仍然可能需要重头开始。而如果将其保存在文本文件中,那么时间久了,查找起来就会很不方便,而当时的博客恰好可以满足我的需要,于是我的博客也就这样诞生了。 刚开始的时候手头现有的值得记录的东西较多,于是博客更新的就比较勤。有一段时间比较忙,博客的更新也就基本上停顿了。但是慢慢我发现,如果不去更新博客,那么自己就会相应的比较懒,而工作之外花在学习Oracle上的时间也会随之减少。意识到这一点后,我恢复了博客的更新,并给自己定下了每天更新一篇的目标,于是我的博客变成了督促我每天学习Oracle知识,总结Oracle经验的工具。刚开始的时候坚持可能确实比较困难,但是坚持的时间越长,就越不会轻易放弃。当坚持的时间超过了一年,更新博客就已经变成一种习惯了。 问题2:您写的博客文章包含的内容很丰富,现在有很多人都将您的博客作为oracle的百科全书了。通过您多年的DBA工作经验,对数据库的开发和维护您有哪些方面的体会? 答:其实我是从数据库开发做起,经历了开发DBA的阶段,最终成为一个管理DBA的。因此可能涉猎过的东西比较杂一些,显得博客里面的东西比较多。其实绝大部分东西还都是很基础的东西,至于“百科全书”更是不敢当了。要说是“百科全书”应该是Oracle的官方文档,是metalink。 数据库开发主要涉及建模、表的逻辑和物理结构设计、PL/SQL代码编写、性能优化等方面。而管理或维护DBA的任务包括逻辑备份、物理备份、恢复、迁移和升级等。虽然从工作范围上,二者可以明确区分,但是很多时候很难界定到底属于开发范畴还是管理范围。而且如果想要数据库的后期维护成本小,前期的设计非常重要。也就是说如果DBA在设计物理逻辑结构的时候多考虑一些后期维护工作,就可以把很多复杂且烦琐的维护工作消除在设计阶段。 问题3:凭借您这么多年的工作经历,目前ORACLE数据库在国内的使用在哪些领域,使用oracle数据库方面有什么优势,以及未来您觉得数据库的发展方向是什么? 答:Oracle目前这么大的市场占有率,只要是具有一定数据规模的行业,都会存在Oracle的身影。 如果要说Oracle数据库的优势,最主要还是体现在大数据量OLTP环境中,Oracle特有的锁机制和多版本读一致性,最大限度提升了系统所能承载的并发用户数。而对于小数据量的情况或OLAP环境中,Oracle并没有绝对的优势。 数据库的发展方向我无法预测,不过Oracle数据库的发展方向却比较明显。Oracle数据库会越来越智能、所集成的功能会越来越强大,而数据库和存储的一体化(Exadata)很可能是今后几年Oracle发展的主要方向。 问题4:现在有很多人都在说Oracle数据库现在越来越稳定,功能越来越先进,越来越自动,于是断言DBA这个行业将要逐渐消亡,请问您对此有何看法?DBA的前景如何? 答:说DBA行业将要逐渐消亡显然是杞人忧天,确实Oracle很稳定,而且随着新版本新功能的不断增加,使得原本很多需要人工设置的工作都可以自动完成了。但是我想问一个问题,大家可能都会使用类似crontab + shell + rman的方式每天自动备份数据库,但是有人会通过shell + rman来自动进行数据库的恢复吗?Broker早就支持DATA GUARD的STANDBY数据库自动FAILOVER,但是在产品环境中设置成自动FAILOVER的,我还从来都没有见过。 我到是觉得Oracle还远远不够自动。从8i到11g,看看Oracle的自动化做了哪些:内存空间的自动管理、UNDO空间自动管理、存储参数自动管理、RMAN备份和归档存放的自动管理、统计信息自动收集、AWR数据自动采集,最多在加上一个存储自动管理ASM。 同样看看从8i到11g,DBA所需要掌握的知识发生了哪些变化:RAC从最早的OPS发展到CLUSTER 到最新的GI,基本上一个大版本就会发生一次重大的结构上的改变;DATA GUARD从最早的 PHYSICAL发展到LOGICAL再到SNAPSHOT;数据复制从最早的ADVANCED REPLICATION发展到STREAM到现在GOLDENGATE;SQL提示从HINT到OUTLINE到SQL BASELINE;导入导出工具从EXP/IMP到EXPDP/IMPDP;统计信息工具从ANALYZE到DBMS_STATS;定时任务从JOB到SCHEDULER;性能数据从STATSPACK到AWR。这些还只不过是数据库已有功能的升级和变迁,在加上每个版本所增加的大量新特性,DBA到底是轻松了还是需要学习更多的知识就一目了然了吧。事实上,Oracle自动化的功能也不能掉以轻心,如果不了解实现的细节,一旦出现问题就可能造成严重的后果。 当然随着Oracle越来越自动化,以及很多图形工具使得日常管理越来越傻瓜化,可能会对初级DBA的职位有一定危险,如果Oracle都升级到了11g,你还抱着8或9的东西不放,那么被淘汰也是早晚的事情了。既然上了Oracle这个快行道,就义无反顾的走下去吧。 问题5:针对oracle数据库的学习,有哪些经验可以给大家分享一下? 答:如果能耐得下心,就去看Oracle的官方文档,从Concept看起,把Administrator、Backup and restore、Performance Tuning 等基础的东西看完,把里面所有能尝试的操作亲手做一遍,基本上就算是入门了。以后在有针对性的去看一下工具、高可用、开发、网络、安全之类的文档。这种方式的好处是基础比较扎实,而且获取信息的正确性更可控(官方文档同样存在错误,不过数量很少,初学者可无视),但是缺点也很明显,前期进度比较慢。因此前期可以去类似ITPUB这种专业论坛,多参与交流,多和别人沟通,有利用自己水平的更快提高。 问题6:通过看您的博客文章,发现您对oracle数据库的知识点掌握得很细,您对兴趣驱动型的知识学习和市场驱动型的知识学习,怎么评价?您觉得自己属于哪种类型?对将要进入这个行业的年轻人有什么寄予? 答:个人认为无论动机是什么,只要能保证积极主动的学习并且能保持相当长的一段时间,都会有所收获。只不过一般来说,如果是兴趣驱动的,那么主动性和持久性都会更好一些,如果学习、研究、探索都变成一种享受,那么想要提高水平只不过是水到渠成的事情了。 无论你是因为何种原因出于何种目的进入到Oracle数据库这个行业,希望你在Oracle学习的过程中培养出对Oracle的兴趣来,否则等待你的会是痛苦的且永不休止的学习过程。其实不只是数据库,任何一个行业都是一样的,想要获得成功而不想付出努力是行不通的。

Posted in NEWS | Leave a comment

11.2通过数据库链调用10.2过程报错

测试中无意发现了这个bug,在11.2数据库通过数据库链,执行10.2.0.1上的过程,结果出现ORA-06553: PLS-801: internal error [55916]的错误。 错误可以通过下面的例子重现: -bash-3.2$ sqlplus / AS sysdba SQL*Plus: Release 10.2.0.1.0 – Production ON Mon Sep 12 23:12:47 2011 Copyright (c) 1982, 2005, Oracle. ALL rights reserved. Connected TO: Oracle DATABASE 10g Express Edition Release 10.2.0.1.0 – … Continue reading

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

从磁带恢复归档出现ORA-19870错误

从磁带中直接恢复归档日志时,出现了这个错误信息。 归档日志前后备份了两次,一次是在备份数据库后做的,另一次是凌晨7点左右进行的,其中第二次备份包含的归档日志比第一次多,最近的归档日志文件备份信息如下: BS KEY SIZE Device TYPE Elapsed TIME Completion TIME ——- ———- ———– ———— ——————- 37761 3.18G SBT_TAPE 00:01:22 2011-08-27 03:22:37 BP KEY: 37761 STATUS: AVAILABLE Compressed: NO Tag: TAG20110827T032114 Handle: al_43199_1_760245675 Media: List OF Archived Logs IN backup … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment

包中添加新过程应在尾部添加

在看高级应用开发手册时,在对象依赖部分,注意到这个细节。 其他对象依赖包中的过程或函数,如果这个过程或函数在包中的位置发生了变化,那么依赖当前过程或函数的对象会被置为INVALID状态。 SQL> CREATE OR REPLACE PACKAGE P_TEST AS 2 PROCEDURE P1; 3 FUNCTION F1 RETURN NUMBER; 4 END; 5 / Package created. SQL> CREATE OR REPLACE FUNCTION F2 RETURN NUMBER AS 2 BEGIN 3 RETURN P_TEST.F1; 4 END; 5 … Continue reading

Posted in ORACLE | Tagged , , | Leave a comment