配置ORACLE 客戶端連線到資料庫
--轉載於:http://blog.csdn.net/leshami/article/details/5917103
-=================================
-- 配置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)))
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(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支援動態註冊
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
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).
Instance "orcl", status READY, has 1 handler(s) for this service...
Handler(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).
Instance "orcl", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
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 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(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
Connected.
--檢視資料庫中的服務名
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
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robinson)(PORT=1521)))
STATUS of the LISTENER
-----------------------------部分資訊省略---------------------------------------
Services Summary...
Service "orcl.robinson.com" has 2 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
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).
Instance "testdb", status READY, has 1 handler(s) for this service...
Service "testdbXDB" has 1 instance(s).
Instance "testdb", status READY, has 1 handler(s) for this service...
Service "testdb_XPT" has 1 instance(s).
Instance "testdb", status READY, has 1 handler(s) for this service...
The command completed successfully
SQL> conn scott/tiger@192.168.1.128/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
Copyright (c) 1982, 2005, Oracle. All rights reserved.
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/tiger@192.168.192.128: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 ….)
SQLNET.AUTHENTICATION_SERVICES = (NTS) 關於認證方式,請參考:Oracle 密碼檔案
NAMES.DEFAULT_DOMAIN=robinson.com
--表示客戶端在請求連線時將設定的預設值追加網路服務名(net_service_name)之後
--如果db_domain為robinson.com,使用scott/tiger@orcl連線,則等同於使用scott@orcl.robinson.com進行連線
正確配置tnsnames.ora
伺服器端要求
listener已經啟動
資料庫已經啟動
3.手動配置listener.ora和tnsnames.ora
配置tnsname.ora檔案:
可用的配置工具
oracle Net Configuration Assistant(GUI) -->實際上修改tnsnames.ora檔案
oracle Net Manager(GUI) -->實際上修改tnsnames.ora檔案
給出下面的示例:
orcl = -->網路服務別名,可以修改,對應於連線識別符號
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.robinson.com)
)
)
紅色的內容為根據實際需要進行修改的內容,現描述如下:
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
Connected.
使用上面的連線方式進行連線時,則連線識別符號orcl被解釋為tnsnames.ora中orcl對應
的描述資訊,根據描述資訊來解析連線伺服器
配置listener.ora -->同樣可以使用tnsnames.ora配置時所使用的GUI工具來完成
給出下面的示例System parameter file is /u01/app/oracle/10g/network/admin/listener.ora
LISTENER =
(DESCRIPTION =
(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)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl2)
(ORACLE_HOME = /u01/app/oracle/10g)
(SID_NAME = ORCL)
)
)
a. LISTENER部分描述了主機地址、埠及協議
b. SID_LIST_LISTENER描述對外提供資料庫服務的列表
兩個SID_DESC是對同一個SID資料庫設定的兩個service_names所設定的監聽服務
啟動該Listener後的資訊如下
Services Summary...
Service "orcl1" has 1 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl2" has 1 instance(s).
Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
配置客戶端的tnsnames.ora如下
orcl1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl1)
)
)
orcl2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl2)
)
)
從客戶端進行連線
C:/>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六9月4 09:47:22 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn scott/tiger@orcl1
Connected.
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_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.robinson.com)
(ORACLE_HOME = /u01/app/oracle/10g)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
客戶端的tnsnames.ora配置如下:
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(CONNECT_DATA =
(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
Connected.
------------------------------------------------------------------------------------------
修改客戶端tnsnames.ora中的service_name項
即去掉SERVICE_NAME = orcl.robinson.com這項內容且新增為SID = ORCL
修改後的內容如下:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORCL)
)
)
SQL> conn scott/tiger@orcl --能夠成功連線
Connected.
關於GOLBAL_DBNAME總結:
當客戶端使用的是SID連線引數,則匹配偵聽器配置檔案中的SID_NAME項 (主要用於相容以前的老版本,8i或更早版本)
否則當使用的是SERVICE_NAME,則匹配偵聽器配置檔案中的SERVICE_NAME項 (現在多用SERVICE_NAME項)
七、更多
Oracle 聯機重做日誌檔案(ONLINE LOG FILE)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1084637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何配置oracle客戶端連線10g rac 資料庫Oracle客戶端資料庫
- PL/SQL developer 遠端連線資料庫 客戶端配置SQLDeveloper資料庫客戶端
- 客戶端連線資料庫的方法客戶端資料庫
- oracle 客戶端如何連線到oracle 11gR2資料庫(DNS SCAN IP)Oracle客戶端資料庫DNS
- 顯示連線Oracle資料庫的客戶端IP地址Oracle資料庫客戶端
- ORACLE 配置連線遠端資料庫Oracle資料庫
- 客戶端連不上資料庫客戶端資料庫
- 客戶端無法連線資料庫的小問題客戶端資料庫
- impala客戶端連線客戶端
- Redis客戶端連線Redis客戶端
- Oracle客戶端連線伺服器教程Oracle客戶端伺服器
- 客戶端怎麼連線到伺服器?客戶端伺服器
- PLSQL連線oracle資料庫配置SQLOracle資料庫
- DB2___安裝db2客戶端並連線到db2資料庫DB2客戶端資料庫
- 2 Day DBA-使用基於SQL的管理工具管理資料庫-從客戶端計算機連線到Oracle資料庫SQL資料庫客戶端計算機Oracle
- PLSQL Developer 客戶端沒有TNS監聽,無法連線資料庫SQLDeveloper客戶端資料庫
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- 配置TimesTen客戶端連線[TimesTen運維]客戶端運維
- RAC資料庫連線配置,tnsnames和client端配置資料庫client
- 客戶端連不上資料庫,如何來排錯客戶端資料庫
- 解決Oracle 11gR2 RAC 無法在客戶端通過scanIP連線資料庫Oracle客戶端資料庫
- 解決oracle 客戶端混亂造成OBIEE Client Administration不能連線資料庫問題Oracle客戶端client資料庫
- 關於go和資料庫連線,客戶端以及驅動的疑問?Go資料庫客戶端
- 客戶端段建立到伺服器端的連線過程客戶端伺服器
- mysql、redis 客戶端連線池MySqlRedis客戶端
- vncserver建立與客戶端連線VNCServer客戶端
- 使用 Java 客戶端透過 HTTPS 連線到 EasysearchJava客戶端HTTP
- Ubuntu 16.04下安裝資料庫Oracle客戶端Ubuntu資料庫Oracle客戶端
- oracle客戶端連線server 端, tnsnames的三種設定方式Oracle客戶端Server
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- Oracle 11g連線遠端資料庫Oracle資料庫
- 配置SQLNET.ORA檔案跟蹤客戶端連線SQL客戶端
- 遠端客戶端連線資料庫時提示TNS-12541: TNS: 無監聽程式客戶端資料庫
- Redis客戶端連線數DevOpsRedis客戶端dev
- 從客戶端連線ASM例項客戶端ASM
- 配置安裝版Oracle客戶端Oracle客戶端
- Asp.Net 連線Oracle資料庫 出現"找到 Oracle 客戶端和網路元件" 徹底解決方法! (轉)ASP.NETOracle資料庫客戶端元件
- 解決Oracle 11g R2 RAC 無法在客戶端通過scanIP連線資料庫Oracle客戶端資料庫