- 浏览: 5152256 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
UNDO
Oracle绝对禁止一个用户查看另一个用户未提交的事务数据。
启动一个DML事务时,已修改数据的象前版本被缓存在database buffer cache,再有一个缓冲副本被写入一个回退段(undo segment)上。
Undo segment三个重要目的:
1) DML用户发布rollback命令,则可用来恢复数据原状态。
2) 其他用户访问DML用户发布commit前的原数据,则提供一个已修改数据的读一致性视图。
3) 在实例恢复期间,用来rollback一个在实例故障刚发生前进行的未提交的事务。
回滚段由范围组成,这个范围由5个或5个以上的Oracle块组成。
回滚段工作方式:
1) 在一个回滚段内,以环形方式循环使用范围,直到段装满。由用户的commit或rollback命令发布后释放回滚段内的范围。
2) 同一个undo segment可以存储很多个像前版本,同时,一个像前版本只会存储在一个undo segment而不会因空间等任何问题连接到其他undo segment。
3) 如果一个undo segment中的一个范围启动了一个事务的像前版本,且逐渐增长装满了该范围,此时会环绕到下一个临近的范围继续使用空间,此时如果下一个临近范围已经被其他事务占领,则绝对不会跳过该临近范围查找其他可用范围,而是会在这个范围之间创建一个新的范围来使用。
4) 一个undo segment能处理的事务个数,取决于Oracle块大小。
5) 每个数据库都至少有一个回滚段(系统回滚段),一旦创建了其他回滚段,则该回滚段将只用于处理数据目录读一致性和事务控制。
6) set transaction use rollback segment命令可以申请一个指定的回滚段。
7) LOB列不使用undo segment,而使用创建时分配给表的空间来存储像前版本。
5.5.1 测量UNDO I/O性能
5.5.1.1 undo segment头部的争用
Oracle 使用undo segment头部块中一个事务表来跟踪使用他的那些事务,其内容通常被缓存在database buffer cache中以便被搜索。OLTP上很有可能会因为访问这个头部发生等待。
SQL> select event,total_waits,time_waited,average_wait
from v$system_event where event like '%undo%' and event like '%slot%';
average_wait:平均每毫秒等待的次数,等于0或接近于0最好。
SQL>select class,count from v$waitstat
where class in ('undo header','system undo header');
count:等候访问undo segment头部的次数。理想情况下,该值等于0或接近于0最好。
SQL>select n.name,s.usn,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio"
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
RBS Header Get Ratio:等于1或接近1最好,至少为95%。
5.5.1.2 undo segment范围的争用
SQL>select class,count from v$waitstat
where class ='system undo block' ;
count:系统回滚段的范围的块争用次数
SQL>select w.count,w.count/s.value as wait_ratio from v$waitstat w,v$sysstat s
where w.class = 'undo block'
and s.name = 'consistent gets';
count:非系统回滚段的范围的块争用次数
wait_ratio:回滚等待率,如果超过1%,则需要调整了。
5.5.1.3 undo segment的环绕
SQL> select n.name,s.usn,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
s.wraps:该回滚段被环绕到下一个范围的次数。次数太多表示段范围可能太小。
5.5.1.4 undo segment的动态范围分配
事务的像前版本在undo segment中发生环绕,而下一个范围已经分配给其他事务的像前版本,此时会在他们之间动态创建一个范围来给该事务的像前版本环绕。应避免以减少I/O。
SQL> select event,total_waits,time_waited,average_wait
from v$system_event where event = 'undo segment extension';
time_waited:表示动态分配的等待次数。若值很高或不断增长,说明undo segment太少或太小。
SQL>select n.name,s.usn,s.extends,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
s.extends:被动态添加的范围数。若经常发生动态添加,则说明undo segment可能太小。
5.5.2 优化undo segment
优化目标:
1) 用户不用等待,就始终可找到undo segment来使用。
2) 用户始终能得到完成事务所需要的读一致性视图。
3) 回滚段不会引起过多的I/O。
一般就是:
1) 消除对undo segment header或block的争用。
2) 尽量最小化undo segment的扩充和环绕。
3) 避免undo segment用尽。
4) 始终拥有为用户提供一致性视图的undo segment。
做法:
1) 添加更多的undo segment 。
2) 增大现有undo segment。
3) 明确管理大事务的undo segment。
4) undo segment需求最小化。
5) 使用自动管理功能。
5.5.2.1 增加更多的undo segment
最好把新添加的undo segment放在另外的磁盘的表空间内。对undo要求最多的是delete,其次是update,最后是insert。
Oracle建议,为每4个并发事务创建一个undo segment,最多只能添加20个undo segment.
为了更准确的确定到底需要多大的undo segment,可以跟踪用户使用的undo segment大小:
//查询当前用户所使用的undo segment大小
SQL>select s.osuser,s.username,t.used_ublk
from v$session s,v$transaction t
where s.taddr = t.addr;
t.used_ublk:单位为Oracle块,*block size等于该用户将使用的size。
//查询某个大事务的具体使用大小。
1) 只保留一个undo segment online,其他的都offline。
Alter rollback segment xxxxx offline;
2) 统计当前所使用了的undo segment大小。
Select n.name,s.sun,s.writes from v$rollname n,v$rollstat s
Where n.usn = s.usn and name != ‘SYSTEM’;
s.writes:有多少字节的数据被写到该rollback segment上了。
3) 执行遇到回滚问题的大事务。
如:delete from alarminfo;
4) 重新执行“2)”的统计,使用新查询的s.writes减去(-)“2)”中查询出来的s.writes值,就是“3)”中事务所要使用的undo segment大小.
如果设置的undo segment大小是按大事务来设置,可能会浪费很多空间,只需要明确管理undo segment就可以了。
典型错误:ORA-01555 SNAPSHOT TOO OLD
一个修改事务很长时间未提交,别人查的时候在undo segment中找到了一个像前版本得到一致性读,别人还在查询到该修改前,最先修改的人提交了,并且此时undo segment中因为接受了commit而不守护该范围,此范围被其他事务写了。
这时候就会发生这种错误,只需要在查一次就可以了。
防范:
1) 表上发生小事务时候,设法避免运行时间很长的查询。
2) 增加undo segment的大小和数量。
一般设置:initial=512k,next=512k,minextents=20,这样就会创建一个10M的undo segment.
5.5.2.2 明确管理大事务的undo segment
创建一个很大的undo segment,专用于处理特定的事务.
由于Oracle会自动把任务分配给undo segment,所以一般创建完和使用完后,需要手工把他们offline.
1) 创建大回滚段.
Create private rollback segment rbs_for_large_tran
Storage (initial 10M next 10M) tablespace rbs;
2) 直到在作业开始前,把rbs_for_large_tran 联机.
Alter rollback segment rbs_for_large_tran online;
或:execute dbms_transaction.use_rollback_segment(‘rbs_for_large_tran’);
3) 启动作业.
Delete from alarminfo;
4) 一旦"3)"执行完,马上在另外一个窗口把该rbs_for_large_tran段offline.
Alter rollback segment rbs_for_large_tran offline;
注意:在作业中的任何commit,都将导致rbs_for_large_tran脱机.若脱机了,需重新联机.
5.5.2.3 undo segment需求最小化
最大限度的减少写往undo segment的项目数量和大小。
如:
imp的时候使用commit=y.
exp的时候不要使用consistent选项.
Sql*loader时设置适当的commit值.
5.5.2.4 使用自动管理功能
Oracle 9i的新功能,通过配置init.ora,让Oracle自动来进行管理undo segment(Oracle推荐)。
undo_management
=auto //使用undo 自动管理(AUM)
=manual //不使用AUM。
undo_retention
单位是秒.指定一个像前版本在commit后被保存的时间.(减少ORA-01555错误)
undo_suppress_errors
FALSE,TRUE.指定是否抑制在RBU中可用的命令。
undo_tablespace
指定用于AUM的表空间名.
(同一时间,只能有一个undo tablespace在线,也必须有一个undo tablespace在线.
如果数据库未创建而undo_management=auto,则系统自动创建一个SYS_UNDOTBS表空间来使用)
创建的语法:
create undo tablespace undo_tbs
datafile ‘/u01/oradata/prod/undo01.dbf’ size 500M
autoextend on
next 5M maxsize 2000M;
(不能指定初始范围和下一个范围大小,因系统要自己指定)
估计undo tablespace大小的公式:
Undo space = (undo_retention * (undo blocks per second * db_block_size)) + db_block_size;
删除一个大的undo tbs:
8) 创建一个新的undo tbs undo_tbs02.
9) SQL>alter system setundo_tablespace=undo_tbs02;
此时,新的事务会使用undo_tbs02,而以前的事务,依然会继续使用undo_tbs.
10) 待Undo_tbs上的所有事务commit或rollback,且超过了undo_retention指定的时间后,drop tablespace删除该undo tbs.
(此时注意,如果drop 了undo_tbs,此时任何发生在undo_tbs的像前读都要报错,此时最好发生在alter命令前的所有事物都commit了或rollback了.)
SQL>select u.begin_time,u.end_time,
t.name "undo_tbs_name",
u.undoblks "blocks_used",
u.txncount "transactions",
u.maxquerylen "longest query",
u.expblkreucnt "expired blocks"
from v$undostat u,v$tablespace t
where u.undotsn = t.ts#;
查询统计时间内,被undo使用的Oracke块数,发生的事务数,最长的查询时间,在需要查一致性时有多少块已经被覆盖(出现>0的数表示ORA-01555就很可能发生).
Oracle绝对禁止一个用户查看另一个用户未提交的事务数据。
启动一个DML事务时,已修改数据的象前版本被缓存在database buffer cache,再有一个缓冲副本被写入一个回退段(undo segment)上。
Undo segment三个重要目的:
1) DML用户发布rollback命令,则可用来恢复数据原状态。
2) 其他用户访问DML用户发布commit前的原数据,则提供一个已修改数据的读一致性视图。
3) 在实例恢复期间,用来rollback一个在实例故障刚发生前进行的未提交的事务。
回滚段由范围组成,这个范围由5个或5个以上的Oracle块组成。
回滚段工作方式:
1) 在一个回滚段内,以环形方式循环使用范围,直到段装满。由用户的commit或rollback命令发布后释放回滚段内的范围。
2) 同一个undo segment可以存储很多个像前版本,同时,一个像前版本只会存储在一个undo segment而不会因空间等任何问题连接到其他undo segment。
3) 如果一个undo segment中的一个范围启动了一个事务的像前版本,且逐渐增长装满了该范围,此时会环绕到下一个临近的范围继续使用空间,此时如果下一个临近范围已经被其他事务占领,则绝对不会跳过该临近范围查找其他可用范围,而是会在这个范围之间创建一个新的范围来使用。
4) 一个undo segment能处理的事务个数,取决于Oracle块大小。
5) 每个数据库都至少有一个回滚段(系统回滚段),一旦创建了其他回滚段,则该回滚段将只用于处理数据目录读一致性和事务控制。
6) set transaction use rollback segment命令可以申请一个指定的回滚段。
7) LOB列不使用undo segment,而使用创建时分配给表的空间来存储像前版本。
5.5.1 测量UNDO I/O性能
5.5.1.1 undo segment头部的争用
Oracle 使用undo segment头部块中一个事务表来跟踪使用他的那些事务,其内容通常被缓存在database buffer cache中以便被搜索。OLTP上很有可能会因为访问这个头部发生等待。
SQL> select event,total_waits,time_waited,average_wait
from v$system_event where event like '%undo%' and event like '%slot%';
average_wait:平均每毫秒等待的次数,等于0或接近于0最好。
SQL>select class,count from v$waitstat
where class in ('undo header','system undo header');
count:等候访问undo segment头部的次数。理想情况下,该值等于0或接近于0最好。
SQL>select n.name,s.usn,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio"
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
RBS Header Get Ratio:等于1或接近1最好,至少为95%。
5.5.1.2 undo segment范围的争用
SQL>select class,count from v$waitstat
where class ='system undo block' ;
count:系统回滚段的范围的块争用次数
SQL>select w.count,w.count/s.value as wait_ratio from v$waitstat w,v$sysstat s
where w.class = 'undo block'
and s.name = 'consistent gets';
count:非系统回滚段的范围的块争用次数
wait_ratio:回滚等待率,如果超过1%,则需要调整了。
5.5.1.3 undo segment的环绕
SQL> select n.name,s.usn,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
s.wraps:该回滚段被环绕到下一个范围的次数。次数太多表示段范围可能太小。
5.5.1.4 undo segment的动态范围分配
事务的像前版本在undo segment中发生环绕,而下一个范围已经分配给其他事务的像前版本,此时会在他们之间动态创建一个范围来给该事务的像前版本环绕。应避免以减少I/O。
SQL> select event,total_waits,time_waited,average_wait
from v$system_event where event = 'undo segment extension';
time_waited:表示动态分配的等待次数。若值很高或不断增长,说明undo segment太少或太小。
SQL>select n.name,s.usn,s.extends,
decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
from v$rollstat s,v$rollname n
where s.usn = n.usn
order by usn;
s.extends:被动态添加的范围数。若经常发生动态添加,则说明undo segment可能太小。
5.5.2 优化undo segment
优化目标:
1) 用户不用等待,就始终可找到undo segment来使用。
2) 用户始终能得到完成事务所需要的读一致性视图。
3) 回滚段不会引起过多的I/O。
一般就是:
1) 消除对undo segment header或block的争用。
2) 尽量最小化undo segment的扩充和环绕。
3) 避免undo segment用尽。
4) 始终拥有为用户提供一致性视图的undo segment。
做法:
1) 添加更多的undo segment 。
2) 增大现有undo segment。
3) 明确管理大事务的undo segment。
4) undo segment需求最小化。
5) 使用自动管理功能。
5.5.2.1 增加更多的undo segment
最好把新添加的undo segment放在另外的磁盘的表空间内。对undo要求最多的是delete,其次是update,最后是insert。
Oracle建议,为每4个并发事务创建一个undo segment,最多只能添加20个undo segment.
为了更准确的确定到底需要多大的undo segment,可以跟踪用户使用的undo segment大小:
//查询当前用户所使用的undo segment大小
SQL>select s.osuser,s.username,t.used_ublk
from v$session s,v$transaction t
where s.taddr = t.addr;
t.used_ublk:单位为Oracle块,*block size等于该用户将使用的size。
//查询某个大事务的具体使用大小。
1) 只保留一个undo segment online,其他的都offline。
Alter rollback segment xxxxx offline;
2) 统计当前所使用了的undo segment大小。
Select n.name,s.sun,s.writes from v$rollname n,v$rollstat s
Where n.usn = s.usn and name != ‘SYSTEM’;
s.writes:有多少字节的数据被写到该rollback segment上了。
3) 执行遇到回滚问题的大事务。
如:delete from alarminfo;
4) 重新执行“2)”的统计,使用新查询的s.writes减去(-)“2)”中查询出来的s.writes值,就是“3)”中事务所要使用的undo segment大小.
如果设置的undo segment大小是按大事务来设置,可能会浪费很多空间,只需要明确管理undo segment就可以了。
典型错误:ORA-01555 SNAPSHOT TOO OLD
一个修改事务很长时间未提交,别人查的时候在undo segment中找到了一个像前版本得到一致性读,别人还在查询到该修改前,最先修改的人提交了,并且此时undo segment中因为接受了commit而不守护该范围,此范围被其他事务写了。
这时候就会发生这种错误,只需要在查一次就可以了。
防范:
1) 表上发生小事务时候,设法避免运行时间很长的查询。
2) 增加undo segment的大小和数量。
一般设置:initial=512k,next=512k,minextents=20,这样就会创建一个10M的undo segment.
5.5.2.2 明确管理大事务的undo segment
创建一个很大的undo segment,专用于处理特定的事务.
由于Oracle会自动把任务分配给undo segment,所以一般创建完和使用完后,需要手工把他们offline.
1) 创建大回滚段.
Create private rollback segment rbs_for_large_tran
Storage (initial 10M next 10M) tablespace rbs;
2) 直到在作业开始前,把rbs_for_large_tran 联机.
Alter rollback segment rbs_for_large_tran online;
或:execute dbms_transaction.use_rollback_segment(‘rbs_for_large_tran’);
3) 启动作业.
Delete from alarminfo;
4) 一旦"3)"执行完,马上在另外一个窗口把该rbs_for_large_tran段offline.
Alter rollback segment rbs_for_large_tran offline;
注意:在作业中的任何commit,都将导致rbs_for_large_tran脱机.若脱机了,需重新联机.
5.5.2.3 undo segment需求最小化
最大限度的减少写往undo segment的项目数量和大小。
如:
imp的时候使用commit=y.
exp的时候不要使用consistent选项.
Sql*loader时设置适当的commit值.
5.5.2.4 使用自动管理功能
Oracle 9i的新功能,通过配置init.ora,让Oracle自动来进行管理undo segment(Oracle推荐)。
undo_management
=auto //使用undo 自动管理(AUM)
=manual //不使用AUM。
undo_retention
单位是秒.指定一个像前版本在commit后被保存的时间.(减少ORA-01555错误)
undo_suppress_errors
FALSE,TRUE.指定是否抑制在RBU中可用的命令。
undo_tablespace
指定用于AUM的表空间名.
(同一时间,只能有一个undo tablespace在线,也必须有一个undo tablespace在线.
如果数据库未创建而undo_management=auto,则系统自动创建一个SYS_UNDOTBS表空间来使用)
创建的语法:
create undo tablespace undo_tbs
datafile ‘/u01/oradata/prod/undo01.dbf’ size 500M
autoextend on
next 5M maxsize 2000M;
(不能指定初始范围和下一个范围大小,因系统要自己指定)
估计undo tablespace大小的公式:
Undo space = (undo_retention * (undo blocks per second * db_block_size)) + db_block_size;
删除一个大的undo tbs:
8) 创建一个新的undo tbs undo_tbs02.
9) SQL>alter system setundo_tablespace=undo_tbs02;
此时,新的事务会使用undo_tbs02,而以前的事务,依然会继续使用undo_tbs.
10) 待Undo_tbs上的所有事务commit或rollback,且超过了undo_retention指定的时间后,drop tablespace删除该undo tbs.
(此时注意,如果drop 了undo_tbs,此时任何发生在undo_tbs的像前读都要报错,此时最好发生在alter命令前的所有事物都commit了或rollback了.)
SQL>select u.begin_time,u.end_time,
t.name "undo_tbs_name",
u.undoblks "blocks_used",
u.txncount "transactions",
u.maxquerylen "longest query",
u.expblkreucnt "expired blocks"
from v$undostat u,v$tablespace t
where u.undotsn = t.ts#;
查询统计时间内,被undo使用的Oracke块数,发生的事务数,最长的查询时间,在需要查一致性时有多少块已经被覆盖(出现>0的数表示ORA-01555就很可能发生).
发表评论
-
Oracle连接故障的排除
2024-09-09 22:33 307Oracle版本为11G,操作系统为Windows Ser ... -
Oracle数据库相关系统突然提示“SQLException:违反协议”
2024-02-19 15:50 977SQLException:违反协议这个异常可能由很多的 ... -
CentOS在Docker中安装Oracle
2024-02-06 12:13 11001.拉取Oracle镜像,并检 ... -
Windows Server安装oracle数据库一直停在82%
2023-02-04 12:01 550网上有个说法:服务器超过一定数量的CPU后,将不能正常安装 ... -
ORA-04030错误处理
2023-02-04 11:52 2576【错误描述】 错误信息如下: ORA-04030:在尝 ... -
ORA-04030错误处理
2023-02-04 11:45 403【错误描述】 错误信息如下: ORA-04030:在尝 ... -
Linux安装MySQL数据库
2019-06-10 22:27 17471.进入安装包所在目录,解压: tar zxvf mysql- ... -
确定MySQL在Linux系统中配置文件的位置
2019-04-14 19:30 27451.通过which mysql命令来查看mysql的安装位置。 ... -
mysql set names 命令和 mysql 字符编码问题
2019-04-12 00:34 1117转自:https://www.cnblogs.com/digd ... -
MYSQL中取当前周/月/季/年的第一天与最后一天
2018-11-17 23:16 2189转自:https://blog.csdn.net/ ... -
Oracle删除大量数据的实践
2016-11-07 18:03 5795一、引言 从来没有 ... -
Oracle 数据库简明教程 V0.1
2016-03-23 21:01 2027供初学者入门学习使用,以开发者常见、常用的知识为主,基本上 ... -
Oracle拆分字符串函数
2016-03-23 10:58 3331create or replace type string ... -
Oracle数据库远程连接无响应
2016-03-21 10:20 4278故障现象: 服务器本机使用sqlplus / as s ... -
Oracle PGA详解
2015-10-21 15:34 11427转自:http://yanguz123.iteye.com/b ... -
Oracle12C导入dmp数据
2015-10-08 23:43 20502Oracle12C,发生了较大的变化。以前熟悉的东西变得陌 ... -
SQLLDR数据导入小结
2015-07-25 22:06 74991.创建数据表 CREATE TABLE ... -
Window7安装Oracle10
2015-03-06 12:14 1585每次安装都要百度,转到自己的博客上,找起来方便,还能增加访 ... -
Oracle SQL Developer 连接 Mysql 数据库
2015-02-25 19:36 3618下载JDBC包,解压缩这里只要mysql-connector- ... -
Mysql数据备份与恢复
2015-02-25 19:15 1325备份/恢复策略 1. 要定期做 mysql备份,并考虑系统可以 ...
相关推荐
Oracle UNDO 机制详解 Oracle UNDO 机制是 Oracle 数据库中的一种重要机制,用于记录和回滚事务的操作。UNDO 段是 Oracle 数据库中的一种特殊类型的段,用于存储事务的回滚信息。 undo 段的介绍 undo 段是 ...
Oracle数据库的Undo机制是其核心特性之一,它主要用于支持事务的回滚、读取一致性和闪回查询。本文将深入探讨Undo的详细功能及其优势。 首先,数据操纵语言(DML)包括INSERT、UPDATE、DELETE和MERGE等SQL语句,...
### 关于Oracle释放过度使用的Undo表空间的知识点 在Oracle数据库管理中,Undo表空间扮演着极其重要的角色。它主要用于存储事务处理过程中产生的Undo记录,这些记录对于事务回滚、一致性读取以及恢复操作至关重要。...
Oracle redo undo 机制详解 Oracle redo undo 是 Oracle 数据库中的一种机制,用于确保事务的可恢复性和撤销性。下面是对 redo undo 机制的详细解释。 redo 机制 redo 机制是 Oracle 数据库中的一种机制,用于...
Oracle 中的 redo 和 undo 机制是数据库的核心组件,它们一起协作以确保数据库的事务一致性和可靠性。在本文中,我们将深入探讨 redo 和 undo 机制的工作原理和协作机制。 Undo Mechanism Undo 机制是 Oracle 中的...
Oracle中的Undo和Redo是两个非常重要的概念,它们都是Oracle数据库中事务管理和恢复机制的关键组件。Undo和Redo都是为了确保数据库的一致性和可靠性。 什么是REDO? REDO记录transaction logs,分为online和...
重做日志是Oracle的持久性机制,用于记录所有事务对数据库的更改。在事务提交后,这些更改被写入到在线重做日志文件,即使事务回滚,这些更改仍然会被记录。如果发生系统故障,Oracle可以使用重做日志恢复未提交的...
Undo 是 Oracle 数据库中的一种机制,用于撤销某个事务的操作。它可以帮助我们撤销某个事务的操作,以便维护数据的一致性。 2.1. 回滚和撤销 Undo 和回滚是两个相关的概念。Undo 是撤销某个事务的操作,而回滚是...
Oracle数据库在面对UNDO表空间持续增长的问题时,通常涉及...此外,定期维护和备份是防止类似问题的关键,同时,了解和熟悉Oracle数据库的内部机制,如SMON进程的作用和UNDO表空间管理,对快速定位和解决问题至关重要。
解决策略包括增大Undo表空间、优化LOB操作或者采用其他存储机制。 ORA-30036错误通常是由于Undo表空间不足以完成事务操作。解决方案包括扩展Undo表空间、优化事务以减少Undo使用,或者调整数据库参数以适应更大的...
### Oracle Automatic Undo Internals #### 自动撤销管理 (AUM) 概述 自动撤销管理 (Automatic Undo Management, AUM),也称为系统管理撤销 (System Managed Undo, SMU),是 Oracle 9i 引入的一项功能,旨在解决与...
在Oracle数据库环境中,Undo Management参数是用来管理事务回滚(undo)数据的机制,它确保了数据库的一致性和可恢复性。当在一个RAC(Real Application Clusters)集群中,如果不同节点上的Undo Management参数设置...
而12c版本的Temporary Undo机制允许将临时表的Undo信息直接存储在临时表空间内,从而实现了真正的“临时”处理。 **Temporary Undo 的优势:** 1. **降低 Redo 日志占用空间**:Temporary Undo 使得临时表的Undo...
Oracle数据库中的UNDO段是其事务处理机制的关键组成部分,它主要负责存储事务对数据所做的更改的旧值,以便于回滚操作和维护读的一致性。在深入理解UNDO段之前,我们需要先了解一些基本概念。 1. **Undo表空间**:...
Oracle数据库提供了多种日志恢复机制,包括redo日志恢复机制、undo日志恢复机制等。 闪回恢复机制是指在数据库中对闪回进行恢复,以便在出现错误或崩溃时恢复数据库。Oracle数据库提供了多种闪回恢复机制,包括闪...
为了实现这一功能,Oracle利用了多种机制,其中最重要的是ITL(Intent To Lock)条目和Undo数据。 在Block Header中包含了ITL(Intent To Lock)条目,这些条目记录了Undo Block Address、Transaction ID以及SCN...
自动Undo管理机制的引入,意味着数据库系统会自动处理Undo表空间的创建、分配和维护。这包括决定何时需要增加或减少Undo表空间的大小,以及如何有效地分配这些空间给不同的事务。这一改进显著地减轻了数据库管理员的...