Oracle_undo与redo

本文深入解析了Oracle使用UNDO表空间的问题及其解决方法,包括UNDO表空间的功能、作用以及如何在Oracle数据库中进行UNDO表空间的重建。详细介绍了UNDO表空间的管理参数设置、表空间重建步骤以及倒叙查询的实现,旨在帮助数据库管理员更好地理解和管理UNDO表空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 学习 Oracle 时, 
 你可能会遇到 Oracle 使用 UNDO 表空间问题, 这里将介绍 Oracle 使用 UNDO 表空间问题的解决方法,在这里拿出来和大家分享一下。
 
  UNDO 表空间用于存放 UNDO 数据,当执行 DML 操作 (INSERT , UPDATE 和 DELETE) 时, Oracle 会将这些操作 的旧数据写入到 UNDO 段,在 Oracle9i 之前,管理 UNDO 数据时使用 (Rollback Segment) 完成的。 
  从 Oracle9i 开始, 管理 UNDO 数据不仅可以使用回滚段, 还可以 Oracle 使用 UNDO 表空间。 
  因为规划和管理回滚段比较复杂, 所有 Oracle database 10g 已经完全丢弃用回滚段。 并且 Oracle 使用 UNDO 表空间来管理 UNDO 数据。    
  
  UNDO 数据也称为回滚 (ROLLBACK) 数据, 它用于确保数据的一致性。 当执行 DML 操 作时,事务操作前的数据被称为 UNDO 记录。 UNDO 段用于保存事务所修改数据的旧值, 其中存储着被修改数据块的位置以及修改前数据,UNDO 数据的作用。 
    
  1 。回退事务    当执行 DML 操作修改数据时, UNDO 数据被存放到 UNDO 段,而新数据则被存放到数据 段中,如果事务操作存在问题,旧需要回退事务,以取消事务变化。假定用户 A 执行了语 句 UPDATE emp SET sal=1000 WHERE empno=7788 后发现,应该修改雇员 7963 的工资, 而不是雇员 7788 的工资,那么通过执行 ROLLBACK 语句可以取消事务变化。当执行 ROLLBACK 命令时, Oracle 会将 UNDO 段的 UNDO 数据 800 写回的数据段中。  
    
  2 。读一致性    用户检索数据库数据时, Oracle 总是使用用户只能看到被提交过的数据 ( 读取提交 ) 或特定时 间点的数据 (SELECT 语句时间点 ) 。这样可以确保数据的一致性。例如,当用户 A 执行语句 UPDATE emp SET sal=1000 WHERE empno=7788 时, UNDO 记录会被存放到回滚段中,而 新数据则会存放到 EMP 段中 ; 假定此时该数据尚未提交, 并且用户 B 执行 SELECT sal FROM  emp WHERE empno=7788 ,此时用户 B 将取得 UNDO 数据 800 ,而该数据正是在 UNDO 记 录中取得的。 
     
  3 。事务恢复    事务恢复是例程恢复的一部分, 它是由 Oracle server 自动完成的。 如果在数据库运行过程中 出现例程失败 ( 如断电,内存故障,后台进程故障等 ) ,那么当重启 Oracle server 时,后台进 程 SMON 会自动执行例程恢复,执行例程恢复时, oracl 会重新做所有未应用的记录。回退 未提交事务。 
     
  4 。倒叙查询 (FlashBack Query)   倒叙查询用于取得特定时间点的数据库数据,它是 9i 新增加的特性,假定当前时间为上午       
11:00 ,某用户在上午 10:00 执行 UPDATE emp SET sal=3500 WHERE empno=7788 语句,修 改并提交了事务 ( 雇员原工资为 3000) ,为了取得 10:00 之前的雇员工资,用户可以使用倒叙 查询特征。   
   
   使用 UNDO 参数    


1 。 UNDO_MANAGEMENT   该初始化参数用于指定 UNDO 数据的管理方式。如果要使用自动管理模式,必须设置该参 数为 AUTO , 如果使用手工管理模式, 必须设置该参数为 MANUAL , 使用自动管理模式时,   
Oracle 使用UNDO 表空间管理 undo 管理,使用手工管理模式时, Oracle 会使用回滚段管理 undo 数据,需要注意,使用自动管理模式时,如果没有配置初始化参数  UNDO_TABLESPACE 。 Oracle 会自动选择第一个可用的 UNDO 表空间存放 UNDO 数据, 如果没有可用的 UNDO 表空间, Oracle 会使用 SYSTEM 回滚段存放 UNDO 记录,并在 ALTER 文件中记载警告。  
  
2 。 UNDO_TABLESPACE   该初始化参数用于指定例程所要使用的 UNDO 表空间,使用自动 UNDO 管理模式时,通过 配置该参数可以指定例程所要使用 UNDO 表空间。 在 RAC(Real Application Cluster) 结构中, 因为一个 UNDO 表空间不能由多个例程同时使用,所有必须为每个例程配置一个独立的 UNDO 表空间。    


3 。 UNDO_RETENTION   该初始化参数用于控制 UNDO 数据的最大保留时间,其默认值为 900 秒,从 9i 开始,通过 配置该初始化参数, 可以指定 undo 数据的保留时间, 从而确定倒叙查询特征 (Flashback Query) 可以查看到的最早时间点。       讲述 Oracle UNDO 表空间重建方法    Oracle 还是比较常用的,于是我研究了一下 Oracle UNDO 表空间,在这里拿出来和大 家分享一下,希望对大家有用。     


 一 . 为了打开数据库,首先想到的是将坏的日志清除掉,但是:    
1.   SQL >  alter database clear unarchived logfile group 3      
2.    SQL >  alter database clear unarchived logfile group 3 unrecoverable d atafile;    
3.    alter database clear unarchived logfile group 3 unrecoverable datafi le    


二 . 系统 Oracle UNDO 表空间的重建         
1.  创建新的 Oracle UNDO 表空间      
1.   CREATE UNDO TABLESPACE "UNDOTEMP"     
2.   DATAFILE 'G:\ORACLE\ORADATA\HOME\UNDOTEMP.ora' SIZE 5M    
3.   CREATE UNDO TABLESPACE "UNDOTEMP"  DATAFILE    
4.   '/home/oracle/oradata/oracle9/UNDOTEMP.ora' SIZE 50M    
2.  在 OEM 控制台修改系统默认的 Oracle UNDO 表空间名,由 UNDOTBS 改为 UNDOTEMP ,或通过下面的命令修改默认   
Oracle UNDO 表空间的标识   
1. ALTER SYSTEM SET  UNDO_TABLESPACE  =  UNDOTEMP     
3.  删除原来的系统默认 Oracle UNDO 表空间,并重建 UNDOTBS   
1.  DROP TABLESPACE "UNDOTBS1" INCLUDING CONTENTS AND DATAFILES    
4.  在 OEM 控制台修改系统默认的   
Oracle UNDO 表空间名,由  UNDOTEMP  改为   UNDOTBS ,改回原有的   Oracle UNDO 表空间标识    
1.ALTER SYSTEM SET  UNDO_TABLESPACE  =  UNDOTBS     
5.  删除临时创建的 Oracle UNDO 表空间 UNDOTEMP   1.    DROP TABLESPACE "UNDOTEMP" INCLUDING CONTENTS AND DATAFILES      


三 .ORACLE 9I  重建  TEMP  表空间   
1.startup :启动数据库    
2.create temporary tablespace   TEMP_TEMP TEMPFILE   '/home/oracle/oradata/oracle9/temp_temp.dbf' SIZE 128M REUSE AUTOEXTEND  ON NEXT 640K MAXSIZE UNLIMITED :创建中转临时表空间    
3.alter database default   temporary tablespace   TEMP_TEMP :改变缺省临时表空间   为刚 刚创建的新临时表空间 temp2   
4.drop tablespace temp including contents and datafiles :删除原来临时表空间    
5.create temporary tablespace   TEMP TEMPFILE '/home/oracle/oradata/oracle9/temp01.dbf'  SIZE 512M REUSE AUTOEXTEND ON NEXT   640K MAXSIZE UNLIMITED :重新创建临 时表空间    

6.alter database default   temporary tablespace   temp :重置缺省临时表空间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值