Oracle11gr2增加了版本升级触发器功能。
这篇简单描述一个利用CROSSEDITION触发器降级版本的例子。
Oracle11gr2触发器新增版本升级功能(一):http://yangtingkun.itpub.net/post/468/495673
描述一个简单的降级的例子,这个例子时接着上一篇文章:
SQL> ALTER DATABASE DEFAULT EDITION = E_1;
数据库已更改。
SQL> CONN YANGTK
输入口令:
已连接。
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
---------------------------------------------
E_1
当前的系统状态就是升级后的状态,如果发现升级后存在问题,需要降级版本,那么可以采用下面的方法:
SQL> ALTER SESSION SET EDITION = ORA$BASE;
会话已更改。
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
---------------------------------------------
ORA$BASE
SQL> CREATE TRIGGER T_CROSSEDITION_PERSON
2 BEFORE INSERT OR UPDATE ON T_PERSON
3 FOR EACH ROW
4 REVERSE CROSSEDITION
5 BEGIN
6 :NEW.FULL_NAME := NULL;
7 END;
8 /
触发器已创建
创建一个用于降级的触发器,下面监测触发器的工作,不过首先要删除上一篇文章中建立的升级的触发器,避免二个CROSSEDITION之间相互干扰:
SQL> ALTER SESSION SET EDITION = E_1;
会话已更改。
SQL> DROP TRIGGER T_CROSSEDITION_PERSON;
触发器已删除。
SQL> INSERT INTO T_PERSON
2 VALUES (18, 'A', 'B', 'AB');
已创建 1 行。
SQL> SELECT *
2 FROM T_PERSON
3 WHERE ID = 18;
ID FIRST_NAME LAST_NAME FULL_NAME
---------- --------------------- --------------- ------------------------------------
18 A B
SQL> COMMIT;
提交完成。
SQL> ALTER SESSION SET EDITION = ORA$BASE;
会话已更改。
SQL> SELECT * FROM T_PERSON;
ID FIRST_NAME LAST_NAME FULL_NAME
---------- --------------------- --------------- ------------------------------------
1 T VIEW
2 T_TABLE TABLE
3 T_TABLE TRIGGER
4 T_MYTEST TYPE
5 FORCE TYPE
6 T_TYPE TYPE
7 ABC TABLE
8 S_1 SYNONYM
9 T1 TABLE
10 S_MY_EDITION SYNONYM
11 T_PERSON TABLE
12 SYS_C0011140 INDEX
13 T_LOG TABLE
14 T TRIGGER
15 TEST.US.ORACLE.COM DATABASE LINK TEST.US.ORACLE.COMDATABASE LINK
16 T_CROSSEDITION_PERSON TRIGGER T_CROSSEDITION_PERSONTRIGGER
17 TEST TEST
18 A B
已选择18行。
SQL> UPDATE T_PERSON
2 SET LAST_NAME = 'REVERSE'
3 WHERE ID = 16;
已更新 1 行。
SQL> SELECT *
2 FROM T_PERSON
3 WHERE ID = 16;
ID FIRST_NAME LAST_NAME FULL_NAME
---------- --------------------- --------------- ------------------------------------
16 T_CROSSEDITION_PERSON REVERSE
SQL> COMMIT;
提交完成。
可以看到,这个触发器在子版本和当前版本中都是生效的。
SQL> ALTER DATABASE DEFAULT EDITION = ORA$BASE;
数据库已更改。
SQL> DROP TRIGGER T_CROSSEDITION_PERSON;
触发器已删除。
SQL> ALTER TABLE T_PERSON DROP COLUMN FULL_NAME;
表已更改。
将系统的默认版本修改为降级后的版本,确保以后用户都使用降级后的版本,然后就可以删除CROSSEDITION触发器,并最终删除升级时添加的列。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-624628/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-624628/