1.学习内容
|
1. |
什么是oracle的还原(回滚)数据 |
|
2 |
oracle引入还原(回滚)数据的目的 事物回滚;当一个用户发生了一些DML语句之后改变 了主意使用了ROOLBACK语句回滚了他所作的事物,此时oracle服务器就会将还原段中的原始的数据回写到原来的数据行中。 事物恢复:如果当事物正在进行期间实例时崩溃了,则当数据库再次打开时oracle服务器就要还原(回滚)所有没有提交的变化。 保证数据的读一致性:当事物正在进行期间,数据库中的其他用户不应看到任何这些事物所做的没有提交的变化。一个语句不应该看到任何在该语句开始执行后所作的变化。
例子: SQL> alter user scott account unlock identified by oracle;
User altered.
SQL> conn scott/oracle Connected. SQL> create table emp_tran 2 as select * from emp;
Table created.
SQL> desc emp_tran Name Null? Type ----------------------------------------- -------- ---------------------------- EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)
SQL> select empno,ename,job,sal 2 from emp_tran 3 where job='CLERK';
EMPNO ENAME JOB SAL ---------- ---------- --------- ---------- 7369 SMITH CLERK 800 7876 ADAMS CLERK 1100 7900 JAMES CLERK 950 7934 MILLER CLERK 1300
SQL> update emp_tran 2 set sal=2000 3 where job='CLERK';---------------------DML操作
4 rows updated.
SQL> select empno,ename,job,sal 2 from emp_tran 3 where job='CLERK';
EMPNO ENAME JOB SAL ---------- ---------- --------- ---------- 7369 SMITH CLERK 2000 7876 ADAMS CLERK 2000 7900 JAMES CLERK 2000 7934 MILLER CLERK 2000------------------查询所修改的数据,但是我并没有提交,那么根据读一致规则可知道,其他的会话(连接)看不到这一变化的。
[oracle@prod1 Desktop]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu May 12 17:34:40 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> conn scott/oracle Connected. SQL> select empno,ename,job,sa;=l 2 SQL> SQL> select empno,ename,job,sal 2 from emp_tran 3 where job='CLERK';
EMPNO ENAME JOB SAL ---------- ---------- --------- ---------- 7369 SMITH CLERK 800 7876 ADAMS CLERK 1100 7900 JAMES CLERK 950 7934 MILLER CLERK 1300-----------------------我们发现他并没有变化,所以应了读一致性性规则。
那么下面我们提交了刚刚的操作再来查看一下;
SQL> commit;
Commit complete.
SQL> select empno,ename,job,sal 2 from emp_tran 3 where job='CLERK';
EMPNO ENAME JOB SAL ---------- ---------- --------- ---------- 7369 SMITH CLERK 2000 7876 ADAMS CLERK 2000 7900 JAMES CLERK 2000 7934 MILLER CLERK 2000-----------------------------所以从以上的结果中得出,要看到另一个会话所作的修改,必须将DML操作提交。
|
|
3 |
还原数据的管理方法 自动的还原数据管理:oracle服务器自动的管理还原段的创建、分配和优化等。 手动的还原数据管理:所有的还原段的创建、分配和优化。
|
|
4 |
什么是事物回滚 当一个用户发生了一些DML语句之后改变 了主意使用了ROOLBACK语句回滚了他所作的事物,此时oracle服务器就会将还原段中的原始的数据回写到原来的数据行中。 |
|
5 |
什么是事物恢复 如果当事物正在进行期间实例时崩溃了,则当数据库再次打开时oracle服务器就要还原(回滚)所有没有提交的变化。 |
|
6 |
什么是读一致性 当事物正在进行期间,数据库中的其他用户不应看到任何这些事物所做的没有提交的变化。一个语句不应该看到任何在该语句开始执行后所作的变化。 |
|
7 |
各种不同类型的oracle还原段 系统(system)还原段、非系统(non-system)还原段、延迟(deferred)还原段 非系统(non-system)还原段又包括自动管理的还原段和手动管理的还原段,其中手动的还原段分为私有和公有。、 |
|
8 |
自动还原数据的管理 是使用还原表空间来管理还原数据。 |
|
9 |
如何创建和维护还原表空间 第一种:在创建数据库时建立还原表空间; 第二种:在创建数据库之后,使用create undo tablespace命令来建立还原表空间。 SQL> create undo tablespace jinlian_undo 2 datafile '/home/oracle/jinlian_undo.dbf 3 ' 4 size 20m;
Tablespace created. SQL> select tablespace_name,status,contents 2 from dba_tablespaces 3 where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- UNDOTBS1 ONLINE UNDO JINLIAN_UNDO ONLINE UNDO
|
|
10 |
如何进行还原表空间之间的切换 oracle规定在任何时刻只能将一个还原表空间赋予数据库。也就是说,在一个实例中可以有多个还原表空间存在,但是只能有一个是活动的。可以使用alter tablespace命令来进行还原表空间之间的动态切换。 SQL> alter system set undo_tablespace=jinlian_undo;
System altered. SQL> col name for a30; SQL> col value for a30; SQL> select name,value 2 from v$parameter 3 where name like '%undo%';
NAME VALUE ------------------------------ ------------------------------ undo_management AUTO undo_tablespace JINLIAN_UNDO undo_retention 900
|
|
11 |
如何删除还原表空间 使用drop tablespace命令来删除还原表空间; 用户无法删除当前正在使用的还原表空间,只有在一个还原表空间当前没有被使用时,才可以将它删除; 也可以使用以下的方式来删除一个活动的还原表空间; ------------切换到一个新的表空间 ------------等所有的当前的事物完成后删除该还原表空间; SQL> drop tablespace jinlian_undo; drop tablespace jinlian_undo * ERROR at line 1: ORA-30013: undo tablespace 'JINLIAN_UNDO' is currently in use
SQL> alter system set undo_tablespace='UNDOTBS1';
System altered. SQL> select tablespace_name,status,contents 2 from dba_tablespaces 3 where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- UNDOTBS1 ONLINE UNDO JINLIAN_UNDO ONLINE UNDO
SQL> drop tablespace jinlian_undo;
Tablespace dropped. SQL> select tablespace_name,status,contents 2 from dba_tablespaces 3 where contents='UNDO';
TABLESPACE_NAME STATUS CONTENTS ------------------------------ --------- --------- UNDOTBS1 ONLINE UNDO
|
|
12 |
如何使用UNDO_SUPPRESS_ERRORS参数 如果该参数被设为TRUE,那么在还原数据管理的自动模式中试图执行手动操作时将不显示错误信息; 因为该参数是动态参数,所以可以使用如下的命令动态的修改;
SQL> alter session set undo_suppress_errors = true;
Session altered.
|
|
13 |
如何使用UNDO_RETENTION参数 SQL> alter system set undo_retention=1800;
System altered.
|
|
14 |
增加UNDO_RETENTION的值的好处及副作用 增加UNDO_RETENTION的值虽然能在保证长期查询语句的读一致性方面有所改进,但是加大UNDO_RETENTION的值也将会增加数据库的磁盘空间的消耗,特别是DML操作很频繁时。 |
|
15 |
常用的获得还原数据信息的数据字典 SQL> desc v$undostat; SQL> desc v$rollname; SQL> desc v$rollstat; SQL> desc v$session; SQL> desc v$transaction;
|
|
|
|
2.问题:
|
(1) |
不是特别理解什么是oracle的还原(回滚)数据 答:oracle的还原(回滚)数据就是指实例崩溃之后,一些没有提交的数据是从undo表空间中得到的; |
|
(2) |
不是很理解什么是事物恢复 答:简单的说就是当实例崩溃之后,当再次打开数据库时oracle服务器就要还原(回滚)没有提交的的变化。和还原(回滚)数据一样,都是从undo表空间中得到的; |
|
(3) |
不是很明白UNDO_SUPPRESS_ERRORS参数的使用 答:undo_suppress_errors 被设置成true时表示系统创建和使用回滚段时忽略错误。 相关的初始化参数: undo_tablespace 指名系统使用哪一个重做表空间。 undo_retention 系统提交后,回滚段的数据保留多长时间,单位是秒。 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30606702/viewspace-2099686/ ,如需转载,请注明出处,否则将追究法律责任。