程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> 在Oracle網絡結構中解決連接問題

在Oracle網絡結構中解決連接問題

編輯:關於Oracle數據庫

  最近看到好多人說到tns或者數據庫不能登錄等問題,就索性總結了下面的文檔。

  首先來說Oracle的網絡結構,往復雜處說能加上加密、LDAP等等。。這裡不做討論,重點放在基本的網絡結構也就是我們最常用的這種情況

  三個配置文件

  listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME etworkadmin目錄下。

  重點:三個文件的作用和使用

  #-----------------------

  sqlnet.ora-----作用類似於linux或者其他unix的nsswitch.conf文件,通過這個文件來決定怎麼樣找一個連接中出現的連接字符串,

  例如我們客戶端輸入

  sqlplus sys/oracle@orcl

  假如我的sqlnet.ora是下面這個樣子

  SQLNET.AUTHENTICATION_SERVICES= (NTS)

  NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

  那麼,客戶端就會首先在tnsnames.ora文件中找orcl的記錄.如果沒有相應的記錄則嘗試把orcl當作一個主機名,通過網絡的途徑去解析它的ip地址然後去連接這個ip上GLOBAL_DBNAME=orcl這個實例,當然我這裡orcl並不是一個主機名

  如果我是這個樣子

  NAMES.DIRECTORY_PATH= (TNSNAMES)

  那麼客戶端就只會從tnsnames.ora查找orcl的記錄

  括號中還有其他選項,如LDAP等並不常用。

  #------------------------

  Tnsnames.ora------這個文件類似於unix 的hosts文件,提供的tnsname到主機名或者ip的對應,只有當sqlnet.ora中類似

  NAMES.DIRECTORY_PATH= (TNSNAMES) 這樣,也就是客戶端解析連接字符串的順序中有TNSNAMES是,才會嘗試使用這個文件。

  例子中有兩個,ORCL 對應的本機,SALES對應的另外一個IP地址,裡邊還定義了使用主用服務器還是共享服務器模式進行連接,一句一句說

  #你所要連接的時候輸入得TNSNAME

  ORCL =

  (DESCRIPTION =

  (ADDRESS_LIST =

  #下面是這個TNSNAME對應的主機,端口,協議

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

  )

  (CONNECT_DATA =

  #使用專用服務器模式去連接需要跟服務器的模式匹配,如果沒有就根據服務器的模式

  #自動調節

  (SERVER = DEDICATED)

  #對應service_name,SQLPLUS>show parameter service_name;

  #進行查看

  (SERVICE_NAME = orcl)

  )

  )

  #下面這個類似

  SALES =

  (DESCRIPTION =

  (ADDRESS_LIST =

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

  )

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = sales)

  )

  )

  #----------------------

  客戶端完了我們來看服務器端

  listener.ora------listener監聽器進程的配置文件

  關於listener進程就不多說了,接受遠程對數據庫的接入申請並轉交給oracle的服務器進程。所以如果不是使用的遠程的連接,listener進程就不是必需的,同樣的如果關閉listener進程並不會影響已經存在的數據庫連接。

  Listener.ora文件的例子

  #listener.ora Network Configuration File: #E:oracleproduct10.1.0Db_2NETWORKADMINlistener.ora

  # Generated by Oracle configuration tools.

  #下面定義LISTENER進程為哪個實例提供服務

  #這裡是ORCL,並且它對應的ORACLE_HOME和GLOBAL_DBNAME

  #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做數據庫連接

  SID_LIST_LISTENER =

  (SID_LIST =

  (SID_DESC =

  (GLOBAL_DBNAME = boway)

  (ORACLE_HOME = E:oracleproduct10.1.0Db_2)

  (SID_NAME = ORCL)

  )

  )

  #監聽器的名字,一台數據庫可以有不止一個監聽器

  #再向下面是監聽器監聽的協議,ip,端口等,這裡使用的tcp1521端口,並且使#用的是主機名

  LISTENER =

  (DESCRIPTION =

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

  )

  上面的例子是一個最簡單的例子,但也是最普遍的。一個listener進程為一個instance(SID)提供服務。

  監聽器的操作命令

  $ORACLE_HOME/bin/lsnrctl start,其他諸如stop,status等。具體敲完一個lsnrctl後看幫助。

  上面說到的三個文件都可以通過圖形的配置工具來完成配置

  $ORACLE_HOME/netca 向導形式的

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved