• Oracle对临时表空间管理


    3.增加新的数据文件(bigfile tablespace不能使用)

    1. alter tablespace tbs2 add datafile '' size 10m;

    数据库默认永久表空间

    1. create user smith identified by smith;
    2. grant connect,resource to smith;
    3. create table t01 (x int);

    启用默认永久表空间

    alter database default tablespace tbs1;

    查看数据库默认永久表空间

    select * from database_properties where rownum<4;

    查看用户的默认表空间:

    select default_tablespace from dba_users where username='SCOTT';

    修改用户默认表空间:

    alter user scott default tablespace tbs2;
    

    表空间的删除

    drop tablespace tbs3 including contents and datafiles cascade constraints;

    当前哪一个会话在哪一个临时表空间中使用了多少个块?

    1. SQL>
    2. SQL> create global temporary table temp as select * from emp;
    3. Table created.
    4. SQL> insert into temp select * from emp;
    5. 14 rows created.
    6. SQL> select * from temp;
    7. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    8. ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
    9. 7369 SMITH CLERK 7902 17-DEC-80 800 20
    10. 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
    11. 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    12. 7566 JONES MANAGER 7839 02-APR-81 2975 20
    13. 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    14. 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    15. 7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    16. 7788 SCOTT ANALYST 7566 24-JAN-87 3000 20
    17. 7839 KING PRESIDENT 17-NOV-81 5000 10
    18. 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    19. 7876 ADAMS CLERK 7788 02-APR-87 1100 20
    20. 7900 JAMES CLERK 7698 03-DEC-81 950 30
    21. 7902 FORD ANALYST 7566 03-DEC-81 3000 20
    22. 7934 MILLER CLERK 7782 23-JAN-82 1300 10
    23. 14 rows selected.
    24. SQL>
    25. SQL> select USERNAME,TABLESPACE,BLOCKS from v$sort_usage where USERNAME='SCOTT';
    26. USERNAME TABLESPACE BLOCKS
    27. -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ ----------
    28. SCOTT TEMP 128
    29. SQL>

    事务级临时表:事务结束,数据消失。commit数据消失

    create global temporary table temp as select * from emp;

    会话级临时表:会话结束,数据消失,connect数据消失。

    1. SQL>
    2. SQL> create global temporary table temp02 on commit preserve rows as select * from emp;
    3. Table created.
    4. SQL>

    什么情况下使用临时表空间:

    排序的中间结果,临时表的数据都会写到临时表空间。

    监控临时表空间的SQL

    SQL> select username,tablespace,blocks from v$sort_usage where username='SCOTT';
    

    第一步: 禁止11g的内存管理风格

    1. SQL> show parameter memory
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. hi_shared_memory_address integer 0
    5. inmemory_adg_enabled boolean TRUE
    6. inmemory_automatic_level string OFF
    7. inmemory_clause_default string
    8. inmemory_expressions_usage string ENABLE
    9. inmemory_force string DEFAULT
    10. inmemory_max_populate_servers integer 0
    11. inmemory_optimized_arithmetic string DISABLE
    12. inmemory_prefer_xmem_memcompress string
    13. inmemory_prefer_xmem_priority string
    14. inmemory_query string ENABLE
    15. inmemory_size big integer 0
    16. inmemory_trickle_repopulate_servers_ integer 1
    17. percent
    18. inmemory_virtual_columns string MANUAL
    19. inmemory_xmem_size big integer 0
    20. memory_max_target big integer 0
    21. memory_target big integer 0
    22. optimizer_inmemory_aware boolean TRUE
    23. shared_memory_address integer 0
    24. SQL> alter system set memory_target=0;
    25. System altered.
    26. SQL> show parameter pga;
    27. NAME TYPE VALUE
    28. ------------------------------------ ----------- ------------------------------
    29. pga_aggregate_limit big integer 2G
    30. pga_aggregate_target big integer 200M
    31. SQL>

    第二步:压缩排序的内存区

    1. SQL> show parameter pga;
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. pga_aggregate_limit big integer 2G
    5. pga_aggregate_target big integer 200M
    6. SQL>
    7. SQL> alter system set pga_aggregate_target=10M;
    8. System altered.
    9. SQL> show parameter pga;
    10. NAME TYPE VALUE
    11. ------------------------------------ ----------- ------------------------------
    12. pga_aggregate_limit big integer 2G
    13. pga_aggregate_target big integer 10M
    14. SQL>
    1. SQL> select * from ob1 order by 1;
    2. OWNER
    3. --------------------------------------------------------------------------------
    4. OBJECT_NAME
    5. --------------------------------------------------------------------------------
    6. SUBOBJECT_NAME
    7. --------------------------------------------------------------------------------
    8. OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_
    9. ---------- -------------- ----------------------- --------- ---------
    10. TIMESTAMP STATUS T G S NAMESPACE
    11. ------------------- ------- - - - ----------
    12. EDITION_NAME
    13. --------------------------------------------------------------------------------
    14. SHARING E O A
    15. ------------------ - - -
    16. DEFAULT_COLLATION
    17. --------------------------------------------------------------------------------
    18. D S CREATED_APPID CREATED_VSNID MODIFIED_APPID MODIFIED_VSNID
    19. - - ------------- ------------- -------------- --------------
    20. APPQOSSYS
    21. OWNER
    22. --------------------------------------------------------------------------------
    23. OBJECT_NAME
    24. --------------------------------------------------------------------------------
    25. SUBOBJECT_NAME
    26. --------------------------------------------------------------------------------
    27. OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_
    28. ---------- -------------- ----------------------- --------- ---------
    29. TIMESTAMP STATUS T G S NAMESPACE
    30. ------------------- ------- - - - ----------
    31. EDITION_NAME
    32. --------------------------------------------------------------------------------
    33. SHARING E O A
    34. ------------------ - - -
    35. DEFAULT_COLLATION
    36. --------------------------------------------------------------------------------
    37. D S CREATED_APPID CREATED_VSNID MODIFIED_APPID MODIFIED_VSNID
    38. - - ------------- ------------- -------------- --------------
    39. WLM_METRICS_STREAM
    40. SQL> select username,tablespace,blocks from v$sort_usage where username='SCOTT';
    41. no rows selected
    42. SQL> /
    43. USERNAME TABLESPACE BLOCKS
    44. -------------------------------------------------------------------------------------------------------------------------------- ------------------------------ ----------
    45. SCOTT TEMP 1536
    46. SQL> /

    临时表空间的数据字典:

    1. SQL>
    2. SQL> select name from v$tempfile;
    3. NAME
    4. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    5. /u02/oradata/CDB1/pdb1/temp01.dbf
    6. SQL>

    永久表空间的数据字典:

    1. SQL>
    2. SQL> select file_name from dba_temp_files;
    3. FILE_NAME
    4. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    5. /u02/oradata/CDB1/pdb1/temp01.dbf
    6. SQL>

    临时表空间要是被删了,启动数据库会有什么问题?(数据库会自动创建临时表空间)

    1. SQL>
    2. SQL> !rm -f /u02/oradata/CDB1/pdb1/temp01.dbf
    3. SP2-0734: unknown command beginning "!rm -f /..." - rest of line ignored.
    4. SQL>
    5. SQL>
    6. SQL> !rm -f /u02/oradata/CDB1/pdb1/temp01.dbf
    7. SQL> !ls -l /u02/oradata/CDB1/pdb1/temp01.dbf
    8. ls: cannot access '/u02/oradata/CDB1/pdb1/temp01.dbf': No such file or directory
    9. SQL>
    10. SQL> startup force
    11. Pluggable Database opened.
    12. SQL> !ls -l /u02/oradata/CDB1/pdb1/temp01.dbf
    13. -rw-r-----. 1 oracle oinstall 37756928 Nov 22 14:29 /u02/oradata/CDB1/pdb1/temp01.dbf
    14. SQL>

    临时表空间的创建:

    1. SQL>
    2. SQL> show user;
    3. USER is "SYS"
    4. SQL>
    5. SQL> create temporary tablespace temp02 tempfile '/u02/oradata/CDB1/pdb1/temp02.dbf' size 20m;
    6. Tablespace created.
    7. SQL>

    1. -- 查看表空间组
    2. SQL> select * from dba_tablespace_groups;
    3. --表空间重命名
    4. SQL> alter tablespace temp rename to temp01;
    5. Tablespace altered.
    6. SQL>
    7. --查看表空间
    8. SQL> set pagesize 200
    9. SQL> set linesize 200
    10. SQL>
    11. SQL> select name from v$tablespace;
    12. NAME
    13. ------------------------------
    14. SYSAUX
    15. SYSTEM
    16. UNDOTBS1
    17. USERS
    18. TEMP01
    19. SYSTEM
    20. SYSAUX
    21. UNDOTBS1
    22. TEMP
    23. SYSTEM
    24. SYSAUX
    25. UNDOTBS1
    26. TEMP
    27. USERS
    28. TEMP02
    29. 15 rows selected.
    30. SQL> select * from dba_tablespace_groups;
    31. no rows selected
    32. SQL> alter tablespace temp01 tablespace group tempgroup;
    33. Tablespace altered.
    34. SQL> select * from dba_tablespace_groups;
    35. GROUP_NAME TABLESPACE_NAME
    36. ------------------------------ ------------------------------
    37. TEMPGROUP TEMP01
    38. SQL>

    临时表空间的扩容方法:

    1. SQL> select file_name from dba_temp_files where tablespace_name='TEMP02';
    2. FILE_NAME
    3. ----------------------------------------
    4. /u02/oradata/CDB1/pdb1/temp02.dbf
    5. SQL>
    6. SQL> alter database tempfile '/u02/oradata/CDB1/pdb1/temp02.dbf' resize 5m;
    7. Database altered.
    8. SQL>
    9. SQL> alter user scott temporary tablespace temp02;
    10. User altered.
    11. SQL> select file_name from dba_temp_files where tablespace_name='TEMP02';
    12. FILE_NAME
    13. ----------------------------------------
    14. /u02/oradata/CDB1/pdb1/temp02.dbf
    15. ---方法一:
    16. SQL> alter database tempfile '/u02/oradata/CDB1/pdb1/temp02.dbf' resize 15m;
    17. Database altered.
    18. SQL>
    19. ---方法二
    20. SQL>
    21. SQL> alter database tempfile '/u02/oradata/CDB1/pdb1/temp02.dbf' autoextend on;
    22. Database altered.
    23. SQL>
    24. -- 方法三
    25. SQL>
    26. SQL> alter tablespace temp02 add tempfile '/u02/oradata/CDB1/pdb1/temp03.dbf' size 10m;
    27. Tablespace altered.
    28. SQL>

    恢复创建前的状态:

    1. QL> select file_name,tablespace_name from dba_temp_files;
    2. FILE_NAME TABLESPACE_NAME
    3. ---------------------------------------- ------------------------------------------------------------
    4. /u02/oradata/CDB1/pdb1/temp01.dbf TEMP
    5. /u02/oradata/CDB1/pdb1/temp02.dbf TEMP02
    6. /u02/oradata/CDB1/pdb1/temp03.dbf TEMP02
    7. SQL> alter database tempfile '/u02/oradata/CDB1/pdb1/temp03.dbf' drop;
    8. Database altered.
    9. SQL> select file_name,tablespace_name from dba_temp_files;
    10. FILE_NAME TABLESPACE_NAME
    11. ---------------------------------------- ------------------------------------------------------------
    12. /u02/oradata/CDB1/pdb1/temp01.dbf TEMP
    13. /u02/oradata/CDB1/pdb1/temp02.dbf TEMP02
    14. SQL> alter database tempfile '/u02/oradata/CDB1/pdb1/temp02.dbf' drop;
    15. Database altered.
    16. SQL> select file_name,tablespace_name from dba_temp_files;
    17. FILE_NAME TABLESPACE_NAME
    18. ---------------------------------------- ------------------------------------------------------------
    19. /u02/oradata/CDB1/pdb1/temp01.dbf TEMP
    20. SQL> alter user scott temporary tablespace temp;
    21. User altered.
    22. SQL> select file_name,tablespace_name from dba_temp_files;
    23. FILE_NAME TABLESPACE_NAME
    24. ---------------------------------------- ------------------------------------------------------------
    25. /u02/oradata/CDB1/pdb1/temp01.dbf TEMP
    26. SQL>

    UNDO表空间不能保存对象!!

    undo表空间保存老镜像作用:

    • 1.为事务提供回退
    • 2.为事务提供恢复
    • 3.提供读一致性
    • 4.提供对DML操作的闪回处理
    1. SQL>
    2. SQL> select tablespace_name from dba_tablespaces where contents='UNDO';
    3. TABLESPACE_NAME
    4. ------------------------------
    5. UNDOTBS1
    6. SQL>
    7. SQL>
    8. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    9. SEGMENT_NAME TABLESPACE_NAME STATUS
    10. ------------------------------ ------------------------------ ----------------
    11. SYSTEM SYSTEM ONLINE
    12. _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
    13. _SYSSMU2_27624015$ UNDOTBS1 ONLINE
    14. _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
    15. _SYSSMU4_625702278$ UNDOTBS1 ONLINE
    16. _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
    17. _SYSSMU6_813816332$ UNDOTBS1 ONLINE
    18. _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
    19. _SYSSMU8_399776867$ UNDOTBS1 ONLINE
    20. _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
    21. _SYSSMU10_930580995$ UNDOTBS1 ONLINE
    22. 11 rows selected.
    23. SQL>

    SYSTEM 只有系统表空间可用。

    1. SQL> col username for a10
    2. SQL> select s.USERNAME,t.XIDUSN,t.USED_UBLK from v$session s, v$transaction t where t.SES_ADDR=s.SADDR;
    3. USERNAME XIDUSN USED_UBLK
    4. ---------- ---------- ----------
    5. SCOTT 8 20
    6. SQL> desc v$rollname
    7. Name Null? Type
    8. ----------------------------------------- -------- ----------------------------
    9. USN NUMBER
    10. NAME NOT NULL VARCHAR2(30)
    11. CON_ID NUMBER
    12. SQL> select name from v$rollname where USN=8;
    13. NAME
    14. ------------------------------
    15. _SYSSMU8_399776867$
    16. SQL> select segment_name,tablespace_name,status from dba_rollback_segs;
    17. SEGMENT_NAME TABLESPACE_NAME STATUS
    18. ------------------------------ ------------------------------ ----------------
    19. SYSTEM SYSTEM ONLINE
    20. _SYSSMU1_1261223759$ UNDOTBS1 ONLINE
    21. _SYSSMU2_27624015$ UNDOTBS1 ONLINE
    22. _SYSSMU3_2421748942$ UNDOTBS1 ONLINE
    23. _SYSSMU4_625702278$ UNDOTBS1 ONLINE
    24. _SYSSMU5_2101348960$ UNDOTBS1 ONLINE
    25. _SYSSMU6_813816332$ UNDOTBS1 ONLINE
    26. _SYSSMU7_2329891355$ UNDOTBS1 ONLINE
    27. _SYSSMU8_399776867$ UNDOTBS1 ONLINE
    28. _SYSSMU9_1692468413$ UNDOTBS1 ONLINE
    29. _SYSSMU10_930580995$ UNDOTBS1 ONLINE
    30. 11 rows selected.
    31. SQL> select segment_name,tablespace_name,status from dba_rollback_segs where segment_name='_SYSSMU8_399776867$';
    32. SEGMENT_NAME TABLESPACE_NAME STATUS
    33. ------------------------------ ------------------------------ ----------------
    34. _SYSSMU8_399776867$ UNDOTBS1 ONLINE
    35. SQL>

     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. begin
    2. for i in 1..300000 loop
    3. update t01 set x=x+1'
    4. end loop;
    5. end;
    6. /

    提供对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.
  • 相关阅读:
    二叉树的应用——堆排序
    Typescript 学习笔记(二)高级类型二
    【JAVA】Java 常见的垃圾收集器有哪些?
    docker镜像学习
    LeetCode--180 连续出现的数字
    【毕业设计】深度学习 python opencv 实现人脸年龄性别识别
    语言大模型的推理技巧
    国家自然科学基金委资助项目简介
    vue3.2封装一个listTable组件
    IDEA如何运行SpringBoot项目(超详细截图)
  • 原文地址:https://blog.csdn.net/u011868279/article/details/127968171