Oracle

Oracle 12c Express Enterprise Manager 網頁無法載入

  • June 3, 2020

問題總結

瀏覽到 Oracle 12c EM Express Web 界面時,使用以下 URL 時頁面超時:

  • http(s)://hostname:5500/em
  • http(s)://hostname.domain:5500/em

使用包含 IP 地址或 localhost 的 url 時,頁面載入,但非常非常慢(最多 5 分鐘)。

  • http(s)://ip-address/em
  • http(s)://localhost/em

使用主機名時,偵聽器日誌會顯示錯誤(多個錯誤):

03-DEC-2015 11:25:33 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<ip address>%14)(PORT=52925)) * handoff * http * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12560: TNS:protocol adapter error

使用 IP 地址或 localhost 時,偵聽器日誌未顯示錯誤:

03-DEC-2015 11:23:39 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<ip address>)(PORT=52902)) * handoff * http * 0

這個問題出現在整個網路上(請參閱頁腳中的參考資料),似乎沒有人能夠找到導致此問題的原因。我已經嘗試了所有我能找到的建議,並在下面列出了結果。我會讓這個偉大的社區嘗試一下,然後交給 Oracle 支持…

平台資訊

  • Windows 伺服器 2012 R2 x64
  • 甲骨文 12.1.0.2.0
  • 具有兩個可插拔數據庫 (PDB) 的多租戶容器數據庫 (CDB)
  • 使用自動儲存管理 (ASM)
  • 在伺服器上本地執行測試,防火牆完全禁用

已經進行的測試

emctl

很多人會建議出於習慣檢查“emctl”。這在 12c 中不存在,因為它使用 EM Express 而不是數據庫控制。

http/https

我已經設置並測試了 http 和 https。沒有不同。

瀏覽器

我已經在 IE 11、chrome 和 firefox 的普通安裝中對此進行了測試。未啟用附加組件。

數據庫訪問

CDB 和 PDB 都可以通過 SQLPlus 進行訪問和查詢

Telnet

打開到埠(例如 5500)的 telnet 連接有效。

警報日誌

Oracle 警報日誌不包含任何錯誤消息。

我的假設

  • 與主機名查找有關的東西,因為它在使用 IP 地址而不是主機名時有效。
  • 與證書相關的東西,雖然同樣的問題出現在 http.
  • 與 XDB 或偵聽器服務的配置有關的東西。
  • 與是否包含主機名的域部分相關的內容。因為這是在大多數配置文件中添加的,但可能不是無處不在?

詳細的平台資訊

注意:在這些片段中,我總是用“HOSTNAME”替換實際主機名,用“domain”替換實際域。如果使用“HOSTNAME”,則表示它沒有以域名結尾。case 表示顯示主機名的實際情況。

SYS_CONTEXT(‘USERENV’,‘SERVER_HOST’)

主機名

CMD

HOSTNAME中的主機名變數

SYS_CONTEXT(‘USERENV’,‘DB_DOMAIN’)

dbms_xdb_config.gethttpsport()

5500

dbms_xdb_config.gethttpport()

2200

“lsnrctl 狀態”輸出

   LSNRCTL for 64-bit Windows: Version 12.1.0.2.0 - Production on 03-DEC-2015 15:33:12

   Copyright (c) 1991, 2014, Oracle.  All rights reserved.

   Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname.domain)(PORT=1521)))
   STATUS of the LISTENER
   ------------------------
   Alias                     listener
   Version                   TNSLSNR for 64-bit Windows: Version 12.1.0.2.0 - Production
   Start Date                03-DEC-2015 12:27:51
   Uptime                    0 days 3 hr. 5 min. 21 sec
   Trace Level               off
   Security                  ON: Local OS Authentication
   SNMP                      OFF
   Listener Parameter File   C:\ORACLE\HOME\network\admin\listener.ora
   Listener Log File         C:\ORACLE\diag\tnslsnr\HOSTNAME\listener\alert\log.xml
   Listening Endpoints Summary...
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HOSTNAME.domain)(PORT=1521)))
     (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=HOSTNAME.domain)(PORT=2200))(Presentation=HTTP)(Session=RAW))
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=HOSTNAME.domain)(PORT=5501))(Security=(my_wallet_directory=C:\ORACLE\admin\ecoomdb\xdb_wallet))(Presentation=HTTP)(Session=RAW))
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=HOSTNAME.domain)(PORT=5500))(Security=(my_wallet_directory=C:\ORACLE\admin\ecoomdb\xdb_wallet))(Presentation=HTTP)(Session=RAW))
   Services Summary...
   Service "CLRExtProc" has 1 instance(s).
     Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
   Service "bibliodb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
   Service "ecoomdb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
   Service "ecoomdbXDB.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
   Service "technodb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
   The command completed successfully

“lsnrctl 服務”輸出

   LSNRCTL for 64-bit Windows: Version 12.1.0.2.0 - Production on 03-DEC-2015 15:34:22

   Copyright (c) 1991, 2014, Oracle.  All rights reserved.

   Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOSTNAME.domain)(PORT=1521)))
   Services Summary...
   Service "CLRExtProc" has 1 instance(s).
     Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
       Handler(s):
         "DEDICATED" established:0 refused:0
            LOCAL SERVER
   Service "bibliodb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
       Handler(s):
         "DEDICATED" established:9 refused:0 state:ready
            LOCAL SERVER
   Service "ecoomdb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
       Handler(s):
         "DEDICATED" established:9 refused:0 state:ready
            LOCAL SERVER
   Service "ecoomdbXDB.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
       Handler(s):
         "D000" established:8 refused:21 current:0 max:1022 state:ready
            DISPATCHER <machine: HOSTNAME, pid: 4040>
            (ADDRESS=(PROTOCOL=tcp)(HOST=HOSTNAME.domain)(PORT=49179))
   Service "technodb.domain" has 1 instance(s).
     Instance "ecoomdb", status READY, has 1 handler(s) for this service...
       Handler(s):
         "DEDICATED" established:9 refused:0 state:ready
            LOCAL SERVER
   The command completed successfully

監聽器.ora

   SID_LIST_LISTENER =
     (SID_LIST =
       (SID_DESC =
         (SID_NAME = CLRExtProc)
         (ORACLE_HOME = C:\ORACLE\HOME)
         (PROGRAM = extproc)
         (ENVS = "EXTPROC_DLLS=ONLY:C:\ORACLE\HOME\bin\oraclr12.dll")
       )
     )

   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME.domain)(PORT = 1521))
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
       )
     )

init.ora (修剪過,還包含其他設置…)

db_domain=domain
db_name="ecoomdb"
dispatchers="(PROTOCOL=TCP) (SERVICE=ecoomdbXDB)"
local_listener=LISTENER*

netstat -a

(相關選擇)

TCP    0.0.0.0:1521           ECONECOOMDB1:0         LISTENING
TCP    0.0.0.0:5500           ECONECOOMDB1:0         LISTENING
TCP    0.0.0.0:5501           ECONECOOMDB1:0         LISTENING
TCP    [::]:5500              ECONECOOMDB1:0         LISTENING
TCP    [::]:5501              ECONECOOMDB1:0         LISTENING

windows hosts 文件

(此文件為空)

環境變數

  • PATH 包含 C:\ORACLE\HOME\bin
  • ORACLE_HOME = C:\ORACLE\HOME
  • ORACLE_SID = ecomdb

系統資料庫 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1

  • ORACLE_HOME = C:\ORACLE\HOME
  • ORACLE_SID = ecomdb

相關和重複(未回答)的問題/文件

線上資源

Stackexchange 問題

Reddit 執行緒

甲骨文社區

在聯繫 Oracle 支持後,我 - 有點 - 能夠弄清楚發生了什麼。此伺服器有 4 個網路適配器,1 個連接到網路的適配器,以及 3 個連接到 iSCSI 儲存的未配置適配器。該問題似乎是由 Web 客戶端或 EM 伺服器(此處不確定)試圖將網頁請求發送到錯誤的適配器引起的。

對於面臨相同問題的任何人,您可以通過瀏覽 URL(使用 hostname.domain)然後檢查 listener.log 文件(-oracle_base-/diag/tnslsnr/-instance-/listener/trace/listener.日誌)。對我來說,在錯誤消息中顯示了與伺服器主網路適配器 IP 地址不同的 IP 地址。連接到 iSCSI 的網路適配器之一的 IP 地址,如圖所示。在我的原始文章中省略 IP 地址時,我沒有發現這個 IP 地址差異。

18-DEC-2015 14:17:04 * http * (ADDRESS=(PROTOCOL=tcps)(HOST=<NOT SERVER IP address!>%14)(PORT=62119)) * handoff * http * 12518
TNS-12518: TNS:listener could not hand off client connection
TNS-12560: TNS:protocol adapter error

禁用其他網路適配器時,一切正常。

此外,當在 chrome 中轉到“chrome://net-internals/#dns”時,所有四個網路適配器的 IP 地址都顯示為我的主機名。

顯然,當從另一個主機瀏覽網頁時,這個問題不會發生。此外,nslookup 只返回正確的 IP 地址。因此,這似乎不是 DNS 問題,而是本地問題。我認為這不是問題的完整答案,因為禁用網路適配器不能成為最終解決方案,但我希望將來面臨這個問題的任何人現在都有“更多工作要做”……

DNS伺服器返回的IP地址與網頁瀏覽器使用的IP地址之間的差異從何而來?

我還做了一些可能會影響最終解決方案的其他更改,因此為了完整起見,我將包括它們。不確定是否相關…:

  • 將數據庫的流程參數從 300 增加到 1000
  • 通過添加“(DISPATCHERS=5)”更改了“dispatchers”參數

在 db host 上執行這些命令會得到什麼

從命令提示符:

ping host
ping ipaddress(host ipaddress)
tnsping tnsalias

並執行lsnrctl services並查看是否有任何連接被拒絕

如果客戶端電腦上安裝了 oracle 客戶端(從您訪問 oracle em express 的位置)

從命令提示符執行:

  1. ping ipaddress(db host ipaddress) –>> 如果出現錯誤,請將 IP 地址和域名添加到hosts文件中
  2. tnsping tnsalias

編輯:

調度程序 D000 顯示 21 個連接被拒絕。你有網路問題。

嘗試重新啟動偵聽器並連接到 em express 並查看lsnrctl services輸出。理想情況下,拒絕的連接數應為零。

引用自:https://dba.stackexchange.com/questions/122807