2 ashic ashic 于 2017.01.05 09:52 提问

Oracle如何避免partial write 10C

本人小菜鸟一枚,最近在学习MySQL(边学MySQL边对比Oracle)时遇到一个问题
MySQL通过double write避免了partial page write.这个partial page write感觉就相当于Oracle的split block.那么Oracle如何保证写脏块时不会产生split block呢?

我知道rman可以避免split block是因为它以oracle block size作为最小IO单位,如果发现checksum不一致,就会重读,通过反复读避免split block. 当执行手工begin backup命令时,each time a block is changed the datbase writes the before-image of the entire block to the redo stream before modifying the block. Then, the database also records the changes to the block in the redo log,通过将oracle block的前镜像写入redo,使得在恢复是能够获取oracle block的整个before-image,以此为基础,在通过redo中的记录进行恢复.所以如果想要恢复split block,是要有该split block的整个前镜像的吧.

但是在正常的dbwr写脏块时,是不会记录befor-image到redo的吧.那么Oracle怎么解决这个问题啊

1个回答

Zhanjr
Zhanjr   2017.01.05 10:18

oracle如何处理页断裂
oracle与mysql一样,采用的redo日志也是逻辑物理格式,但没有doublewrite技术。我一直就想着oracle这么牛逼的数据库,一定有它自己的方式来应对这种问题。找了N久资料,中文的英文的,包括咨询大神,基本能得出一个结论:oracle遇到页断裂问题,一样会挂,重启不来。但是oracle有一个相对简单的策略来恢复数据库到一致状态,备份+归档日志。备份保证了数据页不发生页断裂,加上归档日志增量可以恢复到某个时间点。为什么不做呢?我想一般使用oracle都会使用DataGuard做容灾,主库发生故障时,备库会承担起主库的责任,然后异常主库通过备份+归档日志的方式来恢复,虽然不如doublewrite技术快,但也是能恢复出来的。

Zhanjr
Zhanjr 回复Fan_-_: 如果觉得答案对你有所帮助麻烦点下采纳,谢谢
一年多之前 回复
ashic
ashic 回复Zhanjr: 再等等
一年多之前 回复
Zhanjr
Zhanjr 回复Fan_-_: 如果觉得答案对你有所帮助麻烦点下采纳,谢谢
一年多之前 回复
Zhanjr
Zhanjr 如果觉得答案对你有所帮助麻烦点下采纳,谢谢
一年多之前 回复
ashic
ashic 我也是找了好久资料,ITPUB啥的都问了,感觉他们都没说出个所以然,也许真的向您说的这样,谢谢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
influxdb {"error":"partial write: max-values-per-tag limit exceeded (100009/100000)
在用influxdb写数据的时候,突然出现如下的错误,我用的是到目前最新的版本1.2: java.lang.RuntimeException: {"error":"partial write: max-values-per-tag limit exceeded (100009/100000): measurement=\"t1\" tag=\"openId\" value=\"oGeG_0emq
ORA-29275: partial multibyte character
安装plsql dev 11后,访问数据库过程中,只要表中出现中文,则plsql dev报错:ORA-29275: partial multibyte character 问题原因: 服务器和客户端字符集不一致 查看方式: select userevn('language') from dual; echo '%nls_lang%' 解决方法: 配置环境变量NLS
Oracle 12C 新特性之表分区部分索引(Partial Indexes)
12c之前没办法在部分或指定的分区上创建索引,12c 版本中引入了Partial Indexes(部分索引), 无论是global还是local都可以有选择性的对部分分区创建索引。分区上有索引用索引,无索引全表扫,跨多分区中indexing有开有关时有用索引和全表的子集union all。 partial index有两个限制条件: 1、 表是分区表 2、 不能是唯一索引 3、 建表的
hadoop异常之Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
最近集群扩充,发现新添加节点后,有两个异常 1、reduce变得很慢,速度显示为百M但进度不变 2、reduce偶尔失败,抛出Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out. 异常分析,由于datanode没有修改hosts文件导致的,修改以后将新加机器添加到hosts,恢复正常
redis make test报错
!!! WARNING The following tests failed: *** [err]: Detect write load to master in tests/integration/replication-psync.tcl Can't detect write load from background clients. *** [err]: Detect write
InfluxDB - Writing Data with the HTTP API
There are many ways to write data into InfluxDB including the command line interface, client libraries and plugins for common data formats such as Graphite. Here we’ll show you how to create a d
Oracle 字符集修改(ORA-29275 )
今天有朋友数据库出现ORA-29275 部分多字节字符,对应的字段只能用to_char才能正常查询,感觉是字符集问题。询问字果然修改过字符集。 他的修改方式: SQL>STARTUP MOUNT;   SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;   SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;   SQ
Linux内核编译选项-3
Bus options (PCI etc.)  ---> I/O总线选项,由Interl在1992年初制订. 现在一般的总线类型都是PCI. 使用PCI总线的系统于1993年中期出现,从此成为主流. [*] PCI support        PCI支持,如果使用了PCI或PCI Express设备就必选 PCI access mode (Any)  --->  PCI访问模式,
Influxdb 1.2版本优化之旅(经验证,适用于influxdb1.4版本)
一、【常见异常】1、max series per database exceeded 异常err = max series per database exceeded:java.lang.RuntimeException: {"error":"max series per database exceeded:at org.influxdb.impl.InfluxDBImpl.execute(Inf...
避免笛卡尔积现象方式一
1 主要SQL语句   SELECT *   FROM (                 SELECT row_.*,                                 rownum rownum_                   FROM (                                     SELECT matnr,