Oracle11gr2新增版本功能(一)

yangtingkun發表於2009-09-11

11.2中,Oracle資料庫引入的版本的概念,這為應用程式的升級提供了極大的方便。

這篇簡單描述建立版本的語法,以及版本的使用。

 

 

下面是一個最簡單的例子,來說明版本的含義:

SQL> conn yangtk/yangtk
已連線。
SQL> select synonym_name from user_synonyms;

未選定行

SQL> create synonym s_1 for t;

同義詞已建立。

SQL> create edition my_edition;

版本已建立。

SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;

SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
----------------------------------------------------------------------------------
ORA$BASE

SQL> desc t
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER
 NAME                                         VARCHAR2(30)
 TYPE                                         VARCHAR2(20)

SQL> desc s_1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER
 NAME                                         VARCHAR2(30)
 TYPE                                         VARCHAR2(20)

SQL> alter session set edition = my_edition;

會話已更改。

SQL> create or replace synonym s_1 for t1;

同義詞已建立。

SQL> desc t1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER

SQL> desc s_1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER

SQL> alter session set edition = ora$base;

會話已更改。

SQL> desc t1
 
名稱                                 是否為空? 型別
 ------------------------------------ -------- --------------------------------------------
 ID                                            NUMBER

首先建立一個指向T的同義詞S_1,然後檢查當前生效的版本,然後建立一個新的版本MY_EDITION,並啟動這個版本,然後重建同義詞S_1指向T1。上面的結果顯示EDITION沒有起作用,在不同的版本中看到的同義詞是相同的。

這個由於當前使用者並沒有啟用版本資訊,下面啟用版本後重覆上面的操作:

SQL> drop edition my_edition;

版本已刪除。

SQL> drop synonym s_1;

同義詞已刪除。

SQL> alter user yangtk enable editions;

使用者已更改。

SQL> create synonym s_1 for t;

同義詞已建立。

SQL> desc t
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER
 NAME                                         VARCHAR2(30)
 TYPE                                         VARCHAR2(20)

SQL> desc s_1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER
 NAME                                         VARCHAR2(30)
 TYPE                                         VARCHAR2(20)

SQL> create edition my_edition;

版本已建立。

SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;

SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
------------------------------------------------------------------------------------
ORA$BASE

SQL> alter session set edition = my_edition;

會話已更改。

SQL> create synonym s_1 for t1;
create synonym s_1 for t1
               *
1 行出現錯誤:
ORA-00955:
名稱已由現有物件使用


SQL> create or replace synonym s_1 for t1;

同義詞已建立。

SQL> desc s_1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER

SQL> desc t1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER

SQL> alter session set edition = ora$base;

會話已更改。

SQL> desc s_1
 
名稱                                是否為空? 型別
 ----------------------------------- -------- --------------------------------------------
 ID                                           NUMBER
 NAME                                         VARCHAR2(30)
 TYPE                                         VARCHAR2(20)

可以看到,在不同的版本中,同義詞的指向是不同的。這種方式對於程式的升級而言,存在很大的方便之處。

除了支援同義詞以外,版本還支援VIEWPROCEDUREFUNCTIONPACKAGETYPETRIGGERLIBRARY

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-614489/,如需轉載,請註明出處,否則將追究法律責任。

相關文章