有一次听一某个银行讲他们用Oracle,说到业务连续性,他们说,如果卡死的时候要么重启,要么切换。他们明显是走重启路线的,类似强制关机那种。当时他说了一句,主机宕机了就重启数据库。主机宕机情况下,Oracle从来没有让我失望过。
以上是别人的声音,我回想我自己经历(仅代表个人),似乎也是差不多。只是刚工作时候用Oracle8的时候有过几次断电,起不来,但是打几个命令也能启动。那几次断电是在高频写入的时候(每秒几十M的写入情况下)。静态断电就断电了,没事。从前看到很多人在windows上也就直接重启操作系统,从来没有刷新检查点,关闭数据库的操作。随着windows启动就启动了。大家就这样用的。之所以可以起得来是数据库的redo和undo保持了一致性。数据库起得来就是一致的,不一致就是起不来了。其实MySQL PG等数据库也是类似的。
今天看到个文章,MySQL主从切换后数据一致吗?结论就是方法一 重启优先于切换。这点上我觉得Oracle PG等也是一样的准则。我始终觉得不要动不动就切换,虽然各自数据库都能自动切换。
对于数据库来说99.99999%都起得来。极端问题极端处理,极端的时候人做一下也说得过去。工作快20年了,就没遇到过这种极端。(自己在实验环境恶意破坏训练除外)。
另外就是采用一致的架构,比如Oracle RAC,MySQL MGR(这两个最好同机房) ,OB和TiDB等分布式 (其实我也觉得最好是同机房,官方说可以跨机房)。这种都可以不用切换。
数据库本身其实很健壮(只要不是恶意删除),相信它。 数据库本身很脆弱(烂SQL与不匹配的硬件之间的矛盾导致数据库故障几乎都是SQL引起甚至可以蔓延到JVM的GC和OOM,或者是消息队列的堵塞)。而这些脆弱的点都是我们可以控制的,只要有意识。
select * from t where a=XXX or b=yyy.这种要ab两个列都要有索引,只有一个不行。有一次我看到一个这类情况,b列恰好没索引。我就问为什么要这样?(当然加索引也可以,不过我还是问了一下。)开发说要的,我说你查查呢?结果一查,最近两三年这个条件是不成立的(就没这样的数据)。开发很吃惊,去问业务是不是不做了?为什么最近几年没符合这个条件的,最后答复是不做这个业务了。最后结果也没错,但是结果空跑了全表。
宕机重启没让人失望过,只是有时候需求让人失望了。




