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服務列表的例項名稱中。