flashback与dmt tbs以及trigger,materialized view log之间的关系!

参加ocp考试的时候其中有一个题就问到了有关flashback和trigger以及materialized view log相关的问题,这里做了一个简单的测试!


SQL> create table t3(id int);

表已创建。

SQL> create table t4(time date);

表已创建。

SQL> edit
已写入 file afiedt.buf

1 create or replace trigger trigg_flashback
2 before ddl on xys.schema
3 begin
4 insert into t4 values(sysdate);
5* end;
SQL> /

触发器已创建

SQL> insert into t3 values(1);

已创建 1 行。

SQL> insert into t3 values(2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t4;

未选定行

SQL> drop table t3;

表已删除。

SQL> select *from t4;

TIME
--------------
30-9月 -07

SQL> flashback table t3 to before drop;
flashback table t3 to before drop
*
第 1 行出现错误:
ORA-38305: 对象不在回收站中

--当对象在dmt表空间中删除之后不能被flashback!
SQL> show user
USER 为 "XYS"
SQL> select username , default_tablespace from dba_users where username='XYS';

USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
XYS DMT

SQL> SELECT tablespace_name , extent_management from dba_tablespaces where table
space_name='DMT';

TABLESPACE_NAME EXTENT_MAN
------------------------------ ----------
DMT DICTIONARY

--===================================

SQL> SELECT tablespace_name , extent_management from dba_tablespaces ;

TABLESPACE_NAME EXTENT_MAN
------------------------------ ----------
SYSTEM DICTIONARY
UNDOTBS1 LOCAL
SYSAUX LOCAL
TEMP LOCAL
TEST LOCAL
DMT DICTIONARY

已选择6行。

SQL> create table t3(id int) tablespace test;

表已创建。

SQL> select *from t4;

TIME
--------------
30-9月 -07
30-9月 -07

SQL> drop table t3;

表已删除。

SQL> select *from t4;

TIME
--------------
30-9月 -07
30-9月 -07
30-9月 -07

SQL> flashback table t3 to before drop;

闪回完成。

SQL> select *from t4;

TIME
--------------
30-9月 -07
30-9月 -07
30-9月 -07

SQL> edit
已写入 file afiedt.buf

1 create or replace trigger trigg_dml
2 after insert or update or delete on t3
3 begin
4 insert into t4 values(sysdate);
5* end;
SQL> /

触发器已创建

SQL> select *from t4;

TIME
--------------
30-9月 -07
30-9月 -07
30-9月 -07
30-9月 -07

SQL> drop table t3;

表已删除。

SQL> select trigger_name from user_triggers;

TRIGGER_NAME
------------------------------
BIN$gNBYIm15Sayuj586xqJA0w==$0
TRIGG_FLASHBACK

SQL> select trigger_name , status from user_triggers;

TRIGGER_NAME STATUS
------------------------------ --------
BIN$aV3SGlwWTsmWXSOFGbtsjg==$2 ENABLED
TRIGG_FLASHBACK ENABLED

--我们看到t3上的trigger当t3被删除之后也被删除,当t3被flashback之后,triggre也被flashback回来了,但是名字以及不是原来的名字了,依然是recyclebin中的名字,这个也index是一样的,不知道oracle是出于什么目的,flashback之后名字不是原来的名字了?而且值得注意的是trigger不论在被删除还是flashback的过程中都不触发!被flashback之后其status还是enable,这一点和index被flashback之后也是一样的!

SQL> select * from t4;

TIME
--------------
30-9月 -07
30-9月 -07
30-9月 -07
30-9月 -07
30-9月 -07

SQL> flashback table t3 to before drop;

闪回完成。

SQL> select *from t4;

TIME
--------------
30-9月 -07
30-9月 -07
30-9月 -07
30-9月 -07
30-9月 -07

SQL> select trigger_name from user_triggers;

TRIGGER_NAME
------------------------------
BIN$gNBYIm15Sayuj586xqJA0w==$0
TRIGG_FLASHBACK

SQL> create materialized view log on t3;
create materialized view log on t3
*
第 1 行出现错误:
ORA-12014: 表 'T3' 不包含主键约束条件


SQL> alter table t3 add constraint pk_t3 primary key (id);

表已更改。

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
T1
T_1
T3
T4
SYS_TEMP_FBT
T2

已选择7行。

SQL> create materialized view log on t3;

实体化视图日志已创建。

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
T1
T_1
T3
T4
MLOG$_T3
RUPD$_T3
SYS_TEMP_FBT
T2

已选择9行。

SQL> drop table t3;

表已删除。

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
T1
T_1
T4
SYS_TEMP_FBT
T2

已选择6行。

SQL> flashback table t3 to before drop;

闪回完成。

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
T
T1
T_1
T3
T4
SYS_TEMP_FBT
T2

已选择7行。

SQL>

我们看到当表上存在materialized view log的时候,如果table被drop,那么materialized view log也被drop掉了,但是flashback table之后,materialized view log并没有被flashback回来!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19602/viewspace-61735/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/19602/viewspace-61735/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值