1. 程式人生 > >連接遠程數據庫ORACLE11g,錯誤百出!

連接遠程數據庫ORACLE11g,錯誤百出!

ces tns sim 數據庫實例 工具 等等 round protocol tomat

客戶機中PLSQL DEV訪問虛擬機中的ORACLE11g,錯誤百出!

創建時間: 2017/10/14 18:44
作者: CNSIMO
標簽: ORACLE

忙了一下午,只有兩個字形容:麻煩! 安裝ORACLE1g 首先,我已經提前在虛擬機上配置了windows2008+oracle11g,為什麽用server2008呢?我沒有別的,win10做虛擬機覺得不太好,win7鏡像還得下載,你懂的。 然後就是oracle11g是去某電腦上拷過來的,我是一個十分愛惜流量的人,嘿嘿。 我們老師為了讓我們更清楚區分數據庫軟件安裝和數據庫配置,所以在安裝oracle11g的時候選擇的是”只安裝數據庫軟件“(記得是第二個選項),然後安裝的時候字符集都設置的UTF8,其他的配置基本上都是保持的默認。 好了,安裝的事情不細說,一般情況下只要是主機沒問題,檢測條件通過,安裝都是不成問題的,下面就開始了配置數據庫。 首先使用DCA
(在oRACLE的開始菜單文件夾裏面,縮寫哦),打開後會顯示幾個選項,選擇【創建數據庫】,然後下一步,之後的幾個步驟一直到創建數據庫完畢,並沒有出任何錯誤,所以就不多說了,唯一出現的錯誤可能就是提示類似“沒有監聽,無法繼續”的對話框,所以就去NCA(和DCA同級目錄)添加監聽,你只需一直下一步就行,默認的監聽端口是1521然後回到DCA就能夠繼續下一步了,一直到最後,需要關註的就是,最後的一個頁面有web管理頁面的URL,此端口號都是https://hostname:port/em這個形式的,hostname就是本機的ip地址,port就是端口號,我的端口號是1158,有的可能不是。
例如我的web管理頁面:https://server2008:1158/em,我的數據庫監聽端口是1521。 管理頁面如下: 技術分享 如果剛安裝完,紅框中的狀態不對,那麽考慮重裝或者重啟ORACLE各項服務或者重啟ORACLE服務器。 重啟ORACLE服務器的操作如下: 打開cmd輸入以下命令: sqlplus / as sysdba shutdown immediate startup 技術分享 然後說ORACLE這幾個配置工具的功能: 技術分享
  • DCA:管理數據庫(創建、刪除等等)
  • NCA:配置數據庫網絡服務(監聽、服務名等)
  • Net Manager:網絡綜合管理工具(監聽、服務名等具體信息查看更改等)
還有一個工具sqlplus也很常用,使用它訪問ORACLE數據庫地操作如下(cmd中): 如果是普通用戶 sqlplus username/[email protected]/tnsname 如果是sysdba用戶,例如sys sqlplus sys/[email protected]/tnsname as sysdba 後面用到地時候你可能會更明白一些。 然後還有三個很重要的文件,其中兩個需要知道一下: 技術分享 註意路徑哦!格式:{database_base}\network\admin。 在Net Manager或者NCA中更改監聽或者服務名的信息後可能會映射到這兩個文件,例如我在Net Manager中更改了LISTEN的地址,在listener.ora文件中是有體現的,可以打開看看,但是最好不要手動地去更改裏面地內容,因為一不小心感覺沒錯就可能被人坑了。想要更改,還是在Net Manager中更改比較合適,例如現在我在Net Manager中將LISTEN地監聽端口由1521變成了1522,打開listener.ora文件可以看到相應的地方也變了。 Tip:如果你在你不知道什麽情況的情況下,你使用Net Manager做了一些操作,而且你也忘了原來是什麽了,不要緊,關閉Net Manager窗口的時候會提示你是否保存,選擇否即可恢復! 說了這麽多沒用的,我的目的還沒實現呢,怎麽在真機中訪問虛擬機內的數據庫呢? 先說明一下預先條件
  1. 我所說的話,都是假設你對計算機了解,並且有基礎,思維敏捷,熟悉VM虛擬機,不懂的請提問。
  2. 宿主機和虛擬機能夠互相ping通,如果不行,嘗試將連接方式改為NAT,宿主機中的VMNet8網卡ipv4設置為自動獲取IP。
  3. 宿主機中的ORACLE的各項服務都已經正常啟動。
  4. 還得知道環境變量怎麽配置,不懂的自動百度學習。
我的機器配置如下:
  • 虛擬機:VM12.5.7版本
  • 宿主機:win10專業版1703
    • PLSQL Developer 12(下載地址:https://www.allroundautomations.com/bodyplsqldevreg.html)
  • 虛擬機:server2008r2 企業版,內存2G
    • oracle:11g,數據庫實例名稱STD,全局數據庫名STD.CNSIMO.CN,所有密碼唯一:Admin2015,字符集:UTF8,語言:簡體中文
連接步驟
  1. 官網下載instant client,http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。
  2. 下載基礎包和sqlplus包技術分享
  3. 一起解壓出來後,得到一個文件夾技術分享,將它復制到任意位置,例如:D:\PLSQL Developer 12\
  4. 在D:\PLSQL Developer 12\instantclient_12_2中(以下簡稱{instantclient})新建文件夾network,在network中新建文件夾admin。
  5. {instantclient}\network\admin中新建記事本文件,下列代碼復制進去並保存為utf-8格式,名稱改為tnsnames.ora【後綴名txt->ora】,註意格式不能變(少一個多一個空格都不行)
tip:請將STD.CNSIMO.CN改為自己的全局數據庫名,HOST和PORT也改為自己的,首行的STD可以隨便寫。 STD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.138)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = STD.CNSIMO.CN) ) )
  1. 打開PLSQL DEV12,找到【首選項】設置技術分享
  2. 然後,在connection中安裝圖示設置,instantclient的位置。
技術分享
  1. 很重要的一步,到虛擬機註冊表中查看NLS_LANG的值,若無此路徑則直接查找NLS_LANG,復制此鍵值。技術分享
  2. 很重要的一步,在宿主機中新建系統環境變量NLS_LANG,值與虛擬機中保持一致!
技術分享
  1. 很重要的一步,再新建系統環境變量TNS_ADMIN,值為{instantclient}\network\admin
技術分享
  1. 更改環境變量PATH,添加值為{instantclient}。
  2. 然後cmd中,運行sqlplus命令連接遠程數據庫,命令為:sqlplus sys/[email protected]/STD.CNSIMO.CN as SYSDBA,下圖代表連接成功。
技術分享
  1. 重新打開PLSQL DEV,嘗試連接,填寫用戶名密碼,database下拉框中如果沒有出現之前在tnsnames.ora首行寫的名字STD,就手動輸入STD,並作為SYSDBA連接。成功的話,會進入主界面,否則提示。
解決問題 好了,連接的常規步驟已經看完了,但是事實上好多時候並不能真正的如願以償,問題碰到了一堆,常見的問題描述可能如下:
  • ORA-12170: TNS:Connect timeout occurred
  • ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務
  • ORA-12705: Cannot access NLS data files or invalid environment specified
先解決第一個問題,你可嘗試ping一下你的遠程主機,可能ping不通,所以需要你更改一下虛擬機和主機之間的網絡連接方式; 然後第二個問題,導致這個問題的根本原因是在遠程主機上該服務名並沒有被監聽程序監聽,例如我通過sqlplus連接的時候將STD.CNSIMO.CN改為STD或者其它隨便一個,都會報這個錯誤。解決方法如下: 打開Net Manager,選擇服務命名,點擊加號添加服務,列表中顯示的std僅僅具有本地意義,重要的是右邊的服務名,設置成全局數據庫名,連接類型選擇 共享服務器。 技術分享 然後關閉Net Manager並保存配置。 再次嘗試連接,如果還是連接不上,嘗試重啟ORACLE數據庫! Tip:網上可能查到的都是更改虛擬機中tnsnames.ora和listener.ora這兩個文件,擅自更改後可能導致的問題是數據庫連接不上、NetManager和NCA中部分功能無反應的問題。因為oracle對這兩個文件的內容格式要求的太嚴格了。紅框的首部不能有空格,藍框的首部必須有空格! 技術分享 至於最後一個問題,請檢查環境變量中的NLS_LANG的值是否和遠程主機註冊表中的值相同,切記不要手敲!如果還是這個問題,可能是你剛配置完環境變量,cmd的命令框還是之前開的,請重開一個cmd再次嘗試。

連接遠程數據庫ORACLE11g,錯誤百出!