程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle學習筆記—配置監聽

Oracle學習筆記—配置監聽

編輯:Oracle數據庫基礎
 

從來沒有想過,我又要回過頭來重新撿起Oracle。還記得那是大學的時候,非常羨慕我的Oracle數據庫老師,各種問題都能搞定,以至於在大學的時候,學習Oracle記了N多的筆記,各種學習心得,不過那個時候傻得不知道寫博客,到今天總結的筆記也不知道去哪裡了。

從大城市回到了家鄉小城市,大城市互聯網公司幾乎沒有用Oracle這種東西的,基本都是MySQL等,而回家以後,這裡幾乎沒有互聯網公司,都是傳統的IT企業,用的都是Oracle數據庫,如我現在的東家。

重新撿起Oracle,真的是感慨萬千,幾分熟悉,又是幾分陌生。知識就是在你一段時間不用以後,就會慢慢的變的陌生起來。以至於今天再看Oracle,僅僅是似曾相識。從這篇文章起,就開始我學習Oracle的漫長之旅。希望有搞Oracle的朋友一起作伴,一同交流。

我遇到的問題

搞Oracle,第一件事就是客戶端連接網絡上的Oracle數據庫。一般我們用的客戶端都是 PL/SQL Developer。現在問題來了,我安裝完PL/SQL Developer以後,死活就是連不上。好吧,我承認,不Google,我搞不定。根據對應的錯誤提示,Google之後,就有了這篇文章。

監聽是什麼?

如果你做過網絡開發,對於監聽listen就比較熟悉了,監聽是什麼,在網絡開發中,就是監聽某個端口,等待客戶端的連接。同理,在Oracle中,監聽的意思也和這差不多。

在Oracle數據庫服務器中,通過一個叫“監聽器”的組件接收來自客戶端的連接請求,它是客戶端和 服務器端中間的橋梁。監聽器雖然在Oracle服務器端,但是它和Oracle主進程並不綁定,它是一個獨立運行在服務器端的後台進程,獨立於數據庫運行。它負責對客戶端傳入的連接請求進行監聽,並且對服務器端的連接負荷進行調整。當客戶端准備建立一個到服務器端的連接時,監聽器接收客戶端的連接請求, 然後再將這個客戶端連接請求交給服務器進行處理,一旦客戶端和服務器建立連接,客戶端和服務器以後就直接進行通信,而不再需要監聽器的參與,這就好比師傅 領進門,修行靠個人。就如下圖所示:

監聽器

  1. 客戶端向服務器端發出連接請求,監聽器監聽到客戶端的連接請求;
  2. 監聽器把客戶端的連接請求交給數據庫服務器進行處理;
  3. 經過監聽器建立連接以後,客戶端與服務器端就可以直接進行通信,而不再需要監聽器的參與了。

以上就是監聽器干的活,也就是說,你對數據庫服務器的第一次,肯定會給監聽器,如果監聽器沒有配好,你就甭想連數據庫了。那麼,怎麼才能配好監聽器呢?

listener.ora、sqlnet.ora和tnsnames.ora文件

說到配監聽器,就不得不先來說說listener.ora、sqlnet.ora和tnsnames.ora這三個文件,這三個文件別看後綴名是ora,其實就是一文本文件,可以使用記事本打開看看。

  • listener.ora文件
    打開listener.ora文件看看,貼上一部分有代表性的內容。

     #這是一個名為LISTENER1的監聽器#監聽的協議是TCP協議#監聽的主機IP是127.0.0.1#監聽的端口是1521端口
    LISTENER1 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))#記錄了監聽器LISTENER1服務的全局數據庫名、數據庫路徑和數據庫實例名
    SID_LIST_LISTENER1 =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
    (SID_NAME = ORCL)
    )
    )
     

    只有我們在服務器端配置好了監聽,客戶端才有可能連上數據庫服務器,至於客戶端是如何連數據庫服務器的,稍後再講。

  • sqlnet.ora文件
    打開sqlnet.ora文件看看,內容如下:

     SQLNET.AUTHENTICATION_SERVICES= (NTS)
    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
     

    這個sqlnet.ora文件實際上就是一個配置文件,主要是和接下來說的tnsnames.ora配合使用。關於sqlnet.ora的具體作用,請參見這篇《Oracle學習筆記——詳解sqlnet.ora的作用》。

  • tnsnames.ora文件
    tnsnames.ora文件存放於客戶端機器上,和sqlnet.ora文件配合使用。可以簡單的看看tnsnames.ora文件中的內容。

    #ORCL是個別名#這條信息記錄了我們使用TCP協議,去連接IP地址為127.0.0.1,端口號為1521的數據庫主機上服務名為orcl的數據庫
    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = orcl)
    )
    )
     

    以後,我們還會配置更多的數據庫連接信息,比如我要連接192.168.10.2主機上的數據庫,我們只需要在tnsnames.ora中繼續追加新的連接信息即可,比如:

  • STDB =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.2)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = stdb)
    )
    )
     

    看到這裡,你可能覺的你已經明白了tnsnames.ora文件的作用了,推薦你繼續閱讀以下這篇《Oracle學習筆記——詳解sqlnet.ora的作用》,更好的理解sqlnet.ora與tnsnames.ora文件是如何搭配工作的。

服務器端配置

好了,配置監聽主要就是配置listener.ora、sqlnet.ora和tnsnames.ora這三個文件,而在服務器端,只需要我們搞定listener.ora文件就可以了。

  • 我們可以直接使用Oracle自帶的配置工具——Net Manager來配置,作為一名Geeker,絕對不會去使用那麼難用的工具的,還是直接修改listener.ora來的快,來的省事,如果你非要使用Net Manager去配置,請去Google吧;
  • 直接編輯listener.ora,就像下面這樣,配置一個新的監聽器:
  • LISTENER =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))
  • SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME = ORCL)
    (ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
    (SID_NAME = ORCL)
    )
    )
    你想在哪個數據庫上配置一個新的監聽,就修改對應的內容即可。

上面也說了,監聽器是一個獨立的進程,那麼配置好了監聽,就需要啟動監聽程序,那麼如何啟動呢?請閱讀下面的【常用命令】一節。

客戶端配置

客戶端配置就更簡單了,在【listener.ora、sqlnet.ora和tnsnames.ora文件】一節中,介紹tnsnames.ora文件時,就進行了舉例說明,這裡就不再多說了。

解決我的問題

哦,說了這麼多了,該回到我的問題上來了,我就是連不上遠程的數據庫,歸根到底就是沒有在客戶端配置遠程數據庫信息,這個問題很簡單,但是如果你不懂得這中間的原理的話,你就不會了解這個問題的本質。

很多時候,一個問題就是很簡單,就是一個很簡單的知識點,今天多總結一點,就為明天少挖一個坑,或者就會幫別人多填一個坑。

常用命令

上面也說了,服務器配置完成以後,如何啟動監聽進程,查看監聽器的狀態,停止監聽進程呢?在工作中,我們會經常用到下面的一些命令:

  • 啟動監聽器
    lsnrctl start <監聽器的名字>// 啟動名為LISTENER的監聽器
    lsnrctl start LISTENER

    當我們不指定監聽器的名字時,就默認啟動LISTENER監聽器;

  • 關閉監聽器
    lsnrctl stop <監聽器的名字>// 關閉名為LISTENER的監聽器
    lsnrctl stop LISTENER

    當我們不指定監聽器的名字時,就默認關閉LISTENER監聽器;

  • 查看監聽器的狀態
    lsnrctl status <監聽器的名字>// 查看名為LISTENER的監聽器的運行狀態
    lsnrctl status LISTENER

    當我們不指定監聽器的名字時,就默認查看LISTENER監聽器的狀態。

現在服務器端的監聽進程已經啟動起來了,客戶端也已經配置好了,那麼如何進行連通性測試呢?

  1. 使用tnsping命令
    tnsping <客戶端配置的別名>// 判斷是否連通ORCL別名對應服務器上的數據庫
    tnsping ORCL
  2. 使用客戶端SQLPLUS連接數據庫
    打開SQLPLUS連接一下遠程數據庫,就可以進行測試;
  3. 使用PL/SQL Developer連接數據庫

總結

好了,總結完畢,一個小小的知識點,背後卻是隱藏著這麼多的內容。以謙虛的態度去學習每一個知識點。從這篇文章開始,開始Oracle學習的漫長之旅。有任何問題,請留言,希望和Oracle愛好者一起學習交流。

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