首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DBLink 跨防火牆連接失敗:ASA SQL*Net Inspection 導致數據包分片異常解決方案

     編輯:Oracle 資料庫基礎

生產環境中 DBLink 查詢遠程數據庫時程序卡死,SQL*Net 追蹤顯示 received partial fragment、multiple TNS frames in one packet。根因為 Cisco ASA 防火牆默認啟用 SQL*Net Inspection(端口 1521),其檢查引擎將多個 TNS 幀聚合在單一 TCP 包中處理,導致數據包重組錯誤。

現象與根因

  • 現象:DBLink 查詢大量數據時卡死,小結果集正常
  • 追蹤日誌:SQLNet: received partial fragment, frag len: 2011, partial frag len: 1380, 631 bytes needed
  • 根因:ASA SQL*Net Inspection 引擎假設每個 TNS 幀獨立佔用一個 TCP 包,但實際傳輸中多幀合包,引擎錯誤重組導致通信失敗
  • 影響範圍:僅限跨 VPN Tunnel 走默認 1521 端口的 DBLink,同網段或 1522 端口(未啟用 Inspection)不受影響

解決方案:禁用 ASA SQL*Net Inspection

ASA(config)# class-map sqlnet-port
ASA(config-cmap)# match port tcp eq 1521
ASA(config-cmap)# exit
ASA(config)# policy-map sqlnet_policy
ASA(config-pmap)# class sqlnet-port
ASA(config-pmap-c)# no inspect sqlnet
ASA(config-pmap-c)# exit
ASA(config)# service-policy sqlnet_policy interface outside

驗證與參考

  • 執行後大結果集 DBLink 查詢恢復正常
  • Cisco 相關 Bug ID:CSCsr27940、CSCsr14351(需註冊用戶查看)
  • 參考文檔:Note 119706.1 Troubleshooting Guide TNS-12535 or ORA-12535 or ORA-12170 Errors
  • ASA 命令參考:SQLNet inspection 章節(Version 8.0)

運維建議:跨防火牆 DBLink 建議使用非默認端口(如 1522)或協調網絡團隊關閉 SQL*Net Inspection;同步監控 V$SESSION_WAIT 事件 SQL*Net message from dblink 異常增長情況。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved