爲了本地測試方便,我在本機安裝了oracle,幾個月前plsql突然無法連接oracle,報錯:ORA-12514,在網上找了各種方法都無法解決,最後只能忍辱卸載oracle重新安裝,一切又相安無事.
昨天早上,當我想查看測試數據時,悲劇重現,真的煩人.我又去網上一通搗鼓,還是不行,一個坑不能死兩次,我決定搞定它.百度,谷歌一直查,無數種嘗試,晚上10點,迎來曙光.
在此之前,先整理下oracle服務器,oracle客戶端和plsql之間的關係:
oracle服務器: 提供數據存儲,查詢等功能
oracle客戶端: 與oracle服務器通信,通過SQL進行數據庫操作
plsql: 一個可視化的工具,通過連接oracle客戶端間接操作oracle服務器
以前我一直以爲plsql就是一個oracle客戶端,哎,慚愧!
開始記錄ora_12514的解決方法:
1.確定oracle服務器正常運行
查看服務是否啓動:
這兩個服務必須啓動
測試sqlplus工具:
打開cmd窗口,輸入sqlplus,再輸入用戶名和密碼,如果可以正常連接,說明數據庫正常
2. 檢查,修改oracle客戶端配置
檢查客戶端下的tnsnames.ora
內容如下:
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
根據自己的實例名稱修改,注意加粗行,如果沒有,加上
檢查客戶端下的listen.ora
內容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\dev-soft\oracle11g\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\dev-soft\oracle11g\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC = (GLOBAL_DBNAME = ORCL)(ORACLE_HOME = D:\dev-soft\oracle11g\product\11.2.0\dbhome_1)(SID_NAME = ORCL))
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\dev-soft\oracle11g
根據自己的oracle安裝路徑和實例名稱修改,注意加粗行,如果沒有,加上
重啓Oracle監聽程序
3.檢查plsql是否已經指定客戶端
至此,我的問題得以解決,成功連接!
如果還是無法登錄,嘗試如下方法:
右擊"我的電腦" - "屬性" - "高級" - "環境變量" - "系統環境變量":
1>.點擊"新建", 變量名設置爲"TNS_ADMIN", 變量值設置客戶端根目錄,如:"D:\dev-soft\instantclient_12", 點擊"確定";
2>.選擇"Path" - 點擊"編輯", 添加客戶端安裝路徑:%TNS_ADMIN%
最後點擊"確定"退出
注意查看path裏面的設置的oracle路徑是否正確!