3

我在Google Compute Engine(GCE)虛擬機(Windows Server 2012 Datacenter)中安裝了Oracle 11g標準版。我在Windows防火牆中爲tcp:1521創建了入站和出站規則。同時,我爲GCE網絡創建了tcp:1521防火牆規則。Google Compute Engine中的Oracle數據庫

當我使用SQL Developer從localhost連接到我的數據庫時,一切正常。但是,如果我嘗試連接到從遠程主機的數據庫(也使用SQL開發人員)我得到一個錯誤:

Status: Failure - Test failed: IO Error: The Network Adapter could not establish the connection. 

enter image description here

我成功地ping從遠程主機數據庫中的虛擬機主機,但是當我telnet它時,連接失敗:

Connecting To <host-ip>... Could not open connection to the host, on port 1521: Connect failed 

此外,nmap聲明端口1521在虛擬機中被過濾。

我錯過了什麼?謝謝你的幫助。

回答

1

我一點點研究更要考慮到你的答案,這是我們應該考慮的:

1.配置Windows Server防火牆: 轉到Control Panel - >System and Security - >Windows Firewall - >Advanced settings。然後創建與後續的功能一個新的入站規則:

規則類型:Port

協議:TCP

端口號:1521(除非您已指定在一個不同的你Oracle數據庫)

操作:Allow the connection

簡介:Domain + Private + Public(或適用於您的情況之一)

名稱:Oracle DB(或任何你想要的名稱)

一旦你完成了,創建出站規則爲入站規則指定的相同功能。


2.配置谷歌Compute Engine的網絡防火牆:在谷歌計算引擎(GCE)控制檯去Networking - >Firewall rules。然後點擊New firewall rule,並對其進行配置:

名稱:oracle-db(或任何你想要的名稱)

網:default(或您已經部署虛擬機的一個驗證它形成VM實例的儀表板)

源過濾:Allow from any source (0.0.0.0/0)(警告:你應該選擇IP範圍,如果你只是想使一臺主機或一組主機然後指定你的域名或IP地址)

0123。個

允許協議和端口: (或適用於您的情況之一 - 同樣的,你已經爲你的Windows防火牆規則定義)

最後,點擊創建。


3.配置Oracle網絡監聽:默認情況下,Oracle數據庫不接受遠程連接。它只接受本地主機請求。因此,在您的Oracle數據庫服務器上以管理員身份打開CMD。在執行我們將停止數據庫淨聽衆:

lsnrctl STOP 

現在,轉到Oracle安裝路徑ORACLE_PATH(通常爲:ORACLE_PATH = C:\app\<user_name>)。然後導航至:ORACLE_PATH\product\11.2.0\dbhome_1\NETWORK\ADMIN。在那裏你會發現兩個重要的文件:listener.oratnsnames.ora。打開listener.ora並通過您的服務器主機名(WARN:不是IP地址,而是服務器HOSTNAME)更改所有LOCALHOST選項。

LISTENER = 
    (DESCRIPTION_LIST = 
    (DESCRIPTION = 
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 
     (ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521)) 
    ) 
) 

保存更改。然後,打開tnsnames.ora文件。併爲您的服務做同樣的事情:

YOUR_SERVICE = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = your_service_name) 
    ) 
) 

LISTENER_YOUR_SERVICE = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = <server_hostname>)(PORT = 1521)) 

保存您的更改。最後,我們應該重新啓動網絡監聽器。所以去CMD作爲管理員執行以下命令:

lsnrctl START 

打開瀏覽器,輸入:http://localhost:1158/em。您的數據庫和偵聽器應該正在運行。現在您可以從遠程主機連接。

欲瞭解更多信息,請參考:http://docs.oracle.com/cd/B28359_01/network.111/b28316/listenercfg.htm

+0

好的研究。我只想補充一點,建議在GCE防火牆上使用'Target tags',否則防火牆規則適用於所有VM實例。 – Kamran

3

這些有一些步驟,你可以採取排除和解決此問題:

首先,爲了排除故障,關閉了Windows虛擬機的防火牆:

netsh firewall set opmode mode=Disable 

您可以稍後開啓使用這個命令:

netsh firewall set opmode mode=Enable 

確保您的遠程IP地址在您的GCE防火牆規則的Source filter上市tcp:1521。如果GCE防火牆規則有Target tag,則您的Windows VM實例也必須使用相同的標籤進行標記,因此此防火牆規則適用於此規則。

如果防火牆規則配置正確,您要檢查的另一點是Oracle Net Listener Configuration。由於虛擬機的內部IP地址不是靜態IP地址,可能會更改,請使用SSL配置TCP/IP或TCP/IP,並在偵聽協議地址的主機字段中輸入計算機的主機名。

相關問題