MSN上的闲聊

A: 现在搞起mysql了?
B: 嗯
A: 现在比较多的项目在使用mysql了,所以现在mysql也变成一种趋势了
B: 在互联网行业,MySQL分布式是大势所趋
A: 呵呵,是的,现在我们这边也有很多mysql的项目在线上
B: 不过目前国内MySQL的交流是不太多
B: 而且要招一个合适的人相当的难
A: 呵呵,是的,很多mysql都是从Oracle转过来或者是带着做的,不过有Oracle的技术,转或者带着做问题还不是很大
A: 对于互联网的应用来说,DB这块主要的还是HA这块是重中之中,Mysql这块在分布式来说做的还行
B: 基本的技术原理什么的是没啥难的,不过要用好,尤其是分布式架构,要做好还是需要功力的
A: 呵呵,是的,对于技术这东西很多还是考经验和实践,上了几个项目后会有很大的积累
B: 嗯,是这样的
B: 去年我们开始推MySQL的时候,开发人员都有很大的担心和抵触
B: 现在是想不让他们用都不行,哈哈
A: 哈哈,其实mysql用起来还行,有些数据仓库还使用的呢
A: 但是对于大容量,高并发的事务处理,mysql还是有待提高的
A: 现在很多做互联网的,除了核心库外,别的基本上都在往这上面转,其实很多时候还是人的心理面在作梗
B: 分布式,其实把很多东西都交给应用架构了
B: 对于数据库本身,要求反倒很低了,就是用来存放持久数据而已
A: 没错,那样DB真的是DB了,就是简单的存储了
A: 哈哈,没错,哎,很多东西大家的想法很一直
B: 嗯,技术就那么点,关键是把想法落实,做出东西来
A: 是的,所以说你们那边还是比较幸福的
很多东西好落实
B: 我们也是在不断摸索
B: 不过摸索的过程,是比较长经验值的
A: 是的,摸索只是一种开始,实施的过程才是真正验证摸索的阶段,如果只有摸索,没有实践,那也只是空话,所以说你们那边是幸福的,很多时候有开始,有结束,但是很多时候,很多单位不是这样,摸索永远当作一种摸索,没有结束,呵呵

http://www.mysqldba.net/viewthread.php?tid=18&extra=page%3D1

DataGuard环境慎用alter tablespace drop datafile

Oracle10g开始提供alter tablespace drop datafile的特性,允许删除没有数据的空文件。本来这是一个还有那么点用的功能,可是,慎用,有bug。

ALTER TABLESPACE ... DROP DATAFILE ... produces bad
redo which typically does not then drop the datafile
either during recovery or at a standby. This can lead
to subsequent errors such as ORA-600 [3689] of
subsequent redo tries to add new datafile.

如果在data guard环境中,可能你在主库这么一执行,备库就挂了,报ora-600

ORA-00600: internal error code, arguments: [3689], [28], [], [], [], [], [], []

这个bug 5623467,从10.2.0.1一直影响到10.2.0.4,好在10.2.0.4后出了一个 Data Guard Physical Recommended Patch Bundle #1(Doc ID: 7936993.8),总算是修复了这个问题,已经升级或者准备升级到10.2.0.4的朋友,一定要主机打上这个patch bundle,Oracle总是在一些你不注意的地方留个坑,一不小心就让你灰头土脸。

Workaround
  Avoid the use of the ALTER TABLESPACE .. DROP DATAFILE ..
  command on the primary.

10.2.0.4 Data Guard Physical Recommended Patch Bundle #1主要修复的bug如下:

Bug:3934160 Intermittent OERI[ksfdgfnm1]
Bug:5126719 LGWR may terminate the instance due to ORA-16164
Bug:5404871 Local first not used archiving closed thread at higher protection mode
Bug:5476236 RFS logminer client inoperative after physical standby switchover to primary
Bug:5623467 Corrupt redo from ALTER TABLESPACE DROP DATAFILE
Bug:6024730 V$BACKUP . STATUS shows “UNKNOWN ERROR”
Bug:6070225 Terminal recovery encounters ORA-308 when RMAN is active
Bug:6074620 LGWR unconditionally writes to trace file
Bug:6345573 OERI [krsmseqa.2] during terminal recovery
Bug:6469211 Slow startup with many log files on ASM
Bug:6490140 LGWR may crash the instance
Bug:6711853 V$ARCHIVE_DEST does not show new ‘binding’ on the physical standby
Bug:6840740 Switchover to physical standby allowed even if there are no physical standbys
Bug:6874522 V$DATAGUARD_STATS . VALUE may be NULL in logical standby
Bug:6882739 Controlfile enqueue contention from DataGuard
Bug:6919819 Flashback database may not correctly flashback some data blocks
Bug:6941717 Logical standby considered synchronous during dictionary load
Bug:6954829 OERI[kcramr_8] during media recovery
Bug:6955744 Archive log is not automatically registered when second CDC is built
Bug:6976005 CF enqueue held for longer than needed with flashback enabled
Bug:6980597 Heartbeat redo is not generated for single instance primary with RTA logical
Bug:7013124 30 second delay for 2nd pass instance recovery
Bug:7044551 ALTER TABLESPACE BACKUP CONTROLFILE TO TRACE can be slow
Bug:7136489 Unwanted trace lines “FAIL: tkrsf_al_read: Invalid archive log file contents”
Bug:7140204 OERI[ktupdb_0] undo block corruption on readable standby
Bug:7159505 Standby MRP stuck when no recovery area space left
Bug:7197445 Standby Recovery session cancelled due to ORA-600 [3020]
Bug:7257461 ORA-16146 during block media recovery on a primary with no standby destination
Bug:7257770 OERI:krffReserveCFEntry_1 / flashback disabled in RAC
Bug:7276960 Intermittent ORA-16014 errors in Streams environment
Bug:7432601 Hang holding FAL queue latch
Bug:7460818 Flashback logs are not balanced between redo threads
Bug:7494333 MRP may request wrong (too old) log
Bug:7568556 Slow standby recovery
Bug:7593835 Write failure when “selecting” new SRL is not handle properly
Bug:7643632 High log file sync in Data Guard maximum availability (sync) mode
Bug:8230457 Physical standby media recovery gets OERI[krr_media_12]
Bug:8283650 A dump can occur under krsmchksl with trace enabled
Bug:8287155 Final gap error (ORA-16416) reported during switchover to standby
Bug:8304589 Terminal recovery may hang

招聘这事儿

最近事情偏多,blog更新几近于无,这不是一个好现象。事情多,业务增长快,不可避免的,需要招人。经过权衡考虑,我们将在北京设置一个远程产品DBA团队,负责数据库管理/优化/存储备份管理等。这是一个巨大的挑战,我们的工作模式,我们的沟通方式,我们的技术架构,都需要为此做出改变。变化就是机遇,所以这也是一个很好的机会。

新的团队,我们需要一个Team Leader,需要你:
1、精通Oracle/Mysql中至少一个关系型数据库,熟悉数据库理论基础,有一定的技术前瞻力和执行力。
2、熟悉linux/unix操作系统,能熟练使用shell/perl,熟悉SAN存储。
3、具有一定的团队管理经验,能带领团队一起达成团队目标。
4、沟通能力强,积极主动,具备高度的激情与创新能力
5、具备一定的系统架构规划设计能力

同时,我们还需要专业的Oracle DBA,需要你:
1、精通Oracle数据库系统架构与管理
2、熟悉物理与逻辑data guard,streams或者RAC等高可用架构
3、熟悉Linux/unix操作系统,能熟练编写Shell/Perl脚本
4、具备一定的主机/存储的硬件知识能力者优先
5、有想法,具备良好的学习能力

MySQL做为我们后续一个非常重要的发展方向,今年将超过200台的规模,需要专业的MySQL DBA
1、精通Mysql大型集群的批量管理与监控
2、熟悉MySQL高可用架构设计,熟悉MySQL的备份与恢复
3、熟悉Linux/unix操作系统,能熟练编写Shell/Perl脚本,能利用脚本完成大批量数据库的管理
4、具备一定的主机/存储的硬件知识能力者优先
5、有想法,具备良好的学习能力

以上职位,base在北京。同时如果想在杭州发展,也可以base在杭州。如果你有兴趣,赶紧行动。简历中请注明是应聘杭州还是北京的职位。
简历请发送至: jiangfeng#taobao.com

In Memory Undo与logical standby database

最近碰到了一个bug,导致逻辑备库重建,相当的郁闷。我们一个系统,包含一个主库,一个物理备库,一个逻辑备库。系统不久前刚从9i升级到10.2.0.4。5.30号因为系统维护,将原主库和物理备库做了一次switchover,切换没有什么问题,做了很多次了。这是逻辑备库突然报出了ora-600错误:

ORA-00600: internal error code, arguments: [2730], [331], [1], [13], [293130], [293130], [], []

ok,不用紧张,这个错误没啥问题。因为主库从9i升级到10g之后,为了保留降级的可能,compatible参数还是保留设置为9.2.0.0.0了,而这次切换,顺便把compatible改成了10.2.0.0.0,所以出现主备库的参数不一致了,就会报该错误。修改该参数即可。

但是,问题出来了:

ORA-00600: internal error code, arguments: [krvxbpx20], [1], [293141], [91], [96], [], [], []

Metalink上一查(Doc ID:761661.1),麻烦来了:

The ORA-00600: [KRVXBPX20] indicates that logical standby builder detects IMU (In Memory Undo) in the redo streams. Logical standby does not support IMU and enabling supplemental logging disables the IMU.

In customer’s case, supplemental logging is enabled in the original primary database, but it is not enabled in the original physical standby database. Prior to 11.2 (which has not been released yet at the time of writing), supplemental logging DDLs are not propagated to the physical standby database. Thus they had a situation where the primary has supplemental logging set, but the physical standby did not.

晕死,逻辑备库不支持IMU(In Memory Undo,10g新特性),所以要使用逻辑备库,必须在主库禁用IMU,否则将导致逻辑备库损坏,并只能重建。那为什么原来主库升级到10g之后,逻辑备库是正常的,而执行switchover切换到物理备库,才碰到问题呢?

我们的升级,是在主库执行升级脚,然后备库使用新版本的oracle软件直接应用主库传过来的日志的方式来完成整个系统的升级的。因为逻辑备库是在主库升级到10g后配置的,在执行exec dbms_logstdby.build生产数据字典信息的时候自动配置了supplement logging,而开启supplement logging将自动禁用IMU,所以未切换前逻辑备库是正常的。而问题在于,主库设置supplement logging的语句,并不会在物理备库上自动应用,这样实际上物理备库还是原来9i默认的未开启supplement logging的状态,这样一切换过来,问题就发生了。

如果你也在使用10g的逻辑保备库,要避免该问题,则可以:
1.直接在主库和物理备库都设置_in_memory_undo=false
2.在主库和物理备库检查supplement logging的状态

select supplemental_log_data_min as supp_log,
supplemental_log_data_pk as supp_pk,
supplemental_log_data_ui as supp_ui
from v$database;

SUPP_LOG   SUPP_PK    SUPP_UI
---------- ---------- ----------
NO         NO         NO

只要上述结果中,任意一列值为NO,则需要执行(物理备库可以mount状态或者open readonly状态执行):

alter database add supplemental log data (primary key, unique index) columns;