remote_listener引發的故障分析
內容介紹
ORACLE 資料庫是一個龐大的軟體,各個部件協同工作,有時候一個環節出現問題,往往會導致重大的問題,特別是有時候外部環境因素造成的問題,會直接影響資料庫的正常執行,比如儲存,比如網路,再比如主機。本次案例要分析的就是一次資料庫連線異常的問題,而引起資料連線異常的問題,多種多樣,不勝列舉,而具體問題具體分析,本能的反應應該是網路造成的連線問題。最終,我們還是透過 ORACLE 的網路跟蹤技術及資料庫資訊的檢視解決了故障。
故障的起因主要由於利用 rman 異地恢復資料庫, remote_listener 引數設定問題導致連線異常。
概念普及
是 oracle 提供的與網路層面互動的一個工具,比如如何解析客戶端發起的連線,如何對客戶端發起的連線進行辨別,如何對客戶端連線進行阻隔限制,或者啟用日誌及跟蹤( log and trace )功能等等一系列的功能, sqlnet 透過寫入檔案引數來進行分析併產生作用, sqlnet 配置檔案的存放位置一般在: $ORACLE_HOME/network/admin 目錄下,本次處理網路故障我們就是使用了 sqlnet 的啟用日誌及跟蹤功能。
sqlnet 網路連線跟蹤具體設定如下 :
TRACE_LEVEL_CLIENT=16 TRACE_FILE_CLIENT=CLIENT TRACE_TIMESTAMP_CLIENT=ON trace_directory_client=D:\oracle\product\10.2.0\db_1\network\ADMIN |
詳細解釋一下以上引數值: TRACE_LEVEL_CLIENT – 開啟客戶端跟蹤級別
TRACE_LEVEL_LISTENER 的取值範圍為 0~16 ,當然級別越高,收集的資訊就相對越全面,系統預設是 0 ,即不生成 trace 資訊
off or 0 for no trace output
user or 4 for user trace information
admin or 10 for administration trace information
support or 16 for Oracle Support Services trace information
TRACE_FILE_CLIENT --
設定客戶端和伺服器端的
trace
檔案的名稱
TRACE_TIMESTAMP_CLIENT -- 是否在 trace 中寫入每條 trace 資訊的 dd-mon-yyyy hh:mi:ss:mi 時間戳
TRACE_DIRECTORY_CLIENT -- 設定客戶端和伺服器端的 trace 檔案的目錄
故障排查
客戶端操作如下:
客戶端連線異常
C:\Documents and Settings\Administrator>sqlplus system/abc123@orcl SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 12 月 2 13:21:16 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. ERROR: ORA-12545: 因目標主機或物件不存在 , 連線失敗 請輸入使用者名稱 : |
從報錯來看似乎是監聽的問題
檢查連線串配置及伺服器監聽狀態
C:\Documents and Settings\Administrator>tnsping orcl TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-12 月 -2014 13:22:17 Copyright (c) 1997, 2005, Oracle. All rights reserved. 已使用的引數檔案 : F:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
已使用 TNSNAMES 介面卡來解析別名 Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.0.94)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0 .93)(PORT = 1521)) (LOAD_BALANCE = yes)) (CONNECT_DATA = (SERVER = SHARED) (SERV ICE_NAME = orcl) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC)))) OK (30 毫秒 ) |
從tnsping的測試來看,連線串監聽都正常
由於是生產庫是 rac 環境的嘗試單節點登入
C:\Documents and Settings\Administrator>sqlplus system/abc123@orcl1 SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 12 月 2 13:26:17 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved. 連線到 : Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options
SQL> exit 從 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options 斷開 C:\Documents and Settings\Administrator>sqlplus system/abc123@orcl2 SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 12 月 2 13:26:24 2014 Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到 : Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options |
從單節點的登入來看配置都正常而且可以正常連線,問題很奇怪為了進一步排查開啟開啟客戶端跟蹤
在客戶端的 sqlnet.ora 檔案中新增如下內容: TRACE_LEVEL_CLIENT=16 TRACE_FILE_CLIENT=CLIENT TRACE_TIMESTAMP_CLIENT=ON trace_directory_client=D:\oracle\product\10.2.0\db_1\network\ADMIN |
重新用客戶端登入收集跟蹤資訊
跟蹤資訊如下: [02-12 月 -2014 14:10:32:968] nsmfr: normal exit [02-12 月 -2014 14:10:32:968] nsmfr: entry [02-12 月 -2014 14:10:32:968] nsmfr: 736 bytes at 0xe4b9d8 [02-12 月 -2014 14:10:32:968] nsmfr: normal exit [02-12 月 -2014 14:10:32:968] nsclose: normal exit [02-12 月 -2014 14:10:32:968] nscall: connecting... [02-12 月 -2014 14:10:32:968] nsc2addr: entry [02-12 月 -2014 14:10:32:968] nsc2addr: (ADDRESS=(PROTOCOL=tcp)(HOST=hp)(PORT=3554)) [02-12 月 -2014 14:10:32:968] nttbnd2addr: entry [02-12 月 -2014 14:10:32:968] snlinGetAddrInfo: entry [02-12 月 -2014 14:10:32:968] snlinGetAddrInfo: Invalid IP address string hp [02-12 月 -2014 14:10:32:968] snlinFreeAddrInfo: entry [02-12 月 -2014 14:10:32:968] snlinFreeAddrInfo: exit [02-12 月 -2014 14:10:32:968] snlinGetAddrInfo: exit [02-12 月 -2014 14:10:32:968] nttbnd2addr: looking up IP addr for host: hp [02-12 月 -2014 14:10:32:968] snlinGetAddrInfo: entry [02-12 月 -2014 14:10:35:218] snlinGetAddrInfo: Name resolution failed for hp [02-12 月 -2014 14:10:35:218] snlinFreeAddrInfo: entry [02-12 月 -2014 14:10:35:218] snlinFreeAddrInfo: exit [02-12 月 -2014 14:10:35:218] snlinGetAddrInfo: exit [02-12 月 -2014 14:10:35:218] nttbnd2addr: *** hostname lookup failure! *** [02-12 月 -2014 14:10:35:218] nttbnd2addr: exit [02-12 月 -2014 14:10:35:218] nserror: entry [02-12 月 -2014 14:10:35:218] nserror: nsres: id=0, op=77, ns=12545, ns2=12560; nt[0]=515, nt[1]=1001, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0 [02-12 月 -2014 14:10:35:218] nsc2addr: error exit |
從以上跟蹤資訊,當我們嘗試使用orcl連線串連線時被路由到了HP這個主機,可是tnsnames.ora連線串裡面根本沒有配置相關的資訊,那怎麼會呢從客戶端的配置似乎查不出什麼原因,嘗試從生產庫查詢。
伺服器端配置檢視
檢視生產庫的 local_listener 和 remote_listener 配置
SQL> show parameter local NAME TYPE VALUE --------------------------- --------------------------------------- local_listener string (address=(protocol=tcp)(host=192.168.0.93)(port=1521)) SQL> show parameter remote NAME TYPE VALUE --------------------------- --------------------------------------- remote_listener string LISTENERS_ORCL |
從配置上來看都沒有任何異常
檢視生產庫的監聽狀態
C:\Documents and Settings\Administrator>lsnrctl status LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 02-12 月 -2014 14:15:29 Copyright (c) 1991, 2007, Oracle. All rights reserved. 正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production 啟動日期 24-11 月 -2014 20:52:17 正常執行時間 7 天 17 小時 23 分 13 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程式引數檔案 D:\oracle\product\10g\network\admin\listener.ora 監聽程式日誌檔案 D:\oracle\product\10g\network\log\listener.log 監聽端點概要 ... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=svr01)(PORT=1521))) 服務摘要 .. 服務 "+ASM" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "+ASM_XPT" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "orcl" 包含 3 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 32 個處理程式 ... 例程 "orclstd", 狀態 READY, 包含此服務的 2 個處理程式 ... 服務 "orcl_XPT" 包含 3 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 32 個處理程式 ... 例程 "orclstd", 狀態 READY, 包含此服務的 2 個處理程式 ... 命令執行成功 |
從監聽來看似乎也看不出什麼端倪
生產庫嘗試用 orcl 連線串連線
C:\Documents and Settings\Administrator>sqlplus system/abc123@orcl SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 12 月 2 13:45:51 2014 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 連線到 : SQL> select instance_name from v$instance; INSTANCE_NAME ---------------- orclstd SQL> show parameter remote NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ remote_listener string LISTENERS_ORCL C:\Documents and Settings\Administrator>tnsping listeners_orcl TNS Ping Utility for 64-bit Windows: Version 10.2.0.4.0 - Production on 02-12 月 -2014 14:01:53 Copyright (c) 1997, 2007, Oracle. All rights reserved. 已使用的引數檔案 : D:\oracle\product\10g\network\admin\sqlnet.ora 已使用 TNSNAMES 介面卡來解析別名 Attempting to contact (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = svr02-vip)(PORT = 1521)) (ADDRESS = ( PROTOCOL = TCP)(HOST = svr01-vip)(PORT = 1521))) OK (20 毫秒 ) C:\Documents and Settings\Administrator>sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 12 月 2 14:01:02 2014 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. 連線到 : Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options SQL> select instance_name from gv$instance; INSTANCE_NAME ---------------- orcl2 orcl1 |
從以上的連線來看其實已經很明顯了,當時用orcl連線串連線時連線到orclstd,由於orclstd庫remote_listener引數所引起,orclstd庫在遠端註冊例項狀態了,然後路由到備機了,導致生產使用orcl報錯。
注:(orclstd這個庫是利用生產的rman備份恢復回來的資料庫)
檢視生產監聽狀態正式以上判斷
C:\Documents and Settings\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 02-12 月 -2014 14:15:29
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production 啟動日期 24-11 月 -2014 20:52:17 正常執行時間 7 天 17 小時 23 分 13 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程式引數檔案 D:\oracle\product\10g\network\admin\listener.ora 監聽程式日誌檔案 D:\oracle\product\10g\network\log\listener.log 監聽端點概要 ... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=svr01)(PORT=1521))) 服務摘要 .. 服務 "+ASM" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "+ASM_XPT" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "orcl" 包含 3 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 32 個處理程式 ... 例程 "orclstd", 狀態 READY, 包含此服務的 2 個處理程式 ... 服務 "orcl_XPT" 包含 3 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 32 個處理程式 ... 例程 "orclstd", 狀態 READY, 包含此服務的 2 個處理程式 ... -- 確實證實了之前的判斷,罪魁禍首水落石出 命令執行成功 |
證實備機是否主機名為 hp
C:\Documents and Settings\Administrator>hostname hp
C:\Documents and Settings\Administrator>ping hp Pinging hp [192.168.0.80] with 32 bytes of data: Reply from 192.168.0.80: bytes=32 time<1ms TTL=128 |
故障後期處理
1. 登出備機的 remote_listener alter system set remote_listener='' scope=both; 2. 生產庫重新載入監聽 C:\Documents and Settings\Administrator>lsnrctl reload LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 02-12 月 -2014 14:18:51 Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) 命令執行成功
C:\Documents and Settings\Administrator>lsnrctl status LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 02-12 月 -2014 14:18:57 Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production 啟動日期 24-11 月 -2014 20:52:17 正常執行時間 7 天 17 小時 26 分 40 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程式引數檔案 D:\oracle\product\10g\network\admin\listener.ora 監聽程式日誌檔案 D:\oracle\product\10g\network\log\listener.log 監聽端點概要 ... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=svr01)(PORT=1521))) 服務摘要 .. 服務 "+ASM" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "+ASM_XPT" 包含 1 個例程。 例程 "+asm2", 狀態 BLOCKED, 包含此服務的 1 個處理程式 ... 服務 "orcl" 包含 2 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 1 個處理程式 ... 服務 "orcl_XPT" 包含 2 個例程。 例程 "orcl1", 狀態 READY, 包含此服務的 31 個處理程式 ... 例程 "orcl2", 狀態 READY, 包含此服務的 1 個處理程式 ... --orclstd 已經消失了 命令執行成功 3. 客戶端再次利用 orcl 連線資料庫正常 D:\>sqlplus system/abc123@orcl
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 12 月 2 14:21:01 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
連線到 : Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, OLAP, Data Mining and Real Application Testing options
SQL> show parameter name
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string orcl db_unique_name string orcl global_names boolean FALSE instance_name string orcl2 lock_name_space string log_file_name_convert string service_names string orcl 到此處問題已經解決 |
技術結論
透過以上一步步的推敲,終於發現了問題的根本原因,由於利用rman異機恢復時remote_listener引數所引起。 orclstd庫在遠端註冊例項狀態了,然後路由到80備機了,導致生產使用orcl報錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2770909/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於TRIZ的引風機故障分析
- ORA-00130 引發的故障
- 由OGG引發的資料庫故障資料庫
- OGG DDL觸發器引發的故障系列(一)觸發器
- 【故障公告】部落格系統升級到 .NET 5.0 引發的故障
- 關於RAC的remote_listenerREM
- Oracle DBLink bug引發的故障(Session Hang Memory leak)OracleSession
- 【故障公告】資料庫伺服器 CPU 100% 引發全站故障資料庫伺服器
- 【故障公告】阿里雲 RDS 資料庫突發 CPU 近 100% 引發全站故障阿里資料庫
- 【故障公告】redis 伺服器當機引發部落格站點故障Redis伺服器
- 【故障公告】資料庫伺服器再次 CPU 100% 引發全站故障資料庫伺服器
- 【故障公告】資料庫伺服器 CPU 100% 引發網站故障資料庫伺服器網站
- 【故障公告】K8s CofigMap 掛載問題引發網站故障K8S網站
- MySQL 8.0因關閉Gtid 引發從庫故障MySql
- 【故障公告】攻擊式巨量併發請求再次來襲,引發部落格站點故障
- dubbo泛化引發的生產故障之dubbo隱藏的坑
- 【故障公告】訪問高峰資料庫伺服器 CPU 100% 引發全站故障資料庫伺服器
- [20211115]12c以上版本Last Login Time 引發的故障.txtAST
- 故障分析 | Kubernetes 故障診斷流程
- 故障分析 | Greenplum Segment 故障處理
- 【故障公告】阿里雲 RDS 例項 CPU 100% 故障引發全站無法正常訪問阿里
- 【故障公告】阿里雲 RDS SQL Server 資料庫例項 CPU 100% 引發全站故障阿里SQLServer資料庫
- 未初始化變數引發執行時故障變數
- 故障分析 | 血的教訓-由慢查詢引發的備份等待導致資料庫連線打滿資料庫
- MySQL:一個innodb_thread_concurrency設定不當引發的故障MySqlthread
- 詳述一條SQL引發的高CPU故障處理過程SQL
- 【故障公告】阿里雲搶佔式例項伺服器被釋放引發全站故障阿里伺服器
- postgreSQL troubleshooting 故障分析SQL
- DNS伺服器故障引發流量異常問題-VeCloudDNS伺服器Cloud
- 一次交換空間設定不合理引發的故障
- 故障分析 | MySQL死鎖案例分析MySql
- 【故障公告】14:30-15:30左右,資料庫伺服器異常情況引發全站故障資料庫伺服器
- 【故障公告】誤新增的過濾規則引發所有博文訪問500
- 故障分析 | 從 Insert 併發死鎖分析 Insert 加鎖原始碼邏輯原始碼
- 故障分析 | MySQL 從機故障重啟後主從同步報錯案例分析MySql主從同步
- LRAT-2000-KIT特殊故障的分析方法
- 故障分析 | 是誰偷走了我的 IO
- 故障分析 | show processlist 引起的效能問題