最近剛到公司,因為公司用的是navicat,所以自己嘗試搭建一下連接Oracle數據庫的環境,過程中出現很多錯誤,特整理下來分享一下。
第一個錯誤:Cannot load OCI DLL 87,如圖1所示
原因:Oracle需要裝client才能讓第三方工具通過OCI(Oracle Call Interface)連接
解決辦法:
1.去oracle官網下載Instantcliet-basic-windows.x64,地址為:http://www.oracle.com/technetwork/topics/winx64soft-089540.html(我自己的是64位的,需要32為的可以下載相應的32位的)。如圖2所示
2.解壓到合適的目錄下,不要解壓到navicat的安裝目錄下,(自己試過不可以)如圖3所示
3.Navicat——>工具——>選項——>其他——>OCI
4.將OCI的地址改為剛解壓的目錄下的oci.dll。如圖4所示
最后,重啟navicat,重啟服務,連接數據庫。
第二個錯誤:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
這個錯誤原因有兩個:
①:Oracle中沒有正確配置tnsnames.ora文件
解決辦法:將HOST =localhost改為HOST=“本機IP地址”。如圖5所示
②服務器端的監聽里未注冊服務
命令行中輸入:lsnrctl status。看有沒有監聽服務,如果沒有在listener.ora文件中加入
SID_LIST_LISTENER=? (SID_LIST=? ? ? (SID_DESC=? ? ? ? (GLOBAL_DBNAME=orcl)? ? ? ? (SID_NAME=orcl)? ? ? ? (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)? ? ? ? (PRESPAWN_MAX=20)? ? ? ? (PRESPAWN_LIST=? ? ? ? ? (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))? ? ? ? )? ? ? )? ? ? )
然后,命令行輸入lsnrctl stop停止監聽服務,再輸入Isnrctl start重啟監聽。
最后連接數據庫。
第三個錯誤:no listener。如圖6所示
首先查看自己的監聽服務是否打開,如果是打開狀態,檢查自己在連接的過程中參數是否有誤,尤其是主機名或IP地址和服務名或SID,前者寫自己的IP地址,不要寫localhost,后者通過命令行查看自己的服務名或SID是什么,一般默認為ORCL,但配置過的會不一樣,就需要通過命令行查看。
命令行查看自己的服務名或SID。如圖7所示
我這里有三個服務,分別是CLRExtProc、orcl.166.88.9、orclXDB.166.88.9我在配置listener.ora和tnsnames.ora的時候都選擇的是orcl.166.88.9。如圖8/9/10所示
修改成統一的,連接數據庫,連接成功.如圖11所示