Heim > Datenbank > MySQL-Tutorial > undo管理

undo管理

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:28:06
Original
1329 Leute haben es durchsucht

数据库环境: 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作用

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

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

 

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage