Oracle 11G中的Edition-Based Redefinition(CrossEdition)

来源:互联网 发布:网上找淘宝客服 编辑:程序博客网 时间:2024/06/10 23:54

11.2不但增加了版本的功能,而且还提供了不停机的版本升级功能。为了保证在升级版本的过程中,用户仍然可以访问数据,Oracle提供了CROSSEDITION触发器来处理版本升级或降级过程中的数据问题。
简单的说,CROSSEDITION触发器可以其他的版本中生效,使得登陆到其他版本的会话执行的DML可以正确的将数据应用到当前版本。如果是升级版本,使用FORWARD CROSSEDITION触发器,这个触发器在当前版本的父版本中触发。如果是降级版本,使用REVERSE CROSSEDITION触发器,这个触发器在当前版本和子版本中触发。

 

CREATE TABLE T_PERSON (ID NUMBER PRIMARY KEY,
FIRST_NAME VARCHAR2(30),
LAST_NAME VARCHAR2(30));

 

INSERT INTO T_PERSON
SELECT ROWNUM, OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS;

 

CREATE EDITION E_1;


ALTER SESSION SET EDITION = E_1;

ALTER TABLE T_PERSON ADD FULL_NAME VARCHAR2(60);

 

CREATE or replace TRIGGER T_CROSSEDITION_PERSON
BEFORE INSERT OR UPDATE ON T_PERSON
FOR EACH ROW CROSSEDITION
BEGIN
:NEW.FULL_NAME := :NEW.FIRST_NAME || :NEW.LAST_NAME;
END;

 

ALTER SESSION SET EDITION = ORA$BASE;

 

select * from T_PERSON;

 

alter user chandler enable editions;--make the schema enabled editions.

 

INSERT INTO T_PERSON(ID, FIRST_NAME, LAST_NAME, full_name) values(14, 'Tom', 'Bill','Tom Bill');
commit;

 

INSERT INTO T_PERSON(ID, FIRST_NAME, LAST_NAME) values(15, 'Tom', ' Bill');
commit;

 

CREATE OR REPLACE PROCEDURE hello IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello, edition 2.');
  END hello;

 

begin
hello();
end;

 

当新版本升级完成,旧版本数据全部转化后,将数据库的默认版本设置为新版本,则升级工作完成,CROSSEDITION触发器的历史使命也最终完成。

SELECT property_value FROM   database_properties
WHERE  property_name = 'DEFAULT_EDITION';

 

SELECT * FROM dba_editions;

 

ALTER DATABASE DEFAULT EDITION = edition-name;

 

SELECT * FROM dba_editions;
GRANT USE ON EDITION release_v1 TO edition_test;
DROP EDITION release_v2;

原创粉丝点击