關於 tnsping
後面我們會**可能會發生的各種連線錯誤。但在這之前,我們先來快速瀏覽一下 oracle 的乙個實用工具 tnsping。我們將** tnsping 能做什麼,不能做什麼,並揭漏一些有關 tnsping 的傳言。
tnsping 工具用來判斷 oracle net 網路上的乙個服務是否可達。它的完整的使用指導可以在《net services administrators guide》中找到,此文件和其他文件一樣,都可以在都可以在 tahiti.oracle.com 上找到(現已改為 docs.oracle.com ---- 譯註)。tnsping 在 sqlnet 中的作用相當於網路配置中的 ping。
我們來看乙個簡單的例子。假設 tnsnames.ora 中的專案如下:
c:\>type c:\oracle\product\10.2.0\client_1\network\admin\tnsnames.ora
# tnsnames.ora network configuration file: c:\oracle\product\10.2.0\client_1\network\admin\tnsnames.ora
# generated by oracle configuration tools.
#*************************==
larry =
(description =
(address_list =
(address = (protocol = tcp)(host = vmlnx01)(port = 1521)
)(connect_data =
(service_name = vlnxora1)))
c:\>
我們來做如下測試:
看到上面的輸出結果,我們會認為:好啊,連上了。但實際情況是,可能連上了,也可能沒有。這一點我們後面再講。這裡,我們先來看看,從以上的輸出中我們能得到那些有用的資訊。
首先,從第三行我們可以發現,當前執行的客戶端版本是 10.2.0.4。注意這是客戶端的本版,而不是資料庫的版本。兩者不必非得一樣,這裡告訴我們的僅是客戶端的版本。
從第十行可以看出,我們是用 tnsnames 介面卡來對別名進行解析的。(這裡,別名是 vlnxora1。)( 原文如此,應為 larry ---- 譯註)介面卡的選擇是根據 sqlnet.ora 中 names.directory_path引數 的值來進行的。
第十一行和第十二行說明了,sqlnet 是如何將別名,或者叫連線識別符號,解析成連線描述符的。我們看到,連線請求是用 tcp 網路協議來傳送的(protocol = tcp),被傳送到伺服器 vlmnx01 上 (host = vmlnx01),傳送到了這個伺服器的 1521 埠。所有這些資訊都是從 tnsnames.ora 檔案中的 larry 項中得到的,如上面的**所示。
從第十三行我們得到的是,響應時間為 20 毫秒。這是不太準確的。根據《net administrators guide》,tnsping 顯示的網路往返時間是估算的。
還可以看到,這是乙個到 (service_name = vlnxora1) 的連線請求。那是它是否真的連線到了這個服務呢?我們來看看監聽的狀態:
第二十行表明,「監聽不支援任何服務」(the listener supports no services)。怎麼會是這樣?tnsping 不是成功了嗎?真正的連線請求會發生什麼?
結果當然是,「監聽程式當前無法識別連線描述符中請求的服務」。當前的實際狀態是,監聽程式任何服務都不會識別。需要說明的是,我如何保證監聽程式不能識別任何服務的。因為我設定監聽程式使用動態資料庫註冊機制,而在測試開始之前我已經停掉了資料庫。不僅監聽不會識別出任何資料庫,而且根本就沒有資料庫在執行。我們可以指定 service_name=fubar 或 service_name=btzlflx,但結果都會是一樣的。
如果監聽根本就沒有執行,會是什麼情況呢?我們來將監聽停掉試試:
[oracle@vmlnx01 ~]$ lsnrctl stop
lsnrctl for linux: version 10.2.0.4.0 -production on 27-feb-2011 15:40:41
connecting to(address=(protocol=tcp)(host=)(port=1521))
the command completed successfully
[oracle@vmlnx01 ~]$ lsnrctl status
lsnrctl for linux: version 10.2.0.4.0 -production on 27-feb-2011 15:40:50
connecting to(address=(protocol=tcp)(host=)(port=1521))
tns-12541: tns:no listener
tns-12560: tns:protocol adapter error
tns-00511: no listener
linux error: 111: connection refused
[oracle@vmlnx01 ~]$
再來進行測試:
c:\>tnsping larry
正如我們所期待的,tnsping 報告沒有監聽。
結論:雖然 tnsping 是診斷各種連線問題的有用工具,但有非常重要的一點我們一定要清楚:它卻不會返回資料庫例項的狀態。這絕不是 tnsping 的短板。我們必須知道,這是乙個診斷 sqlnet 問題的工具,而 sqlnet 不是資料庫。
Orlace 資料庫連線的那些事兒 伺服器端(四)
remote listener 與 local listener 我們以例項來說明這兩種監聽。假設我們有乙個雙節點集群 host1 和 host2,其 vip 分別為 host1 vip 和 host2 vip。此集群上執行乙個 rac 資料庫 orcl 其中,例項1 orcl1 位於 host1 ...
資料庫的那些事
一 常用的sql命令 1.select 獲取資料 2.update 更新資料 3.delete 刪除資料 4.insert into 插入新資料 5.create database 建立新資料庫 6.alter database 修改資料庫 7.create table 建立新錶 8.alter t...
資料庫設計的那些事
1,表和字段的設計規範,當然每個公司有其自己的規範 1 要有可讀性 eg studentaddress,不要設計成stuaddress 2 表意性 eg student,不要設計成ch1 3 盡量不要縮寫 eg studentaddress,不要設計成stuadd 2,字段型別的選擇 在進行資料庫資...