Home > Database > Mysql Tutorial > undo管理

undo管理

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-07 15:28:06
Original
1325 people have browsed it

数据库环境: SQL select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production

数据库环境:

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0 Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

 

1. undo作用

Copy after login
undo数据也称为回滚数据,用户确保数据的一致性。主要用于回退事务、读一致性、事务恢复、闪回查询
Copy after login
    回退事务:当执行DML操作修改数据时,undo数据被存放到undo段,而新数据则被存放到数据段中,如果事务操作存在问题,需要回退事务,用以取消事务变化。例如用户A执行对emp表,执行delete操作,即delete from emp where empno=‘1’,如果发现错误删除员工号 1,那么就可以通过执行rollback语句取消事务变化。当执行rollback命令时,数据库将undo段的undo数据empno是1的记录回写到数据段中。
Copy after login
    读一致性:当用户检索数据时,oracle只能将已经commit的数据或者特定时间点的数据(select时间点)展示给用户。这样就可以确保数据的一致性。例如,当用户A执行update emp set sal=1  where empno=1时,(备注更新之前 sal是888)undo记录会被存放到回滚段中,而新数据则会存放数据段中,如果此时数据尚未提交,并且用户B执行select sal from emp where empno=1,此时用户B取得是undo数据888。         
Copy after login
    事务恢复:事务恢复是实例恢复的一部分,由oracle server 自动完成的,如果在数据库运行过程中出现实例失败(如断电),那么当重启数据库 时,后台进程smon(system monitor)会自动执行实例恢复,执行实例恢复时,oracle会重新做所有未应用的记录,回退未提交事务。
Copy after login
    闪回查询:用户取的特定时间的数据库数据,用于9i,10g,11g等版本
Copy after login
2.  undo重要参数
Copy after login
 undo_management:该参数指定undo表空间管理方式,分别是auto和manager,默认是auto
Copy after login
undo_retention:该参数指定undo表空数据保留最大时间,默认是900s
Copy after login
undo_tablespace:该参数指定当前的undo表空间
Copy after login
SQL> show parameter undo 
Copy after login
NAME				     TYPE	 VALUE
Copy after login
------------------------------------ ----------- ------------------------------
Copy after login
undo_management 		     string	 AUTO
Copy after login
undo_retention			     integer	 9000
Copy after login
undo_tablespace 		     string	 UNDOTBS1
Copy after login
可以通过alter system set【参数名称】=【参数值】进行修改
Copy after login
例如:
Copy after login
Copy after login
SQL> alter system set undo_retention=9000;

Copy after login
System altered.
Copy after login
3. undo表空间
Copy after login
创建undo表空间:create undo tablespace 表空间名称 datafile '文件名称' size 文件大小;
Copy after login
例如:SQL> create undo tablespace undotbs04 
Copy after login
         datafile '/home/oracle/app/oracle/oradata/orcl/undotbs04.dbf' 
Copy after login
          size 50m;
Copy after login
修改undo表空间
Copy after login
a.为undo表空增加数据文件 alter tablespace 表空间名称 add  datafile '文件名称'  size 文件大小
Copy after login
例如:
Copy after login
Copy after login
SQL>  alter tablespace undotbs04 
Copy after login
           add datafile  '/home/oracle/app/oracle/oradata/orcl/undtbs04_01.dbf'
Copy after login
            size 50m;
Copy after login
b.修改undo数据文件大小:alter database datafile '文件名称' resize 文件大小
Copy after login
SQL> alter database datafile '/home/oracle/app/oracle/oradata/orcl/undotbs04.dbf' resize 100M;
Copy after login
c.重命名undo数据文件
Copy after login
步骤1:表空间离线
Copy after login
SQL> alter tablespace undotbs04 offline; 
Copy after login
步骤2:在操作系统层面重命名数据文件
Copy after login
[oracle@localhost orcl]$ mv undtbs04_01.dbf undotbs04_01.dbf;
Copy after login
步骤3:用alter tablespace重命名表空间对应的数据文件
Copy after login
SQL> alter tablespace undotbs04 rename datafile '/home/oracle/app/oracle/oradata/orcl/undtbs04_01.dbf' to 
Copy after login
     '/home/oracle/app/oracle/oradata/orcl/undotbs04_01.dbf';
Copy after login
步骤4:表空间在线
Copy after login
SQL> alter tablespace undotbs04 online;
Copy after login
删除undo表空间 :drop tablespace 表空间名称
Copy after login
SQL> drop tablespace undotbs04;
Copy after login
备注:数据文件并未真正被删除,需要手动删除
Copy after login
SQL> drop tablespace undotbs2 including contents;
Copy after login
备注:会级联删除数据文件
Copy after login
切换当前undo表空间:alter system set undo_tablespace='表空间名称'
Copy after login
create table t1(i int);
insert into t1 values(1);
insert into t1 values(2);
commit;
create table t2 rowdependencies as select * from t1;
Copy after login

 

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template