Maison > base de données > tutoriel mysql > le corps du texte

undo系列学习之读一致性(ORA-01555错误机制分析)

WBOY
Libérer: 2016-06-07 17:17:59
original
964 Les gens l'ont consulté

Oracle在读的过程中,数据是静止的,没有脏读,也就是,未提交的永远都不会被读到。我们可以理解为,Oracle在读的开始时,提前为

Oracle在读的过程中,数据是静止的,没有脏读,也就是,未提交的永远都不会被读到。我们可以理解为,Oracle在读的开始时,提前为他今后所要读的内容拍了一张”照片“,把所有内容全部定格在一个时间点上,,作为接下来读的依据。Oracle利用scn来实现这个理论,开始查询时,会确定一个select scn,这样就保证了事务槽里所有的scn都小于select scn。好比如,现在是12:21分,那么我之前所敲的字都在12:21分之前做的。

我们已经知道,undo段是循环使用,并且,Oracle只会把inactive的事务给覆盖。若是一个长时间的查询需要读到被覆盖的块时,就会报ora-01555错误。借助v$undostat里面的字段ssolderrcnt来查询在每个10分钟,Oracle内是否发生过01555错误。

下面是一张01555错误的图:

undo系列学习之读一致性(ORA-01555错误机制分析)

产生01555错误,原因有好多,这里列三个:

1)undo_retention不够大

2)undo空间压力大

3)sql性能差

下面我们来模拟01555错误。注意,这里要避免和30036错误相混淆。

会话1:

会话2:

会话1:

如果有数据,则证明查询是修改前的;如果没有数据,则证明查询是修改后的。但如果,此时undo里面没有数据,那就会报错。从查询输出,可知,查询是修改前的。

linux

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal