Redo日志和Undo表空间

一.日志进程与联机redo日志

redo日志记录了数据库的所有操作,以及操作的顺序。Redo日志包括联机redo日志,归档redo日志和Standby Redo日志三种日志类型,这三种类型的日志在结构上完全相同的,只是用途不同而已。

redo数据只有再数据库恢复时才能体现出它的价值。在RAC环境中,每个实例的归档Redo日志可以放到本地文件系统,但是在实例恢复时需要将所有节点的的归档Redo放在一起,确保恢复的实例能够访问到所有实例的归档Redo日志。

每个实例都对应一个维护日志的日志线程(Redo Thread),单实例只有一个线程号为1的日志线程。对于RAC来说,日志线程和实例的关系可以通过以下查询得到

SQL> select thread#,checkpoint_change#,last_redo_change# from gv$thread;
   THREAD# CHECKPOINT_CHANGE#  LAST_REDO_CHANGE#
---------- ------------------ ------------------
         1        32644532366        32645068421
         2        32640774172        32645069778
         1        32644532366        32645068421
         2        32640774172        32645069778

查询线程和实例之间的关系:

SQL> select thread#,instance_name from gv$instance;

   THREAD# INSTANCE_NAME
---------- ----------------
         2 CWEOL2
         1 CWEOL1

查询线程和日志之间的关系:

SQL> select group#,thread# from v$log;

    GROUP#    THREAD#
---------- ----------
         1          1
         2          1
         3          2
         4          2
         5          1
         6          1
         7          2
         8          2
8 rows selected.

二.UNDO表空间

UNDO 表空间存放的是数据块的前镜像数据,是块的多版本数据,用于数据库的恢复,一致性读和事务回滚,对数据库并发下读一致性起着重要的作用。

RAC环境中中,与联机Redo日志一样,每个实例都有自己的UNDO表空间,UNDO表空间必须放在共享存储上,每个实例都能够访问到所有实例的UNDO表空间,以便任一活动实例都能够执行所有的实例恢复操作。每个实例有自己独立的UNDO表空间还能减少实例对UNDO表空间的争用。

UNDO参数:

(1)undo_managment初始化参数

undo_management指定系统使用的UNDO表空间管理模式。一般设置为AUTO

(2) UNDO_RETENTION初始化参数

undo_retention指定的是事务提交之后UNDO数据保留的时间

SQL> show parameter undo_retention;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                       integer     900

undo_retention指定的事务提交之后UNDO数据保留的时间。事务提交之后,UNDO数据不再需要用于回滚或者事务恢复,但一致性读可能还需要用到这些UNDO数据。例如,长时间允许的查询需要旧的UNDO数据产生一致性读。此外FLASHBACK的部分特性也依赖UNDO数据。基于以上两点,应该设置足够大的undo表空间,尽量长时间保留已提交的数据。

undo_retention参数并不保证已提交的数据在undo_retention指定时间内依然保留。如果UNDO表空间不足,为了满足新的事务UNDO段的请求,也可能清除还未到达undo_retention指定时间的undo数据。Oracle数据库会尽量长时间地保留UNDO表空间的数据。

(3)UNDO_TABLESPACE初始化参数:

每个数据库可以有多个UNDO表空间,但是对于每一个实例只有一个活动的UNDO表空间。在RAC环境中,每个实例都对应一个UNDO表空间,UNDO_TABLESPACE用于指定实例对应的UNDO表空间。UNDO表空间无法进行收缩,如果UNDO表空间过大,只有通过替换的方式来缩小UNDO表空间的大小。

案例:修改数据库的回滚段表空间


1、创建一个新的UNDO表空间
SQL> create undo tablespace undotbs2 datafile '/u01/oracle/oradata/ORCL/undotbs02.dbf' size 2G;


Tablespace created.


2、-切换UNDO表空间
SQL> alter system set undo_tablespace=undotbs2 scope=both;


System altered.


SQL> show parameter undo


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2


此时undotbs1表空间没用了。可以将其删除。


SQL> alter tablespace undotbs1 offline;


Tablespace altered.


SQL> drop tablespace undotbs1 including contents and datafiles;


Tablespace dropped.

你可能感兴趣的:(oracle体系结构)