場景:oracle服務安裝在windows本地,oracle客戶端在虛擬機中,使用虛擬機連接windows的oracle數據庫。
問題1:使用虛擬機telnet我本地oracle1521端口,不通
解決思路:
-
關閉虛擬機linux防火牆(這個方法有點粗暴,建議在只需要修改防火牆的端口允許通過即可)
# 1:查看防火狀態 systemctl status firewalld service iptables status # 2:暫時關閉防火牆 systemctl stop firewalld service iptables stop # 3:永久關閉防火牆 systemctl disable firewalld chkconfig iptables off # 4:重啟防火牆 systemctl enable firewalld service iptables restart # 5:永久關閉后重啟 chkconfig iptables on
-
防火牆配置規則 端口 允許得端口
# 查看已打開的端口 netstat -anp # 添加允許的端口 firewall-cmd --add-port=1521/tcp --permanent # 若移除端口 firewall-cmd --permanent --remove-port=1521/tcp # 策略修改完成,請重啟: systemctl restart firewalld
-
添加windows防火牆對1521的入站允許規則
問題2:使用sqlplus登錄報錯,ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務
解決思路:關鍵字監聽程序
-
查看監聽服務狀態
# 關閉監聽服務 lsnrctl stop # 啟動監聽服務 lsnrctl start # 查看監聽服務狀態 lsnrctl stat
查看監聽服務如果出現下列問題
說明監聽服務沒有啟動
去啟動oracle監聽服務,監聽服務有兩個,這里只做單監聽講,隨便啟動一個即可。
再通過
lsnrctl stat
查看監聽服務,如果出現下圖情況只看到一個服務名"CLRExtProc"啟動了,而我們想要的是ORCL服務名
這是需要修改
listener.ora
文件 -
修改
listener.ora
文件文件路徑,我本地的路徑是:D:\app\niaobulashi\product\11.2.0\dbhome_1\NETWORK\ADMIN
需要添加以下紅色部分代碼,將服務名為ORCL添加到監聽配置文件中
貼出來如下:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\app\niaobulashi\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\app\niaobulashi\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC= (SID_NAME = ORCL) (ORACLE_HOME = D:\app\niaobulashi\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\app\niaobulashi\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) ) LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-NNDNCEI)(PORT = 1521)) ) ADR_BASE_LISTENER = D:\app\niaobulashi
再查看監聽服務狀態,可以看到ORCL有了
-
修改
tnsname.ora
的HOST
為本地主機名ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-NNDNCEI)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-NNDNCEI)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) )
最后使用虛擬機就可以正常連接本地oracle服務了