Bo's Oracle Station

查看: 2038|回复: 0

课程第21次(2017-08-22星期二)

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-8-22 20:05:43 | 显示全部楼层 |阅读模式
SQLPLUS:
  1. [oracle@station90 ~]$ sqlplus /nolog

  2. SQL*Plus: Release 11.2.0.1.0 Production on Tue Aug 22 19:39:50 2017

  3. Copyright (c) 1982, 2009, Oracle.  All rights reserved.

  4. SQL> conn hr/oracle_4U
  5. Connected.
  6. SQL> select  * from t_nonconflict_only;

  7.         ID
  8. ----------
  9.         11
  10.         22
  11.        333

  12. SQL> /

  13.         ID
  14. ----------
  15.          1
  16.         22
  17.        333

  18. SQL> select  * from t_nocascade_force;

  19.         ID
  20. ----------
  21.          1
  22.          2
  23.        333

  24. SQL> select  * from t_nocascade;

  25.         ID
  26. ----------
  27.         11
  28.         22
  29.        333

  30. SQL> @t05310-2
  31. Enter value for s1: t_non
  32. old   1: create table &&s1( id number )
  33. new   1: create table t_non( id number )

  34. Table created.


  35. old   1: insert into &&s1 values (1)
  36. new   1: insert into t_non values (1)

  37. 1 row created.

  38. old   1: insert into &&s1 values (2)
  39. new   1: insert into t_non values (2)

  40. 1 row created.

  41. old   1: insert into &&s1 values (3)
  42. new   1: insert into t_non values (3)

  43. 1 row created.


  44. Commit complete.

  45. old   1: update &&s1 set id=11 where id=1
  46. new   1: update t_non set id=11 where id=1

  47. 1 row updated.

  48. old   1: update &&s1 set id=22 where id=2
  49. new   1: update t_non set id=22 where id=2

  50. 1 row updated.

  51. old   1: update &&s1 set id=33 where id=3
  52. new   1: update t_non set id=33 where id=3

  53. 1 row updated.


  54. Commit complete.

  55. old   1: update &&s1 set id=222 where id=22
  56. new   1: update t_non set id=222 where id=22

  57. 1 row updated.

  58. old   1: update &&s1 set id=333 where id=33
  59. new   1: update t_non set id=333 where id=33

  60. 1 row updated.


  61. Commit complete.

  62. SQL> select  * from t_non;

  63.         ID
  64. ----------
  65.          1
  66.        222
  67.        333

  68. SQL> @t05310-2
  69. Enter value for s1: t_nocf
  70. old   1: create table &&s1( id number )
  71. new   1: create table t_nocf( id number )

  72. Table created.


  73. old   1: insert into &&s1 values (1)
  74. new   1: insert into t_nocf values (1)

  75. 1 row created.

  76. old   1: insert into &&s1 values (2)
  77. new   1: insert into t_nocf values (2)

  78. 1 row created.

  79. old   1: insert into &&s1 values (3)
  80. new   1: insert into t_nocf values (3)

  81. 1 row created.


  82. Commit complete.

  83. old   1: update &&s1 set id=11 where id=1
  84. new   1: update t_nocf set id=11 where id=1

  85. 1 row updated.

  86. old   1: update &&s1 set id=22 where id=2
  87. new   1: update t_nocf set id=22 where id=2

  88. 1 row updated.

  89. old   1: update &&s1 set id=33 where id=3
  90. new   1: update t_nocf set id=33 where id=3

  91. 1 row updated.


  92. Commit complete.

  93. old   1: update &&s1 set id=222 where id=22
  94. new   1: update t_nocf set id=222 where id=22

  95. 1 row updated.

  96. old   1: update &&s1 set id=333 where id=33
  97. new   1: update t_nocf set id=333 where id=33

  98. 1 row updated.


  99. Commit complete.

  100. SQL> select  * from t_nocf
  101.   2  ;

  102.         ID
  103. ----------
  104.         11
  105.        222
  106.        333

  107. SQL> /

  108.         ID
  109. ----------
  110.          1
  111.        222
  112.        333

  113. SQL>

复制代码
PL/SQL:

  1. alter database add  supplemental log data ;

  2. alter database add  supplemental log data ( primary key ) columns;

  3. select  * from flashback_transaction_query ftq
  4. where ftq.table_name='T_NONCONFLICT_ONLY'  
  5. and ftq.table_owner='HR'
  6.   order by ftq.commit_scn desc ;

  7. begin
  8.     dbms_flashback.transaction_backout(1,
  9.     xids =>sys.xid_array ('0300180076030000'),
  10.     options => dbms_flashback.nonconflict_only);
  11. end;

  12. select  * from hr.t_nocascade;
  13. select  * from hr.t_nonconflict_only;

  14. ----
  15. select  * from dba_flashback_txn_report;

  16. select  * from dba_flashback_txn_state;


  17. ---080009005C030000

  18. commit;
  19. -----

  20. select  * from flashback_transaction_query ftq
  21. where ftq.table_name='T_NOCASCADE_FORCE'  
  22. and ftq.table_owner='HR'
  23.   order by ftq.commit_scn desc ;

  24. begin
  25.     dbms_flashback.transaction_backout(1,
  26.     xids =>sys.xid_array ('080014005C030000'),
  27.     options => dbms_flashback.nocascade_force);
  28. end;

  29. select  * from hr.t_nocascade;
  30. select  * from hr.t_nocascade_force;

  31. ----
  32. select  * from dba_flashback_txn_report;

  33. select  * from dba_flashback_txn_state;


  34. ---080009005C030000

  35. commit;

  36. --------------------

  37. select  * from flashback_transaction_query ftq
  38. where ftq.table_name='T_NON'  
  39. and ftq.table_owner='HR'
  40.   order by ftq.commit_scn desc ;

  41. begin
  42.     dbms_flashback.transaction_backout(1,
  43.     xids =>sys.xid_array ('0600090061030000'),
  44.     options => dbms_flashback.nonconflict_only);
  45. end;



  46. commit;

  47. ----------

  48. select  * from flashback_transaction_query ftq
  49. where ftq.table_name='T_NOCF'  
  50. and ftq.table_owner='HR'
  51.   order by ftq.commit_scn desc ;

  52. begin
  53.     dbms_flashback.transaction_backout(1,
  54.     xids =>sys.xid_array ('03001A007C030000'),
  55.     options => dbms_flashback.nocascade_force);
  56. end;
  57.   
  58. commit;
复制代码

  1. select  * from dba_flashback_archive;

  2. select  * from dba_flashback_archive_ts;

  3. select * from dba_flashback_archive_tables;

  4. create flashback archive fba1
  5. tablespace users quota 10M  retention 10 day;
复制代码

SQLPLUS:
  1. SQL> alter table employees flashback archive fba1;
  2. alter table employees flashback archive fba1
  3. *
  4. ERROR at line 1:
  5. ORA-55620: No privilege to use Flashback Archive


  6. SQL> alter table employees flashback archive fba1;

  7. Table altered.

  8. SQL> select  object_id from user_objects
  9.   2   where object_name='EMPLOYEES';

  10. OBJECT_ID
  11. ----------
  12.      73953

  13. SQL> select  * from hr.sys_fba_hist_73953;
  14. select        * from hr.sys_fba_hist_73953
  15.                   *
  16. ERROR at line 1:
  17. ORA-00942: table or view does not exist


  18. SQL> select  salary from employees where employee_id=100;

  19.     SALARY
  20. ----------
  21.      24000

  22. SQL> update employees set salary=25000 where employee_id=100;

  23. 1 row updated.

  24. SQL> commit;

  25. Commit complete.

  26. SQL> select  * from hr.sys_fba_hist_73953;
  27. select        * from hr.sys_fba_hist_73953
  28.                   *
  29. ERROR at line 1:
  30. ORA-00942: table or view does not exist


  31. SQL> /

  32. RID
  33. --------------------------------------------------------------------------------
  34.   STARTSCN     ENDSCN XID               O EMPLOYEE_ID FIRST_NAME
  35. ---------- ---------- ---------------- - ----------- --------------------
  36. LAST_NAME                  EMAIL                     PHONE_NUMBER
  37. ------------------------- ------------------------- --------------------
  38. HIRE_DATE            JOB_ID           SALARY COMMISSION_PCT MANAGER_ID
  39. ------------------- ---------- ---------- -------------- ----------
  40. DEPARTMENT_ID
  41. -------------
  42. AAAR5pAAFAAAADPAAA
  43.               1125736                                 100 Steven
  44. King                          SKING                     515.123.4567

  45. RID
  46. --------------------------------------------------------------------------------
  47.   STARTSCN     ENDSCN XID               O EMPLOYEE_ID FIRST_NAME
  48. ---------- ---------- ---------------- - ----------- --------------------
  49. LAST_NAME                  EMAIL                     PHONE_NUMBER
  50. ------------------------- ------------------------- --------------------
  51. HIRE_DATE            JOB_ID           SALARY COMMISSION_PCT MANAGER_ID
  52. ------------------- ---------- ---------- -------------- ----------
  53. DEPARTMENT_ID
  54. -------------
  55. 2003-06-17:00:00:00 AD_PRES            24000
  56.            90


  57. SQL> update hr.sys_fba_hist_73953 set SALARY=23000 ;
  58. update hr.sys_fba_hist_73953 set SALARY=23000
  59.           *
  60. ERROR at line 1:
  61. ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on
  62. table "HR"."SYS_FBA_HIST_73953"


  63. SQL>












  64. SQL> create table t05311_a ( a  number , b varchar2(20))   ;

  65. Table created.

  66. SQL> show user
  67. USER is "HR"
  68. SQL> insert into t05311_a values ( 1   , 'A') ;

  69. 1 row created.

  70. SQL> commit;

  71. Commit complete.

  72. SQL> alter table t05311_a  flashback archive ;

  73. Table altered.

  74. SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS')  from dual;

  75. TO_CHAR(SYSDATE,'YY
  76. -------------------
  77. 2017-08-22:21:00:24

  78. SQL> update t05311_a set a=2 , b='B';

  79. 1 row updated.

  80. SQL> commit;

  81. Commit complete.

  82. SQL> select  * from sys_fba_hist_74619;
  83. select        * from sys_fba_hist_74619
  84.                *
  85. ERROR at line 1:
  86. ORA-00942: table or view does not exist


  87. SQL> /

  88. RID
  89. --------------------------------------------------------------------------------
  90.   STARTSCN     ENDSCN XID               O          A B
  91. ---------- ---------- ---------------- - ---------- --------------------
  92. AAASN7AAEAAAALWAAA
  93.    1126744    1127241 03001C0080030000 I          1 A


  94. SQL> select  * from t05311_a
  95.   2   as of timestamp to_timestamp('2017-08-22:21:00:24','YYYY-MM-DD:HH24:MI:SS') ;

  96.          A B
  97. ---------- --------------------
  98.          1 A

  99. SQL> select  * from t05311_a
  100.   2   as of scn 1127241;

  101.          A B
  102. ---------- --------------------
  103.          2 B

  104. SQL> select  * from t05311_a
  105.   2  as of scn 1127240;

  106.          A B
  107. ---------- --------------------
  108.          1 A

  109. SQL> update t05311_a set a=3,b='C' ;

  110. 1 row updated.

  111. SQL> commit;

  112. Commit complete.

  113. SQL> update t05311_a set a=4,b='D' ;

  114. 1 row updated.

  115. SQL> commit;

  116. Commit complete.

  117. SQL>  select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS')  from dual;

  118. TO_CHAR(SYSDATE,'YY
  119. -------------------
  120. 2017-08-22:21:11:55

  121. SQL> alter table t05311_a drop ( b) ;

  122. Table altered.

  123. SQL> select  * from t05311_a;

  124.          A
  125. ----------
  126.          4

  127. SQL> update t05311_a set a=5 ;

  128. 1 row updated.

  129. SQL> commit;

  130. Commit complete.

  131. SQL> select  versions_xid, versions_operation , a, b from t05311_a
  132.   2  versions between scn minvalue and maxvalue ;

  133. VERSIONS_XID         V            A B
  134. ---------------- - ---------- --------------------
  135. 03001C0080030000 I            1 A
  136. 0800110064030000 U            3 C
  137. 020003007E030000 U            2 B
  138. 02000B007F030000 U            4 D
  139. 05001B0025040000 U            5
  140.                  U            4

  141. 6 rows selected.

  142. SQL> select  versions_xid, versions_operation ,versions_startscn , a, b from t05311_a
  143.   2  versions between scn minvalue and maxvalue ;

  144. VERSIONS_XID         V VERSIONS_STARTSCN              A B
  145. ---------------- - ----------------- ---------- --------------------
  146. 03001C0080030000 I             1126744              1 A
  147. 0800110064030000 U             1128449              3 C
  148. 020003007E030000 U             1127241              2 B
  149. 02000B007F030000 U             1128486              4 D
  150. 05001B0025040000 U             1128666              5
  151.                  U             1128543              4

  152. 6 rows selected.

  153. SQL>
  154. SQL> select * from t05311_a
  155.   2  as of timestamp to_timestamp('2017-08-22:21:11:55','YYYY-MM-DD:HH24:MI:SS');

  156.          A B
  157. ---------- --------------------
  158.          4 D

  159. SQL> alter table t05311_a enable row movement ;

  160. Table altered.

  161. SQL> flashback table to timestamp  to_timestamp('2017-08-22:21:11:55','YYYY-MM-DD:HH24:MI:SS');
  162. flashback table to timestamp  to_timestamp('2017-08-22:21:11:55','YYYY-MM-DD:HH24:MI:SS')
  163.                 *
  164. ERROR at line 1:
  165. ORA-00903: invalid table name


  166. SQL> flashback table   t05311_a   to timestamp  to_timestamp('2017-08-22:21:11:55','YYYY-MM-DD:HH24:MI:SS');
  167. flashback table   t05311_a   to timestamp  to_timestamp('2017-08-22:21:11:55','YYYY-MM-DD:HH24:MI:SS')
  168.                   *
  169. ERROR at line 1:
  170. ORA-01466: unable to read data - table definition has changed


  171. SQL>
复制代码

PL/SQL:

  1. select  * from dba_flashback_archive;

  2. select  * from dba_flashback_archive_ts;

  3. select * from dba_flashback_archive_tables;

  4. select  * from dba_tab_privs tp where tp.grantee='HR';

  5. grant  flashback archive on fba1 to hr;

  6. select  * from dba_tab_privs tp where tp.grantee='HR';

  7. create flashback archive  default fba2  tablespace users
  8. quota 20M  retention 1 year;

  9. select  * from dba_flashback_archive;

  10. grant flashback archive on fba2 to hr;

  11. select  * from dba_flashback_archive_ts;
  12. -------------------------


  13. select * from dba_flashback_archive_tables;

  14. alter flashback archive fba1 set default;

  15. select  * from dba_flashback_archive;
  16. ------------------
  17. select  * from dba_flashback_archive_ts;

  18. alter flashback archive fba2 add tablespace example quota 30M ;

  19. alter flashback archive fba2 modify  tablespace users  quota 40M;

  20. ----------
  21. alter flashback archive fba2 modify retention 5 year;

  22.   select  * from dba_flashback_archive;
复制代码

  1. alter flashback archive fba2 purge before timestamp
  2. (systimestamp- numtodsinterval('1','second')  );

  3. select  * from dba_flashback_archive_tables;

  4. select  * from hr.SYS_FBA_HIST_74619;

  5. alter table hr.t05311_a no flashback archive;
复制代码
SQLPLUS:
  1. SQL> show user
  2. USER is "HR"
  3. SQL> create table part1 (  a  number , b varchar2(20))  
  4.   2  partition by range(a )
  5.   3  ( partition p1 values less than(100),
  6.   4    partition p2 values less than(maxvalue)) ;

  7. Table created.

  8. SQL> insert into part1 values (100, 'X' ) ;

  9. 1 row created.

  10. SQL> insert into part1 values (1000, 'X' ) ;

  11. 1 row created.

  12. SQL> commit;

  13. Commit complete.

  14. SQL> select  * from part1 partition ( p2 ) ;

  15.          A B
  16. ---------- --------------------
  17.        100 X
  18.       1000 X

  19. SQL> alter table part1 flashback archive fba2  ;

  20. Table altered.

  21. SQL> select to_char(sysdate,'YYYY-MM-DD:HH24:MI:SS')  from dual;

  22. TO_CHAR(SYSDATE,'YY
  23. -------------------
  24. 2017-08-22:21:35:30

  25. SQL>
  26. SQL> update part1 set a=200, b='Y' where a=100;

  27. 1 row updated.

  28. SQL> commit;

  29. Commit complete.

  30. SQL> select  * from SYS_FBA_HIST_74629;
  31. select        * from SYS_FBA_HIST_74629
  32.                *
  33. ERROR at line 1:
  34. ORA-00942: table or view does not exist


  35. SQL> show user
  36. USER is "HR"
  37. SQL> select  * from SYS_FBA_HIST_74629;

  38. RID
  39. --------------------------------------------------------------------------------
  40.   STARTSCN     ENDSCN XID               O          A B
  41. ---------- ---------- ---------------- - ---------- --------------------
  42. AAASOHAAEAAAAK+AAA
  43.    1130315    1130446 0500110027040000 I        100 X


  44. SQL> alter table part1 split partition p2 at ( 500)  into (partition p21 , partition p22 )  ;
  45. alter table part1 split partition p2 at ( 500)        into (partition p21 , partition p22 )
  46. *
  47. ERROR at line 1:
  48. ORA-55610: Invalid DDL statement on history-tracked table


  49. SQL> select  * from SYS_FBA_HIST_74629;

  50. RID
  51. --------------------------------------------------------------------------------
  52.   STARTSCN     ENDSCN XID               O          A B
  53. ---------- ---------- ---------------- - ---------- --------------------
  54. AAASOHAAEAAAAK+AAA
  55.    1130315    1130446 0500110027040000 I        100 X


  56. SQL> update SYS_FBA_HIST_74629 set a=101 where a=100 ;

  57. 1 row updated.

  58. SQL> commit;

  59. Commit complete.

  60. SQL> alter table part1 split partition p2 at ( 500)  into (partition p21 , partition p22 )  ;

  61. Table altered.

  62. SQL>  select  * from SYS_FBA_HIST_74629;

  63. RID
  64. --------------------------------------------------------------------------------
  65.   STARTSCN     ENDSCN XID               O          A B
  66. ---------- ---------- ---------------- - ---------- --------------------
  67. AAASOHAAEAAAAK+AAA
  68.    1130315    1130446 0500110027040000 I        101 X


  69. SQL> select  * from part1 where a=100;

  70. no rows selected

  71. SQL> select  * from part1 ;

  72.          A B
  73. ---------- --------------------
  74.        200 Y
  75.       1000 X

  76. SQL> select  * from part1 where a=200;

  77.          A B
  78. ---------- --------------------
  79.        200 Y

  80. SQL> select  * from part1 where a=200 as of scn 1130445;
  81. select        * from part1 where a=200 as of scn 1130445
  82.                                  *
  83. ERROR at line 1:
  84. ORA-00933: SQL command not properly ended


  85. SQL> select  * from part1 as of scn 1130445 where  a=200;

  86.          A B
  87. ---------- --------------------
  88.        200 Y

  89. SQL> select  * from part1 as of scn 1130445 ;

  90.          A B
  91. ---------- --------------------
  92.        101 X
  93.       1000 X
  94.        200 Y

  95. SQL>
复制代码
PL/SQL:



  1. drop flashback archive fba1;

  2. select  * from dba_flashback_archive;

  3. select  * from dba_flashback_archive_ts;

  4. select  * from dba_flashback_archive_tables;
  5. ----

  6. select  * from dba_tab_partitions tp
  7. where tp.table_owner='HR' and tp.table_name='PART1';

  8. ----

  9. begin
  10.     dbms_flashback_archive.disassociate_fba(owner_name => 'HR',
  11.     table_name => 'PART1') ;
  12.     end;
  13.    
  14.      begin
  15.     dbms_flashback_archive.reassociate_fba(owner_name => 'HR',
  16.     table_name => 'PART1') ;
  17.     end;
  18.    
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-4-28 00:21 , Processed in 0.039052 second(s), 24 queries .

快速回复 返回顶部 返回列表