学习 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 :重新创建临 时表空间
你可能会遇到 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 :重置缺省临时表空间