【故障处理】因AIX异步IO没有开启导致SQL*Plus不可用

简介: 今天处理了一起因异步IO没有开启导致Oracle的SQL*Plus不可用的故障。记录在此,供参考。1.故障场景 情况是这样的,系统是使用IBM的HACMP做的两节点HA,在第一个节点部署完Oracle(11.1.0.6)并在挂载的存储上创建完数据库后,使用tar方法将第一个节点上的Oracle软件解tar到第二个节点上完成软件安装。
今天处理了一起因异步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 --

目录
相关文章
|
9天前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
26 4
|
5月前
|
调度 数据库 Python
【专栏】异步IO在处理IO密集型任务中的高效性
【4月更文挑战第27天】本文介绍了Python并发编程和异步IO,包括并发的基本概念(多线程、多进程、协程),线程与进程的实现(threading和multiprocessing模块),协程的使用(asyncio模块),以及异步IO的原理和优势。强调了异步IO在处理IO密集型任务中的高效性,指出应根据任务类型选择合适的并发技术。
141 2
|
11天前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
在数据驱动时代,高效处理大规模数据和高并发请求至关重要。Python凭借其优雅的语法和强大的库支持,成为开发者首选。本文将介绍Python中的并发与异步编程,涵盖并发与异步的基本概念、IO密集型任务的并发策略、CPU密集型任务的并发策略以及异步IO的应用。通过具体示例,展示如何使用`concurrent.futures`、`asyncio`和`multiprocessing`等库提升程序性能,帮助开发者构建高效、可扩展的应用程序。
26 0
|
3月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
60 3
|
3月前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
【7月更文挑战第17天】Python并发编程中,异步编程(如`asyncio`)在IO密集型任务中提高效率,利用等待时间执行其他任务。但对CPU密集型任务,由于GIL限制,多线程效率不高,此时应选用`multiprocessing`进行多进程并行计算以突破限制。选择合适的并发策略是关键:异步适合IO,多进程适合CPU。理解这些能帮助构建高效并发程序。
69 6
|
3月前
|
开发框架 并行计算 .NET
从菜鸟到大神:Python并发编程深度剖析,IO与CPU的异步战争!
【7月更文挑战第18天】Python并发涉及多线程、多进程和异步IO(asyncio)。异步IO适合IO密集型任务,如并发HTTP请求,能避免等待提高效率。多进程在CPU密集型任务中更优,因可绕过GIL限制实现并行计算。通过正确选择并发策略,开发者能提升应用性能和响应速度。
85 3
|
3月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
【7月更文挑战第17天】在数据驱动时代,Python凭借其优雅语法和强大库支持成为并发处理大规模数据的首选。并发与异步编程是关键,包括多线程、多进程和异步IO。对于IO密集型任务,如网络请求,可使用`concurrent.futures`和`asyncio`;CPU密集型任务则推荐多进程,如`multiprocessing`;`asyncio`适用于混合任务,实现等待IO时执行CPU任务。通过这些工具,开发者能有效优化资源,提升系统性能。
77 4
|
3月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
【7月更文挑战第18天】Python并发编程中,异步IO适合IO密集型任务,如异步HTTP请求,利用`asyncio`和`aiohttp`实现并发抓取,避免等待延迟。而对于CPU密集型任务,如并行计算斐波那契数列,多进程通过`multiprocessing`库能绕过GIL限制实现并行计算。选择正确的并发模型能显著提升性能。
73 2
|
3月前
|
开发框架 数据挖掘 .NET
显微镜下的Python并发:细说IO与CPU密集型任务的异步差异,助你精准施策!
【7月更文挑战第16天】在Python并发编程中,理解和区分IO密集型与CPU密集型任务至关重要。IO密集型任务(如网络请求)适合使用异步编程(如`asyncio`),以利用等待时间执行其他任务,提高效率。CPU密集型任务(如计算)则推荐使用多进程(如`multiprocessing`),绕过GIL限制,利用多核CPU。正确选择并发策略能优化应用性能。
45 2
|
3月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在Flink算子内部使用异步IO可以通过什么办法实现
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
下一篇
无影云桌面