1. 程式人生 > >ORACLE安裝後配置PLSQL

ORACLE安裝後配置PLSQL

本人在使用oracle的時候,常常發現plsql連不上oracle的時候。有的本機不能連,有的遠端不能連,時常捉摸不透問題到底出在哪兒,一會兒例項名,一會兒服務名,一會兒說缺少監聽,一會說解析不了服務,又有時候發現ip能連,localhost不能連,問題頗多。這幾天弄了幾臺虛擬機器專門安裝oracle,瞭解了一些皮毛,記錄下來。

本人主要論述ORACLE後,如何配置實現PLSQL訪問的問題。

一 基本說明

1 作業系統是win7。

2 oracle是11g2R。

3 plsql是免安裝版本,內含簡約版oracle客戶端instantclient。

4 需要安裝的是oracle資料庫,oracle客戶端和plsql都不需要安裝。

二 基本配置

1 我們安裝好oracle以後,安裝目錄一般類似這個結構F:\app\Think\product\11.2.0\dbhome_1(本文以此為例)。這個時候,預設會有一個例項orcl,服務名一般為ORCL。

2 plsql免安裝版解壓後,目錄D:\install\PLSQL,目錄結構如下:

    D:\install\PLSQL
        |-- instantclient_11_2
            |-- tnsnames.ora
        |-- PLSQL Developer
        |-- readme.txt

三 配置

1 修改F:\app\Think\product\11.2.0\dbhome_1\NETWORK\ADMIN下面listener.ora和tnsnames.ora

1.1 listener.ora內容如下:

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =
計算機名)(PORT = 1521))
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = F:\app\Think\product\11.2.0\dbhome_1)
      (SID_NAME = ORCL)
    )
  )
ADR_BASE_LISTENER = F:\app\Think

1.2 tnsnames.ora內容如下:

tns =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-I9IGNNTD71I)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL)
    )
  )

1.3 配置環境變數

NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    TNS_ADMIN = F:\app\Think\product\11.2.0\dbhome_1\NETWORK\ADMIN

1.4 重啟OracleOraDb11g_home1TNSListener和OracleServiceORCL服務

1.5 使用plsql連線,輸入使用者名稱、密碼,選擇tns選項,選擇normal,連線。

三 lsnrctl status的作用

1 我們經過以上步驟後,一般能夠連線上。不過也經常出現各種錯誤提示,比如監聽程式無法識別連線描述符中請求的服務、監聽程式無法識別連線描述符中請求的SID等。這時候我們在命令列中輸入lsnrctl status檢視結果LISTENER 的 STATUS:

------------------------
別名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
啟動日期                  27-9月 -2016 19:42:43
正常執行時間              0 天 0 小時 3 分 41 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程式引數檔案          F:\app\Think\product\11.2.0\dbhome_1\network\admin\lis
tener.ora
監聽程式日誌檔案          f:\app\think\diag\tnslsnr\swxx_dyl\listener\alert\log.
xml
監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=swxx_dyl)(PORT=1521)))
服務摘要..
服務 "ORCL" 包含 2 個例項。
  例項 "ORCL", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
 例項 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orclXDB" 包含 1 個例項。
  例項 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功

如果能看到服務摘要下面的內容,說明監聽已經啟動,並且已經監聽了一些服務和例項。以上就表示監聽了兩個服務:一服務名ORCL帶倆例項ORCL和orcl。二服務名orclXDB帶例項orcl。這個時候我們看一看tnsnames.ora看一看CONNECT_DATA這個節點的內容,這裡可以配置成SERVICE_NAME=服務名或者SID=例項名的形式,服務名或者例項名要在上面status的列表中有才行。這裡尤其注意服務名和例項名不是大小寫敏感的。比如這個例子,我在tnsnames.ora配置成SERVICE_NAME=oRclXdb也是可以的。

如果服務摘要下面的內容沒有服務列表,那麼說明問題正出在這裡。首先我們看一看監聽程式引數檔案,看看這個檔案的內容是不是和我上面的配置一樣。如果監聽程式引數檔案的位置不是F:\app\Think\product\11.2.0\dbhome_1\listeners.ora,我們檢視一下環境變數TNS_ADMIN設定是否正確。

四 listeners.ora和tnsnames.ora

1 oracle載入的listerers.ora的位置首先是取環境變數TNS_ADMIN位置下的同名檔案,如果沒有環境變數TNS_ADMIN,取F:\app\Think\product\11.2.0\dbhome_1\listeners.ora。它的配置主要是HOST和SID_NAME。HOST可以是計算機名/ip/localhost/127.0.0.1,個人覺得配置計算機名更通用,本機plsql中可以使用計算機名/ip/localhost/127.0.0.1:port/SID來訪問。SID_NAME不能用SID或者SERVICE_NAME取代(注意這裡是SID_LIST_LISTENER)。SID_NAME的值要用例項名,可以連上sqlplus後使用select instance_name from v$instance檢視例項名,一般為orcl。

2 tnsnames.ora主要是plsql使用,它的實際位置請參閱五他的主要配置也是HOST和SERVICE_NAME。這裡本機訪問HOST能使用哪些值取決於listneers.ora的HOST值。SERVICE_NAME=服務名可以換成SID=例項名(注意單例項環境下),這裡例項名和服務名也不分大小寫。

五 plsql配置說明

plsql需要配置兩個東西oci.dll位置和tnsnames.ora位置,這兩個地方都在plsql的工具-->首選項中配置。

1 oci.dll在OCI庫內配置,找到D:\install\PLSQL\instantclient_11_2\oci.dll。

2 tnsnames.ora,在ORACLE主目錄中配置tnsnames.ora的位置。這裡要留意一下,如果這裡為空,系統尋找環境變數TNS_ADMIN下面的tnsnames.ora配置,如果環境變數TNS_ADMIN沒有配置,就尋找F:\app\Think\product\11.2.0\dbhome_1\NETWORK\ADMIN下面的tnsnames.ora。

六 一些注意事項

1 修改檔案後,一般需要重啟服務。

2 要找到正確位置的listeners.ora和tnsnames.ora再修改。

3 以lsnrctl status是否能展示服務列表為分水嶺,不能的話,說明服務端還沒配好,要找到服務端的listeners.ora到底在哪,內容到底有沒有問題;能展示服務列表的話,可以在plsql中直接用地址字串來實驗。本機的話,地址字串是localhost/127.0.0.1/ip/計算機名:1521/SID,注意SID要在lsnrctl status服務列表的例項名稱中。