天天看點

配置ORACLE 用戶端連接配接到資料庫

--=================================

-- 配置ORACLE 用戶端連接配接到資料庫

    Oracle 用戶端連接配接到Oracle 資料庫伺服器貌似不同于SQL serve中的網絡配置,其實不然,隻不過所有的SQL server 運作于Windows平台,故很多配置直接內建到了作業系統之中。是以無需配置用戶端即可連接配接到伺服器。Oracle 用戶端連接配接到資料庫依賴于Oracle Net。Oracle提供了很多基于用戶端或伺服器的配置工具,需要搞清的是Oracle Net 中的相關術語。術語明白了,其實配置方法與SQL server 大同小異。

一、什麼是Oracle Net

    Oracle Net 用于用戶端和伺服器之間建立一個連接配接會話,并負責維護該會話。

    Oracle Net 在用戶端作為應用程式的一個背景程序元件,而在伺服器端則包含稱為偵聽器的活動程序,

負責用戶端和伺服器之間的互動。

    Oracle Net 同時也支援異構資料庫的連接配接,如連接配接到Sybase,Informix,DB2,SQL Server等

    通常基于下列配置來實作

        網絡配置(網絡必須是聯通的)

        節點所在的位置(IP/Hostname)

        應用程式

        所使用的協定(TCP/IP、/TCP/IP with SSL、SDP、Named Pipes)

    Oracle Net支援的連接配接類型

        用戶端-伺服器模式(如SQLPlus)

        Java 應用程式(JDBC等)

        Web 用戶端應用程式

使用基于Web的應用程式(App Server)作為中間件來實作,可以配置JDBC Oracle Call Interface (OCI) driver 或thin JDBC driver

            通過HTTP直接連接配接到Oracle 伺服器,如OEM

    Oracle Net實作機制

        使用者發出連接配接請求實作與使用者程序進行互動

        使用者程序通過Oracle Net 來與伺服器程序互動

        伺服器程序則與執行個體進行互動(由Oracle Net維護)

        執行個體通過背景程序互動來完成資料庫的讀寫操作

    Oracle Net 連接配接方式

        本地用戶端連接配接的資料庫(即用戶端與資料庫位于同一台伺服器)。

            本地連接配接同樣使用到了Oracle Net,因為任何與資料的互動都通過Oracle Net來完成。

不需要使用到Listener,因為本地連接配接使用的是IPC協定,而IPC協定允許主機内程序間互相通信,由作業系統提供。

            本地連接配接不需要進行任何配置,且本地伺服器上可以運作若幹個執行個體。

            本地連接配接是唯一一個不需要偵聽器的連接配接類型。

            連接配接方法:CONNECT username/password

        所有非本地用戶端連接配接到資料庫

            伺服器端啟用Listener程序

            用戶端通過TNSNAME或Easy connect或LDAP等名稱解析方式來解析連接配接字元串

            一旦連接配接成功,即是Listener服務停止,不影響該會話。

    Oracle Net Listener(偵聽器)

        運作于伺服器端,用于偵聽所有來自用戶端的連接配接請求,并提供處理資料庫服務方面的請求

            位置:$ORACLE_HOME/network/admin/listerer.ora

 --對應于netmgr中(GUI界面)的Listeners項下建立的預設偵聽器(Listener)

                  $ORACLE_HOME/network/admin/sqlnet.ora  

 --對應于netmgr中(GUI界面)的Profile

        伺服器端配置tnsnames

            位置:ORACLE_HOME/network/admin/tnsnames.ora

--對應于netmgr中(GUI界面)的Service Naming

        Listener提供的資訊包括,IP位址、端口号、協定、服務名(service_name)等

        一個Listener能夠為多個資料庫執行個體提供服務

二、用戶端到伺服器建立會話的過程及相關術語

    執行如下的指令來建立連接配接

        SQL> CONNECT username/password@net_service_name  

        連接配接字元串(connect string):username/password@net_service_name

包含了使用者名、密碼、連接配接辨別符

            如:SQL> conn scott/tiger@orcl

            字元串分解

                使用者名scott

                密碼為tiger

                "/"    用于分割使用者與密碼

                "@"   訓示網絡連接配接所需的使用者程序

                orcl  連接配接辨別符

        連接配接辨別符(connect identifier)

            @後面的即為連接配接辨別符,如上例中的orcl。

            連接配接辨別符的名字是一個映射到連接配接描述符的簡化

            連接配接辨別符可以為網絡服務名/别名、資料庫服務名等

(net service name, database service name, or net service alias.)

        連接配接描述符(connect discriptor)

            使用一種特殊格式來描述連接配接的具體資訊,資訊包含了、資料庫所在的位置(IP位址)、

服務名、端口号等

            如tnsnames中的:

            orcl =  --網絡服務名,資料庫别名,等同于連接配接辨別符(屏蔽用戶端如何連接配接到伺服器端的細節)

              (DESCRIPTION =           

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

--IP位址,端口号,協定

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = orcl.robinson.com)  --服務名

              )

            以上所有DESCRIPTION内的資訊即為連接配接描述資訊

            描述符之上等于号左邊的可以為網絡服務名,網絡服務别名等,此等同于連接配接辨別符。

        服務名(service_name)

用戶端連接配接到執行個體的服務名,可以為該參數指定一個或多個服務名。該參數從9i引入,service_name通常可以使用SID代替。

9i之後,Oracle推薦使用service_name而不是SID。可以通過定義多不不同的服務名來區分不同的使用者連接配接,該參數預設的格式為db_name.domain_name。

執行個體将所定義的服務名注冊到偵聽器,當用戶端請求服務時,偵聽器根據服務名決定将使用哪個執行個體提供所請求的服務并與之建立連接配接

            基于相同的資料庫可以定義多不不同的服務名來區分不同的使用情況

            如定義service_name為

                service_names = sales.robinson.com,hr.robinsn.com

            則sales部門通過sales服務名來建立連接配接,hr部門通過hr服務名來建立連接配接,

而無須關心連接配接的是哪一個資料庫。

        示範連接配接過程(非本地連接配接)

            環境:伺服器為RHEL 5 + Oracle 10g ,用戶端Winxp + 10g Client

            檢視伺服器listener是否啟動

            [oracle@robinson admin]$ lsnrctl   --啟動lsnrctl 偵聽器程式

            LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 13:31:06

            Copyright (c) 1991, 2005, Oracle.  All rights reserved.

            Welcome to LSNRCTL, type "help" for information.

            LSNRCTL> status      --檢視偵聽器狀态,偵聽器沒有啟動

            Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

            TNS-12541: TNS:no listener

             TNS-12560: TNS:protocol adapter error

              TNS-00511: No listener

               Linux Error: 111: Connection refused

            --啟動預設的偵聽器

            --在下面列出的資訊中沒有偵聽器的路徑及listener.ora檔案,此處listener.ora 不存在

            LSNRCTL> start    

            Starting /u01/app/oracle/10g/bin/tnslsnr: please wait...

            TNSLSNR for Linux: Version 10.2.0.1.0 - Production

            Log messages written to /u01/app/oracle/10g/network/log/listener.log

            Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

            STATUS of the LISTENER

            ------------------------

            Alias                     LISTENER

            Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

            Start Date                03-SEP-2010 13:31:14

            Uptime                    0 days 0 hr. 0 min. 0 sec

            Trace Level               off

            Security                  ON: Local OS Authentication

            SNMP                      OFF

            Listener Log File         /u01/app/oracle/10g/network/log/listener.log

            Listening Endpoints Summary...

              (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

            The listener supports no services

            The command completed successfully

            LSNRCTL> service  --已經看到了已注冊的執行個體資訊,因為10g支援動态注冊

            Services Summary...

            Service "orcl.robinson.com" has 1 instance(s).

              Instance "orcl", status READY, has 1 handler(s) for this service...

                Handler(s):

                  "DEDICATED" established:0 refused:0 state:ready

                     LOCAL SERVER

            Service "orclXDB.robinson.com" has 1 instance(s).

                  "D000" established:0 refused:0 current:0 max:1022 state:ready

                     DISPATCHER <machine: robinson, pid: 3246>

                     (ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=51473))

            Service "orcl_XPT.robinson.com" has 1 instance(s).

                Handler(s):

            The command completed successfully 

            --檢視用戶端tnsnames.ora的資訊

            C:/>type F:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora

            # tnsnames.ora Network Configuration File: F:/oracle/product/10.2.0/client_1/NET

            WORK/ADMIN/tnsnames.ora

            # Generated by Oracle configuration tools.

            orcl =

              (DESCRIPTION =

                (CONNECT_DATA =

                  (SERVICE_NAME = orcl.robinson.com)

            C:/>sqlplus /nolog

            SQL*Plus: Release 10.2.0.1.0 - Production on 星期五9月3 13:42:02 2010

            Copyright (c) 1982, 2005, Oracle.  All rights reserved.

            SQL> conn scott/tiger@orcl

            Connected.

            --将tnsnames.ora中服務别名改為oral後再連接配接,可以正常連接配接,即網絡服務名可以随便取。

            SQL> conn system/redhat@oral

            --檢視資料庫中的服務名         

            SQL> show parameter service_names;

            NAME                                 TYPE        VALUE

            ------------------------------------ ----------- --------------------------

            service_names                        string      orcl.robinson.com

三、服務注冊與名稱解析         

    服務注冊(service registration)

        執行個體将資料庫将所提供的服務名及相關資訊告知listener的過程稱之為服務注冊

        注冊通常包含下列資訊

            資料庫的服務名

            執行個體名

            可用的服務處理程式(service handlers),用于排程(共享模式)和派生子程式(專用模式)

            端口号等

        注冊方法

            靜态注冊: 指将執行個體的相關資訊手動告知listener偵聽器,可以使用netmgr,netca,oem以及直接vi listener.ora檔案來實作

                --下面是通過netmgr配置後産生的listener.ora檔案的内容

                [oracle@robinson ~]$ cat $ORACLE_HOME/network/admin/listener.ora

                # listener.ora Network Configuration File: /u01/app/oracle/10g/network/admin/listener.ora

                # Generated by Oracle configuration tools.

                SID_LIST_LISTENER =       -->這裡定義LISTENER程序提供的資料庫服務清單

                  (SID_LIST =

                    (SID_DESC =

                      (GLOBAL_DBNAME = orcl.robinson.com)

                      (ORACLE_HOME = /u01/app/oracle/10g)

                      (SID_NAME = ORCL)

                    )

                  )

                LISTENER =               -->監聽器的名字,一台資料庫可以有多個監聽器

                  (DESCRIPTION =

                    (ADDRESS = (PROTOCOL = TCP)(HOST = robinson)(PORT = 1521))

動态注冊:執行個體在啟動時使用PMON程序自動将instance_name和service_names等資訊注冊到已啟動的預設偵聽器listener.ora,在9i之後,不需要任何配置即可實作動态注冊.執行個體啟動後會自動在本地主機預設的号端口上查找偵聽器,并在查找到時進行注冊

                可以在執行個體啟動後的任何時間段執行下面指令實作重新注冊

                    alter system register;

                    如果偵聽器在非預設端口上運作,可以通過設定local_listener參數來制定偵聽器所在的位置并手動進行注冊

                    SQL> alter system set local_listener = 'list2';

                    SQL> alter system register;

                建議配置兩個參數保證成功注冊:service_names,instance_name

                    service_names預設為global database name

                    alter system set service_names = 'testdb.robinson.com' scope =spfile;

                    alter system set instance_name = 'testdb' scope = spfile;

                --下面啟動預設的偵聽器來實作動态注冊

                [oracle@robinson ~]$ lsnrctl start

                LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 16:30:04

                Copyright (c) 1991, 2005, Oracle.  All rights reserved.

                Starting /u01/app/oracle/10g/bin/tnslsnr: please wait...

                TNSLSNR for Linux: Version 10.2.0.1.0 - Production

                System parameter file is /u01/app/oracle/10g/network/admin/listener.ora

                Log messages written to /u01/app/oracle/10g/network/log/listener.log

                Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

                Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robinson)(PORT=1521)))

                STATUS of the LISTENER

                -----------------------------部分資訊省略---------------------------------------

                Listener Parameter File   /u01/app/oracle/10g/network/admin/listener.ora

                Listener Log File         /u01/app/oracle/10g/network/log/listener.log

                Listening Endpoints Summary...

                  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

                Services Summary...

                Service "orcl.robinson.com" has 1 instance(s).

--啟動了orcl.robinson.com服務且為靜态注冊

                  Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

                The command completed successfully

                [oracle@robinson ~]$ export ORACLE_SID=testdb  --設定ORACLE_SID并啟動testdb

                [oracle@robinson ~]$ sqlplus /nolog

                SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 3 16:33:00 2010

                Copyright (c) 1982, 2005, Oracle.  All rights reserved.

                SQL> conn / as sysdba

                Connected to an idle instance.

                SQL> startup

                ORACLE instance started.

                Total System Global Area  469762048 bytes

                Fixed Size                  1220048 bytes

                Variable Size             138412592 bytes

                Database Buffers          327155712 bytes

                Redo Buffers                2973696 bytes

                Database mounted.

                Database opened.

                SQL> ho lsnrctl status     --再次檢視偵聽器的狀态

                                           --可以看到testdb已經被動态注冊

                LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 16:34:06

                Service "orcl.robinson.com" has 2 instance(s).

                Service "orclXDB.robinson.com" has 1 instance(s).

                Service "orcl_XPT.robinson.com" has 1 instance(s).

                Service "testdb" has 1 instance(s).    --下面是和testdb相關的服務名,執行個體名

                  Instance "testdb", status READY, has 1 handler(s) for this service...

                Service "testdb.robinson.com" has 1 instance(s).

                Service "testdbXDB" has 1 instance(s).

                Service "testdb_XPT" has 1 instance(s).

                The command completed successfully             

                SQL> conn scott/[email protected]/testdb.robinson.com                                     Connected.  --動态注冊testdb,Win用戶端可以正常連接配接

                SQL> conn system/redhat@orcl         --原來靜态注冊的orcl也可以正常連接配接

                Connected.

                --注意服務名中有些狀态為UNKNOWN,有些為READY

                --對于動态注冊的服務名,因為監聽器知道執行個體的狀态,是以正常狀态通常顯示為READY。

                --對于靜态注冊的服務名,通常顯示為UNKNOWN。

        當用戶端的請求到達listener時,listener選擇一個合适的service handler為之服務。

之後listener就不再參與相關處理。

        對于受限模式的執行個體,PMON阻塞所有到執行個體的連接配接。當用戶端嘗試連接配接将收到如下錯誤資訊:

            ORA-12526:TNS:listener: all appropriate instances are in restricted mode

            ORA-12527: TNS:listener: all appropriate instances are in restricted mode or blocking new connections

            C:/Documents and Settings/Robinson Cheng>sqlplus scott/tiger@orcl

            SQL*Plus: Release 10.2.0.1.0 - Production on 星期三9月1 17:14:41 2010

            ERROR:

            ORA-12526: TNS:listener: all appropriate instances are in restricted mode

        動态注冊時的幾個常用參數以及需要$ORACLE_HOME目錄

            SQL> select name,value,isdefault from v$parameter

              2  where name in ('instance_name','db_domain','service_names');

            NAME                      VALUE                          ISDEFAULT

            ------------------------- ------------------------------ ---------

            db_domain                 robinson.com                   FALSE

            instance_name             orcl                           FALSE

            service_names             orcl.robinson.com              FALSE

    名稱解析方式(Naming Method)

        用于用戶端連接配接到資料庫服務時如何解析連接配接字元串。連接配接字元串形式:c:/sqlplus scott/tiger@orcl

        常用的字元串解析方法

            Easy connect

                預設的連接配接方式為Easy connect ,僅僅限制于使用TCP協定,不支援負載均衡

                不支援connect-time failover、source routing、load balancing

                SQL> connect username/password@host[:port][/service_name]

                C:/>sqlplus scott/[email protected]:1521/orcl

            Local naming(本地名稱解析)

                使用本地配置檔案tnsnames.ora

                支援所有的Oracle Net 協定

                支援進階連接配接選項:connect-time failover、source routing、load balancing

                在伺服器端預設路徑為$ORACLE_HOME/network/admin

                tnsnames.ora可以使用TNS_ADMIN環境變量設定到任意位置

            Directory naming(目錄名稱解析)

                目錄名稱解析技術使得解析實作集中化管理,使用者會被指向一個解析别名的LDAP目錄伺服器

                支援所有的Oracle Net協定及進階選項

            External Naming Method(外部名稱解析方式)

                第三方名稱解析方法如SUN的NIS等。

四、常用的配置檔案

    ldqp.ora         -->用于配置LDAP目錄名稱解析

    cman.ora         -->用于配置Oracle 連接配接管理參數

    tnsnames.ora     -->用于配置本地用戶端或遠端用戶端的本地名稱解析

    listener.ora     -->用于配置偵聽器的相關注冊資訊

    sqlnet.ora       -->用于配置伺服器或用戶端所支援的解析方式

    netmgr(Net Manager)中的幾個配置子產品

        Profile 分支       -->對應于sqlnet.ora檔案,可以設定用戶端和伺服器端同時應用的Oracle選項

        Sevice Naming 分支 -->用于配置用戶端的名稱解析,對應于tnsnames.ora檔案

        Listener 分支      -->用于配置伺服器端的資料庫偵聽器,對應于listener.ora檔案

五、偵聽器配置程式(lsnrctl) 及TNSPING指令  

    [oracle@robinson admin]$ lsnrctl

    LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 21:30:52

    Copyright (c) 1991, 2005, Oracle.  All rights reserved.

    Welcome to LSNRCTL, type "help" for information.

    LSNRCTL> help   --使用help 檢視lsnrctl 的擴充指令

    The following operations are available

    An asterisk (*) denotes a modifier or extended command:

    start               stop                status    -->停止、啟動、檢視狀态等(常用)         

    services            version             reload             

    save_config         trace               spawn              

    change_password     quit                exit                

    set*                show*                  

    lsnrctl指令用法

        LSNRCTL> command [listener_name]

    lsnrctl指令示範參照前面例子中的使用

    tnsping指令用于測試網絡的可聯通性

        C:/>tnsping orcl

        TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-9月-

        2010 21:52:45

        Copyright (c) 1997, 2005, Oracle.  All rights reserved.

        Used parameter files:

        F:/oracle/product/10.2.0/client_1/network/admin/sqlnet.ora

        Used TNSNAMES adapter to resolve the alias

        Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

        (HOST = 192.168.1.128)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl.robin

        son.com)))

        OK (0 msec)

六、總結       

    1.用戶端連接配接時的五個重要參數:使用者名、密碼、IP位址、端口号、服務名

    2.從用戶端成功連接配接到資料庫伺服器

        用戶端要求

            需要安裝适當的用戶端軟體(Oracle Client)

            正确配置sqlnet.ora  

                NAMES.DIRECTORY_PATH = (TNSNAMES,EZCONNECT ….)      

                NAMES.DEFAULT_DOMAIN=robinson.com

--表示用戶端在請求連接配接時将設定的預設值追加網絡服務名(net_service_name)之後

                    --如果db_domain為robinson.com,使用scott/tiger@orcl連接配接,則等同于使用[email protected]進行連接配接

            正确配置tnsnames.ora

        伺服器端要求

            listener已經啟動

            資料庫已經啟動

    3.手動配置listener.ora和tnsnames.ora

        配置tnsname.ora檔案:

            可用的配置工具

                oracle Net Configuration Assistant(GUI)       -->實際上修改tnsnames.ora檔案

                oracle Net Manager(GUI)                       -->實際上修改tnsnames.ora檔案

        給出下面的示例:

            orcl =                                           -->網絡服務别名,可以修改,對應于連接配接辨別符

            紅色的内容為根據實際需要進行修改的内容,現描述如下:

            PROTOCOL:用戶端與伺服器端通訊的協定,一般為TCP,該内容一般不用改。

HOST:資料庫偵聽所在的主機的主機機名或IP位址,通常資料庫偵聽與資料庫位于同一個機器上。建議使用IP位址。在UNIX或WINDOWS下可以使用hostname來獲得主機的機器名或使用ifconfig(UNIX)、ipconfgi(Windows)來獲得主機的IP位址。

            PORT:資料庫偵聽使用的端口,預設為,可以檢視伺服器端的listener.ora檔案獲得端口号

                  或在資料庫伺服器指令提示符下使用nsrctl status [listener name]指令檢視獲得端口号。

                  此處Port的值一定要與資料庫偵聽正在偵聽的端口一樣。

            SERVICE_NAME:在伺服器端,使用sqlplus> show parameter service_name指令檢視。

            上述配置時應保證客戶機能夠ping通伺服器,之後可以使用

tnsping orcl(網絡服務名)來測試網絡的聯通情況

                SQL> conn scott/tiger@orcl

            使用上面的連接配接方式進行連接配接時,則連接配接辨別符orcl被解釋為tnsnames.ora中orcl對應

的描述資訊,根據描述資訊來解析連接配接伺服器

        配置listener.ora  -->同樣可以使用tnsnames.ora配置時所使用的GUI工具來完成

            給出下面的示例System parameter file is /u01/app/oracle/10g/network/admin/listener.ora

            LISTENER =

                (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

              )   --LISTENER部分描述了主機位址、端口及協定

            SID_LIST_LISTENER =

              (SID_LIST =

                (SID_DESC =

                  (GLOBAL_DBNAME = orcl1)

                  (ORACLE_HOME = /u01/app/oracle/10g)

                  (SID_NAME = ORCL)

                  (GLOBAL_DBNAME = orcl2)

            a. LISTENER部分描述了主機位址、端口及協定

            b. SID_LIST_LISTENER描述對外提供資料庫服務的清單

               兩個SID_DESC是對同一個SID資料庫設定的兩個service_names所設定的監聽服務

            啟動該Listener後的資訊如下

                Service "orcl1" has 1 instance(s).

                Service "orcl2" has 1 instance(s).

            配置用戶端的tnsnames.ora如下

                orcl1 =

                    (ADDRESS_LIST =

                      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                    (CONNECT_DATA =

                      (SERVICE_NAME = orcl1)

                    )

                orcl2 =

                      (SERVICE_NAME = orcl2)

            從用戶端進行連接配接     

                C:/>sqlplus /nolog

                SQL*Plus: Release 10.2.0.1.0 - Production on 星期六9月4 09:47:22 2010

                SQL> conn scott/tiger@orcl1

                SQL> conn scott/tiger@orcl2

                Connected.     

            注意:

                筆者首次連接配接時收到如下錯誤提示,将listener.ora中的SID_NAME的值改為小寫,即orcl,問題解決

                是以盡可能的統一大小寫。

                    SQL> conn scott/tiger@orcl1;    --下面是未統一大小寫時的錯誤提示

                    ERROR:

                    ORA-01034: ORACLE not available

                    ORA-27101: shared memory realm does not exis

                    Linux Error: 2: No such file or directory

    4.關于GLOBAL_DBNAME

        下面是GLOBAL_DBNAME的官方描述

            GLOBAL_DBNAME

                Purpose        

    Use the parameter GLOBAL_DBNAME to identify the database service.

                While processing a client connection request, the listener tries to match the value of

                this parameter with the value of the SERVICE_NAME parameter in the client connect

                descriptor. If the client connect descriptor uses the SID parameter, then the listener

                does not attempt to map the values. This parameter is primarily intended for

                configurations with Oracle8 release 8.0 or Oracle7 databases (where dynamic service

                registration is not supported for dedicated servers). This parameter may also be

                required for use with Oracle9i and Oracle8 database services by some configurations

                and management tools.

                The value for this parameter is typically obtained from the combination of the DB_

                NAME and DB_DOMAIN parameters (DB_NAME.DB_DOMAIN) in the initialization

                parameter file, but the value can also contain any valid name used by clients to

                identify the service.

                Embed this parameter under the SID_DESC parameter.

        大緻意思如下:

            當用戶端發出連接配接請求時,監聽器首先使用用戶端連接配接描述符中的SERVICE_NAME相比對。

            如果用戶端連接配接描述符中使用的是SID,則不再嘗試比對該值,而是對監聽器中設定的SID_NAME進行比對

            該參數的值主要從初始化參數檔案中的db_name和db_domian中組合得到。

        示範GOLBAL_DBNAME使用

            假定伺服器listener.ora配置如下:

                SID_LIST_LISTENER =

                      (SID_NAME = orcl)

                  )

                LISTENER =

                    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

            用戶端的tnsnames.ora配置如下:

                orcl =

                      (SERVICE_NAME = orcl.robinson.com)

            且spfileorcl中db_domain為空值

                [oracle@robinson ~]$ strings $ORACLE_HOME/dbs/spfileorcl.ora | grep db_domain

                *.db_domain=''

            資料庫中的相關設定為空值

                SQL> col name format a20

                SQL> col value format a35

                SQL> select name,value,isdefault from v$parameter

                  2  where name in ('instance_name','db_domain','service_names');

                NAME                 VALUE                               ISDEFAULT

                -------------------- ----------------------------------- ---------

                db_domain                                                FALSE

                instance_name                                            FALSE

                service_names                                            FALSE 

            能夠成功連接配接

                SQL> conn system/redhat@orcl

            ------------------------------------------------------------------------------------------

            修改用戶端tnsnames.ora中的service_name項

                即去掉SERVICE_NAME = orcl.robinson.com這項内容且添加為SID = ORCL

            修改後的内容如下:

                ORCL =

                      (SID = ORCL)

            SQL> conn scott/tiger@orcl   --能夠成功連接配接

        關于GOLBAL_DBNAME總結:

當用戶端使用的是SID連接配接參數,則比對偵聽器配置檔案中的SID_NAME項    (主要用于相容以前的老版本,8i或更早版本)

否則當使用的是SERVICE_NAME,則比對偵聽器配置檔案中的SERVICE_NAME項 (現在多用SERVICE_NAME項)

七、更多   

<a href="http://blog.csdn.net/robinson_0612/archive/2010/08/05/5791597.aspx">Oracle 冷備份</a>

<a href="http://blog.csdn.net/robinson_0612/archive/2010/07/29/5774795.aspx">SPFILE錯誤導緻資料庫無法啟動</a>

<a href="http://blog.csdn.net/robinson_0612/archive/2010/06/23/5688875.aspx">Oracle 使用者、對象權限、系統權限</a>

<a href="http://blog.csdn.net/robinson_0612/archive/2010/06/23/5688997.aspx">Oracle 角色、配置檔案</a>

<a href="http://blog.csdn.net/robinson_0612/archive/2010/08/03/5784713.aspx">Oracle 歸檔日志</a>