ITPub博客

首页 > 数据库 > Oracle > 管理还原数据

管理还原数据

原创 Oracle 作者:wenjunheyixiao 时间:2016-05-14 12:13:37 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle11g日志挖掘
下一篇: ORACLE_自学小心情
请登录后发表评论 登录
全部评论

注册时间:2015-12-02

  • 博文量
    117
  • 访问量
    202595