oracle10客户端tnsname,连接Oracle RAC 的tnsname.ora设置
由于Oracle數據庫通常需要在不同地方被訪問,所以Oracle開發人員必須搞清楚數據庫性能如何被網絡通訊所影響。由Oracle提供的TNS(Transparent Network Substrate)允許不同數據庫之間的分布式通訊。
作為一種分布式協議的TNS,允許遠距離的系統之間的透明數據庫通訊。TNS成為Oracle邏輯數據請求與遠距離服務器的物理通訊之間的“絕緣體(insulator)”。由此,網絡管理人員可以控制很多方面的網絡性能優化,這樣,Oracle管理人員就極少獲得影響整個數據庫性能(圖A)的網絡設置的控制權。
你可以通過使用一些關鍵設置來提高分布式處理的性能,這篇文章討論了一些重要的設置。與分布式通訊相關的init.ora參數,比如tcp.nodelay,能夠用于改變Oracle數據庫中的信息包傳輸(packet-shipping)的機制。
本文中我也討論了sqlnet.ora, tnsnames.ora和protocol.ora文件中的參數。你可以使用這些方法來改變TCP信息包的配置和大小,改變之后的信息包能夠對網絡透明層產生重要影響,以達到提高整個Oracle交流的目的。
Oracle NET不能允許Oracle管理人員優化Oracle網絡參數以提高網絡性能。事實上,絕大部分網絡通訊都無法在Oracle環境中得到優化。Oracle *Net是位于特定網絡協議棧的OSI模型中的一個層。
為了響應一個數據請求,Oracle *Net 獲得數據并傳遞到協議棧。協議棧然后從這一數據建立一個信息包并傳遞到網絡。Oracle *Net的作用是將數據傳送到協議棧。
然而,DBA能夠控制網絡信息包的頻率和大小。在Oracle中存在著豐富的可以更改信息包頻率和大小的工具。一個簡單的例子就是以更低的頻率改變傳送更大數量快照的時間間隔。
可以使用不同參數來優化不同服務器之間的Oracle *Net.請記住,網絡優化是Oracle范圍之外的操作,一個合格的網絡管理人員應該經得起各種詢問。使用一些設置可以影響網絡信息包傳送的頻率和大小,這些設置包含在以下的參數文件。
protocol.ora文件—tcp.nodelay
sqlnet.oraserver 文件—automatic_ipc
sqlnet.oraclient 文件—break_poll_skip
tnsnames.ora文件—SDU, TDU
listener.ora文件—SDU, TDU, 以及queuesize
這些優化參數只影響Oracle *Net層的性能。現在讓我們仔細地查看這些參數,以及這些參數如何被調整以提高Oracle *Net.
在缺省的情況下,Oracle *Net在傳送數據之前一直等待,直到緩沖區填滿。所以請求一般不會立即發送它們的目的地。當大量數據從一端流往另一端時候,這種情況很常見。添加一個protocol.ora文件,然后指定一個tcp.nodelay停止緩沖溢出延遲,都可以解決這一問題。
protocol.ora文件可以被指定以顯示所有TCP/IP執行中的數據。這一參數可用于服務端和客戶端。protocol.ora聲明為:
tcp.nodelay = yes
指定這一參數使得TCP緩沖被跳過,以致可以立即發送每一個請求。然而請注意,網絡通訊量會增大,因為更小的,更快的信息包被傳遞,所以會導致網絡速度的減慢。
tcp.nodelay參數只有在TCP超時產生的時候才被使用。設置tcp.nodelay可以提高數據庫服務器之間的大量數據通訊的性能。
sqlnet.ora中的automatic_ipc參數
automatic_ipc參數忽略了網絡層,所以加快了數據庫的邏輯連接。當automatic_ipc=on,Oracle *Net查看當地數據庫是否定義以相同的名稱,如果是,網絡層將被忽略,因為此時的連接被直接轉譯為當地的IPC連接。這對于數據庫服務器是有用的,但對于Oracle *Net客戶端是沒有什么用處。
只有當一個Oracle *Net連接于當地數據庫的時候,automatic_ipc參數才有可能使用在數據庫服務器上。如果不需要當地連接,將這一參數設置為off,由此可以提高所有Oracle *Net客戶端的性能。
tnsnames.ora和listener.ora中的SDU和TDU參數
SDU(session data unit)和TDU(transport date unit)都位于tnsnames.ora and listener.ora文件中。SDU指定信息包的大小以傳送到網絡。在理想情況下,SDU不會超過MTU(maximum transmission unit)的大小。MTU是一個固定值,它取決于使用的實際網絡操作。Oracle建議SDU設置相同于MTU.
注意
在7.3.3之前,SDU和TDU都固定于2K而且不能改變。
TDU是使用于Oracle *Net分組數據的缺省信息包。在理想情況下,TDU參數應該是SDU參數的倍數。SDU和TDU的缺省值為2,048,最大值都為32,767字節。
雖然在Oracle的立場上,總是建議客戶能夠更好地規劃自己的應用,在有其它負載平衡方法的時候,盡量不要依賴于Oracle的Load Balance方法,但是往往在給客戶配置完OracleRAC數據庫以后,客戶都會要求要測試負載平衡(Load Balance)和TAF(Transparent Application Failover),并且將這兩個測試作為RAC是否安裝成功的標準。
這是一件很無奈的事情,像把旁枝末節看作了主要功能,甚至有些買櫝還珠的感覺,但是畢竟這是客戶,更了解Oracle Load Balance(后文用LB表示),才可以更好滿足客戶需求。
本文不牽涉TAF(可以參看老熊關于TAF的系列文章PartI,PartII,PartIII),如何在Oracle10g之后版本中在服務器端service層面設置TAF,可以參看Metalink Note:404644.1。
對于LB,在Oracle10g之前有Client端和Server端兩種,在Oracle10g之后又推出了Server端Service層面的LB配置,本文也不涉及Service層面的LB。
在Oracle9i,10g,11g版本中都適用的LB配置分為以下兩種。
(1) Client Side Connect Time Load Balance
(2) Server SideListenerConnection Load Balance (此處的Listener用以跟10g之后的Server Side Service Load Balance區分開)
1. Client Side Connect Time Load Balance
既然是Client端的LB,那么也就是不需要在數據庫服務器端配置任何參數,完全由客戶端機器上的tnsnames.ora文件中對于TNS的配置來決定,實際上也就是LOAD_BALANCE參數。
看一個例子,下面這樣的TNS配置就是啟用了客戶端的LB。
CLIENT_LOADBALANCE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac_lb)
)
)
(LOAD_BALANCE = yes)指示SQLNet隨機選擇ADDRESS_LIST列表中的任意一個監聽,將客戶端請求發送到此監聽上,通過這種方法來實現負載平衡。如果(LOAD_BALANCE = no)那么將會按照ADDRESS_LIST列表中的順序選擇監聽,只要這個監聽能夠正常連接那么就使用該監聽。
因此在某些負載平衡的解決方案中會使用(LOAD_BALANCE = no)但是在多個客戶端或者應用服務器端配置順序不同的ADDRESS_LIST,以此來實現人為的負載平衡。
如果在TNS配置時使用的是ADDRESS_LIST語法,那么必須顯示設置LOAD_BALANCE = yes,默認值LOAD_BALANCE = no。
2. Server Side Listener Connection Load Balance
要實現server side load balance要求監聽能夠知道在整個RAC環境中的各節點負載情況,節點負載情況是由PMON進程來定期更新的,而要讓PMON進程能夠通知其它節點自己節點的負載情況則需要設置數據庫初始化參數REMOTE_LISTENER。
在RAC數據庫服務器端的每個節點上的tnsnames.ora文件中設置如下的TNS名稱。
LISTENERS_RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=node1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST=node2-vip)(PORT = 1521))
)
)
然后設置REMOTE_LISTENER參數值為LISTENERS_RAC。
sql>ALTERsystemSETREMOTE_LISTENER='LISTENERS_RAC'scope=BOTH;
當某個實例的監聽收到客戶端連接請求,將會統籌考慮RAC環境中各個節點的負載情況,然后將該連接傳遞到具有最小負載的節點的最小負載實例上。
在10gR2版本之后,節點和實例的負載計算通過lbscore來完成,而lbscore則由兩個動態值決定:”goodness” 和 “delta”,這兩個值均由PMON來定期更新,計算公式如下:
Lbscore = Goodness (Received from PMON update)
Delta = New Delta (Received from PMON update)
在PMON定期更新的間隔,如果有新連接進入,那么lbscore的計算公式是:
Lbscore = Lbscore(previous) + Listener Delta
可以通過添加監聽的trace(TRACE_LEVEL_LISTENER = 16)來獲取lbscore的產生情況,更詳細的文檔請參看Metalink Note: 263599.1。
關于Failover,多說一句,其實Failover也有兩種,一種是Connect Time Failover,由客戶端TNS配置的(failover=on)參數控制,另外一種是TAF,由客戶端TNS配置中的failover_mode參數控制。
jdbc:oracle:thin:@(description=
(ADDRESS_LIST =
(address=(protocol=tcp)(host=192.168.1.44)(port=1521))
(address=(protocol=tcp)(host=192.168.1.45)(port=1521))
(address=(protocol=tcp)(host=192.168.1.46)(port=1521))
(load_balance=yes)//表示是否負載均衡
)
(connect_data =
//(server = dedicated)//該參數表示專用服務器模式
(service_name=ORACMS)//要操作數據庫的服務名
(failover_mode =//連接失敗后處理的方式
(type=session)//TYPE =SESSION表示當一個連接好的會話的實例發生故障,系統會自動將會話切換到其他可用的實例,前臺應用無須再度發起連接,但會話正在執行的SQL 需要重新執行。
(method=basic)//表示初始連接就連接一個接點
(retries=5)//連接失敗后重試連接的次數
(delay=15)//連接失敗后重試的延遲時間(以秒為單位) ????) ??) ) -- 要點說明 1、load_balance該參數值為yes就是采用負載均衡模式連接,為no就是采用非負載均衡模式 2、method該參數值為basic就是表示初始連接只有一個連接節點,為preconnect就是表示初始連接所有的rac接點 3、server 參數值 dedicated表示專用服務器模式,沒什么實際用處,可以去掉
總結
以上是生活随笔為你收集整理的oracle10客户端tnsname,连接Oracle RAC 的tnsname.ora设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: activity 生命周期_如何理解安卓
- 下一篇: pygame下载报错