Oracle srvctl的小bug

yangtingkun發表於2007-03-29

今天發現一個SRVCTL命令的小bug


SRVCTL工具可以用來管理RAC環境,用來啟動、關閉資料庫、監聽和其他服務。

今天在使用srvctl關閉監聽的時候,發現一個小問題:

$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:31:11

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER_RACNODE2版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 28-3 -2007 10:27:02正常執行時間 1 0 小時 4 9 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener_racnode2.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.225)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.223)(PORT=1521)))
服務摘要
..服務 "+ASM" 包含 1 個例程。
例程 "+ASM2", 狀態 BLOCKED, 包含此服務的 1 個處理程式...服務 "+ASM_XPT" 包含 1 個例程。
例程 "+ASM2", 狀態 BLOCKED, 包含此服務的 1 個處理程式...服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...服務 "testrac" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 2 個處理程式
...服務 "testracXDB" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 1 個處理程式
...服務 "testrac_XPT" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 2 個處理程式
...命令執行成功
$ srvctl stop listener -n racnode2
$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:32:44

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:
無監聽程式

TNS-12560: TNS:
協議介面卡錯誤
TNS-00511:
無監聽程式
Solaris Error: 146: Connection refused
$ lsnrctl start

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:32:47

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

啟動/data/oracle/product/10.2/database/bin/tnslsnr: 請稍候...

TNSLSNR for Solaris: Version 10.2.0.2.0 - Production系統引數檔案為/data/oracle/product/10.2/database/network/admin/listener.ora寫入/data/oracle/product/10.2/database/network/log/listener.log的日誌資訊監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnode2)(PORT=1521)))

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 29-3 -2007 10:32:47正常執行時間 0 0 小時 0 0 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnode2)(PORT=1521)))
監聽程式不支援服務
命令執行成功
$ srvctl stop listener -n racnode2
$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:33:00

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 29-3 -2007 10:32:47正常執行時間 0 0 小時 0 12 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnode2)(PORT=1521)))
監聽程式不支援服務
命令執行成功

如果用srvctl關閉監聽後,再用lsnrctl start開啟監聽。這時srvctl仍然認為監聽已經關閉。因此,再次使用srvctl關閉監聽,似乎srvctl根本沒有去執行。

如果希望srvctl可以關閉監聽,那麼需要先用srvctl啟動監聽,然後再關閉。

$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:50:47

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 29-3 -2007 10:32:47正常執行時間 0 0 小時 18 0 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=racnode2)(PORT=1521)))
服務摘要
..服務 "+ASM" 包含 1 個例程。
例程 "+ASM2", 狀態 BLOCKED, 包含此服務的 1 個處理程式...服務 "+ASM_XPT" 包含 1 個例程。
例程 "+ASM2", 狀態 BLOCKED, 包含此服務的 1 個處理程式...服務 "testrac" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 2 個處理程式
...服務 "testracXDB" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 1 個處理程式
...服務 "testrac_XPT" 包含 2 個例程。
例程 "testrac1", 狀態 READY, 包含此服務的 1 個處理程式...
例程 "testrac2", 狀態 READY, 包含此服務的 2 個處理程式
...命令執行成功
$ srvctl start listener -n racnode2
$ srvctl stop listener -n racnode2
$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 10:51:28

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:
無監聽程式

TNS-12560: TNS:
協議介面卡錯誤
TNS-00511:
無監聽程式
Solaris Error: 146: Connection refused

搜尋了一下metalink,沒有發現關於這個問題的說明。

而且,這個問題只在關閉監聽時出現,啟動監聽則沒有問題:

$ srvctl start listener -n racnode2
$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 11:14:25

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER_RACNODE2版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 29-3 -2007 11:14:20正常執行時間 0 0 小時 0 4 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener_racnode2.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.225)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.223)(PORT=1521)))
服務摘要
..服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...命令執行成功
$ lsnrctl stop

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 11:14:29

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))命令執行成功
$ srvctl start listener -n racnode2
$ lsnrctl status

LSNRCTL for Solaris: Version 10.2.0.2.0 - Production on 29-3 -2007 11:14:50

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

正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER
STATUS
------------------------
別名
LISTENER_RACNODE2版本 TNSLSNR for Solaris: Version 10.2.0.2.0 - Production啟動日期 29-3 -2007 11:14:44正常執行時間 0 0 小時 0 5 跟蹤級別 off安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案
/data/oracle/product/10.2/database/network/admin/listener.ora監聽程式日誌檔案 /data/oracle/product/10.2/database/network/log/listener_racnode2.log監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.225)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.198.223)(PORT=1521)))
服務摘要
..服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...命令執行成功

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69222/,如需轉載,請註明出處,否則將追究法律責任。

相關文章