博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【故障处理】因AIX异步IO没有开启导致SQL*Plus不可用
阅读量:5945 次
发布时间:2019-06-19

本文共 4344 字,大约阅读时间需要 14 分钟。

今天处理了一起因异步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脚本;

下载地址是:http://download.oracle.com/otn/aix/oracle11g/rootpre_aix.zip

第二种方法:使用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 --


转载地址:http://gozxx.baihongyu.com/

你可能感兴趣的文章
SD卡
查看>>
使用servletAPI三种方式简单示例
查看>>
单片机不同晶振怎么计算延迟时间?
查看>>
视频会议十大开源项目排行
查看>>
SQL Server Management Studio 简单使用说明
查看>>
【前端】javascript判断undefined、null、NaN;字符串包含等
查看>>
玩转iOS开发 - 数据缓存
查看>>
李洪强-C语言3-数组
查看>>
C# 6.0的字典(Dictionary)的语法
查看>>
使用ShareSDK实现第三方授权登录、分享以及获取用户资料效果,项目中包含:源码+效果图+项目结构图...
查看>>
三级联动效果
查看>>
Sprite和UI Image的区别
查看>>
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql/mysql.sock' (2)
查看>>
python练习笔记——丑数的计算
查看>>
OpenCV + python 实现人脸检测(基于照片和视频进行检测)
查看>>
XSS 前端防火墙 —— 天衣无缝的防护
查看>>
Node.js umei图片批量下载Node.js爬虫1.00
查看>>
客户端拖动控件封装(让拖动变得更简单)
查看>>
linux下IPTABLES配置详解
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q131-Q134)
查看>>