【故障處理】因AIX非同步IO沒有開啟導致SQL*Plus不可用
今天處理了一起因非同步IO沒有開啟導致Oracle的SQL*Plus不可用的故障。記錄在此,供參考。
1.故障場景
情況是這樣的,系統是使用IBM的HACMP做的兩節點HA,在第一個節點部署完Oracle(11.1.0.6)並在掛載的儲存上建立完資料庫後,使用tar方法將第一個節點上的Oracle軟體解tar到第二個節點上完成軟體安裝。但當在第二節點上執行SQL*Plus時丟擲如下的錯誤:
$ sqlplus / as sysdba
exec(): 0509-036 Cannot load program sqlplus because of the following errors:
0509-130 Symbol resolution failed for /usr/lib/libc.a[aio_64.o] because:
0509-136 Symbol kaio_rdwr64 (number 0) is not exported from
dependent module /unix.
0509-136 Symbol listio64 (number 1) is not exported from
dependent module /unix.
0509-136 Symbol acancel64 (number 2) is not exported from
dependent module /unix.
0509-136 Symbol iosuspend64 (number 3) is not exported from
dependent module /unix.
0509-136 Symbol aio_nwait (number 4) is not exported from
dependent module /unix.
0509-150 Dependent module libc.a(aio_64.o) could not be loaded.
0509-026 System error: Cannot run a file that does not have a valid format.
0509-192 Examine .loader section symbols with the
'dump -Tv' command.
2.故障原因
從報錯資訊中很容易發現到處都充斥的“aio”關鍵字,AIO = Asynchronous I/O 顧名思意“非同步I/O”是也。
根本原因是AIX作業系統的非同步I/O沒有開啟。
3.故障處理
既然定位了問題,處理就簡單了,這裡給出兩種非同步I/O的開啟方法。
1)使用作業系統命令開啟非同步I/O
(1)確認所需的bos.rte.aio是否安裝妥當
# lslpp -l bos.rte.aio
Fileset Level State Description
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bos.rte.aio 5.3.0.62 COMMITTED Asynchronous I/O Extension
(2)使用如下命令開啟AIX作業系統的非同步I/O
# mkdev -l aio0
aio0 Available
# chdev -P -l aio0 -a autoconfig='available'
aio0 changed
2)使用rootpre.sh指令碼開啟非同步I/O
如果您能找到rootpre.sh,直接執行這個指令碼便可達到開啟非同步I/O的目的。
可氣的是在64-bit IBM RS 6000 AIX 5L版本的Oracle 11.1.0.6.0的安裝介質裡面根本無法找到這個rootpre.sh指令碼,在安裝開始時也不會像以前一樣提示進行這樣的check。這是Oracle的一個internal bug。竟然被遺忘了,這一點在MOS中有詳細記載,ML號是468472.1,文章名字是:The "rootpre.sh" Script. And "rootpre" Directory Are Missing From The Oracle11g Release 1 (11.1.0.6) Media。文中給出了三種處理方法:
第一種方法:從OTN上下載被遺漏的rootpre.sh指令碼;
下載地址是:
第二種方法:使用10.2.0.1安裝介質中的rootpre.sh亦可;
第三種方法:下載patch 6613550,執行其中提供的rootpre.sh指令碼。
最後摘錄一下rootpre.sh指令碼中有關非同步I/O設定的內容,方便大家參考。
#====================================================================================
#======================= configure Asynchronous I/O =================================
#====================================================================================
#--- function to check the autoconfig value on an AIO device
is_autoconfig_available () {
DEVICE=${1}
VALUE=`$LSATTR -E -l ${DEVICE}|${GREP} autoconfig|${AWK} '{print $2}'`
if [ "${VALUE}" = "available" ]; then
return 1
else
return -1
fi
}
#--- In AIX 6.1 and newer AIO is already configured and ioo is used,
#--- not chdev to modify AIO configuration
if [ $OSVER -lt 6 ]; then
log_con "\nConfiguring Asynchronous I/O...."
AIO=`${LSDEV} -C -t aio|${AWK} '{print $2}'`
case ${AIO} in
*Available*) log_con "Asynchronous I/O is already defined"
is_autoconfig_available "aio0"
if [ $? -ne 1 ]; then
log_con "Setting autoconfig to available for aio0"
log_do "${CHDEV} -P -l aio0 -a autoconfig=available"
fi
;;
*Defined*) log_do "${MKDEV} -l aio0"
log_do "${CHDEV} -P -l aio0 -a autoconfig=available"
;;
*) log_con "Asynchronous I/O is not installed on this system."
log_con "You will need to install it, and either configure it yourself using"
log_con "'smit aio' or rerun the Oracle root installation procedure."
;;
esac
#--- configure POSIX AIO if AIX 5.2 or greater, we may want to use it
if [ ${OSVER}${OSREL} -ge 52 ]; then
log_con "\nConfiguring POSIX Asynchronous I/O...."
POSIX_AIO=`${LSDEV} -C -t posix_aio|${AWK} '{print $2}'`
case ${POSIX_AIO} in
*Available*) log_con "Posix Asynchronous I/O is already defined"
is_autoconfig_available "posix_aio0"
if [ $? -ne 1 ]; then
log_con "Setting autoconfig to available for posix_aio0"
log_do "${CHDEV} -P -l posix_aio0 -a autoconfig=available"
fi
;;
*Defined*) log_do "${MKDEV} -l posix_aio0"
log_do "${CHDEV} -P -l posix_aio0 -a autoconfig=available"
;;
*) log_con "Posix Asynchronous I/O is not installed on this system."
log_con "You will need to install it, and either configure it yourself using"
log_con "'smit aio' or rerun the Oracle root installation procedure."
;;
esac
fi
fi
4.小結
這個故障是由於部署過程中不夠細心導致的,如若能嚴格按照既定的操作規範進行部署,一般都可以避免此類問題的發生。
BTW:當遇到大段的報錯資訊時不要驚慌,對於故障排查來說,報錯資訊就是提示資訊,這是好事。最可怕的不是遇到報錯資訊,而是出現了故障沒有任何的資訊作為指引!!
Good luck.
secooler
10.01.22
-- The End --
1.故障場景
情況是這樣的,系統是使用IBM的HACMP做的兩節點HA,在第一個節點部署完Oracle(11.1.0.6)並在掛載的儲存上建立完資料庫後,使用tar方法將第一個節點上的Oracle軟體解tar到第二個節點上完成軟體安裝。但當在第二節點上執行SQL*Plus時丟擲如下的錯誤:
$ sqlplus / as sysdba
exec(): 0509-036 Cannot load program sqlplus because of the following errors:
0509-130 Symbol resolution failed for /usr/lib/libc.a[aio_64.o] because:
0509-136 Symbol kaio_rdwr64 (number 0) is not exported from
dependent module /unix.
0509-136 Symbol listio64 (number 1) is not exported from
dependent module /unix.
0509-136 Symbol acancel64 (number 2) is not exported from
dependent module /unix.
0509-136 Symbol iosuspend64 (number 3) is not exported from
dependent module /unix.
0509-136 Symbol aio_nwait (number 4) is not exported from
dependent module /unix.
0509-150 Dependent module libc.a(aio_64.o) could not be loaded.
0509-026 System error: Cannot run a file that does not have a valid format.
0509-192 Examine .loader section symbols with the
'dump -Tv' command.
2.故障原因
從報錯資訊中很容易發現到處都充斥的“aio”關鍵字,AIO = Asynchronous I/O 顧名思意“非同步I/O”是也。
根本原因是AIX作業系統的非同步I/O沒有開啟。
3.故障處理
既然定位了問題,處理就簡單了,這裡給出兩種非同步I/O的開啟方法。
1)使用作業系統命令開啟非同步I/O
(1)確認所需的bos.rte.aio是否安裝妥當
# lslpp -l bos.rte.aio
Fileset Level State Description
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bos.rte.aio 5.3.0.62 COMMITTED Asynchronous I/O Extension
(2)使用如下命令開啟AIX作業系統的非同步I/O
# mkdev -l aio0
aio0 Available
# chdev -P -l aio0 -a autoconfig='available'
aio0 changed
2)使用rootpre.sh指令碼開啟非同步I/O
如果您能找到rootpre.sh,直接執行這個指令碼便可達到開啟非同步I/O的目的。
可氣的是在64-bit IBM RS 6000 AIX 5L版本的Oracle 11.1.0.6.0的安裝介質裡面根本無法找到這個rootpre.sh指令碼,在安裝開始時也不會像以前一樣提示進行這樣的check。這是Oracle的一個internal bug。竟然被遺忘了,這一點在MOS中有詳細記載,ML號是468472.1,文章名字是:The "rootpre.sh" Script. And "rootpre" Directory Are Missing From The Oracle11g Release 1 (11.1.0.6) Media。文中給出了三種處理方法:
第一種方法:從OTN上下載被遺漏的rootpre.sh指令碼;
下載地址是:
第二種方法:使用10.2.0.1安裝介質中的rootpre.sh亦可;
第三種方法:下載patch 6613550,執行其中提供的rootpre.sh指令碼。
最後摘錄一下rootpre.sh指令碼中有關非同步I/O設定的內容,方便大家參考。
#====================================================================================
#======================= configure Asynchronous I/O =================================
#====================================================================================
#--- function to check the autoconfig value on an AIO device
is_autoconfig_available () {
DEVICE=${1}
VALUE=`$LSATTR -E -l ${DEVICE}|${GREP} autoconfig|${AWK} '{print $2}'`
if [ "${VALUE}" = "available" ]; then
return 1
else
return -1
fi
}
#--- In AIX 6.1 and newer AIO is already configured and ioo is used,
#--- not chdev to modify AIO configuration
if [ $OSVER -lt 6 ]; then
log_con "\nConfiguring Asynchronous I/O...."
AIO=`${LSDEV} -C -t aio|${AWK} '{print $2}'`
case ${AIO} in
*Available*) log_con "Asynchronous I/O is already defined"
is_autoconfig_available "aio0"
if [ $? -ne 1 ]; then
log_con "Setting autoconfig to available for aio0"
log_do "${CHDEV} -P -l aio0 -a autoconfig=available"
fi
;;
*Defined*) log_do "${MKDEV} -l aio0"
log_do "${CHDEV} -P -l aio0 -a autoconfig=available"
;;
*) log_con "Asynchronous I/O is not installed on this system."
log_con "You will need to install it, and either configure it yourself using"
log_con "'smit aio' or rerun the Oracle root installation procedure."
;;
esac
#--- configure POSIX AIO if AIX 5.2 or greater, we may want to use it
if [ ${OSVER}${OSREL} -ge 52 ]; then
log_con "\nConfiguring POSIX Asynchronous I/O...."
POSIX_AIO=`${LSDEV} -C -t posix_aio|${AWK} '{print $2}'`
case ${POSIX_AIO} in
*Available*) log_con "Posix Asynchronous I/O is already defined"
is_autoconfig_available "posix_aio0"
if [ $? -ne 1 ]; then
log_con "Setting autoconfig to available for posix_aio0"
log_do "${CHDEV} -P -l posix_aio0 -a autoconfig=available"
fi
;;
*Defined*) log_do "${MKDEV} -l posix_aio0"
log_do "${CHDEV} -P -l posix_aio0 -a autoconfig=available"
;;
*) log_con "Posix Asynchronous I/O is not installed on this system."
log_con "You will need to install it, and either configure it yourself using"
log_con "'smit aio' or rerun the Oracle root installation procedure."
;;
esac
fi
fi
4.小結
這個故障是由於部署過程中不夠細心導致的,如若能嚴格按照既定的操作規範進行部署,一般都可以避免此類問題的發生。
BTW:當遇到大段的報錯資訊時不要驚慌,對於故障排查來說,報錯資訊就是提示資訊,這是好事。最可怕的不是遇到報錯資訊,而是出現了故障沒有任何的資訊作為指引!!
Good luck.
secooler
10.01.22
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-625819/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【問題處理】因ASM磁碟組空間不足導致資料庫例項無法啟動的故障處理ASM資料庫
- 因為修改windows管理員密碼導致sql server 2005不能啟動處理Windows密碼SQLServer
- AIX系統故障處理AI
- AIX下nfs故障導致oracle process hangAINFSOracle
- 【恢復】非歸檔模式下因誤刪除資料檔案導致資料庫無法OPEN的故障處理模式資料庫
- VXFS啟用非同步IO導致的嚴重問題非同步
- AIX下由於nfs故障導致oracle hangAINFSOracle
- 【故障處理】因GREP“花哨”功能導致ORA-12157錯誤的排查過程
- pymysql 非執行緒安全導致的故障.MySql執行緒
- 【RAC】處理因ASM例項異常導致RAC第一節點例項異常終止故障ASM
- 【故障處理】修改主機名導致oracle例項無法啟動暨如何修改hostnameOracle
- java同步非阻塞IOJava
- Java 非阻塞 IO 和非同步 IOJava非同步
- 【RAC】處理因ons導致CPU使用率過高的問題
- 【故障處理】因授權資訊丟失導致IMP時出現IMP-00041錯誤的模擬與分析
- 【問題處理】因誤修改inittab檔案導致Oracle 10gR2 CRS無法啟動Oracle 10g
- 【故障處理】序列cache值過小導致CPU利用率過高
- 歸檔日誌滿導致的資料庫掛起故障處理資料庫
- IO模式和IO多路複用(阻塞IO、非阻塞IO、同步IO、非同步IO等概念)模式非同步
- 由AIX系統故障導致系統重啟,使Oracle資料庫自動啟動例項AIOracle資料庫
- Oracle DG同步失敗故障處理(二)Oracle
- SQL Server 因設定最大記憶體過小導致無法啟動SQLServer記憶體
- 【ARCHIVE】模擬因無法歸檔導致日誌無法切換故障及一般處理方法兩則Hive
- Oracle RAC啟動因CTSS導致的異常Oracle
- 記一次非同步處理導致Jetty Request物件洩漏非同步Jetty物件
- 磁碟IO故障導致的SQLServer資料庫無法寫入SQLServer資料庫
- 故障分析 | MySQL convert 函式導致的字符集報錯處理MySql函式
- 【故障處理】【oerr】【grep】謹防grep“花哨”功能導致oerr工具無法使用
- Spring Redis開啟事務支援錯誤用法導致服務不可用SpringRedis
- sqlplus"strace: exec: Exec format error"故障處理SQLORMError
- 因為arp 問題導致的vip 故障與解決方案
- Oracle 12c因bug導致ORA-04031問題處理過程Oracle
- 【故障恢復】因spfile修改錯誤導致資料庫無法啟動的恢復方法資料庫
- 線上MYSQL同步報錯故障處理總結MySql
- MySQL 常見同步複製故障處理方法MySql
- MySQL 5.6因為OOM導致資料庫重啟MySqlOOM資料庫
- IO - 同步 非同步 阻塞 非阻塞的區別非同步
- 執行SQL查詢導致磁碟耗盡故障演示SQL