• UNDO自动管理和手工管理、闪回操作


    undo tablespace之下 --》使用rollback segment保存数据修改前的老镜像

    rollback segment的管理方法:

    1. SQL>
    2. SQL> show parameter undo_management
    3. NAME TYPE VALUE
    4. ------------------------------------ ----------- ------------------------------
    5. undo_management string AUTO
    6. SQL> show parameter undo_tablespace
    7. NAME TYPE VALUE
    8. ------------------------------------ ----------- ------------------------------
    9. undo_tablespace string UNDOTBS1
    10. SQL>
    1. SQL>
    2. SQL>
    3. SQL> select name from v$datafile;
    4. NAME
    5. --------------------------------------------------------------------------------
    6. /u02/oradata/CDB1/system01.dbf
    7. /u02/oradata/CDB1/sysaux01.dbf
    8. /u02/oradata/CDB1/undotbs01.dbf
    9. /u02/oradata/CDB1/pdbseed/system01.dbf
    10. /u02/oradata/CDB1/pdbseed/sysaux01.dbf
    11. /u02/oradata/CDB1/users01.dbf
    12. /u02/oradata/CDB1/pdbseed/undotbs01.dbf
    13. /u02/oradata/CDB1/pdb1/system01.dbf
    14. /u02/oradata/CDB1/pdb1/sysaux01.dbf
    15. /u02/oradata/CDB1/pdb1/undotbs01.dbf
    16. /u02/oradata/CDB1/pdb1/users01.dbf
    17. 11 rows selected.
    18. SQL> show con_name
    19. CON_NAME
    20. ------------------------------
    21. CDB$ROOT
    22. SQL>
    23. SQL> alter session set container=PDB1;
    24. Session altered.
    25. SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/pdb1/undotbs02.dbf' size 10m;
    26. Tablespace created.
    27. SQL>
    28. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    29. SEGMENT_NAME TABLESPACE_NAME STATUS
    30. ------------------------------ ------------------------------ ----------------
    31. SYSTEM SYSTEM ONLINE
    32. _SYSSMU1_3588498444$ UNDOTBS1 ONLINE
    33. _SYSSMU2_2971032042$ UNDOTBS1 ONLINE
    34. _SYSSMU3_3657342154$ UNDOTBS1 ONLINE
    35. _SYSSMU4_811969446$ UNDOTBS1 ONLINE
    36. _SYSSMU5_3018429039$ UNDOTBS1 ONLINE
    37. _SYSSMU6_442110264$ UNDOTBS1 ONLINE
    38. _SYSSMU7_2728255665$ UNDOTBS1 ONLINE
    39. _SYSSMU8_801938064$ UNDOTBS1 ONLINE
    40. _SYSSMU9_647420285$ UNDOTBS1 ONLINE
    41. _SYSSMU10_2262159254$ UNDOTBS1 ONLINE
    42. SEGMENT_NAME TABLESPACE_NAME STATUS
    43. ------------------------------ ------------------------------ ----------------
    44. _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
    45. _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
    46. _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
    47. _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
    48. _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
    49. _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
    50. _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
    51. _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
    52. _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
    53. _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
    54. 21 rows selected.
    55. SQL>
    1. SQL> select name from v$datafile;
    2. NAME
    3. --------------------------------------------------------------------------------
    4. /u02/oradata/CDB1/system01.dbf
    5. /u02/oradata/CDB1/sysaux01.dbf
    6. /u02/oradata/CDB1/undotbs01.dbf
    7. /u02/oradata/CDB1/pdbseed/system01.dbf
    8. /u02/oradata/CDB1/pdbseed/sysaux01.dbf
    9. /u02/oradata/CDB1/users01.dbf
    10. /u02/oradata/CDB1/pdbseed/undotbs01.dbf
    11. /u02/oradata/CDB1/pdb1/system01.dbf
    12. /u02/oradata/CDB1/pdb1/sysaux01.dbf
    13. /u02/oradata/CDB1/pdb1/undotbs01.dbf
    14. /u02/oradata/CDB1/pdb1/users01.dbf
    15. NAME
    16. --------------------------------------------------------------------------------
    17. /u02/oradata/CDB1/pdb1/undotbs02.dbf
    18. 12 rows selected.
    19. SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/undotbs02.dbf' size 10m;
    20. Tablespace created.
    21. SQL> select name from v$datafile;
    22. NAME
    23. --------------------------------------------------------------------------------
    24. /u02/oradata/CDB1/system01.dbf
    25. /u02/oradata/CDB1/sysaux01.dbf
    26. /u02/oradata/CDB1/undotbs01.dbf
    27. /u02/oradata/CDB1/pdbseed/system01.dbf
    28. /u02/oradata/CDB1/pdbseed/sysaux01.dbf
    29. /u02/oradata/CDB1/users01.dbf
    30. /u02/oradata/CDB1/pdbseed/undotbs01.dbf
    31. /u02/oradata/CDB1/pdb1/system01.dbf
    32. /u02/oradata/CDB1/pdb1/sysaux01.dbf
    33. /u02/oradata/CDB1/pdb1/undotbs01.dbf
    34. /u02/oradata/CDB1/pdb1/users01.dbf
    35. NAME
    36. --------------------------------------------------------------------------------
    37. /u02/oradata/CDB1/pdb1/undotbs02.dbf
    38. /u02/oradata/CDB1/undotbs02.dbf
    39. 13 rows selected.
    40. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    41. SEGMENT_NAME TABLESPACE_NAME STATUS
    42. ------------------------------ ------------------------------ ----------------
    43. SYSTEM SYSTEM ONLINE
    44. _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
    45. _SYSSMU2_27624015$ UNDOTBS1 ONLINE
    46. _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
    47. _SYSSMU4_625702278$ UNDOTBS1 ONLINE
    48. _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
    49. _SYSSMU6_813816332$ UNDOTBS1 ONLINE
    50. _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
    51. _SYSSMU8_399776867$ UNDOTBS1 ONLINE
    52. _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
    53. _SYSSMU10_930580995$ UNDOTBS1 ONLINE
    54. SEGMENT_NAME TABLESPACE_NAME STATUS
    55. ------------------------------ ------------------------------ ----------------
    56. _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
    57. _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
    58. _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
    59. _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
    60. _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
    61. _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
    62. _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
    63. _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
    64. _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
    65. _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
    66. 21 rows selected.
    67. SQL>

    1. SQL> select name from v$datafile;
    2. NAME
    3. --------------------------------------------------------------------------------
    4. /u02/oradata/CDB1/system01.dbf
    5. /u02/oradata/CDB1/sysaux01.dbf
    6. /u02/oradata/CDB1/undotbs01.dbf
    7. /u02/oradata/CDB1/pdbseed/system01.dbf
    8. /u02/oradata/CDB1/pdbseed/sysaux01.dbf
    9. /u02/oradata/CDB1/users01.dbf
    10. /u02/oradata/CDB1/pdbseed/undotbs01.dbf
    11. /u02/oradata/CDB1/pdb1/system01.dbf
    12. /u02/oradata/CDB1/pdb1/sysaux01.dbf
    13. /u02/oradata/CDB1/pdb1/undotbs01.dbf
    14. /u02/oradata/CDB1/pdb1/users01.dbf
    15. NAME
    16. --------------------------------------------------------------------------------
    17. /u02/oradata/CDB1/pdb1/undotbs02.dbf
    18. 12 rows selected.
    19. SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/undotbs02.dbf' size 10m;
    20. Tablespace created.
    21. SQL> select name from v$datafile;
    22. NAME
    23. --------------------------------------------------------------------------------
    24. /u02/oradata/CDB1/system01.dbf
    25. /u02/oradata/CDB1/sysaux01.dbf
    26. /u02/oradata/CDB1/undotbs01.dbf
    27. /u02/oradata/CDB1/pdbseed/system01.dbf
    28. /u02/oradata/CDB1/pdbseed/sysaux01.dbf
    29. /u02/oradata/CDB1/users01.dbf
    30. /u02/oradata/CDB1/pdbseed/undotbs01.dbf
    31. /u02/oradata/CDB1/pdb1/system01.dbf
    32. /u02/oradata/CDB1/pdb1/sysaux01.dbf
    33. /u02/oradata/CDB1/pdb1/undotbs01.dbf
    34. /u02/oradata/CDB1/pdb1/users01.dbf
    35. NAME
    36. --------------------------------------------------------------------------------
    37. /u02/oradata/CDB1/pdb1/undotbs02.dbf
    38. /u02/oradata/CDB1/undotbs02.dbf
    39. 13 rows selected.
    40. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    41. SEGMENT_NAME TABLESPACE_NAME STATUS
    42. ------------------------------ ------------------------------ ----------------
    43. SYSTEM SYSTEM ONLINE
    44. _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
    45. _SYSSMU2_27624015$ UNDOTBS1 ONLINE
    46. _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
    47. _SYSSMU4_625702278$ UNDOTBS1 ONLINE
    48. _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
    49. _SYSSMU6_813816332$ UNDOTBS1 ONLINE
    50. _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
    51. _SYSSMU8_399776867$ UNDOTBS1 ONLINE
    52. _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
    53. _SYSSMU10_930580995$ UNDOTBS1 ONLINE
    54. SEGMENT_NAME TABLESPACE_NAME STATUS
    55. ------------------------------ ------------------------------ ----------------
    56. _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
    57. _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
    58. _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
    59. _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
    60. _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
    61. _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
    62. _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
    63. _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
    64. _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
    65. _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
    66. 21 rows selected.
    67. SQL> show user
    68. USER is "SYS"
    69. SQL> col username for a10
    70. SQL> select s.USERNAME,t.XIDUSN,t.USED_UBLK from v$session s, v$transaction t where t.SES_ADDR=s.SADDR;
    71. USERNAME XIDUSN USED_UBLK
    72. ---------- ---------- ----------
    73. SCOTT 8 20
    74. SCOTT 2 1
    75. SQL>
    76. SQL> select name from v$rollname where usn=8;
    77. NAME
    78. ------------------------------
    79. _SYSSMU8_399776867$
    80. SQL> select name from v$rollname where usn=2;
    81. NAME
    82. ------------------------------
    83. _SYSSMU2_27624015$
    84. SQL>

    UNDO手工管理

    1. SQL>
    2. SQL> show parameter undo_management
    3. NAME TYPE VALUE
    4. ------------------------------------ ----------- ------------------------------
    5. undo_management string AUTO
    6. SQL> show parameter undo_tablespace
    7. NAME TYPE VALUE
    8. ------------------------------------ ----------- ------------------------------
    9. undo_tablespace string UNDOTBS1
    10. SQL>
    11. SQL> alter system set undo_management=manual scope=spfile
    12. 2 ;
    13. System altered.
    14. SQL> shutdown immediate
    15. Database closed.
    16. Database dismounted.
    17. ORACLE instance shut down.
    18. SQL>
    19. SQL> startup
    20. ORACLE instance started.
    21. Total System Global Area 629145392 bytes
    22. Fixed Size 9137968 bytes
    23. Variable Size 184549376 bytes
    24. Database Buffers 427819008 bytes
    25. Redo Buffers 7639040 bytes
    26. Database mounted.
    27. Database opened.
    28. SQL> show parameter undo_management
    29. NAME TYPE VALUE
    30. ------------------------------------ ----------- ------------------------------
    31. undo_management string MANUAL
    32. SQL>
    33. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    34. SEGMENT_NAME TABLESPACE_NAME STATUS
    35. ------------------------------ ------------------------------ ----------------
    36. SYSTEM SYSTEM ONLINE
    37. _SYSSMU1_1261223759$ UNDOTBS1 OFFLINE
    38. _SYSSMU2_27624015$ UNDOTBS1 OFFLINE
    39. _SYSSMU3_2421748942$ UNDOTBS1 OFFLINE
    40. _SYSSMU4_625702278$ UNDOTBS1 OFFLINE
    41. _SYSSMU5_2101348960$ UNDOTBS1 OFFLINE
    42. _SYSSMU6_813816332$ UNDOTBS1 OFFLINE
    43. _SYSSMU7_2329891355$ UNDOTBS1 OFFLINE
    44. _SYSSMU8_399776867$ UNDOTBS1 OFFLINE
    45. _SYSSMU9_1692468413$ UNDOTBS1 OFFLINE
    46. _SYSSMU10_930580995$ UNDOTBS1 OFFLINE
    47. SEGMENT_NAME TABLESPACE_NAME STATUS
    48. ------------------------------ ------------------------------ ----------------
    49. _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
    50. _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
    51. _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
    52. _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
    53. _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
    54. _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
    55. _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
    56. _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
    57. _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
    58. _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
    59. 21 rows selected.
    60. SQL>

    当切换到手工管理UNDO表空间执行update语句时,遇到如下错误:

    1. [oracle@oracle-db-19c ~]$
    2. [oracle@oracle-db-19c ~]$ sqlplus scott/tiger@PDB1
    3. SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 23 11:04:26 2022
    4. Version 19.3.0.0.0
    5. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    6. Last Successful login time: Wed Nov 23 2022 10:46:24 +08:00
    7. Connected to:
    8. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    9. Version 19.3.0.0.0
    10. SQL> show user
    11. USER is "SCOTT"
    12. SQL>
    13. SQL> set pagesize 200
    14. SQL> set linesize 200
    15. SQL>
    16. SQL> update e01 set sal=sal+1;
    17. update e01 set sal=sal+1
    18. *
    19. ERROR at line 1:
    20. ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
    21. SQL>

    将 表e01移动到系统表空间后,可以进行表更新。

    1. SQL>
    2. SQL> alter table e01 move tablespace system;
    3. Table altered.
    4. SQL>
    5. SQL> update e01 set sal=sal+1;
    6. 14 rows updated.
    7. SQL> roll
    8. Rollback complete.
    9. SQL>
    10. SQL>

    在scott用户下尝试做建表实验:

    1. SQL>
    2. SQL>
    3. SQL> select * from tab
    4. 2 ;
    5. TNAME TABTYPE CLUSTERID
    6. -------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
    7. T02 TABLE
    8. T01 TABLE
    9. T03 TABLE
    10. DEPT TABLE
    11. EMP TABLE
    12. BONUS TABLE
    13. SALGRADE TABLE
    14. DETAIL_DEPT TABLE
    15. VU10 VIEW
    16. VUTEST VIEW
    17. E01 TABLE
    18. TEMP TABLE
    19. TEMP02 TABLE
    20. OB1 TABLE
    21. 14 rows selected.
    22. SQL>
    23. SQL>
    24. SQL>
    25. SQL> create table e02 as select * from emp;
    26. create table e02 as select * from emp
    27. *
    28. ERROR at line 1:
    29. ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
    30. SQL> desc e02;
    31. ERROR:
    32. ORA-04043: object e02 does not exist
    33. SQL> create table e02 as select * from emp where 1=0;
    34. Table created.
    35. SQL> desc e02;
    36. Name Null? Type
    37. ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
    38. EMPNO NUMBER(4)
    39. ENAME VARCHAR2(10)
    40. JOB VARCHAR2(9)
    41. MGR NUMBER(4)
    42. HIREDATE DATE
    43. SAL NUMBER(7,2)
    44. COMM NUMBER(7,2)
    45. DEPTNO NUMBER(2)
    46. SQL>

     结论:创建空表是可以建立的,但带数据建表是不可以的。建表能成功的原因是deferred_segment_creation处于打开状态。(延迟段创建)

    SQL> show parameter segment

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    deferred_segment_creation            boolean     TRUE
    rollback_segments                    string
    transactions_per_rollback_segment    integer     5
    SQL>

    我们尝试将这个延迟段创建关闭,看看SCOTT用户是否可以继续创建表呢?如下所示:

    • 延迟段创建关闭
    1. [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
    2. SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 23 15:55:34 2022
    3. Version 19.3.0.0.0
    4. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    5. Connected to:
    6. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    7. Version 19.3.0.0.0
    8. SQL> alter session set container=PDB1;
    9. Session altered.
    10. SQL> show con_name;
    11. CON_NAME
    12. ------------------------------
    13. PDB1
    14. SQL> show parameter segment
    15. NAME TYPE VALUE
    16. ------------------------------------ ----------- ------------------------------
    17. deferred_segment_creation boolean TRUE
    18. rollback_segments string
    19. transactions_per_rollback_segment integer 5
    20. SQL> alter system set deferred_segment_creation=FALSE;
    21. System altered.
    22. SQL> show parameter segment
    23. NAME TYPE VALUE
    24. ------------------------------------ ----------- ------------------------------
    25. deferred_segment_creation boolean FALSE
    26. rollback_segments string
    27. transactions_per_rollback_segment integer 5
    28. SQL>

    结论是可以单纯建表不带数据,但无法带数建表。

    1. SQL> create table e02 as select * from emp;
    2. create table e02 as select * from emp
    3. *
    4. ERROR at line 1:
    5. ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
    6. SQL> create table e03 as select * from emp where 1=0;
    7. Table created.
    8. SQL> select * from tab;
    9. TNAME TABTYPE CLUSTERID
    10. -------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
    11. T02 TABLE
    12. T01 TABLE
    13. T03 TABLE
    14. DEPT TABLE
    15. EMP TABLE
    16. BONUS TABLE
    17. SALGRADE TABLE
    18. DETAIL_DEPT TABLE
    19. VU10 VIEW
    20. VUTEST VIEW
    21. E01 TABLE
    22. TEMP TABLE
    23. TEMP02 TABLE
    24. E03 TABLE
    25. OB1 TABLE
    26. 15 rows selected.
    27. SQL>

     回滚段的手工管理:

    create rollback segment rbs1 tablespace UNDOTBS1;
    create rollback segment rbs2 tablespace UNDOTBS1;
    create rollback segment rbs3 tablespace UNDOTBS1;

    alter system set rollback_segments='RBS1',‘RBS2’, 'RBS3' scope=spfile;

    1. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    2. SEGMENT_NAME TABLESPACE_NAME STATUS
    3. ------------------------------ ------------------------------ ----------------
    4. SYSTEM SYSTEM ONLINE
    5. _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
    6. _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
    7. _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
    8. _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
    9. _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
    10. _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
    11. _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
    12. _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
    13. _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
    14. _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
    15. SEGMENT_NAME TABLESPACE_NAME STATUS
    16. ------------------------------ ------------------------------ ----------------
    17. _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
    18. _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
    19. _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
    20. _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
    21. _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
    22. _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
    23. _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
    24. _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
    25. _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
    26. _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
    27. 21 rows selected.
    28. SQL> create rollback segment rbs1 tablespace UNDOTBS1;
    29. Rollback segment created.
    30. SQL>
    31. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    32. SEGMENT_NAME TABLESPACE_NAME STATUS
    33. ------------------------------ ------------------------------ ----------------
    34. SYSTEM SYSTEM ONLINE
    35. _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
    36. _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
    37. _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
    38. _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
    39. _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
    40. _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
    41. _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
    42. _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
    43. _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
    44. _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
    45. SEGMENT_NAME TABLESPACE_NAME STATUS
    46. ------------------------------ ------------------------------ ----------------
    47. RBS1 UNDOTBS1 OFFLINE
    48. _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
    49. _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
    50. _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
    51. _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
    52. _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
    53. _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
    54. _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
    55. _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
    56. _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
    57. _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
    58. 22 rows selected.
    59. SQL>

    1. SQL> show parameter rollback
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. fast_start_parallel_rollback string LOW
    5. rollback_segments string
    6. transactions_per_rollback_segment integer 5
    7. SQL>
    8. SQL> shutdown immediate
    9. Pluggable Database closed.
    10. SQL> startup
    11. Pluggable Database opened.
    12. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    13. SEGMENT_NAME TABLESPACE_NAME STATUS
    14. ------------------------------ ------------------------------ ----------------
    15. SYSTEM SYSTEM ONLINE
    16. _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
    17. _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
    18. _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
    19. _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
    20. _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
    21. _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
    22. _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
    23. _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
    24. _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
    25. _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
    26. RBS1 UNDOTBS1 OFFLINE
    27. _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
    28. _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
    29. _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
    30. _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
    31. _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
    32. _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
    33. _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
    34. _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
    35. _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
    36. _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
    37. 22 rows selected.
    38. SQL>
    39. SQL>
    40. SQL> alter system set rollback_segments='RBS1' scope=spfile;
    41. System altered.
    42. SQL> startup force
    43. Pluggable Database opened.
    44. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    45. SEGMENT_NAME TABLESPACE_NAME STATUS
    46. ------------------------------ ------------------------------ ----------------
    47. SYSTEM SYSTEM ONLINE
    48. _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
    49. _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
    50. _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
    51. _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
    52. _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
    53. _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
    54. _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
    55. _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
    56. _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
    57. _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
    58. RBS1 UNDOTBS1 ONLINE
    59. _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
    60. _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
    61. _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
    62. _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
    63. _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
    64. _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
    65. _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
    66. _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
    67. _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
    68. _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
    69. 22 rows selected.
    70. SQL>

     提供对DML操作的闪回处理

    闪回查询:

    1. SQL> select * from e01;
    2. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    3. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    4. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    5. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    6. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    7. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    8. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    9. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    10. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    11. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    12. 7839 KING PRESIDENT 17-NOV-81 5000 10
    13. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    14. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    15. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    16. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    17. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    18. 14 rows selected.
    19. SQL> update e01 set sal = 1;
    20. 14 rows updated.
    21. SQL> commit;
    22. Commit complete.
    23. SQL> rollback;
    24. Rollback complete.
    25. SQL> select * from e01;
    26. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    27. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    28. 7369 SMITH CLERK 7902 17-DEC-80 1 20
    29. 7499 ALLEN SALESMAN 7698 20-FEB-81 1 300 30
    30. 7521 WARD SALESMAN 7698 22-FEB-81 1 500 30
    31. 7566 JONES MANAGER 7839 02-APR-81 1 20
    32. 7654 MARTIN SALESMAN 7698 28-SEP-81 1 1400 30
    33. 7698 BLAKE MANAGER 7839 01-MAY-81 1 30
    34. 7782 CLARK MANAGER 7839 09-JUN-81 1 10
    35. 7788 SCOTT ANALYST 7566 24-JAN-87 1 20
    36. 7839 KING PRESIDENT 17-NOV-81 1 10
    37. 7844 TURNER SALESMAN 7698 08-SEP-81 1 0 30
    38. 7876 ADAMS CLERK 7788 02-APR-87 1 20
    39. 7900 JAMES CLERK 7698 03-DEC-81 1 30
    40. 7902 FORD ANALYST 7566 03-DEC-81 1 20
    41. 7934 MILLER CLERK 7782 23-JAN-82 1 10
    42. 14 rows selected.
    43. SQL> select * from e01 as of timestamp(sysdate-5/1440);
    44. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    45. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    46. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    47. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    48. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    49. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    50. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    51. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    52. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    53. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    54. 7839 KING PRESIDENT 17-NOV-81 5000 10
    55. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    56. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    57. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    58. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    59. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    60. 14 rows selected.
    61. SQL> alter table e01 enable row movement;
    62. Table altered.
    63. SQL> flashback table e01 to timestamp(sysdate-5/1440);
    64. Flashback complete.
    65. SQL> select * from e01;
    66. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    67. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    68. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    69. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    70. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    71. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    72. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    73. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    74. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    75. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    76. 7839 KING PRESIDENT 17-NOV-81 5000 10
    77. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    78. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    79. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    80. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    81. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    82. 14 rows selected.
    83. SQL>

    最多可以闪回15分钟,900秒。

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

    闪回版本查询

    1. SQL> update e01 set sal=sal+100 where deptno=10;
    2. 3 rows updated.
    3. SQL> commit;
    4. Commit complete.
    5. SQL> update e01 set sal=sal*1.1 where deptno=30;
    6. 6 rows updated.
    7. SQL> commit;
    8. Commit complete.
    9. SQL> update e01 set sal=3;
    10. 14 rows updated.
    11. SQL> commit;
    12. Commit complete.
    13. SQL> select * from e01;
    14. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    15. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    16. 7369 SMITH CLERK 7902 17-DEC-80 3 20
    17. 7499 ALLEN SALESMAN 7698 20-FEB-81 3 300 30
    18. 7521 WARD SALESMAN 7698 22-FEB-81 3 500 30
    19. 7566 JONES MANAGER 7839 02-APR-81 3 20
    20. 7654 MARTIN SALESMAN 7698 28-SEP-81 3 1400 30
    21. 7698 BLAKE MANAGER 7839 01-MAY-81 3 30
    22. 7782 CLARK MANAGER 7839 09-JUN-81 3 10
    23. 7788 SCOTT ANALYST 7566 24-JAN-87 3 20
    24. 7839 KING PRESIDENT 17-NOV-81 3 10
    25. 7844 TURNER SALESMAN 7698 08-SEP-81 3 0 30
    26. 7876 ADAMS CLERK 7788 02-APR-87 3 20
    27. 7900 JAMES CLERK 7698 03-DEC-81 3 30
    28. 7902 FORD ANALYST 7566 03-DEC-81 3 20
    29. 7934 MILLER CLERK 7782 23-JAN-82 3 10
    30. 14 rows selected.
    31. SQL> --闪回版本查询
    32. SQL> select versions_startscn,versions_endscn,versions_operation,versions_xid,sal from e01 versions between scn_minvalue and maxvalue where empno=7369;
    33. select versions_startscn,versions_endscn,versions_operation,versions_xid,sal from e01 versions between scn_minvalue and maxvalue where empno=7369
    34. *
    35. ERROR at line 1:
    36. ORA-00905: missing keyword
    37. SQL> select
    38. 2 versions_startscn,
    39. 3 versions_endscn,
    40. 4 versions_operation,
    41. 5 versions_xid,
    42. 6 sal
    43. 7 from e01
    44. 8 versions between scn minvalue and maxvalue
    45. 9 where empno=7369;
    46. VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID SAL
    47. ----------------- --------------- - ---------------- ----------
    48. 17826843 U 03000300BC030000 3
    49. 17826652 17826843 I 070010006E030000 800
    50. 17826652 D 070010006E030000 1
    51. 17825320 17826652 U 03002000BB030000 1
    52. 17825320 800
    53. SQL>
    54. SQL> col versions_starttime for a25;
    55. SQL> col versions_endtime for a25;
    56. SQL> select
    57. 2 versions_starttime
    58. 3 versions_endtime,
    59. 4 --versions_startscn,
    60. 5 --versions_endscn,
    61. 6 versions_operation,
    62. 7 versions_xid,
    63. 8 sal
    64. 9 from e01
    65. 10 versions between scn minvalue and maxvalue
    66. 11 where empno=7369;
    67. VERSIONS_ENDTIME V VERSIONS_XID SAL
    68. ------------------------- - ---------------- ----------
    69. 23-NOV-22 09.55.07 PM U 03000300BC030000 3
    70. 23-NOV-22 09.50.16 PM I 070010006E030000 800
    71. 23-NOV-22 09.50.16 PM D 070010006E030000 1
    72. 1
    73. SQL> --闪回版本查询
    74. SQL> select * from e01 as of scn 17826652;
    75. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    76. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    77. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    78. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    79. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    80. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    81. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    82. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    83. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    84. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    85. 7839 KING PRESIDENT 17-NOV-81 5000 10
    86. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    87. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    88. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    89. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    90. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    91. 14 rows selected.
    92. SQL> flashback table e01 to scn 17826652;
    93. Flashback complete.
    94. SQL> select * from e01;
    95. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    96. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    97. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    98. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    99. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    100. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    101. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    102. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    103. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    104. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    105. 7839 KING PRESIDENT 17-NOV-81 5000 10
    106. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    107. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    108. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    109. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    110. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    111. 14 rows selected.
    112. SQL>

    注意注意: 要想做闪回表的操作,必须先开行移动,如果不打开行移动,将无法进行闪回操作。

    1. SQL> alter table e01 enable row movement;
    2. Table altered.

    开启追加日志数据模式:

    1. SQL>
    2. SQL> alter database add supplemental log data;
    3. Database altered.
    4. SQL>
    1. SQL>
    2. SQL> update e01 set sal=sal*1.15 where deptno=30;
    3. 6 rows updated.
    4. SQL>
    5. SQL> select
    6. 2 --versions_starttime
    7. 3 --versions_endtime,
    8. 4 versions_startscn,
    9. 5 versions_endscn,
    10. 6 versions_operation,
    11. 7 versions_xid,
    12. 8 sal
    13. 9 from e01
    14. 10 versions between scn minvalue and maxvalue
    15. 11 where empno=7844;
    16. VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID SAL
    17. ----------------- --------------- - ---------------- ----------
    18. 17846142 I 02000B0061030000 1500
    19. 17846142 D 02000B0061030000 3
    20. 17846142 3
    21. SQL>

    闪回事务查询

    1. select
    2. --versions_starttime
    3. --versions_endtime,
    4. versions_startscn,
    5. versions_endscn,
    6. versions_operation,
    7. versions_xid,
    8. sal
    9. from e01
    10. versions between scn minvalue and maxvalue
    11. where empno=7844;
    12. ---闪回事务查询,sys用户才可以查询
    13. SQL> select undo_sql from flashback_transaction_query where xid='02000B0061030000';
    14. UNDO_SQL
    15. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    16. 16 rows selected.
    17. SQL>

    数据的串行访问:(都是从UNDO读取的数据)

    设置事务隔离级来模拟数据串行访问

    SQL> set transaction isolation level serializable;

    Transaction set.

    SQL>

    画面1:

    1. [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
    2. SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 09:51:46 2022
    3. Version 19.3.0.0.0
    4. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    5. Connected to:
    6. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    7. Version 19.3.0.0.0
    8. SQL> conn scott/tiger@PDB1;
    9. Connected.
    10. SQL> show con_name;
    11. CON_NAME
    12. ------------------------------
    13. PDB1
    14. SQL> set transaction isolation level serializable;
    15. Transaction set.
    16. SQL> select distinct sal from e01;
    17. SAL
    18. ----------
    19. 1
    20. SQL> select distinct sal from e01;
    21. SAL
    22. ----------
    23. 1
    24. SQL>

    画面2:

    1. [oracle@oracle-db-19c ~]$ sqlplus scott/tiger@PDB1
    2. SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 10:01:22 2022
    3. Version 19.3.0.0.0
    4. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    5. Last Successful login time: Thu Nov 24 2022 09:52:09 +08:00
    6. Connected to:
    7. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    8. Version 19.3.0.0.0
    9. SQL> show con_name;
    10. CON_NAME
    11. ------------------------------
    12. PDB1
    13. SQL>
    14. SQL> select distinct sal from e01;
    15. SAL
    16. ----------
    17. 1
    18. SQL> update e01 set sal=2;
    19. 57344 rows updated.
    20. SQL> select distinct sal from e01;
    21. SAL
    22. ----------
    23. 2
    24. SQL> commit;
    25. Commit complete.
    26. SQL> set transaction isolation level serializable;
    27. Transaction set.
    28. SQL> select distinct sal from e01;
    29. SAL
    30. ----------
    31. 2
    32. SQL>

    回退保实例

    打开回退强度保实例的作用是,老镜像不到15分钟是不允许被覆盖

    SQL> set transaction isolation level serializable;

    Transaction set.

    SQL>

    SQL> alter tablespace UNDOTBS2 RETENTION GUARANTEE;

    Tablespace altered.

    SQL>

    SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';

    TABLESPACE_NAME                RETENTION
    ------------------------------ -----------
    UNDOTBS1                       NOGUARANTEE
    UNDOTBS2                       NOGUARANTEE

    SQL>

    1. [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
    2. SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 09:57:26 2022
    3. Version 19.3.0.0.0
    4. Copyright (c) 1982, 2019, Oracle. All rights reserved.
    5. Connected to:
    6. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
    7. Version 19.3.0.0.0
    8. SQL>
    9. SQL>
    10. SQL> set pagesize 200
    11. SQL> set linesize 200
    12. SQL>
    13. SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';
    14. TABLESPACE_NAME RETENTION
    15. ------------------------------ -----------
    16. UNDOTBS1 NOGUARANTEE
    17. UNDOTBS2 NOGUARANTEE
    18. SQL> alter tablespace UNDOTBS2 RETENTION GUARANTEE;
    19. Tablespace altered.
    20. SQL> show parameter undo
    21. NAME TYPE VALUE
    22. ------------------------------------ ----------- ------------------------------
    23. temp_undo_enabled boolean FALSE
    24. undo_management string AUTO
    25. undo_retention integer 900
    26. undo_tablespace string UNDOTBS1
    27. SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';
    28. TABLESPACE_NAME RETENTION
    29. ------------------------------ -----------
    30. UNDOTBS1 NOGUARANTEE
    31. UNDOTBS2 GUARANTEE
    32. SQL>

    恢复到原本状态:
    drop tablespace UNDOTBS2 including contents and datafiles;

    1. SQL> select name from v$tablespace;
    2. NAME
    3. ------------------------------
    4. SYSAUX
    5. SYSTEM
    6. UNDOTBS1
    7. USERS
    8. TEMP01
    9. SYSTEM
    10. SYSAUX
    11. UNDOTBS1
    12. TEMP
    13. SYSTEM
    14. SYSAUX
    15. UNDOTBS1
    16. TEMP
    17. USERS
    18. TEMP02
    19. UNDOTBS2
    20. UNDOTBS2
    21. 17 rows selected.
    22. SQL> alter session set container=PDB1;
    23. Session altered.
    24. SQL> drop tablespace TEMP02 including contents and datafiles;
    25. Tablespace dropped.
    26. SQL>
    27. SQL> alter system set undo_tablespace=undotbs2;
    28. System altered.
    29. SQL>
    30. SQL>
    31. SQL> alter system set undo_tablespace=undotbs1;
    32. System altered.
    33. SQL> drop tablespace UNDOTBS2 including contents and datafiles;
    34. Tablespace dropped.
    35. SQL> alter session set container=CDB$ROOT;
    36. Session altered.
    37. SQL> drop tablespace UNDOTBS2 including contents and datafiles;
    38. Tablespace dropped.
    39. SQL> select name from v$tablespace;
    40. NAME
    41. ------------------------------
    42. SYSAUX
    43. SYSTEM
    44. UNDOTBS1
    45. USERS
    46. TEMP01
    47. SYSTEM
    48. SYSAUX
    49. UNDOTBS1
    50. TEMP
    51. SYSTEM
    52. SYSAUX
    53. UNDOTBS1
    54. TEMP
    55. USERS
    56. 14 rows selected.
    57. SQL>
  • 相关阅读:
    计算机毕业设计Java教评系统(源码+系统+mysql数据库+lw文档)
    虹科技术|如何阻止供应链攻击?
    广州华锐互动:VR虚拟现实物理学习平台,开启数字化教学新格局
    全民拼购模式:无论成败皆有所得
    windows DOM 命令手册
    nginx生成https 证书-基于docker-compose
    Office Word 中的宏
    官媒代运营:如何将内容营销做到深入人心
    这些大佬告诉你,在先进计算与AI领域该往哪个方向冲!
    文心智能体平台介绍和应用:制作你的智能体(运维小帮手)
  • 原文地址:https://blog.csdn.net/u011868279/article/details/127995144