1. 程式人生 > >監聽總結之3.監聽命令:lsnrctl工具的三個命令start、stop和status都是分步執行的

監聽總結之3.監聽命令:lsnrctl工具的三個命令start、stop和status都是分步執行的

首先,我們需要知道兩個事情:

1、lsnrctl工具下的三個命令,分別是status、stop、start。

我們從三個命令執行後在螢幕上顯示的結果來看,可以發現一個共性,就是都有“正在連線到”這句話 。

2、每次進入lsnrctl工具的環境時,lsnrctl工具都會自動讀取一次listener.ora檔案裡的全部內容(當然包括SID_LIST_監聽名這個部分的內容)存到記憶體上。此後,在未退lsnrctl工具的環境前,status、stop、start這三命令在執行到“正在連線到”這一步時,都是使用上述的內容,無論進入lsnrctl工具的環境後,listener.ora檔案裡的內容是否有變化,都不影響。雖然start命令執行啟動監聽程式這一步時,是要重新讀取一次listener.ora檔案的(“監聽:”這部分的內容就是證明)。但是,

“正在連線”後跟著的內容又還是進入lsnrctl工具環境時讀取listener.ora的內容。

為什麼說三個命令是分步執行的?

lsnrctl工具下的三個命令,分別是status、stop、start。

我們從三個命令執行後在螢幕上顯示的結果來看,可以發現一個共性,就是都有“正在連線到”這句話 。

而且status和start兩個命令在“正在連線到”這句話 之後的要顯示的內容(基本)是一樣的。

還有start執行後在螢幕上顯示的結果的開頭部分有“啟動tnsctl。。。。。監聽:”的字樣,說明它先是(如果該監聽程式原先不存在的話,就會先建立再)啟動一個監聽程式。

由此,可以看出三個命令裡都是分步執行的。

三個命令分步執行的具體步驟的說明:

start 監聽名A(共有四步)

1、首先,start命令會檢查是否有與監聽名A同名的監聽程式已經啟動了,或是雖然與監聽名A不同名但是監聽配置和它一樣的監聽程式已經啟動了。

    如果這兩種情況有一個發生,就會提示“某某監聽程式已經啟動”。

2、接著,若是沒有上述的情況發生,則進入第二步,即執行啟動監聽程式操作,具體如下:

   在Linux下,

     (start命令) 重新讀取一次listener.ora檔案裡的名為監聽名A的監聽配置(“監聽:”這部分的內容就是證明)。不過,應該沒有讀取SID_LIST_監聽名這個部分的內容,這個未證實過。

      (或是start命令) tnslsnr.exe先複製出自己的一個程序,之後並根據讀取來的listener.ora檔案裡的相關監聽配置後

初始化該程序。這樣,就啟動了一個監聽程式的過程完成了。

  在window下,

   start 監聽名A  時,會先去啟動對應的監聽服務(在作業系統的服務管理器裡)。如果沒有對應的監聽服務(名),就會自己去建立一個監聽服務,且會在start命令執行後顯示的結果裡有一個提示:failed to open service,error 1060.

    例如,我們啟動一個名為OracleOraHome11TNSListener的監聽服務時,該監聽服務就會根據[控制面板]=[服務]=OracleOraHome11TNSListener 的屬性裡“可執行檔案的路徑項”(為"F:/oracle/ora11/bin/TNSLSNR.EXE)的資訊來啟動TNSLSNR.EXE(如果還未啟動的話)。TNSLSNR.EXE則會根據監聽服務OracleOraHome11TNSListener提取其裡面的監聽名部分,即這裡的Listener。再根據這個監聽名Listener,TNSLSNR.EXE就會從listener.ora檔案裡讀取相關的監聽配置,這樣TNSLSNR.EXE就會去監聽監聽配置所說的監聽點了。這個就是window下所謂的啟動監聽程式的過程。

  附加:

例如,在未退出lsnrctl環境前,且名為Listener的監聽程式還在執行時,用sc命令刪除了對應的監聽服務,命令如下:sc delete OracleOraHome11TNSListener,則此時輸入stopListener或是statusListener命令,就會提示:failed to start service,error 1058。這是因為在進入lsnrctl環境後,監聽服務已經啟動或是startListener時建立了監聽服務,則會標記該服務名已經存在。標記有該服務,不代表真實該服務是否存在的。        stop或是status命令不直接作用於TNSLSNR.EXE,而是直接作用於監聽服務,再通過監聽服務作用於TNSLSNR.EXE,所以stop或是status命令發現監聽服務沒有啟動,就試圖啟動它,但是它已經被刪除不存在的了,故而提示:failed to start service。

3、  最後,連線到“正在連線到”後面跟著的監聽配置所對應的監聽程式上。若該監聽程式未啟動,則提示“無監聽程式”;

4、若該監聽程式已經啟動,則顯示(status)該監聽程式的狀態資訊。

註釋:

1、執行Start A時,若是提示“B已經啟動”,則A就真的未啟動。若是提示“無監聽程式”,則A還是會啟動了的。

通過退出lsnrctl工具環境再進入後status A即可檢視是否已經啟動。 或者Tnsping   包含A所有配置條目的網路服務名 看是否每條 配置條目都通。不過這個還一定,因為啟動每條配置條目對應的監聽點可能是別的好幾個監聽程式。

2、start時雖然會重新讀取listener.ora檔案裡的相關內容,但是它不會去更新先前進入lsnrctl工具環境時從listener.ora檔案讀取到記憶體上的內容。因此,進入lsnrctl工具環境後,若A此時還未啟動且又修改了A的監聽配置的話,則此時執行start A到它的第三步,即“正在連線到”這一步,會提示“無監聽程式”,雖然實際上此時監聽程式A已經啟動了。

3、  oracle系統在執行”start A“時,會根據監聽名A去查詢到listener.ora檔案裡對應的監聽配置,進而建立(並啟動)一個同名的監聽程式的。


status 監聽名A(共有兩步)

1、直接連線到“正在連線到”後面跟著的監聽配置所對應的監聽程式上。若該監聽程式未啟動,則提示“無監聽程式”;

2、若該監聽程式已經啟動,則之後再顯示(status)該監聽程式的狀態資訊。

stop  監聽名A(共有兩步)

1、也是直接連線到“正在連線到”後面的監聽配置所對應的監聽程式上。若該監聽程式未啟動,則提示“無監聽程式”;

2、若該監聽程式已經啟動,則之後再停止(stop)該監聽程式。

提示:

0、“正在連線到”後顯示的內容是在進入lsnrctl工具環境時從listener.ora檔案讀取的。

      假設一個監聽程式對應的監聽配置裡有包含多條監聽配置條目,則“正在連線到”後一般顯示的只有其中的第一條監聽配置條目,但是實際還是會連線到這多條監聽配置條目各自對應的監聽點上的

      我們知道,“正在連線到”後一般顯示的是“lsnrctl命令   監聽名A”所指的名為監聽名A的監聽配置裡的第一條監聽配置條目。只要目前已經啟動的這些監聽程式們中有哪一個的監聽配置條目這個第一條監聽配置條目是一樣的,即會連線到該啟動監聽程式如果沒有存在和這個第一條監聽配置條目是一樣的,則oracle系統(的某程序)還要看該名為監聽名A的監聽配置裡的第二條監聽配置條目。以此類推。如果該名為監聽名A的監聽配置裡的有一條監聽配置條目存在於目前已經啟動的這些監聽程式們中那些監聽配置條目中的,則oracle系統就不會再往下看該名為監聽名A的監聽配置裡監聽配置條目。或者就一直檢視到該名為監聽名A的監聽配置裡的最後一條監聽配置條目。

1、“ '正在連線到'後面跟著的監聽配置所對應的監聽程式”,這句話的意思是隻要目前已經啟動的這些監聽程式們中有哪一個的監聽配置條目(所謂監聽配置條目,就是“協議+IP地址+埠號”這個資訊)和“正在連線到”後面跟著的監聽配置條目是一樣的,即可連線成功。“正在連線到”這一步是不看目前已經啟動的監聽程式的監聽名是否和“正在連線到”後面跟著的監聽配置(條目所對應的監聽(指的是如start監聽名A裡的監聽名A)是一樣的。

2、三個命令裡共有的一步 是 “ '正在連線到'後面跟著的監聽配置所對應的監聽程式。如果所連線的監聽程式未啟動,則這三個命令的執行結果就都會提示“無監聽程式”。

===================================================================================================================================

另一種敘述版本:

status 監聽名A(指的是程式 ,這裡)   :是先連線到“正在連線到”後面的監聽配置所對應的監聽程式上,之後再顯示(status)該監聽程式的狀態資訊。

stop  監聽名B   :是先連線到“正在連線到”後面的監聽配置所對應的監聽程式上,之後再停止(stop)該監聽程式。

提示:如果所連線的監聽程式未啟動,則這兩個命令的執行結果就會提示“無監聽程式”。

start 監聽名C   :是先檢查是否已經有叫“監聽名C”的監聽程式啟動了,啟動了,該命令就不會再往下執行,並提示“已有監聽名C的監聽程式啟動”。如果未啟動,則再檢查是否有雖然與監聽名C不同名但是監聽配置和它一樣的監聽程式已經啟動了。若是沒有,則啟動監聽名C的監聽程式。最後,在連線到該監聽名C的監聽程式(也就是“正在連線到”後面的監聽配置所對應的監聽程式)上,執行和status最後一步一樣的步驟,即顯示該監聽程式的狀態資訊。

在進入lsnrctl工具環境時,lsnrctl工具會一次性讀取listener.ora檔案上的所有內容到記憶體上,在未退出lsnrctl工具環境前,執行任何命令(start命令除外),都不會再次讀取listener.ora檔案上的內容,所以在未退出lsnrctl工具環境前,無論listener.ora檔案上的內容是否有改變或是乾脆將listener.ora檔案刪除或是移走,都不會影響lsnrctl工具裡命令的執行結果。

除非,例如在進入lsnrctl工具環境後,start監聽名A,再status監聽名A。之後,退出lsnrctl工具環境。然後,修改監聽名為A的監聽配置。之後,再重新進入lsnrctl工具環境,status監聽名A,則提示“無監聽程式”,因為此時執行status時連線到的修改配置後的監聽程式,而該程式未啟動。未修改前的配置的監聽程式仍是處於啟動狀態的。這樣,就會影響lsnrctl工具裡命令的執行結果。會影響命令執行結果。

status和stop

start區別於status與stop的地方:

status和stop執行時,都不會重新讀取listener.ora檔案的內容。但是start則會重新讀取listener.ora的內容。執行時,都不會重新讀取listener.ora檔案的內容

相關推薦

總結3.命令lsnrctl工具命令startstopstatus分步執行

首先,我們需要知道兩個事情: 1、lsnrctl工具下的三個命令,分別是status、stop、start。 我們從三個命令執行後在螢幕上顯示的結果來看,可以發現一個共性,就是都有“正在連線到”這句話 。 2、每次進入lsnrctl工具的環境時,lsnrctl工具都會自動讀

Linux - 查看文件信息的命令

-i put 詳細 and linu lib class uil 示例 ls命令 - list directory contents 顯示文件詳細信息:ls -l <file name> file命令 — determine file type determin

Sendip 命令行發包工具,支持IPTCPUDP等

blog and 目前 inux logs ddr https prot ack Sendip是一個linux平臺的命令行發數據包工具,目前(2018年2月)支持的協議有ipv4、ipv6、icmp、tcp、udp、bgp、rip、ntp,作者表示其他協議將會後面支持,當他

給定區間[-2的31次方, 2的31次方]內的3整數ABC,請判斷A+B是否大於C。

pat鏈接:https://www.nowcoder.com/pat/6/problem/4077題目描述給定區間[-2的31次方, 2的31次方]內的3個整數A、B和C,請判斷A+B是否大於C。輸入描述:輸入第1行給出正整數T(<=10),是測試用例的個數。隨後給出T組測試用例,每組占一行,順序給出A

3.6 rc指令碼(start方法) 3.7 rc指令碼(stopstatus方法) 3.8 rc指令碼(以daemon方式啟動)

3.6-3.7 rc指令碼(start、stop和status方法) #!/usr/bin/env python # -*- coding: utf-8 -*- # [@Version](https://my.oschina.net/u/931210) : python 2.7 # [@Time

胡八一Java(六)表示式的幾簡單的小陷阱

1、複合賦值運算子的陷阱 a=a+5與a +=5 是有區別的。a +=5等價於 a=(a的型別)(a+5);這就是複合運算子中包含的隱式型別轉換。 在什麼時候會遇到此型別的錯誤呢? short a =5; a = (a-2); 此句編譯不通過,把一個int

pat:給定區間[-2的31次方, 2的31次方]內的3整數ABC,請判斷A+B是否大於C。

題目描述 給定區間[-2的31次方, 2的31次方]內的3個整數A、B和C,請判斷A+B是否大於C。 輸入描述: 輸入第1行給出正整數T(<=10),是測試用例的個數。隨後給出T組測試用例,每組佔一行,順序給出A、B和C。整數間以空格分隔。 輸出描述:

ApolloStudio高手路(8)用Python呼叫.Net(C#VB.Net等)開發的動態連結庫(DLL庫檔案)實現相互協作

ApolloStudio是基於.Net與Python雙架構下的實現,這樣的架構體系使得其具有傳統定製軟體無法比擬的超強拓展性,在本文中我們將介紹這兩者是如何在ApolloStudio平臺上實現優勢互補的。由於在ApolloStudio中使用的更易學習的Python作為主導指令碼語言,這裡我們將介

學習筆記《Java核心技術卷I》---- 第七章 異常斷言日誌

異常物件都是派生與Throwable的一個例項 派生於Error類或RuntimeException類的所有異常稱為非受查異常,所有其他異常稱為受查異常 一個方法必須宣告所有可能丟擲的受查異常,而非受查異常要麼不可控制,要麼就應該避免發生 關鍵字throws位於方法之

CSS 前處理器技術已經非常的成熟了,而且也湧現出了越來越多的 CSS 的前處理器框架。本文便總結下 SassLess CSSStylus這前處理器的區別各自的基本語法。

CSS 前處理器技術已經非常的成熟了,而且也湧現出了越來越多的 CSS 的前處理器框架。本文便總結下 Sass、Less CSS、Stylus這三個前處理器的區別和各自的基本語法。 1.什麼是 CSS 前處理器 CSS 前處理器是一種語言用來為 CSS 增加一些程式設計的的特性,無需

敏捷開發系列學習總結(11)——Scrum敏捷開發流程的角色會議和物件

Scrum敏捷開發流程主要包擴三個角色、四個會議和個三物件。 三個角色 Scrum團隊中包括三個角色,他們分別是產品負責人、開發團隊和 專案的直接管理者(Scrum Master)。 Scrum 團隊是自組織、跨職能的完整團隊。自組織團隊決定如何最好地完成他們的工作

selenium 瀏覽器導航欄的按鈕(backforwardrefresh)

今天這幾個方法非常簡單,就是我們能看到的瀏覽器導航欄的三個按鈕:後退、前進、重新整理 driver.back() driver.forward() driver.refresh() 不多說,上程式碼試試 # -*- co

假裝很忙的命令工具

有時候你很忙。而有時候你只是需要看起來很忙,就像電影中的黑客一樣。有一些開源工具就是幹這個的。 如果你在消磨時光時看過諜戰片、動作片或犯罪片,那麼你就會清晰地在腦海中勾勒出黑客的電腦螢幕的樣子。就像是在《黑客帝國》電影中,程式碼雨 一樣的十六進位制數字流,又或

Linux中set,envexport這命令的區別

Linux中set,env和export這三個命令的區別 set命令顯示當前shell的變數,包括當前使用者的變數; env命令顯示當前使用者的變數; export命令顯示當前匯出成使用者變數的shell變數。     每個shell有自己特有的變數(se

剖析Elasticsearch集群系列分散式的CtranslogLucene段

共識——裂腦問題及法定票數的重要性 共識是分散式系統的一項基本挑戰。它要求系統中的所有程序/節點必須對給定資料的值/狀態達成共識。已經有很多共識演算法諸如Raft、Paxos等,從數學上的證明了是行得通的。但是,Elasticsearch卻實現了自己的共識系統(zen

pgpool 五 pgpool的startstopreload

os: ubuntu 16.04 db: postgresql 9.6.8 pgpool: pgpool-II-3.7.7 pgpool start $ which pgpool /usr/pgpool-3.7.7/bin/pgpool $ pgpool --help $ pgp

ssh-keyscan命令--Linux命令應用大詞典729命令解讀

內容來源於人民郵電出版社《Linux命令應用大詞典》 講述729個命令,1935個例子 學習Linux系統的參考書、案頭書,遇到不懂的命令或命令選項一查即可 爭取每天都發布內容 更多命令

uptime命令--Linux命令應用大詞典729命令解讀

內容來源於人民郵電出版社《Linux命令應用大詞典》 講述729個命令,1935個例子 學習Linux系統的參考書、案頭書,遇到不懂的命令或命令選項一查即可 爭取每天都發布內容 本文出

通過git命令列從github或伺服器上克隆修改更新專案

目前專案的管理基本上都用上了git,svn現在很少用了,所以我們必須要了解git客戶端的使用!(        git log退出方法:英文狀態下按Q)第一步:在本地新建一個資料夾,作為本地倉庫,如“texzt”,直接開啟該資料夾,並單擊右鍵,選擇git bash here

sysctl命令--Linux命令應用大詞典729命令解讀

內容來源於人民郵電出版社《Linux命令應用大詞典》 講述729個命令,1935個例子 學習Linux系統的參考書、案頭書,遇到不懂的命令或命令選項一查即可 爭取每天都發布內容 更多命令檢視部落格: sysctl命令 使用sysctl命令可以在系統執行