Oracle11gr2觸發器新增版本升級功能(二)

yangtingkun發表於2010-01-07

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章