Oracle在RAC環境下遠端客戶端連線的問題
資料庫伺服器
系統:Solaris 5.9 兩臺做cluster,共享磁碟陣列櫃
資料庫:Oracle 9.2.0.5 做的是RAC
現象:最近2個月發現不時的客戶端應用程式無法登入,像宕機一樣一直等待(2個月前一直正常,這套系統已經投入使用5年)。
應用伺服器
Windows 2003,安裝了oracle客戶端工具,版本9.2.0.1。這套系統是三層結構體系,客戶端應用程式通過應用伺服器來對資料庫進行訪問。這是應用伺服器tnsnames.ora的部分內容,應用程式就是通過NODEORA這個服務名來連線資料庫的。
NODEORA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun2)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVICE_NAME = fmis.lsdyj)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
)
)
)
NODE1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fmis1)
)
)
NODE2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fmis2)
)
)
當客戶端應用程式無法登入時,我登入到應用伺服器,使用sqlplus system/
為了馬上解決問題,我只能startup force重新啟動一臺資料庫,一般來說就能恢復,但偶爾,還必須重啟另一臺資料庫。
(使用者是上帝啊,NND,不然我的工作早丟了)
為了復現這樣的故障,我進行了大量測試,終於發現當客戶端進行了大任務查詢時(需要數分鐘才能完成的綜合查詢),就會出現這種故障。當客戶端這個大任務完成後竟然發現數據庫自動恢復正常了。於是我想到可能是資料庫工作不正常導致CPU資源佔用太高的原因,於是故障時登入solaris,使用prstat命令檢視程序資訊,會發現其中一臺資料庫伺服器的cpu佔用率25%,另一臺完全是空載。對於大型的查詢,這樣的負載為過麼?
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
20735 oracle 4126M 4087M cpu0 0 0 2:37:37 25% oracle/2
20729 oracle 3995M 3950M sleep 59 0 0:00:50 0.6% oracle/2
761 root 60M 24M sleep 29 10 74:45:18 0.1% java/12
10936 root 5896K 4952K cpu2 59 0 0:00:00 0.0% prstat/1
…………
我也仔細檢查了oracle各項引數和狀態,或許是我水平太差,看不出哪裡與這種故障有關
沒法了,用explorer工具匯出了solaris系統狀態併發給solaris工程師,看看是不是系統出現毛病,solaris工程師的回答是:系統完全正常……
有一次發生故障時,我發現在應用層伺服器上使用sqlplus system/
為了進一步縮小故障範圍,我在兩臺solaris的tnsnames.ora添加了如下程式碼:
FMIS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun2)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVICE_NAME = FMIS.LSDYJ)
)
)
FMIS1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = FMIS.LSDYJ)
(INSTANCE_NAME = FMIS1)
)
)
FMIS2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = fmislssun2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = FMIS.LSDYJ)
(INSTANCE_NAME = FMIS2)
)
)
再登入到solaris,使用sqlplus system/
ORA-03106: fatal two-task communication protocol error
可是對於ora-03106,說的是通訊的問題,我在資料庫伺服器上測試也會有些故障,不可能是網路通訊或者客戶端連線程式版本的問題,但那又是什麼原因引起的?
並且ora-03106並不是正常情況出現的,只有我在資料庫伺服器上測試時,強行按Ctrl+c才出現的提示?那麼這個錯誤會不會是一種誤導?
那麼還能有什麼原因?
今天下班我再次手動復現故障,然後查詢了與共享伺服器有關的檢視,其中gv$queue檢視結果如下:
SQL> select * from gv$queue;
INST_ID PADDR TYPE QUEUED WAIT TOTALQ
------- ---------------- ---------- ------ ---- ------
2 00 COMMON 0 0 30083
2 000000040F4852D8 DISPATCHER 0 0 30505
1 00 COMMON 15 0 10788
1 000000040F4852D8 DISPATCHER 0 0 10924
發現queued列有一個值為15,按照Oracle的解釋,理想情況不應該存在排隊!
common佇列存在排隊,說明沒有足夠的共享伺服器程序被用於清空佇列,而恰好oracle的引數shared_servers值為 1。
於是我把shared_servers的值改為3,重啟資料庫後再執行大型查詢,這是佇列仍然為空,故障沒有出現!
問題好像解決了,不過我又想到新的問題:
1. 例項引數max_shared_servers的值為20,那麼在共享伺服器程序不夠用的時候,oracle為什麼不啟動新的程序而在原有的唯一的共享伺服器程序上排隊?
2. 我啟動了三個共享伺服器程序才讓排除沒有發生,但如果這時同時有3個或者更多的人在執行這樣的大查詢,那麼三個伺服器可能也不夠,那時故障將再次發生!
3. 我重新修改了所有應用伺服器上的tnsnames.ora,保證所有連線都啟用了load_balance和failover,但出故障的時候,為什麼沒有一個客戶連線會連線到空閒的例項上(正常的時候)?
不管怎樣,共享伺服器上的問題已經找到原因了,如果還有問題,大不了再增加共享伺服器的數量,或者直接使用專用伺服器!感謝達人們的幫忙!先給分!以後有關這問題的新發現,我再貼上來
相關推薦
Oracle在RAC環境下遠端客戶端連線的問題
資料庫伺服器系統:Solaris 5.9 兩臺做cluster,共享磁碟陣列櫃資料庫:Oracle 9.2.0.5 做的是RAC現象:最近2個月發現不時的客戶端應用程式無法登入,像宕機一樣一直等待(2個月前一直正常,這套系統已經投入使用5年)。應用伺服器 Windows 2
mysql8遠端客戶端連線方式
mysql 8.0 預設使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password。 從 5.7 升級 8.0 版本的不會改變現有使用者的身份驗證方法,但新使用者會預設使用新的 cac
遠端客戶端連線資料庫時提示TNS-12541: TNS: 無監聽程式
在windows環境下監聽程式和本地服務檔案配置如下 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(P
jdk8環境下,用eclipse indigo進行Zookeeper叢集java api客戶端連線,因版本報錯
Unresolved compilation problem: The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files S
ubuntu下銳捷客戶端連線校園網
ubuntu下,進入銳捷客戶端資料夾目錄下crtl+alt+T進入命令終端 (或者直接在終端中使用cd 切到相關目錄 ) 先獲取許可權(第一次需要,以後不用),然後系統會讓你輸入密碼,然後輸入登陸命令 輸入以下終端命令即可聯網: sudo chomd +x r
spring boot下JedisCluster客戶端的配置,連線Redis叢集
1,pom依賴新增: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</arti
MySQL多例項的環境下,伺服器端本地連線到指定例項的問題(sock方式連線)
涉及到sock連線的問題。 為了測試MySQL的某些個特性,在一個機器上安裝了多個MySQL的例項,如下截圖,有兩個例項,一個埠是8000,一個埠是8001。在使用mysql -uroot -p -P8001連線至埠號為8001的MySQL例項的時候,show variables like '%po
oracle客戶端連線遠端伺服器的搭建過程
同一網路環境下的兩臺電腦,分別裝上oracle程式 任選其中一臺電腦作為伺服器,建立表空間,建立使用者,分配許可權。客戶端要連線伺服器時必須通過監聽程式才可以實現,所以在伺服器端先建立一個監聽程式 服務名字最好是資料庫的名字,主機號設定為本機的(ipconfig測試出來的)
配置客戶端連線遠端資料庫(oracle)
在使用者輸入sqlplus system/[email protected]後,sqlplus程式會自動到sqlnet.ora檔案中找NAMES.DEFAULT_DOMAIN引數,假如該引數存在,則將該引數中的值取出,加到網路服務名的後面,即此例中你的輸入由sqlplus system/[email
ftp(網路傳輸)--BaseRequesHandler(tcp協議下的多個客戶端連線)--urandom(隨機生成位元組字串)--hmac(類似於hashlib)
ftp(網路傳輸,下載)簡單例項: server服務端: # server 服務端 import json import socket import struct server = socket.socket() server.bind(("127.0.0.1",8001)) server.lis
hadoop HA場景下 java客戶端遠端訪問hdfs配置
當hadoop namenode是HA叢集時,客戶端遠端訪問hdfs有兩種實現方法: 方法1:將所有關於namenode的引數寫入Configuration物件中。 程式碼: package co
在windows10環境下遠端連線阿里雲Ubunutu下MySQL的方法
在阿里雲上安裝好mysql後 執行 ~# vim /etc/mysql/mysql.conf.d/mysqld.cnf 命令,修改繫結的 ip 重啟 mysql 的服務 ~# service
linux安裝oracle client客戶端連線遠端資料庫
有時候,需要在linux伺服器遠端連線oracle資料,此時需要在伺服器上安裝oracle clinet客戶端,用來連線遠端的資料庫。採用rpm安裝方式(root執行)1:下載rpm軟體包oracle-
Sql2008 配置遠端連線及客戶端連線不上的解決方法
將"客戶端協議"的"TCP/IP"也修改為“Enabled” 配置完成,重新啟動SQL Server 2008。此時應該可以使用了,但是還是要確認一下防火牆。開啟防火牆設定。將SQLServr.exe(C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEX
CentOS 7 啟用遠端連線和使用postgis等客戶端連線
設定遠端訪問,允許B類192.168.0.0/16 網段訪問,設定listen_addresses = '*'。資料庫伺服器為19
Linux下l2tp客戶端配置並解決pppd斷線問題
不為 dead minutes 根據 1.4 安裝 signal 未能 請求 1.安裝客戶端軟件使用xl2tpd,pppyum install -y xl2tpd ppp 2.配置xl2tpd vim /etc/xl2tpd/xl2tpd.conf 最下方追加下面代碼 [l
LINUX下mysql客戶端不能輸入中文
自己 很多 輸入中文 sql linu 如果 lan 自帶 linux 今天遇到了這個問題,在LINUX下輸入中文,沒有問題,但在MYSQL客戶端上無法輸入中文,很奇怪? 找了很多資料終於解決了這個問題,其實這個和字符集無關。通常出現在自己編譯的mysql版本上,如果是
003.FTP客戶端連線
一 命令列連線 注意: 1:命令列連線不支援目錄下載,使用mget也只會將目錄下檔案下載,不會下載目錄本身。 2:命令列連線不支援斷點續傳。 1 ftp [服務端IP] 2 -help #獲取幫助 3 -get #下載 4 -mget #下載一批檔案 5 -put #上傳
Linux下實現客戶端兩連跳ping百度,修改dns和nmcil的用法
1.客戶端跳兩次路由器ping百度 rht vmctl reset 重置虛擬機器 真機和虛擬機器開啟火牆策略 用在配置網路單元學的修改兩機閘道器 設定server為雙網絡卡路由端接觸客戶端Desktop閘道器為1.1.1.100 路由器端設定GATEWAY為真機,記得syste
PG客戶端連線伺服器端報Connection refused (0x0000274D/10061) 的問題分析
C:\Users\Administrator>psql -h 192.168.80.189 -U highgo -p 5899 psql: 無法聯接到伺服器: Connection refused (0x0000274D/10061)