11g plsql本地編譯

安佰勝發表於2011-11-17
 
11g plsql本地編譯
====================
 
--說明
11g支援本地編譯plsq程式碼
以前版本中編譯plsql程式碼要先將程式碼轉換為c程式碼
之後再由第三方程式編譯
11g中可以直接將plsql程式碼轉換成伺服器dll進行本地編譯
 
 
--使用方法
使用引數plsql_code_type控制
引數可以有兩個值
interpreted  --原有方式
native    --本地編譯
修改引數可以使用alter system 或者alter session
 
---------------------------
 
--測試
--當前引數值為原有方式
 
SQL> show parameter plsql_code_type
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
plsql_code_type                      string      INTERPRETED

 
--開啟時間反饋
SQL> set timing on

 
--在原有方式下編譯儲存過程
--用時0.77秒
SQL> create or replace procedure p_test
is
begin
        insert into t select max(id)+1 from t;
        commit;
end;
/
  2    3    4    5    6    7 
Procedure created.
Elapsed: 00:00:00.77

 
--刪除過程
SQL> drop procedure p_test;
Procedure dropped.
Elapsed: 00:00:01.20
 
 
--設定引數,使用本地編譯
--用時0.35
--oracle聲稱的使用本地編譯快一倍在測試中確實如此
SQL> alter session set plsql_code_type=native;
Session altered.
Elapsed: 00:00:00.02
SQL>
SQL>
SQL>
SQL> create or replace procedure p_test
is
begin
        insert into t select max(id)+1 from t;
        commit;
end;
/
  2    3    4    5    6    7 
Procedure created.
Elapsed: 00:00:00.35
 
 
--檢視特定物件的編譯模式
--通過字典表all_plsql_object_settings檢視

 
SQL> select plsql_code_type from all_plsql_object_settings
  2  where name='P_TEST';
PLSQL_CODE_TYPE
--------------------------------------------------------------------------------
NATIVE
Elapsed: 00:00:00.10

======================================

切換資料庫到預設本地編譯
conn / as sysdba
alter system set plsql_code_type=native;
alter system set plsql_optimize_level=3;  --(>2)
shutdown immediate
startup upgrade
@$ORACLE_HOME/rdbms/admin/dbmsupgnv.sql
shutdown immediate
startup
@$ORACLE_HOME/rdbms/admin/utlrp.sql
--操作以後資料庫預設的編譯方式就是本地編譯
--此操作的反向操作為將dbmsupgnv.sql替換為dbmsupgin.sql
 

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

相關文章