本文标题:flashback table后,怎样恢复和表相关的对象【本站如从外站转载,会注明出处】
本文链接:http://www.validba.net/2009/02/flashback-table%e5%90%8e%e6%80%8e%e6%a0%b7%e6%81%a2%e5%a4%8d%e5%92%8c%e8%a1%a8%e7%9b%b8%e5%85%b3%e7%9a%84%e5%af%b9%e8%b1%a1/
测试目的: flashback table后,怎样恢复跟表相关的约束和对象
四张表 test1,test2,test3,test4
test1上有一个trigger
view cquery 和test1相关
metarialized view m_query和test1相关
test2和test1存在主外键关系 FK_TEST1_FID_REF_TEST2_ID
test1和test4存在主外外键 fk_test4_reference_test1
本次测试为:删除test1,并flashback table test1,然后恢复跟test1相关的对象.
测试前首先删除test4上的外键,因为他应用了test1的主键
alter table test4 modify constraint fk_test4_reference_test1 disable novalidate;
alter table test4 drop constraint fk_test4_reference_test1;
先禁用后删除了也是为了能够安全删除该外键约束.
1、删除表test1,观察跟他相关联的所有对象的状态
删除表test1
SQL> drop table test1;
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
—————- —————————— ———— ——————-
TEST1 BIN$WdOnMF09VLfgQKjA1MtsHA==$0 TABLE 2008-10-22:16:55:35
test1已经回到了recyclebin
观察跟test1相关的trigger
SQL> select trigger_name,table_name from user_triggers;
TRIGGER_NAME TABLE_NAME
—————————– ——————————
BIN$WdOnMF08VLfgQKjA1MtsHA==$0 BIN$WdOnMF09VLfgQKjA1MtsHA==$0
trigger被改名
观察约束
SQL> select table_name,constraint_name,constraint_type,r_constraint_name from user_constraints;
TABLE_NAME CONSTRAINT_NAME C R_CONSTRAINT_NAME
—————————— —————————— – ——————————
TEST4 SYS_C005293 C
TEST2 PK_TEST2_ID P
TEST4 PK_TEST4_ID P
BIN$WdOnMF09VLfgQKjA1MtsHA==$0 BIN$WdOnMF06VLfgQKjA1MtsHA==$0 P
注意这里主键也被改名了,而外键不存在了.
观察索引
SQL> select index_name from user_indexes;
INDEX_NAME
——————————
PK_TEST2_ID_IDX
PK_TEST4_ID_IDX
BIN$WdOnMF07VLfgQKjA1MtsHA==$0
这里的主键索引已经被改名了.
观察materialized
SQL> select mview_name,compile_state from user_mviews;
MVIEW_NAME COMPILE_STATE
—————————— ——————-
M_QUERY NEEDS_COMPILE
但刷新有问题了,因为它需要的表test1被删除了
SQL> exec dbms_mview.refresh(‘M_QUERY’);
BEGIN dbms_mview.refresh(‘M_QUERY’); END;
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2251
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2457
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2426
ORA-06512: at line 1
观察view
—————————— —————————— – ——————————
TEST4 SYS_C005293 C
TEST2 PK_TEST2_ID P
TEST4 PK_TEST4_ID P
TEST1 BIN$WdOnMF06VLfgQKjA1MtsHA==$0 P
主键约束没有恢复,需要手动改名,
外键没有恢复,只有重建了
——————————
PK_TEST2_ID_IDX
PK_TEST4_ID_IDX
BIN$WdOnMF07VLfgQKjA1MtsHA==$0
索引没有还原,看看索引的执行计划
———- ——————————
1 mayp
———————————————————-
Plan hash value: 2102021671
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
————————————————————————————————————–
| 0 | SELECT STATEMENT | | 1 | 9 | 1 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| TEST1 | 1 | 9 | 1 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | BIN$WdOnMF07VLfgQKjA1MtsHA==$0 | 1 | | 0 (0)| 00:00:01 |
————————————————————————————————————–
根据执行计划可以看出,只是索引改名了,但对索引本身没有什么破坏.
只要对索引改名就可以了
—————————— —————————
PK_TEST2_ID_IDX NORMAL
PK_TEST4_ID_IDX NORMAL
PK_TEST1_ID_IDX NORMAL
TRIGGER_NAME STATUS
—————————— —————————— ——–
TEST1 BIN$WdOnMF08VLfgQKjA1MtsHA==$0 ENABLED

Unaprallleed accuracy, unequivocal clarity, and undeniable importance!