rollback segment的管理方法:
- SQL>
- SQL> show parameter undo_management
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- undo_management string AUTO
- SQL> show parameter undo_tablespace
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- undo_tablespace string UNDOTBS1
- SQL>
- SQL>
- SQL>
- SQL> select name from v$datafile;
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/system01.dbf
- /u02/oradata/CDB1/sysaux01.dbf
- /u02/oradata/CDB1/undotbs01.dbf
- /u02/oradata/CDB1/pdbseed/system01.dbf
- /u02/oradata/CDB1/pdbseed/sysaux01.dbf
- /u02/oradata/CDB1/users01.dbf
- /u02/oradata/CDB1/pdbseed/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/system01.dbf
- /u02/oradata/CDB1/pdb1/sysaux01.dbf
- /u02/oradata/CDB1/pdb1/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/users01.dbf
-
- 11 rows selected.
-
- SQL> show con_name
-
- CON_NAME
- ------------------------------
- CDB$ROOT
- SQL>
- SQL> alter session set container=PDB1;
-
- Session altered.
-
- SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/pdb1/undotbs02.dbf' size 10m;
-
- Tablespace created.
-
- SQL>
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_3588498444$ UNDOTBS1 ONLINE
- _SYSSMU2_2971032042$ UNDOTBS1 ONLINE
- _SYSSMU3_3657342154$ UNDOTBS1 ONLINE
- _SYSSMU4_811969446$ UNDOTBS1 ONLINE
- _SYSSMU5_3018429039$ UNDOTBS1 ONLINE
- _SYSSMU6_442110264$ UNDOTBS1 ONLINE
- _SYSSMU7_2728255665$ UNDOTBS1 ONLINE
- _SYSSMU8_801938064$ UNDOTBS1 ONLINE
- _SYSSMU9_647420285$ UNDOTBS1 ONLINE
- _SYSSMU10_2262159254$ UNDOTBS1 ONLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
- _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
- _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
- _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
- _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
- _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
- _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
- _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
- _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
- _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
-
- 21 rows selected.
-
- SQL>
- SQL> select name from v$datafile;
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/system01.dbf
- /u02/oradata/CDB1/sysaux01.dbf
- /u02/oradata/CDB1/undotbs01.dbf
- /u02/oradata/CDB1/pdbseed/system01.dbf
- /u02/oradata/CDB1/pdbseed/sysaux01.dbf
- /u02/oradata/CDB1/users01.dbf
- /u02/oradata/CDB1/pdbseed/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/system01.dbf
- /u02/oradata/CDB1/pdb1/sysaux01.dbf
- /u02/oradata/CDB1/pdb1/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/users01.dbf
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/pdb1/undotbs02.dbf
-
- 12 rows selected.
-
- SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/undotbs02.dbf' size 10m;
-
- Tablespace created.
-
- SQL> select name from v$datafile;
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/system01.dbf
- /u02/oradata/CDB1/sysaux01.dbf
- /u02/oradata/CDB1/undotbs01.dbf
- /u02/oradata/CDB1/pdbseed/system01.dbf
- /u02/oradata/CDB1/pdbseed/sysaux01.dbf
- /u02/oradata/CDB1/users01.dbf
- /u02/oradata/CDB1/pdbseed/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/system01.dbf
- /u02/oradata/CDB1/pdb1/sysaux01.dbf
- /u02/oradata/CDB1/pdb1/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/users01.dbf
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/pdb1/undotbs02.dbf
- /u02/oradata/CDB1/undotbs02.dbf
-
- 13 rows selected.
-
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
- _SYSSMU2_27624015$ UNDOTBS1 ONLINE
- _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
- _SYSSMU4_625702278$ UNDOTBS1 ONLINE
- _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
- _SYSSMU6_813816332$ UNDOTBS1 ONLINE
- _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
- _SYSSMU8_399776867$ UNDOTBS1 ONLINE
- _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
- _SYSSMU10_930580995$ UNDOTBS1 ONLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
- _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
- _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
- _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
- _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
- _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
- _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
- _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
- _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
- _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
-
- 21 rows selected.
-
- SQL>
- SQL> select name from v$datafile;
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/system01.dbf
- /u02/oradata/CDB1/sysaux01.dbf
- /u02/oradata/CDB1/undotbs01.dbf
- /u02/oradata/CDB1/pdbseed/system01.dbf
- /u02/oradata/CDB1/pdbseed/sysaux01.dbf
- /u02/oradata/CDB1/users01.dbf
- /u02/oradata/CDB1/pdbseed/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/system01.dbf
- /u02/oradata/CDB1/pdb1/sysaux01.dbf
- /u02/oradata/CDB1/pdb1/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/users01.dbf
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/pdb1/undotbs02.dbf
-
- 12 rows selected.
-
- SQL> create undo tablespace undotbs2 datafile '/u02/oradata/CDB1/undotbs02.dbf' size 10m;
-
- Tablespace created.
-
- SQL> select name from v$datafile;
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/system01.dbf
- /u02/oradata/CDB1/sysaux01.dbf
- /u02/oradata/CDB1/undotbs01.dbf
- /u02/oradata/CDB1/pdbseed/system01.dbf
- /u02/oradata/CDB1/pdbseed/sysaux01.dbf
- /u02/oradata/CDB1/users01.dbf
- /u02/oradata/CDB1/pdbseed/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/system01.dbf
- /u02/oradata/CDB1/pdb1/sysaux01.dbf
- /u02/oradata/CDB1/pdb1/undotbs01.dbf
- /u02/oradata/CDB1/pdb1/users01.dbf
-
- NAME
- --------------------------------------------------------------------------------
- /u02/oradata/CDB1/pdb1/undotbs02.dbf
- /u02/oradata/CDB1/undotbs02.dbf
-
- 13 rows selected.
-
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
- _SYSSMU2_27624015$ UNDOTBS1 ONLINE
- _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
- _SYSSMU4_625702278$ UNDOTBS1 ONLINE
- _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
- _SYSSMU6_813816332$ UNDOTBS1 ONLINE
- _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
- _SYSSMU8_399776867$ UNDOTBS1 ONLINE
- _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
- _SYSSMU10_930580995$ UNDOTBS1 ONLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
- _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
- _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
- _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
- _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
- _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
- _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
- _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
- _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
- _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
-
- 21 rows selected.
-
- SQL> show user
- USER is "SYS"
- SQL> col username for a10
- SQL> select s.USERNAME,t.XIDUSN,t.USED_UBLK from v$session s, v$transaction t where t.SES_ADDR=s.SADDR;
-
- USERNAME XIDUSN USED_UBLK
- ---------- ---------- ----------
- SCOTT 8 20
- SCOTT 2 1
-
- SQL>
- SQL> select name from v$rollname where usn=8;
-
- NAME
- ------------------------------
- _SYSSMU8_399776867$
-
- SQL> select name from v$rollname where usn=2;
-
- NAME
- ------------------------------
- _SYSSMU2_27624015$
-
- SQL>
- SQL>
- SQL> show parameter undo_management
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- undo_management string AUTO
- SQL> show parameter undo_tablespace
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- undo_tablespace string UNDOTBS1
- SQL>
- SQL> alter system set undo_management=manual scope=spfile
- 2 ;
-
- System altered.
-
- SQL> shutdown immediate
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
- SQL>
- SQL> startup
- ORACLE instance started.
-
- Total System Global Area 629145392 bytes
- Fixed Size 9137968 bytes
- Variable Size 184549376 bytes
- Database Buffers 427819008 bytes
- Redo Buffers 7639040 bytes
- Database mounted.
- Database opened.
- SQL> show parameter undo_management
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- undo_management string MANUAL
- SQL>
-
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_1261223759$ UNDOTBS1 OFFLINE
- _SYSSMU2_27624015$ UNDOTBS1 OFFLINE
- _SYSSMU3_2421748942$ UNDOTBS1 OFFLINE
- _SYSSMU4_625702278$ UNDOTBS1 OFFLINE
- _SYSSMU5_2101348960$ UNDOTBS1 OFFLINE
- _SYSSMU6_813816332$ UNDOTBS1 OFFLINE
- _SYSSMU7_2329891355$ UNDOTBS1 OFFLINE
- _SYSSMU8_399776867$ UNDOTBS1 OFFLINE
- _SYSSMU9_1692468413$ UNDOTBS1 OFFLINE
- _SYSSMU10_930580995$ UNDOTBS1 OFFLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- _SYSSMU11_819496071$ UNDOTBS2 OFFLINE
- _SYSSMU12_3852438105$ UNDOTBS2 OFFLINE
- _SYSSMU13_4053449264$ UNDOTBS2 OFFLINE
- _SYSSMU14_3568283922$ UNDOTBS2 OFFLINE
- _SYSSMU15_4273800205$ UNDOTBS2 OFFLINE
- _SYSSMU16_3358818169$ UNDOTBS2 OFFLINE
- _SYSSMU17_1656102559$ UNDOTBS2 OFFLINE
- _SYSSMU18_3046128593$ UNDOTBS2 OFFLINE
- _SYSSMU19_2820437463$ UNDOTBS2 OFFLINE
- _SYSSMU20_1569246834$ UNDOTBS2 OFFLINE
-
- 21 rows selected.
-
- SQL>
当切换到手工管理UNDO表空间执行update语句时,遇到如下错误:
- [oracle@oracle-db-19c ~]$
- [oracle@oracle-db-19c ~]$ sqlplus scott/tiger@PDB1
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 23 11:04:26 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
- Last Successful login time: Wed Nov 23 2022 10:46:24 +08:00
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- SQL> show user
- USER is "SCOTT"
- SQL>
- SQL> set pagesize 200
- SQL> set linesize 200
- SQL>
- SQL> update e01 set sal=sal+1;
- update e01 set sal=sal+1
- *
- ERROR at line 1:
- ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
-
-
- SQL>
将 表e01移动到系统表空间后,可以进行表更新。
- SQL>
- SQL> alter table e01 move tablespace system;
-
- Table altered.
-
- SQL>
- SQL> update e01 set sal=sal+1;
-
- 14 rows updated.
-
- SQL> roll
- Rollback complete.
- SQL>
- SQL>
在scott用户下尝试做建表实验:
- SQL>
- SQL>
- SQL> select * from tab
- 2 ;
-
- TNAME TABTYPE CLUSTERID
- -------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
- T02 TABLE
- T01 TABLE
- T03 TABLE
- DEPT TABLE
- EMP TABLE
- BONUS TABLE
- SALGRADE TABLE
- DETAIL_DEPT TABLE
- VU10 VIEW
- VUTEST VIEW
- E01 TABLE
- TEMP TABLE
- TEMP02 TABLE
- OB1 TABLE
-
- 14 rows selected.
-
- SQL>
- SQL>
- SQL>
- SQL> create table e02 as select * from emp;
- create table e02 as select * from emp
- *
- ERROR at line 1:
- ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
-
-
- SQL> desc e02;
- ERROR:
- ORA-04043: object e02 does not exist
-
-
- SQL> create table e02 as select * from emp where 1=0;
-
- Table created.
-
- SQL> desc e02;
- 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>
结论:创建空表是可以建立的,但带数据建表是不可以的。建表能成功的原因是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用户是否可以继续创建表呢?如下所示:
- [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Wed Nov 23 15:55:34 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- SQL> alter session set container=PDB1;
-
- Session altered.
-
- SQL> show con_name;
-
- CON_NAME
- ------------------------------
- PDB1
- SQL> show parameter segment
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- deferred_segment_creation boolean TRUE
- rollback_segments string
- transactions_per_rollback_segment integer 5
- SQL> alter system set deferred_segment_creation=FALSE;
-
- System altered.
-
- SQL> show parameter segment
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- deferred_segment_creation boolean FALSE
- rollback_segments string
- transactions_per_rollback_segment integer 5
- SQL>
结论是可以单纯建表不带数据,但无法带数建表。
- SQL> create table e02 as select * from emp;
- create table e02 as select * from emp
- *
- ERROR at line 1:
- ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
-
-
- SQL> create table e03 as select * from emp where 1=0;
-
- Table created.
-
- SQL> select * from tab;
-
- TNAME TABTYPE CLUSTERID
- -------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
- T02 TABLE
- T01 TABLE
- T03 TABLE
- DEPT TABLE
- EMP TABLE
- BONUS TABLE
- SALGRADE TABLE
- DETAIL_DEPT TABLE
- VU10 VIEW
- VUTEST VIEW
- E01 TABLE
- TEMP TABLE
- TEMP02 TABLE
- E03 TABLE
- OB1 TABLE
-
- 15 rows selected.
-
- 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;
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
- _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
- _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
- _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
- _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
- _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
- _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
- _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
- _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
- _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
- _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
- _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
- _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
- _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
- _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
- _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
- _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
- _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
- _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
-
- 21 rows selected.
-
- SQL> create rollback segment rbs1 tablespace UNDOTBS1;
-
- Rollback segment created.
-
- SQL>
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
- _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
- _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
- _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
- _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
- _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
- _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
- _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
- _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
- _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- RBS1 UNDOTBS1 OFFLINE
- _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
- _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
- _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
- _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
- _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
- _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
- _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
- _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
- _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
- _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
-
- 22 rows selected.
-
- SQL>
- SQL> show parameter rollback
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- fast_start_parallel_rollback string LOW
- rollback_segments string
- transactions_per_rollback_segment integer 5
- SQL>
- SQL> shutdown immediate
- Pluggable Database closed.
- SQL> startup
- Pluggable Database opened.
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
- _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
- _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
- _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
- _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
- _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
- _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
- _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
- _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
- _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
- RBS1 UNDOTBS1 OFFLINE
- _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
- _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
- _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
- _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
- _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
- _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
- _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
- _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
- _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
- _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
-
- 22 rows selected.
-
- SQL>
- SQL>
- SQL> alter system set rollback_segments='RBS1' scope=spfile;
-
- System altered.
-
- SQL> startup force
- Pluggable Database opened.
- SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
-
- SEGMENT_NAME TABLESPACE_NAME STATUS
- ------------------------------ ------------------------------ ----------------
- SYSTEM SYSTEM ONLINE
- _SYSSMU1_3588498444$ UNDOTBS1 OFFLINE
- _SYSSMU2_2971032042$ UNDOTBS1 OFFLINE
- _SYSSMU3_3657342154$ UNDOTBS1 OFFLINE
- _SYSSMU4_811969446$ UNDOTBS1 OFFLINE
- _SYSSMU5_3018429039$ UNDOTBS1 OFFLINE
- _SYSSMU6_442110264$ UNDOTBS1 OFFLINE
- _SYSSMU7_2728255665$ UNDOTBS1 OFFLINE
- _SYSSMU8_801938064$ UNDOTBS1 OFFLINE
- _SYSSMU9_647420285$ UNDOTBS1 OFFLINE
- _SYSSMU10_2262159254$ UNDOTBS1 OFFLINE
- RBS1 UNDOTBS1 ONLINE
- _SYSSMU11_2950309372$ UNDOTBS2 OFFLINE
- _SYSSMU12_3550765581$ UNDOTBS2 OFFLINE
- _SYSSMU13_2003268147$ UNDOTBS2 OFFLINE
- _SYSSMU14_200385032$ UNDOTBS2 OFFLINE
- _SYSSMU15_2315478656$ UNDOTBS2 OFFLINE
- _SYSSMU16_3694721358$ UNDOTBS2 OFFLINE
- _SYSSMU17_302315325$ UNDOTBS2 OFFLINE
- _SYSSMU18_2589589835$ UNDOTBS2 OFFLINE
- _SYSSMU19_2290367767$ UNDOTBS2 OFFLINE
- _SYSSMU20_459963109$ UNDOTBS2 OFFLINE
-
- 22 rows selected.
-
- SQL>
提供对DML操作的闪回处理
- SQL> 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 24-JAN-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 02-APR-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.
-
- SQL> update e01 set sal = 1;
-
- 14 rows updated.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> rollback;
-
- Rollback complete.
-
- SQL> 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 24-JAN-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 02-APR-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.
-
- SQL> 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 24-JAN-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 02-APR-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.
-
- SQL> alter table e01 enable row movement;
-
- Table altered.
-
- SQL> flashback table e01 to timestamp(sysdate-5/1440);
-
- Flashback complete.
-
- SQL> 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 24-JAN-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 02-APR-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.
-
- SQL>
最多可以闪回15分钟,900秒。
- SQL> select * from e01 as of timestamp(sysdate-15/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 24-JAN-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 02-APR-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.
-
- SQL>
闪回版本查询
- SQL> update e01 set sal=sal+100 where deptno=10;
-
- 3 rows updated.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> update e01 set sal=sal*1.1 where deptno=30;
-
- 6 rows updated.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> update e01 set sal=3;
-
- 14 rows updated.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> select * from e01;
-
- EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
- ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
- 7369 SMITH CLERK 7902 17-DEC-80 3 20
- 7499 ALLEN SALESMAN 7698 20-FEB-81 3 300 30
- 7521 WARD SALESMAN 7698 22-FEB-81 3 500 30
- 7566 JONES MANAGER 7839 02-APR-81 3 20
- 7654 MARTIN SALESMAN 7698 28-SEP-81 3 1400 30
- 7698 BLAKE MANAGER 7839 01-MAY-81 3 30
- 7782 CLARK MANAGER 7839 09-JUN-81 3 10
- 7788 SCOTT ANALYST 7566 24-JAN-87 3 20
- 7839 KING PRESIDENT 17-NOV-81 3 10
- 7844 TURNER SALESMAN 7698 08-SEP-81 3 0 30
- 7876 ADAMS CLERK 7788 02-APR-87 3 20
- 7900 JAMES CLERK 7698 03-DEC-81 3 30
- 7902 FORD ANALYST 7566 03-DEC-81 3 20
- 7934 MILLER CLERK 7782 23-JAN-82 3 10
-
- 14 rows selected.
-
- SQL> --闪回版本查询
- SQL> select versions_startscn,versions_endscn,versions_operation,versions_xid,sal from e01 versions between scn_minvalue and maxvalue where empno=7369;
- select versions_startscn,versions_endscn,versions_operation,versions_xid,sal from e01 versions between scn_minvalue and maxvalue where empno=7369
- *
- ERROR at line 1:
- ORA-00905: missing keyword
-
-
- SQL> select
- 2 versions_startscn,
- 3 versions_endscn,
- 4 versions_operation,
- 5 versions_xid,
- 6 sal
- 7 from e01
- 8 versions between scn minvalue and maxvalue
- 9 where empno=7369;
-
- VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID SAL
- ----------------- --------------- - ---------------- ----------
- 17826843 U 03000300BC030000 3
- 17826652 17826843 I 070010006E030000 800
- 17826652 D 070010006E030000 1
- 17825320 17826652 U 03002000BB030000 1
- 17825320 800
-
- SQL>
- SQL> col versions_starttime for a25;
- SQL> col versions_endtime for a25;
- SQL> 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=7369;
-
- VERSIONS_ENDTIME V VERSIONS_XID SAL
- ------------------------- - ---------------- ----------
- 23-NOV-22 09.55.07 PM U 03000300BC030000 3
- 23-NOV-22 09.50.16 PM I 070010006E030000 800
- 23-NOV-22 09.50.16 PM D 070010006E030000 1
- 1
-
- SQL> --闪回版本查询
- SQL> select * from e01 as of scn 17826652;
-
- 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 24-JAN-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 02-APR-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.
-
- SQL> flashback table e01 to scn 17826652;
-
- Flashback complete.
-
- SQL> 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 24-JAN-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 02-APR-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.
-
- SQL>
注意注意: 要想做闪回表的操作,必须先开行移动,如果不打开行移动,将无法进行闪回操作。
- SQL> alter table e01 enable row movement;
-
- Table altered.
开启追加日志数据模式:
- SQL>
- SQL> alter database add supplemental log data;
-
- Database altered.
-
- SQL>
- SQL>
- SQL> update e01 set sal=sal*1.15 where deptno=30;
-
- 6 rows updated.
-
- SQL>
-
- SQL> 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;
-
- VERSIONS_STARTSCN VERSIONS_ENDSCN V VERSIONS_XID SAL
- ----------------- --------------- - ---------------- ----------
- 17846142 I 02000B0061030000 1500
- 17846142 D 02000B0061030000 3
- 17846142 3
-
- SQL>
-
闪回事务查询
-
- select
- --versions_starttime
- --versions_endtime,
- versions_startscn,
- versions_endscn,
- versions_operation,
- versions_xid,
- sal
- from e01
- versions between scn minvalue and maxvalue
- where empno=7844;
-
- ---闪回事务查询,sys用户才可以查询
-
- SQL> select undo_sql from flashback_transaction_query where xid='02000B0061030000';
-
- UNDO_SQL
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 16 rows selected.
-
- SQL>
设置事务隔离级来模拟数据串行访问
SQL> set transaction isolation level serializable;
Transaction set.
SQL>
画面1:
- [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 09:51:46 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- SQL> conn scott/tiger@PDB1;
- Connected.
- SQL> show con_name;
-
- CON_NAME
- ------------------------------
- PDB1
- SQL> set transaction isolation level serializable;
-
- Transaction set.
-
- SQL> select distinct sal from e01;
-
- SAL
- ----------
- 1
-
- SQL> select distinct sal from e01;
-
- SAL
- ----------
- 1
-
- SQL>
画面2:
- [oracle@oracle-db-19c ~]$ sqlplus scott/tiger@PDB1
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 10:01:22 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
- Last Successful login time: Thu Nov 24 2022 09:52:09 +08:00
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- SQL> show con_name;
-
- CON_NAME
- ------------------------------
- PDB1
- SQL>
- SQL> select distinct sal from e01;
-
- SAL
- ----------
- 1
-
- SQL> update e01 set sal=2;
-
- 57344 rows updated.
-
- SQL> select distinct sal from e01;
-
- SAL
- ----------
- 2
-
- SQL> commit;
-
- Commit complete.
-
- SQL> set transaction isolation level serializable;
-
- Transaction set.
-
- SQL> select distinct sal from e01;
-
- SAL
- ----------
- 2
-
- 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 NOGUARANTEESQL>
- [oracle@oracle-db-19c ~]$ sqlplus / as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Thu Nov 24 09:57:26 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- SQL>
- SQL>
- SQL> set pagesize 200
- SQL> set linesize 200
- SQL>
- SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';
-
- TABLESPACE_NAME RETENTION
- ------------------------------ -----------
- UNDOTBS1 NOGUARANTEE
- UNDOTBS2 NOGUARANTEE
-
- SQL> alter tablespace UNDOTBS2 RETENTION GUARANTEE;
-
- Tablespace altered.
-
- SQL> show parameter undo
-
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- temp_undo_enabled boolean FALSE
- undo_management string AUTO
- undo_retention integer 900
- undo_tablespace string UNDOTBS1
- SQL> select tablespace_name,retention from dba_tablespaces where contents='UNDO';
-
- TABLESPACE_NAME RETENTION
- ------------------------------ -----------
- UNDOTBS1 NOGUARANTEE
- UNDOTBS2 GUARANTEE
-
- SQL>
恢复到原本状态:
drop tablespace UNDOTBS2 including contents and datafiles;
- SQL> select name from v$tablespace;
-
- NAME
- ------------------------------
- SYSAUX
- SYSTEM
- UNDOTBS1
- USERS
- TEMP01
- SYSTEM
- SYSAUX
- UNDOTBS1
- TEMP
- SYSTEM
- SYSAUX
- UNDOTBS1
- TEMP
- USERS
- TEMP02
- UNDOTBS2
- UNDOTBS2
-
- 17 rows selected.
-
- SQL> alter session set container=PDB1;
-
- Session altered.
-
- SQL> drop tablespace TEMP02 including contents and datafiles;
-
- Tablespace dropped.
-
- SQL>
- SQL> alter system set undo_tablespace=undotbs2;
-
- System altered.
-
- SQL>
- SQL>
- SQL> alter system set undo_tablespace=undotbs1;
-
- System altered.
-
- SQL> drop tablespace UNDOTBS2 including contents and datafiles;
-
- Tablespace dropped.
-
- SQL> alter session set container=CDB$ROOT;
-
- Session altered.
-
- SQL> drop tablespace UNDOTBS2 including contents and datafiles;
-
- Tablespace dropped.
-
- SQL> select name from v$tablespace;
-
- NAME
- ------------------------------
- SYSAUX
- SYSTEM
- UNDOTBS1
- USERS
- TEMP01
- SYSTEM
- SYSAUX
- UNDOTBS1
- TEMP
- SYSTEM
- SYSAUX
- UNDOTBS1
- TEMP
- USERS
-
- 14 rows selected.
-
- SQL>