资源描述:
《oracle10g中undo数据的作用及undo表空间的操作详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性.当执行DML操作时,事务操作前的数据被称为UNDO记录.UNDO段用丁•保存事务所修改数据的IH值,其中存储着被修改数据块的位置以及修改前数据。UNDO数据的作用:1.回退事务当执行DML操作修改数据时,UNDO数据被存放到UNDO段,而新数据则被存放到数据段中,如果事务操作存在问题,IH需要回退事务,以取消事务变化.假定用户A执行了语句UPDATEempSETsal=1000WHEREenipno二7788后发现,应该修改雇员7963的工资,而不是雇员7788的工
2、资,那么通过执行ROLLBACK语句对以取消事务变化.当执行ROLLBACK命令时,oracle会将UNDO段的UNDO数据800写回的数据段中.2.读一致性用户检索数据库数据时,oracle总是使用用户只能看到被提交过的数据(读取提交)或特定时间点的数据(SELECT语句时间点).这样讨以确保数据的一致性.例如,当用户八执行语句UPDATEempSETsal=1000WHEREempno=7788时,UNDO记录会被存放到回滚段中,而新数据则会存放到EMP段中;假定此时该数据尚未提交,并且用户B执行SELECTsalFROMempWH
3、EREempno二778&此时用户B将取得UNDO数据800,而该数据正是在UNDO记录中取得的.3.事务恢复事务恢复是例程恢复的一部分,它是由oracleserver口动完成的.如果在数据库运行过程中出现例程失败(如断电,内存故障,后台进程故障等),那么当重启oracleserver时,后台进程SMON会口动执行例程恢复,执行例程恢复时,oracl会重新做所有未应用的记录.回退未提交事务.4.倒叙查询(FlashBackQuery)倒叙查询用于取得特定时间点的数据库数据,它是9i新增加的特性,假定当前时间为上午11:00,某用户在上午
4、10:00执行UPDATEempSETsal=3500WHEREempno=7788语句,修改并提交了事务(雇员原工资为3000),为了取得10:00之前的雇员工资,用户对以使用倒叙查询特征.使用UNDO参数1.UNDO_MANAGEMENT该初始化参数用丁•指定UNDO数据的管理方式.如果要使用口动管理模式,必须设置该参数为AUTO,如果使用手工管理模式,必须设置该参数为MANUAL,使用口动管理模式时,oracle会使用undo表空间管理undo管理,使用手工管理模式时,oracle会使用回滚段管理undo数据,需要注意,使用口动管
5、理模式时,如果没有配置初始化参数UNDO_TABLESPACE,oracle会口动选择第一个讨用的UND0表空间存放UNDO数据,如果没有可用的UNDO表空间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告.1.UNDO_TABLESPACE该初始化参数用于指定例程所要使用的UNDO表空间,使用口动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间.在RAC(RealApplicationCluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每个例程配置一
6、个独立的UNDO表空间.2.UNDO_RETENTION该初始化参数用于控制UND0数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,町以指定undo数据的保留时间,从而确定倒叙查询特征(FlashbackQuery)可以查看到的最早时间点.建立UNDO表空间UNDO表空间专门用丁-存放UNDO数据,并且在UNDO表空间尚不能建立任何数据对彖(表,索引,簇)1•使用CREATEDATABASE命令建立UNDO表空间.当使用CREATEDATABASE命令建立数据库时,通过指定UND0TABLESPACE选项,对以
7、建立UNDO表空间.示例如下:1.CREATEDATABASEdbOl•・・・3・UNDOTABLESPACEundotbs_013.DATAFILE1/opt/oracle/oradata/geOl/UNDOTBSl.dbf1SIZE30M;注意:UNDOTABLESPACE子句不是必须的,如果使用自动UND0管理模式,并且没有指定该子句,那么建立数据库时会自动生成名为UNDOTBS1的UNDO表空间.2.使用CREATEUNDOTABLESPACE命令建立UNDO表空间.1.createundotablespaceundotbs2d
8、atafile1/opt/oracle/oradata/geOl/UNDOTBS2•dbffsize100mreuseautoextendonnext50mmaxsize5000m;修改UNDO表空间使用A