網(wǎng)絡(luò )設備重新更換配置,或者網(wǎng)絡(luò )鏈路有變化的時(shí)候常會(huì )出點(diǎn)問(wèn)題。今天的問(wèn)題記載一下,以防不時(shí)之需。 新的數據中心核心的ORACLERAC服務(wù)器剛剛順利安裝完畢,應用組安裝測試數據庫進(jìn)行測試,剛剛開(kāi)始就碰到這個(gè)問(wèn)題:
應用組的同事,使用pl/sql developer v7.15查一個(gè)表
select * from ALL_xxx;
數據查不出來(lái),報出一個(gè)錯誤:
ORA-12152: TNS:unable to send breakmessage
從錯誤內容看到關(guān)鍵字TNS,此類(lèi)問(wèn)題,大部分和網(wǎng)絡(luò )相關(guān),基本上和數據庫服務(wù)進(jìn)程關(guān)系不大,因此不要去花時(shí)間研究databaseserver
1 .換工具用sqlplus測試,發(fā)現沒(méi)有任何問(wèn)題,可以正常顯示所有數據(沒(méi)法解釋?zhuān)y道sqlplus打包的方式不一樣?不愧是經(jīng)典工具,也許是高手開(kāi)發(fā)的,比較聰明,能適應各種惡劣環(huán)境。)
2.變換SQL語(yǔ)句,發(fā)現數據少的時(shí)候不會(huì )出問(wèn)題,到一定的行數的時(shí)候出問(wèn)題,本次 19行以?xún)葲](méi)有問(wèn)題,超過(guò)則有問(wèn)題, 順著(zhù)這個(gè)思路,為什么記錄少可以,只能說(shuō)明oracle此時(shí)發(fā)的包足夠的小,小到Oracle數據庫包發(fā)出后,os和網(wǎng)絡(luò )設備不需要進(jìn)行拆包。要測試現有的網(wǎng)絡(luò )環(huán)境,最大可以發(fā)送多大的包,有個(gè)辦法比較笨的辦法直接不停的ping-f ,多測幾次就可以測出
C:\Users\andzen>ping -f-l 1280 172.16.133.2
正在 Ping 172.16.133.2 具有 1280 字節的數據:
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置 DF。
172.16.133.2 的 Ping 統計信息:
數據包: 已發(fā)送 = 4,已接收 = 0,丟失 = 4 (100%丟失),?
C:\Users\andzen>ping -f -l 1278 172.16.133.2
正在 Ping 172.16.133.2 具有 1278 字節的數據:
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置DF。?
需要拆分數據包但是設置 DF。
172.16.133.2 的 Ping 統計信息:
數據包: 已發(fā)送 = 4,已接收 = 0,丟失 = 4 (100% 丟失),
C:\Users\andzen>ping -f-l 1273 172.16.133.2
正在 Ping 172.16.133.2 具有 1273字節的數據:
需要拆分數據包但是設置 DF。
需要拆分數據包但是設置 DF。
172.16.133.2 的 Ping 統計信息:
數據包: 已發(fā)送 = 2,已接收 = 0,丟失 = 2 (100% 丟失),
C:\Users\andzen>ping -f-l 1272 172.16.133.2
正在 Ping 172.16.133.2 具有 1272字節的數據:
來(lái)自 172.16.133.2 的回復: 字節=1272 時(shí)間=1msTTL=252
來(lái)自 172.16.133.2 的回復: 字節=1272 時(shí)間=1msTTL=252
來(lái)自 172.16.133.2 的回復: 字節=1272 時(shí)間=1msTTL=252
來(lái)自 172.16.133.2 的回復: 字節=1272 時(shí)間=1msTTL=252
172.16.133.2 的 Ping 統計信息:
數據包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時(shí)間(以毫秒為單位):
最短 = 1ms,最長(cháng) = 1ms,平均 = 1ms
C:\Users\andzen>ping-f -l 1271 172.16.133.2
正在 Ping 172.16.133.2 具有 1271字節的數據:
來(lái)自 172.16.133.2 的回復: 字節=1271 時(shí)間=1msTTL=252
來(lái)自 172.16.133.2 的回復: 字節=1271 時(shí)間=1msTTL=252
來(lái)自 172.16.133.2 的回復: 字節=1271 時(shí)間=1msTTL=252
172.16.133.2 的 Ping 統計信息:
從以上一步一步嘗試可以得知,小于1272字節的包是可以不需要拆分的通過(guò)網(wǎng)絡(luò ),到達數據庫服務(wù)器的,說(shuō)明網(wǎng)絡(luò )環(huán)境的異常,使的系統最大能發(fā)生不超過(guò)1272byte的包。?
如果不想徹底解決問(wèn)題,此時(shí)有比較簡(jiǎn)單的辦法解決問(wèn)題。
在所有訪(fǎng)問(wèn)oracle數據庫的客戶(hù)端tnsname.ora或者其他連接字符串(如JDBC)里面:
配置SDU參數等于1272。
為了證實(shí)這個(gè)想法:
1).修改TNSNAME.ORA文件,在里面增加(SDU=1272)
2).重新啟動(dòng)pl\sql developer v7.15
3).重新執行上面的select語(yǔ)句,果然正常了
這種辦法適合作為臨時(shí)解決問(wèn)題的辦法,只是規避了問(wèn)題而已,如果有幾百個(gè)個(gè)客戶(hù)端配置,工作量也不少,做為一個(gè)負責任的DBA,應該找到異常的根源。?
3.看看是不是網(wǎng)絡(luò )MTU設置問(wèn)題,如果多個(gè)網(wǎng)絡(luò )設備mtu不一致,經(jīng)常會(huì )導致大包不能正常傳送,基本上否定MTU不匹配導致,因為10000字節的包都可以通過(guò)(會(huì )自動(dòng)分拆包)
ping -l 10000 172.16.133.2
來(lái)自 172.16.133.2 的回復: 字節=10000 時(shí)間=2ms TTL=252
來(lái)自 172.16.133.2 的回復: 字節=10000 時(shí)間=2ms TTL=252
來(lái)自 172.16.133.2 的回復: 字節=10000 時(shí)間=2ms TTL=252
基本沒(méi)有問(wèn)題
4. 換測試程序,用exp程序
Export: Release10.1.0.4.0 - Production on Thu Jun 4 14:52:46 2009
Copyright (c) 1982,2004, Oracle. All rights reserved.
Connected to: OracleDatabase 10g Enterprise Edition Release 10.1.0.4.0 - 64bitProduction
With thePartitioning, Real Application Clusters and Data Miningoptions
Export done inZHS16GBK character set and UTF8 NCHAR character set
server uses UTF8character set (possible charset conversion)
. exportingpre-schema procedural objects and actions
。。。。。。?
.exporting cluster definitions
. about to exportSC_OWNER's tables via Conventional Path ...
. . exporting table ADMIN_PRIVILEGES 2 rows exported
EXP-00091: Exportingquestionable statistics.
EXP-00091: Exportingquestionable statistics.
. . exporting table ALL_SOURCES
EXP-00056: ORACLEerror 12152 encountered
ORA-12152: TNS:unable to send breakmessage
EXP-00008: ORACLEerror 1023 encountered
ORA-01023: Cursorcontext not found (Invalid cursor number)
EXP-00000: Exportterminated unsuccessfully
問(wèn)題依舊,2行的表可以成功,下面的表ALL_xxx (820行)就不行了,說(shuō)明還是和數據量多少和包有關(guān)系
4. 換測試客戶(hù)端,把語(yǔ)句換到RAC服務(wù)器上測試
. . exporting table USER_SESSION_BK 311687 rowsexported
. . exporting table USER_SESSION_MENU_BK 0 rows exported
. . exporting table WORKSTATION 74 rows exported
. . exporting table XMI_ASYNC_MSG_JRNL_BK 8069 rows exported
. . exporting table TOAD_PLAN_SQL 0 rows exported
. . exporting table TOAD_PLAN_TABLE 84196 rowsexported
. exportingsynonyms
...........................
. exportingmaterialized views
. exporting snapshotlogs
. exporting jobqueues
. exporting refreshgroups and children
. exportingdimensions
. exportingpost-schema procedural objects and actions
. exportingstatistics
Export terminatedsuccessfully without warnings.
沒(méi)有問(wèn)題,311687條的表都可以exp出來(lái),反面證明:
數據庫server進(jìn)程沒(méi)有問(wèn)題;?
問(wèn)題還在于跨網(wǎng)段的設備或防火墻;
問(wèn)題定位之后,下面的工作需要網(wǎng)絡(luò )工程師一起合作完成:
1.把防火墻上,針對某幾個(gè)客戶(hù)端,打開(kāi)旁路,等于防火墻讓這些客戶(hù)端訪(fǎng)問(wèn)的數據直接通過(guò),不檢查了,
在測試exp,果然正常了,基本確定問(wèn)題在防火墻上;
2. 然后網(wǎng)絡(luò )工程師關(guān)閉旁路,繼續測試,巧的是,此時(shí)exp也仍然正常,大家都很奇怪。
3.然后居然發(fā)現所有有問(wèn)題的客戶(hù)端都正常了,包含之前沒(méi)有開(kāi)旁路的
4.反過(guò)來(lái)想一想為什么呢,網(wǎng)絡(luò )工程師說(shuō),剛剛在開(kāi)通旁路的時(shí)候,同時(shí)升級了防火墻軟件版本,原來(lái)的低版本軟件沒(méi)有旁路功能,這樣就好理解了,防火的原來(lái)的軟件有缺陷(bug),于是把所有同類(lèi)的防火墻都更新軟件,事后網(wǎng)絡(luò )工程師說(shuō)我們的防火墻很便宜,才幾萬(wàn)塊,看來(lái),便宜真的沒(méi)有多少好貨。
錯誤信息參考:
p1:oracle>oerr ORA 12152
12152, 00000, "TNS:unable to send breakmessage"
// *Cause: Unable to send break message.Connection probably disconnected.
// *Action: Reestablish connection. If the error ispersistent, turn
// on tracing and reexecute theoperation.?
p1:oracle>oerr ora 12151
12151, 00000, "TNS:received bad packet type from networklayer"
// *Cause: Internal error.
// *Action: Not normally visible to the user. For furtherdetails, turn
// on tracing and reexecute the operation. If errorpersists, contact
// Worldwide CustomerSupport.?
p1:oracle>oerr ora 12571
12571, 00000, "TNS:packet writer failure"
// *Cause: An error occurred during a datasend.
// *Action: Not normally visible to the user. For furtherdetails, turn
// on tracing and reexecute the operation. If errorpersists, contact
// Oracle Customer Support.
聯(lián)系客服