監聽配置細節引數詳解兩則

zhcunique發表於2021-03-23
  1. Listener.ora中的ADR_BASE_LISTENER引數是什麼意思?
    ADR_BASE_LISTENER=/u01/app


    用來指定監聽的log和trace放在哪裡。
    Purpose
    To specify the base directory in to which tracing and logging incidents are stored when ADR is enabled.
    Default
    The default is ORACLE_BASE, or ORACLE_HOME/log if ORACLE_BASE is not defined.
    Values
    Any valid directory path to a directory with write permission.

  2. (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))是什麼意思?

    在程式設計過程中,我們可能會發現有些功能透過PL/SQL完成會很麻煩,而透過C/C++語言程式設計則會容易很多。因此,Oracle提供了在PL/SQL程式裡直接呼叫外部函式(包括C函式或Java方法)的功能。呼叫外部函式的過程如下:
    ——使用者程式執行PL/SQL程式。
    ——在執行的PL/SQL程式過程中,呼叫了一個C/C++語言寫的函式:c_func。這裡需要藉助別名庫(Alias Library)。別命苦是資料庫裡的一個物件,用來描述一個外部函式所在的動態連結庫的路徑和名稱。透過別名庫,從而可以知道呼叫的外部函式在哪個檔案裡。
    ——PL/SQL將對外部函式的呼叫請求發給監聽器。
    ——監聽器生成一個extproc程式,該程式專門用來處理對外部函式的呼叫。每個session都會生成一個屬於該session的extproc程式,並且在整個session生命週期裡,extproc程式會一直存在。
    ——Extproc程式負責將別名庫所指定的動態連結庫檔案載入到記憶體。
    ——Extproc程式執行指定的外部函式,並將結果返回給伺服器程式,進而返回給使用者程式。
    需要對監聽器進行配置(在listener.ora檔案中配置),從而啟動extproc程式。其中“(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))”說明監聽extproc程式請求的地址;而SID_DESC部分則說明extproc程式的連線資訊。
    然後我們還要配置tnsnames.ora檔案,注意,該檔案也必須位於資料庫伺服器端(應該是說,tnsname.ora檔案的以下內容屬於資料庫客戶端的)。我們需要新增如下內容:
    EXTPROC_CONNECTION_DATA=
    (DESCRIPTION=
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
    )
    (CONNECT_DATA=
    (SID=PLSExtProc)
    )
    )
    配置完畢以後,可以嘗試tnsping 連線字串名稱,如果成功,則說明監聽沒有問題。
    [oracle@book admin]$ tnsping EXTPROC_CONNECTION_DATA


    下面用例子說明上面內容。
    接下來,我們建立一個C語言編寫的函式,如下:
    [oracle@book ~]$ vi calc_tax.c
    calc_tax(n)
    int n;
    {
    int tax;
    tax=(n*15)/100;
    return(tax);
    }
    該函式完成的功能非常簡單,計算傳入引數的15%,並作為稅額返回給呼叫者。
    將calc_tax.c檔案編譯成動態連結庫,並將生成的庫檔案複製到$ORACLE_HOME/bin目錄下:
    [oracle@book ~]$ cc -shared -o calc_tax.so calc_tax.c
    [oracle@book ~]$ cp calc_tax.so $ORACLE_HOME/bin
    然後,我們建立一個別名庫,用來說明將要呼叫的C函式所在的庫檔案,並將使用c_code別名庫的許可權賦給HR使用者:
    SQL> connect / as sysdba
    SQL> create or replace library c_code as '$ORACLE_HOME/bin/calc_tax.so';
    2 /
    SQL> grant execute on c_code to hr;
    要使用這個calc_tax函式,還需要在資料庫裡建立一個呼叫宣告。如下所示:
    SQL> connect hr/hr
    SQL> create or replace function call_c
    2 (x binary_integer)
    3 return binary_integer
    4 as language c
    5 library sys.c_code
    6 name "calc_tax";
    7 /
    在呼叫宣告裡定義了calc_tax函式的傳入傳出引數、所在的別名庫名稱(library sys.c_code 部分)以及在動態連結庫中的函式名(name "calc_tax")等。
    現在,我們就可以透過呼叫call_c,進而呼叫calc_tax函式了。如下所示:
    SQL> set serveroutput on
    SQL> var v_salary number;
    SQL> var v_tax number;
    SQL> exec :v_salary := 10000;
    SQL> exec :v_tax := call_c(:v_salary);
    SQL> print v_tax;
    V_TAX
    -----------
    1500
    從返回結果可以看到,我們成功呼叫了C函式calc_tax。

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

相關文章