Oracle-26-UNDO管理

UNDO表空间保存数据修改之前的数据镜像,有四个作用:为事务提供回退、为事务提供恢复、提供读一致性、提供闪回功能。

查看表空间

select tablespace_name,contents from dba_tablespaces order by 2,1;
TABLESPACE_NAME      CONTENTS
-------------------- ---------
EXAMPLE              PERMANENT
SYSAUX               PERMANENT
SYSTEM               PERMANENT
USERS                PERMANENT
TEMP                 TEMPORARY
TEMP02               TEMPORARY
UNDO02               UNDO
UNDOTBS1             UNDO

8 rows selected.

Elapsed: 00:00:00.01

查看现有系统用的是哪个UNDO表空间

show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDO02

其中undo_retention是管理DML闪回功能

查看UNDO工作情况

select segment_name,tablespace_name,status from dba_rollback_segs;
SEGMENT_NAME                   TABLESPACE_NAME      STATUS
------------------------------ -------------------- ----------------
SYSTEM                         SYSTEM               ONLINE
_SYSSMU10_3550978943$          UNDOTBS1             OFFLINE
_SYSSMU9_1424341975$           UNDOTBS1             OFFLINE
_SYSSMU8_2012382730$           UNDOTBS1             OFFLINE
_SYSSMU7_3286610060$           UNDOTBS1             OFFLINE
_SYSSMU6_2443381498$           UNDOTBS1             OFFLINE
_SYSSMU5_1527469038$           UNDOTBS1             OFFLINE
_SYSSMU4_1152005954$           UNDOTBS1             OFFLINE
_SYSSMU3_2097677531$           UNDOTBS1             OFFLINE
_SYSSMU2_2232571081$           UNDOTBS1             OFFLINE
_SYSSMU1_3780397527$           UNDOTBS1             OFFLINE
_SYSSMU20_2406407709$          UNDO02               ONLINE
_SYSSMU19_435463704$           UNDO02               ONLINE
_SYSSMU18_1790535526$          UNDO02               ONLINE
_SYSSMU17_3002035816$          UNDO02               ONLINE
_SYSSMU16_2403826532$          UNDO02               ONLINE
_SYSSMU15_97498397$            UNDO02               ONLINE
_SYSSMU14_3499786256$          UNDO02               ONLINE
_SYSSMU13_2491882411$          UNDO02               ONLINE
_SYSSMU12_3165430591$          UNDO02               ONLINE
_SYSSMU11_3851363650$          UNDO02               ONLINE

21 rows selected.

UNDO保存着一种特殊的段结构:回滚段

在SCOTT用户下重新建立会话,增加回滚数据

update e01 set sal=sal+1;

然后查询回滚段信息

select s.username,t.xidusn,t.used_ublk from v$session s,v$transaction t where s.saddr=t.ses_addr;
USERNAME                           XIDUSN  USED_UBLK
------------------------------ ---------- ----------
SCOTT                                  20          1

Elapsed: 00:00:00.01

可以执行rollback进行回退

可以在数据库非正常关闭的情况下对数据进行恢复

查询SCOTT用户的e01表中数据

select * from e01;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        801                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1601        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1251        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2976                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1251       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2851                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2451                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3001                    20
      7839 KING       PRESIDENT            17-NOV-81       5001                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1501          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1101                    20
      7900 JAMES      CLERK           7698 03-DEC-81        951                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3001                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1301                    10

14 rows selected.

Elapsed: 00:00:00.00

我们模拟数据库掉电后启动的情况

startup force
select * from e01;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

14 rows selected.

Elapsed: 00:00:00.01

发现表中的数据已经恢复到更新之前的数据

读一致性:一个会话中修改数据,在未提交之前,其他用户看到的数据是未被修改的值

闪回操作

update e01 set sal = 1;
commit;
select * from e01;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80          1                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81          1        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81          1        500         30
      7566 JONES      MANAGER         7839 02-APR-81          1                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81          1       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81          1                    30
      7782 CLARK      MANAGER         7839 09-JUN-81          1                    10
      7788 SCOTT      ANALYST         7566 19-APR-87          1                    20
      7839 KING       PRESIDENT            17-NOV-81          1                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81          1          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87          1                    20
      7900 JAMES      CLERK           7698 03-DEC-81          1                    30
      7902 FORD       ANALYST         7566 03-DEC-81          1                    20
      7934 MILLER     CLERK           7782 23-JAN-82          1                    10

14 rows selected.

Elapsed: 00:00:00.00

如果要查询提交之前的老数据

select * from e01 as of timestamp(sysdate-5/1440);
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

14 rows selected.

Elapsed: 00:00:00.01
查询老数据保存时间
show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDO02

900秒15分钟,如果undo表空间满了,就会将之前的数据删除,可以查看参数

select tablespace_name,retention from dba_tablespaces order by 1;
TABLESPACE_NAME      RETENTION
-------------------- -----------
EXAMPLE              NOT APPLY
SYSAUX               NOT APPLY
SYSTEM               NOT APPLY
TEMP                 NOT APPLY
TEMP02               NOT APPLY
UNDO02               NOGUARANTEE
UNDOTBS1             NOGUARANTEE
USERS                NOT APPLY

8 rows selected.

Elapsed: 00:00:00.00

现在显示的是非强制,如果你要强制要求老镜像保存15分钟

alter tablespace undo02 retention guarantee;
select tablespace_name,retention from dba_tablespaces order by 1;
TABLESPACE_NAME      RETENTION
-------------------- -----------
EXAMPLE              NOT APPLY
SYSAUX               NOT APPLY
SYSTEM               NOT APPLY
TEMP                 NOT APPLY
TEMP02               NOT APPLY
UNDO02               GUARANTEE
UNDOTBS1             NOGUARANTEE
USERS                NOT APPLY

8 rows selected.

Elapsed: 00:00:00.00
在这种情况下,老数据在不到15分钟是不会被删除的。


猜你喜欢

转载自blog.csdn.net/Paul_George/article/details/80407660
今日推荐