星期日, 十二月 26, 2010
Oracle数据库恢复:归档日志损坏案例一则
最近在紧急故障处理时,帮助用户恢复数据库遇到了一则罕见的归档日志损坏案例,在这里和大家分享一下,看看是否有人遇到过类似的问题。
在进行归档recover时,数据库报错,提示归档日志损坏:
***
Corrupt block seq: 37288 blocknum=1.
Bad header found during deleting archived log
Data in bad block - seq:810559520. bno:170473264. time:707406346
beg:21280 cks:21061
calculated check value: 9226
Reread of seq=37288, blocknum=1, file=/ARCH/arch_1_37288_632509987.dbf, found same corrupt data
Reread of seq=37288, blocknum=1, file=/ARCH/arch_1_37288_632509987.dbf, found same corrupt data
Reread of seq=37288, blocknum=1, file=/ARCH/arch_1_37288_632509987.dbf, found same corrupt data
Reread of seq=37288, blocknum=1, file=/ARCH/arch_1_37288_632509987.dbf, found same corrupt data
Reread of seq=37288, blocknum=1, file=/ARCH/arch_1_37288_632509987.dbf, found same corrupt data
***
信息比较详细,说37288号归档日志Header损坏,无法读取数据。
提一个小问题:如果你遇到了这样的错误?会怎样思考?
如果这个归档日志损坏了,其实我们仍然有办法跳过去,继续尝试恢复其他日志,但是客户数据重要,不能容忍不一致性,这时候就只能放弃部分数据,由前台重新提交数据了。这在业务上可以实现,也就不是大问题了。
好了,问题是为什么日志会损坏?是如何损坏的?
我首先要做的就是,看看日志文件的内容,通过最简单的命令将日志文件中的内容输出出来:
strings arch_1_37288_632509987.dbf > log.txt
然后检查生成的这个日志文件,我们就发现了问题。
在这个归档日志文件中,被写入了大量的跟踪文件内容,其中开头部分就是一个跟踪文件的全部信息。
这是一种我从来没有遇到过的现象,也就是说,当操作系统在写出跟踪文件时,错误的覆盖掉了已经存在的归档文件,最后导致归档日志损坏,非常奇妙,从所未见。
最后我的判断是,这个故障应当是操作系统在写出时出现了问题,存在文件的空间仍然被认为是可写的,这样就导致了写冲突,出现这类问题,应当立即检查硬件,看看是否是硬件问题导致了如此严重的异常。
Dump file /ADMIN/bdump/erp_p007_19216.trc如此少见的案例,在此与大家分享。
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /DBMS/erp/erpdb/10g
Linux
eygle.com
2.6.9-34.ELhugemem
#1 SMP Fri Feb 24 17:04:34 EST 2006
i686
Instance name: erp
Redo thread mounted by this instance: 1
Oracle process number: 22
Unix process pid: 19216, image: oracle@eygle.com (P007)
*** SERVICE NAME:() 2010-11-10 10:37:26.247
*** SESSION ID:(2184.1) 2010-11-10 10:37:26.247
*** 2010-11-10 10:37:26.247
KCRP: blocks claimed = 61, eliminated = 0
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 61/61 = 1.0
Max compares per lookup = 0
Avg compares per lookup = 0/61 = 0.0
----------------------------------------------
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 61/61 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 1426/1426 = 1.0
----------------------------------------------
GPAYMENTdxn
AP_CHECKS
Q(xn
.1=N
Gxn
.1=N
^0e
^0e!
^0e"
^0e#
^0e$
^0e%
^0e&
^0e'
eygle.com!/
^0e(
^0e)
^0e*
^0e+
^0e+
^0e&
^ij1
R0:b
Q(xn
PaymentsN
a'VND
Userxn
AP_INVOICE_PAYMENTS
105273
5406105305-20101020-003
3001CASH CLEARING
CREATED
Dump file /ADMIN/bdump/erp_p002_19206.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /DBMS/erp/erpdb/10g
Linux
eygle.com
2.6.9-34.ELhugemem
#1 SMP Fri Feb 24 17:04:34 EST 2006
i686
Instance name: erp
Redo thread mounted by this instance: 1
Oracle process number: 17
Unix process pid: 19206, image: oracle@eygle.com (P002)
*** SERVICE NAME:() 2010-11-10 10:37:26.263
*** SESSION ID:(2187.1) 2010-11-10 10:37:26.263
*** 2010-11-10 10:37:26.263
KCRP: blocks claimed = 84, eliminated = 0
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 84/84 = 1.0
Max compares per lookup = 0
Avg compares per lookup = 0/84 = 0.0
----------------------------------------------
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 84/84 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 880/880 = 1.0
----------------------------------------------
^A&A
^1b#
^1b!
^1b"
^0e'
^Mj8
^;&3
2010PS_Legal Entity
^6&L
Eoi_VND
Quick Payment: ID=47708
Cn/a
UNSENT
^9&1
HPAYMENT
CREATEDNAP_CHECKS
^0e)
Hxn
Dump file /ADMIN/bdump/erp_p001_19204.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /DBMS/erp/erpdb/10g
Linux
eygle.com
2.6.9-34.ELhugemem
#1 SMP Fri Feb 24 17:04:34 EST 2006
i686
Instance name: erp
Redo thread mounted by this instance: 1
Oracle process number: 16
Unix process pid: 19204, image: oracle@eygle.com (P001)
*** SERVICE NAME:() 2010-11-10 10:37:26.372
*** SESSION ID:(2189.1) 2010-11-10 10:37:26.372
*** 2010-11-10 10:37:26.372
KCRP: blocks claimed = 132, eliminated = 0
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 132/132 = 1.0
Max compares per lookup = 0
Avg compares per lookup = 0/132 = 0.0
----------------------------------------------
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 132/132 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 3219/3219 = 1.0
----------------------------------------------
^ij!
^ij$
^ij!
@e>df
>df^>df
Userxn
Chen Restaurant
300190143
CASH CLEARING
AP_CHECKS
CREATED
ACCOUNTED
^ij!
CHECK
en/a
Quick Payment: ID=47708
n/a^n/a
CHECK
Chen Restaurant
210301
5&1`
54^`
^1b$
^1b&
^1b6
^1b,
^1b-
^1b4
^1b5
^1b0
^1b2
Dump file /ADMIN/bdump/erp_p000_19202.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /DBMS/erp/erpdb/10g
Linux
eygle.com
2.6.9-34.ELhugemem
#1 SMP Fri Feb 24 17:04:34 EST 2006
i686
Instance name: erp
Redo thread mounted by this instance: 1
Oracle process number: 15
Unix process pid: 19202, image: oracle@eygle.com (P000)
*** SERVICE NAME:() 2010-11-10 10:37:26.386
*** SESSION ID:(2190.1) 2010-11-10 10:37:26.386
*** 2010-11-10 10:37:26.386
KCRP: blocks claimed = 181, eliminated = 0
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 181/181 = 1.0
Max compares per lookup = 0
Avg compares per lookup = 0/181 = 0.0
----------------------------------------------
----- Recovery Hash Table Statistics ---------
Hash table buckets = 32768
Longest hash chain = 1
Average hash chain = 181/181 = 1.0
Max compares per lookup = 1
Avg compares per lookup = 8629/8629 = 1.0
----------------------------------------------
^ij0
AGENT_STATUS_MARKER
^AGENTS_MARKED
R0:b
^E!
^1b
^1b
^1b!
^1b!
^1b"
^1b"
^1b#
原文:http://www.eygle.com/archives/2010/11/recover_archivelog_corruption.html
星期一, 一月 25, 2010
《Oracle DBA手记》- 一书出版
今天,收到了出版社快递而来的《Oracle DBA手记》一书的24小时小样,这个小样通过之后,书就可以成批印刷,指日可待了。最快的估计是下周可以上市了。
拿到这本书时,心里的感觉是异样而欣喜的。周老师说她放下心来,我的心却是跳动起来。
当我读了杨小勤(博文视点设计总监,本书美编)的设计思路时,明白了这种异样的来源。这本书的名字里有手记两个字,所以小勤将书本的设计创意朝着"记事薄"的方向发散,我拿在手上第一个异样的感觉就是由此而来:仿佛是一个笔记本一样熟悉,没有书本的生硬。
我细细体味了小勤的设计思路,想不到封面的每一个元素都是自有其含义的精心之思,这就是设计,我从不熟悉的领域得到了设计的质感和触手那一刻设计给我的额外体验。
欣喜来自于书籍的排版与印刷,
清晰、清秀的板式,代码的处理,图片的排列,甚至每个章节的布局,都是精心设计的,这一切远远超出我的预期,Kamus再也没有理由嘲笑我的书都是打印版
的Word文档了。那一刻的欣喜让我产生了再写一本书的冲动,如果一本书能像艺术品一般精致,完全会激发作者的创造热情。

这就是我拿到这本样书的两个感觉,刚刚坐在沙发上,读了老杨的一篇文章,深感阅读的乐趣。
现在,这个家里已经有这样一摞书本了:

定翔在书末记叙了这本书的诞生过程,对照我在前言里的描述,大家可以了解这本书的前世今生。感谢博文大家伙的辛苦认真,才有了这本令我感到异样和欣喜的书。
说实话这本书的出版过程曾经让我感到冗长,而且最后在Deadline时把不少压力留给了我,但是现在看起来一切努力都是值得的。
做一本对得起读者的书,出版社已经完成了他们的职责,剩下的就是书本的内容了,这,要靠我们五个兄弟去接受读者的检验。Ok,We are Ready!
星期日, 十二月 21, 2008
《深入解析Oracle》一书出版
链接:http://www.eygle.com/archives/2008/12/oracle_internals_release.html
今天一早,收到了出版社寄来的《深入解析Oracle》样书,新书的设计和印刷非常不错,个人感觉很满意。
封面的磨砂手感很好,内页的纸张质量也很好,纸张厚重、纯白,整本书比以前明显厚了不少,但是定价却是和2004年的《Oracle数据库DBA专题技术精粹》一书相同。2004~2008,看来经济危机也有好处,出版社在定价上让出了空间。
拍了几张照片,和大家分享一下。
以下是2004年到2008年,和我有关的几本书的全家福:
![]() |
这些书的确投注了我不少的心血:
![]() | ![]() |
总体说来,人民邮电出版社这一次出版的书,是几本中装帧、排版、印刷最棒的一次,谢谢人邮、谢谢我的编辑杜洁小姐。
书的硬指标提高了,剩下的就是软实力,也就是内容了,那么期待这本书,到达读者手里的时候,也能够让大家满意。
谢谢你们的支持,谢谢在2008年岁末,又有了一件可以让我眼前一亮的书本!
btw:今天编辑告知,《循序渐进Oracle》一书再次重印了800本,那么这本书累计有8800在市面上了,Mark一下。
《深入解析Oracle》一书出版
链接:http://www.eygle.com/archives/2008/12/oracle_internals_release.html
今天一早,收到了出版社寄来的《深入解析Oracle》样书,新书的设计和印刷非常不错,个人感觉很满意。
封面的磨砂手感很好,内页的纸张质量也很好,纸张厚重、纯白,整本书比以前明显厚了不少,但是定价却是和2004年的《Oracle数据库DBA专题技术精粹》一书相同。2004~2008,看来经济危机也有好处,出版社在定价上让出了空间。
拍了几张照片,和大家分享一下。
以下是2004年到2008年,和我有关的几本书的全家福:
![]() |
这些书的确投注了我不少的心血:
![]() | ![]() |
总体说来,人民邮电出版社这一次出版的书,是几本中装帧、排版、印刷最棒的一次,谢谢人邮、谢谢我的编辑杜洁小姐。
书的硬指标提高了,剩下的就是软实力,也就是内容了,那么期待这本书,到达读者手里的时候,也能够让大家满意。
谢谢你们的支持,谢谢在2008年岁末,又有了一件可以让我眼前一亮的书本!
btw:今天编辑告知,《循序渐进Oracle》一书再次重印了800本,那么这本书累计有8800在市面上了,Mark一下。
星期四, 十二月 11, 2008
DBA2.0的时代 - DBA将向何处去?
链接:http://www.eygle.com/archives/2008/12/dba20_road.html
最近接触和参与了很多关于DBA职业生涯发展的讨论,也有很多朋友问过我,DBA将向何处去?
思考了很多,在这里和大家分享一下关于DBA的我的看法。
其实会议起来DBA这个职业从诞生、发展到成熟,其实时间是非常短的,记得2000年左右,DBA的从业人群还非常少,而到现在的2008年,DBA的圈子已经越来越大,甚至传统意义上的DBA已经成熟的需要革新。这个行业的发展和变化也是如此之快。
上个月,ITPUB论坛和IT168举办了一个全国高校的巡回演讲活动,主题是如何成为一个Oracle DBA,我在北京参与了几次演讲,这个活动已经进一步将DBA这个词引入到了校园内,现在的学生能够接触到DBA这个概念的时间早的超乎我们当年的想象。
最近Oracle也推出了一个系列的主题活动,这就是DBA 2.0,这是一个非常好的词汇和概念,经过这么长时间的发展,DBA的确应该上升到了2.0时代。那么2.0时代是什么概念呢?
前几天在中国软件大会上,一个朋友和我探讨,他说:你觉得数据库将会发展向何方?当然自动化肯定是越来越普及的一个概念,DBA当何以为生?
这也是很多朋友提出过的一个问题,那就是当数据库软件越来越成熟和智能,我们DBA该走向何方?
最近在ITPUB上看到有朋友问,Oracle 10g的OEM是否好用,很多人的回答是:非常好用!
DBA 2.0的时代多少和这个工具有关。在Oracle Database 10g推出之后,随之引入的一个新产品Grid Control/Database Control,这个工具将原来基于客户端的OEM通过Web形式来展现,并且增加了大量强大的功能。
如果是第一次登陆,你会看到一个许可页面,页面中包含了Database
Control中需要进行授权使用的一些组件,这些组件需要单独的授权:tuning pack、diagnostic pack、Change
Management Pack、Configuration Management Pack、Provisioning Pack for
Database。也就是说,这些东西是要付费使用的(很多人呼吁Oracle取消这些组件的License费用,以便更多用户可以使用这个出色的工
具)。
当然,在Agree之后可以开始新的Database Control的全面体验,下面是我在很早很早以前抓取过这样一张图片:
![]() |
在最近的一个项目验收会上,我为用户展示了Oracle Database 10g的Database Control,并且我用四个字来形容这个强大的管理工具,他在对于一些传统问题的诊断和解决上,的确让人感觉:易如反掌!
以前需要用SQL或工具来追踪的SQL问题、性能问题等,现在使用新版的Database Control可以通过Web页面清晰快速的展现和定位。
以下图示是一个实例,通过OEM可以清晰的展示系统资源的使用情况及诊断概要信息等:
在我的《循序渐进Oracle》一书中,我也曾经用一章的内容来介绍这个工具。
而在SQL诊断部分ADDM更能够自动进行数据库问题的诊断并且给出调整和优化的建议等:
客户对于Database Control的感觉就是,这个工具真实的简化了用户的数据库的管理和监控工作,提高了用户的工作效率。改变就是如此简单。
总体说来,Oracle更倾向于将新的数据库特性描述称为一个具有主动性(proactive)的产品,能够自主的、主动的发现数据库的问题,并提出优化和解决方案,这些功能在Oracle Database 11g中被进一步的深化。
那么实际上,proactive这个词也许是我心目中低于2.0 的DBA的期望,一个优秀的DBA,在数据库越来越完善的时代,我们应该拥有更多的主动性、预见性,理想的应该能够对系统作出良好的规划和预期,将错误或 故障消灭在萌芽阶段,从而使数据库环境拥有更佳的稳定性;进一步的,一个2.0时代的DBA,应该能够从企业的发展及大局出发,为企业规划更合理的数据管 理方式、更有效的数据使用方式,从而不仅为企业节省投资,而且能够为企业创造更多的价值,DBA的发挥空间还远远不止于此!
DBA 2.0,说老实话,我的确喜欢这个词!DBA 2.0的时代,要求我们DBA更加优秀!
历史上的今天...
>> 2007-12-09文章:
>> 2006-12-09文章:
>> 2005-12-09文章:
2005-12-09 EMC DISK Fault
如何快速的成为一个合格的Oracle DBA?
链接:http://www.eygle.com/archives/2008/11/become_dba_quickly.html
在这样一个清晨写下这样一个题目,是因为最近有越来越多的人问起我这个问题,我想还是试着把我的想法写下来。
1.快速有多快?
很多人都喜欢寻找捷径,所以经常问起快速,但是我经常反复告诉大家的是,没有捷径,或者说没有轻而易举的捷径可循。
当然快速两个字也是有意义的,这是这个快速的社会对于年轻人的要求,在《深入解析Oracle》一书的序言中,我写过这样一段话:随着技术以及时代的不断进步,社会留给DBA的成长时间越来越短,一个DBA从入门到成长为资深的时间不会超过2年。。。。张爱玲说过,成名要趁早。做技术的也是如此,成长越早越好,越快越好。
理解快速两个字的涵义,推荐仔细阅读我的《深入解析Oracle》一书序言,这里总结了很多我的学习经验和学习历程:
http://www.eygle.com/archives/2008/11/oracle_internals_preface.html
2.该读什么书?
Oracle方面的书籍无疑已经是汗牛充栋了,那么在杂陈的书籍中,我们该读什么书来入门?该读什么书来深入进阶呢?
我曾经推荐了几本书,并且我的观点是:书不在多,精读则灵。所以,认真细致的阅读对于学习是必不可少的。
等你进入了Oracle的大门,然后怎么阅读,读什么,就完全可以自己把握了。
推荐阅读:书不在多,精读则灵 - Oracle入门书籍推荐
http://www.eygle.com/archives/2006/08/oracle_fundbook_recommand.html
3.如何获得成功?
无疑每个人都热切的期待成功,那么如何才能获得成功?
我曾经总结了一个简单的公式,罗列了我认为及其重要的成功因素:兴趣 + 勤奋 + 坚持 + 方法 ≈ 成功
如果你对数据库感兴趣,由兴趣推动学习,再加上勤奋的努力,坚持不懈的探索,找到合适的方法,那么这就是你的快速学习之路,快速成功之路。
推荐阅读:
http://www.eygle.com/archives/2005/12/what_kind_of_dba_we_need.html
4.三种境界
关于境界,我在多篇文章中都谈到过,最早在《Oracle数据库性能优化》一书的序言中我引用了王国维的三种境界:
古今之成大事业、大学问者,罔不经过三种之境界。
"昨夜西风凋碧树。独上高楼,望尽天涯路。"此第一境界也。
"衣带渐宽终不悔,为伊消得人憔悴。"此第二境界也。
"众里寻他千百度,蓦然回首,那人却在灯火阑珊处。"此第三境界也。
这三种境界分别代表了,打下坚实的基础,不懈的坚持,峰回路转的提升,你在学习过程中,一定会面对这样的阶段和情形,所以要有一定的思想准备,坚持不懈。
推荐阅读:
http://www.eygle.com/archives/2005/08/ecinieoracleouo.html
5.由点及面、深入浅出
在学习方法上,我主张由点及面、深入浅出,在《深入浅出Oracle》一书的序言中,我这样写道:
书中贯彻的也是我一直主张的"由点到线再及面"的学习方法。特别是对于初学者,如果没有经过专门的培训和系统学习,那么 自己通过实践的学习和思考就应当深入,在知识上,从某个角度来说,是"不患寡,而患不精深"。在我们遇到问题时,就应该不断深入研究,直至问题的核心本 质,这样通过一个案例或实际问题的诊断学习和研究,我们就可以带动很多连带知识的学习,这样从一个点深入下去就形成一条线,再横向扩展就可以形成一个知识 网,解决和研究的问题多了,就可以逐渐覆盖一个面,形成一个知识体系,这样慢慢的你就会觉得学习不再困难,而是一件得心应手的事情。
推荐阅读:
http://www.eygle.com/archives/2008/10/sbsoracle_preface.html
6.工作机会
在工作选择上,如果能够快速进入Oracle的领域可能是幸运的,但是如果第一份工作没有找到理想的位置,那么接下来的职业道路可能就会稍微曲折一些。
很多朋友在进行了一段时间的学习之后,对转型迫不及待甚至焦虑不堪,这是不对的,在工作中应当切忌浮躁,我们每个人从毕业到工作、再到找到适合自己的位置,这通常都要经过一个较长的时期,学习、思考、进步、再次出发,所以要知道有时候等待是过程的必须。
如果你手上已经有了一份工作,那你需要做的是,做好它,哪怕那不是你喜欢的!
你必须证明给别人看你有做好一件事情的能力,别人才会给你下一个机会,如果你从来没能很好的完成一项任务,那你应该冷静的反省一下。
对于处在这样境地的朋友们,我有16个字可供借鉴:去除浮躁,认真学习,不断积累,寻找机遇
推荐阅读:
http://www.eygle.com/archives/2008/06/oracle_and_dba.html
7.如何在有限的环境中学习?
很多朋友的工作环境、条件有限,可能没有小型机、可能没有UNIX,那么如何学习和提高呢?
我想说的是不一定要在多大的生产环境里才能锻炼出高手。据我所知很多高手都是从个人的简单环境中学习成长起来的,最重要的是自己学习一定要深入,多思考,多试验。
有朋友说:小库一样练水平。这句话是很有道理的。也有朋友在ITPUB上不断试验和重复别人有价值的试验或测试,说:不是自己的,通过试验动手,变成自己的。也说得非常好。
推荐阅读:
http://www.eygle.com/archives/2006/07/question_answer_of_oracle_study.html
历史上的今天...
>> 2006-11-10文章:
>> 2005-11-10文章:
Linux上iSCSI配置
星期三, 六月 20, 2007
Oracle诊断案例-如何捕获问题SQL解决过度CPU消耗问题
Oracle诊断案例-如何捕获问题SQL解决过度CPU消耗问题 查看全文
星期二, 十一月 28, 2006
文档链接推荐!
学习经验谈:
如何学习Oracle-eygle的方法经验谈
http://www.eygle.com/archives/2005/...eoracleouo.html
Statspack相关文档:
关于Statspack,以下是我收集的一些连接
otn文档:
http://otn.oracle.com/deploy/perfor...f/statspack.pdf
http://otn.oracle.com/deploy/perfor...NG_dialeris.pdf
采用Statspack进行高级调优
http://www.oracle.com/global/cn/ora...?o13expert.html
http://otn.oracle.com/deploy/perfor...ing_otn_new.pdf
Installing and Running Statspack(for 8.0 8.1.5的扩展版本)
http://www.oracle.com/oramag/oracle...pack-other.html
Diagnosing Performance with Statspack:
http://www.oracle.com/oramag/oracle/00-Mar/o20tun.html
Advanced Tuning with Statspack
http://otn.oracle.com/oramag/oracle.../o13expert.html
Itpub精华:
STATSPACK,刚刚解决的一个问题,请大家注意!
http://www.itpub.net/showthread.php?s=&threadid=72037
StatsPack在数据库优化中的使用
http://www.itpub.net/showthread.php?s=&threadid=73500
Metalink文档(需要metalink帐号访问):
FAQ- Statspack Complete Reference
http://metalink.oracle.com/metalink...OT&p_id=94224.1
What is StatsPack and where are the READMEs?
http://metalink.oracle.com/metalink...database_id=NOT
Installing and Configuring StatsPack Package
http://metalink.oracle.com/metalink...database_id=NOT
Creating a StatsPack performance report
http://metalink.oracle.com/metalink...database_id=NOT
Others whitepaper:
http://www.osborne.com/products/007...133783_ch15.pdf
http://www.dbatoolbox.com/WP2002_06/statspack_01.pdf
http://my.oraperf.com/download/yapp_anjo_kolk.pdf
statspack分析实例
Statspack专题
http://www.eygle.com/statspack/statspack_list.htm
求助 oracle 吃cpu
http://www.itpub.net/showthread.php?s=&threadid=92560
看一下spreport,有什么建议啊
http://www.itpub.net/showthread.php?s=&threadid=105361
关于statspack的报告
http://www.itpub.net/showthread.php?s=&threadid=85180
各位班主和高手请留意!
http://www.itpub.net/showthread.php?s=&threadid=106156
db file scattered read-DB文件分散读取
http://www.eygle.com/statspack/statspack12.htm
星期二, 八月 29, 2006
sql.bsq与数据库的创建
« 警惕骗子-以同学名义行骗 | Blog首页 | 中国首届杰出数据库工程师评选前10名单 »
如果我们使用脚本创建数据库,那么最先运行的是一个叫做CreateDB.sql的脚本。
这个脚本发出CREATE DATABASE的命令,具体类似如下的例子:
| CREATE DATABASE eygle MAXINSTANCES 1 MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE '/opt/oracle/oradata/eygle/system01.dbf' SIZE 250M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/opt/oracle/oradata/eygle/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED UNDO TABLESPACE "UNDOTBS1" DATAFILE '/opt/oracle/oradata/eygle/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('/opt/oracle/oradata/eygle/redo01.log') SIZE 10240K, GROUP 2 ('/opt/oracle/oradata/eygle/redo02.log') SIZE 10240K, GROUP 3 ('/opt/oracle/oradata/eygle/redo03.log') SIZE 10240K; exit; |
在这个过程中,Oracle会调用$ORACLE_HOME/rdbms/admin/sql.bsq脚本,用于创建数据字典。
这个文件的位置受到一个隐含的初始化参数 (_init_sql_file )的控制:
SQL> @GetParDescrb.sql NAME VALUE DESCRIB |
如果在创建过程中,Oracle无法找到sql.bsq文件,则数据库创建将会出错.
如果我们移除sql.bsq文件,再看这样一个数据库创建过程:
[oracle@jumper scripts]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Fri Aug 18 15:45:26 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to an idle instance. SQL> startup nomount; Total System Global Area 252777592 bytes
|
此时日志中会记录:
| Fri Aug 18 15:45:49 2006 Errors in file /opt/oracle/admin/eygle/udump/eygle_ora_3632.trc: ORA-01501: CREATE DATABASE failed ORA-01526: error in opening file '?/rdbms/admin/sql.bsq' ORA-07391: sftopn: fopen error, unable to open text file. Error 1526 happened during db open, shutting down database USER: terminating instance due to error 1526 Fri Aug 18 15:45:49 2006 Errors in file /opt/oracle/admin/eygle/bdump/eygle_ckpt_3623.trc: ORA-01526: error in opening file '' Instance terminated by USER, pid = 3632 ORA-1092 signalled during: CREATE DATABASE eygle MAXINSTANCES 1 MAXLOGHISTORY... |
这就是sql.bsq文件在数据库创建过程中的作用。知道了这个内容之后,我们可以通过手工修改sql.bsq文件来更改数据库字典对象参数,从而实现特殊要求数据库的创建或测试自定义库。
我们也可以通过修改_init_sql_file参数来重定位sql.bsq文件的位置。
ixora网站上有一篇文章可以参考:
http://www.ixora.com.au/tips/creation/bsq.htm
Itpub上的相关文章:
http://www.itpub.net/199099.html
-The End-
星期四, 八月 24, 2006
中国首届杰出数据库工程师评选前10名单
今天下午,中国首届杰出数据库工程师评选颁奖典礼于北京国宾宾馆举行。
十位最终进入前十名的选手一一亮相,选手名单如下,排名不分先后:
王明胜 李强 段云峰 万正勇 邢海捷 盖国强 齐红胤 牛新庄 冯春培 汪海
本次活动也终于落下了帷幕。
以下是个人在现场的照片一张:
-The End-
在Windows上命令行如何手工起停Oracle
« 拥有归档日志 如何恢复一个丢失的数据文件 | Blog首页 | 中国首届杰出数据库工程师评选尘埃落定 »
在命令行我们可以用net命令手工启动Oracle服务:
| C:>net start
oracleserviceeygle OracleServiceEYGLE 服务正在启动 .............. OracleServiceEYGLE 服务已经启动成功。 |
在正常情况下,数据库即可随之启动,如果数据库不能启动,则可以通过sysdba身份连接进入数据库,手工mount并Open数据库
|
C:>sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 8月 18 11:17:16 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> select instance_name from v$instance; INSTANCE_NAME SQL> exit |
停止同样很简单,net命令,一行即可:
| C:>net stop
oracleserviceeygle OracleServiceEYGLE 服务正在停止...... OracleServiceEYGLE 服务已成功停止。 |
在Windows上,使用net命令能否启动数据库,还受到一个注册表参数的影响,这个参数是:ORA_<SID>_AUTOSTART
对于我的Oracle10g数据库,这个键值位于HKEY_LOCAL_MACHINESOFTWAREORACLEKEY_Ora10g,我的数据库SID为eygle,这个参数就是:ORA_EYGLE_AUTOSTART
当这个参数设置为True时,当我们启动服务时,Oracle数据库就会随之启动;反之,数据库就不会启动。
测试1,ORA_EYGLE_AUTOSTART=true时:
|
C:>net start oracleserviceeygle
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 22 09:27:35 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> select instance_name from v$instance; INSTANCE_NAME |
测试2,ORA_EYGLE_AUTOSTART=FALSE时:
|
C:>net start oracleserviceeygle
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 22 09:30:03 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. 已连接到空闲例程。 SQL> |
-The End-
星期六, 八月 19, 2006
Oracle入门书籍推荐
« 关于《深入浅出Oracle》的答读者问 | Blog首页
很多朋友要我帮忙推荐一下Oracle的入门书籍,能够了解Oracle的基本概念、基本知识的那种。
我就免为其难,推荐几本。
首先我想强调的一点是,任何一本系统的Oracle书籍只要认真读下来,都会有不错的收获,读书最忌讳的是虎头蛇尾,浅尝则止。
第一本要推荐给大家的是Oracle的概念手册,这本手册是无数DBA学习的起点:Database Concepts
这是Oracle的官方文档,详尽的介绍了Oracle的基本概念,是DBA经常需要翻阅的参考书,也是最好的入门学习资料,如果大家阅读英文不存在问题,请先阅读本书,这本书可以在Oracle的官方文档站点Tahiti找到:
http://www.oracle.com/pls/db102/homepage?remark=tahiti
Oracle10gR2的下载地址为:
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14220.pdf
下载之前你可能需要注册一个OTN的免费帐号。
第二本要推荐的是Thomas Kyte的《Expert One on One: Oracle》,这本书的中译本,被称为《Oracle专家高级编程》。
毋庸多说,这本书是Oracle界的经典之作,最初是基于Oracle8i进行写作的,现在Tom已经出版了基于Oracle9i/Oracle10g的升级版,书名为《Oracle Database Architecture 9i and 10g Programming Techniques and Solutions》,现在中文译本也已经快要出版了。
这本书的前几章以介绍Oracle的基础知识为主,后几章则以介绍开发相关的内容为主,侧重于管理DBA的朋友可以着重阅读一下该书的前几章。
Expert One on One: Oracle 这本书中文版大家可以参考:
http://www.itpub.net/showthread.php?threadid=224536
其英文版本参考:
http://www.itpub.net/showthread.php?threadid=316444
Oracle Database Architecture 9i and 10g Programming Techniques and Solutions 这本书的英文版参考:
http://www.itpub.net/showthread.php?threadid=486715
我强烈推荐大家仔细阅读本书。
最后一本推荐给大家可以用来做参考书的是《ORACLE8i数据库管理员手册》,这本书也出过Oracle9i的版本,对于一些基本概念本书可以用来翻看。在ITPUB上大家可以参考以下链接:
http://www.itpub.net/showthread.php?threadid=238615
书不在多,精读则灵,希望大家能够静下心来认真阅读,然后一定会有所收获的。
-The End-
关于《深入浅出Oracle》的答读者问
« 使用oradim恢复windows上的数据库 | Blog首页 | Oracle入门书籍推荐 »
有朋友在ITPUB上对本书提出了一点中肯的批评,就是:
偶然看倒一些文章介绍某些值是如何得到的提到一些隐含参数还能接受。难道真有人去修改这些东西?
基础和原理的东西还是最重要。
好比我们高考做数学题一样,平时可能知道一些特殊技巧。
到考场上还是用的自己最熟悉的常规办法。
对于这样的批评,以下是我的回复:
这批评比较中肯.俺以后注意.不过一部分隐含参数是为了将问题的根本介绍出来.
比如ASH的采样间隔是1秒
所以我提到一个参数:
NAME VALUE DESCRIB
------------------------------ ---------- ------------------------------------------------
_ash_sampling_interval 1000 Time interval between two successive Active Session
samples in millisecs这个参数就是控制这个时间的.知道这个对于实际工作可能也没有用,但是我试图告诉大家的是,Oracle的每一个结果或者限制都是有来源的。知道这些对Oracle的理解就可以多一点。
而有一些众所周知的隐含参数,比如跟恢复有关的,本书也还是提到了.
有些内容我也是斟酌再三,很多内容最后被删减掉了。比如第一章,最后2页我写了BBED,关于这个实在是斟酌再三的,国外的作者是肯定不会写这个,而我只是想让大家知道还有这样一个东西,这样一个方法,一把刀是用来伤人还是救人,这需要读者自己去衡量。关于这2页内容是否适当,我现在也是没有一个确定性的。
基础和原理肯定是非常重要的,本书的一些章节介绍的可能还是比较深了.如果是广泛普遍的介绍,Kevin Loney的一些经典国内的译本都有了,可能大家都有看过了;结构完善的,Tom的书也无人能出其右.
所以本书在写作中为了保持自己的特色,难免走一点偏锋,这是作者的无奈.另外一方面这本书中更多的是介绍了我自己这么多年来的研究和学习历程及方法,有所偏颇也是难免。
大家可以试想一下,已经有了那么多经典在前面,我们还可以怎样写?我非常期待大家有好的建议给我:)
记录一下,也是对读者的一点回答。
星期五, 八月 18, 2006
使用oradim恢复windows上的数据库
很多朋友都问过这样的问题:
在Windows上如果系统崩溃了,数据文件、控制文件、日志文件等都还在,怎样来恢复Oracle数据库?
前几天重新安装了系统,正好需要恢复一下数据库。
如果软件也损失了,那么需要重新安装一下数据库软件。
很多人抱怨我的新书很少关于Windows的内容,实际上,Windows和Linux/Unix上的操作没有什么不同,Windows本身就是一个仿Unix的系统。
那么好吧,我还是用一个系列的文章介绍一下我所使用的Windows系统,以及我所认为的数据库系统无关性。
大家可以跟随我看一下这样一个过程。
首先开启一个cmd命令行窗口。
开始->运行->cmd
我的Oracle软件备份在D:oracle :
D:>dir oracle D:oracle 的目录 2006-08-16 14:14 <DIR> . |
我的数据文件位于D:oradata下:
D:>dir d:oradata d:oradata 的目录 2006-08-16 14:25 <DIR> . |
现在让我们用oradim创建一个实例,实际上也就是创建一个Windows服务:
| C:>oradim -new -sid eygle 实例已创建。 |
我们用net命令可以查看系统启动了哪些服务,我们看到Oracle的服务已经启动:
C:>net start ............... 命令成功完成。 |
如果你的系统装了一些Unix增强工具,那么可以通过grep过滤一下:
| C:>net start |grep Oracle OracleServiceeygle |
Unix命令工具可以在Sourceforge (http://sourceforge.net/projects/gnuwin32/) 下载.
此时我们就可以通过启动实例,挂接原有数据库,启动Oracle数据库了。当然你可能还有一些其他工作需要完成,比如重建口令文件等。
如果你想删除这个服务,那么也很简单:
| C:>oradim -delete -sid eygle 实例已删除。 |
当然做好备份仍然是最重要的,我见过有的企业将文件分散在很多逻辑分区上,结果随系统崩溃丢失了部分文件,损失也是相当惨重的。
在Linux/Unix上不需要服务来启动实例,也就不存在这样类似的操作。不过在命令行操作,一切都是类似的。
系列文章参考:
http://www.eygle.com/archives/2006/08/oracle10g_on_windows.html
在Windows上安装Oracle10gR2
因为《深入浅出Oracle》一书中,多数以Linux/Unix平台为写作依据,前几天在ITPUB上遭到了读者的指责,虽然该读者的观点有所偏激,但是我仍然决定开始写一个系列的文章,陈述在不同平台上管理Oracle的异同,目的在于消弭不同平台之间管理和学习Oracle的差异。
算是对部分读者的一点补偿,也算是对Windows平台内容的一个补充。
为了这个目的,今天在Windows上开始装了一套Oracle10g,已经很久没在笔记本上安装Oracle了,想不到还遇到了一系列的问题,还好最后还是装上去了:)
查看日志文件,看到一些和以前不同的地方,在安装数据库之前,alert文件中记录了一段系统信息:
| ORACLE V10.2.0.1.0 - Production vsnsta=0 vsnsql=14 vsnxtr=3 Windows XP Version V5.1 Service Pack 2 CPU : 1 - type 586 Process Affinity : 0x00000000 Memory (Avail/Total): Ph:560M/1023M, Ph+PgF:1574M/1949M, VA:1940M/2047M |
包括了系统的内存和CPU等信息。
从明天开始要写一点Windows上的东西了:)







