• AIX操作系统上安装Oracle数据库必不可少的几项检查工作


    一直以来在UNIX/Linux like操作系统上安装Oracle数据库软件都是一门精细活,在实际安装软件前有不少操作系统参数或配置需要我们关心。我们以10g release 2为例,尽可能完整地列出所有有必要的预检查工作。

    1.确认使用的AIX版本经过认证,AIX 5.2之前的版本包括5.1都没有通过Oracle 10g的认证,换而言之如果你要安装10g的话就要保证AIX的版本>=5.2,我们可以通过以下脚本进行验证:

    OS=`/usr/bin/uname -s`
    if /usr/bin/test /usr/bin/oslevel
    then
      OSVER6CHAR=`/usr/bin/oslevel -r | /usr/bin/sed 's/-//''`
      OSVER3CHAR=`/usr/bin/oslevel -r | /usr/bin/awk '{print substr($1,1,3)}'`
      OSVER=`/usr/bin/oslevel -r`
    else
      OSVER6CHAR="000000"
      OSVER3CHAR="000"
      OSVER="000000"
    fi
    case $OSVER3CHAR in
         "414"|"415"|"420"|"421"|"432"|"433"|"510")
              /usr/bin/echo "$OS $OSVER is not certified with 10g RDBMS"
    
              ;;
         "520"|"530")
              if test -x /usr/bin/lslpp
              then
                OSBIT=`/usr/bin/lslpp -L | /usr/bin/grep bos.64bit | /usr/bin/awk '{print $1}' | /usr/bin/sed 's/bos.//' | /usr/bin/sed 's/bit//'`
              else
                OSBIT="32"
              fi
              if /usr/bin/test /usr/bin/getconf
              then
                GETCONFHWBIT=`/usr/bin/getconf HARDWARE_BITMODE 2>>/dev/null`
                case $GETCONFHWBIT in
                "undefined")
                   /usr/bin/echo "HARDWARE_BITMODE is undefined or invalid, AIX OS is not 5.2 or 5.3"
                   ;;
                "64")
                   HARDWARE_BITMODE=64
                   ;;
                "32")
                   HARDWARE_BITMODE=32
                   ;;
                   *)
                   /usr/bin/echo "HARDWARE_BITMODE check is invalid"
    
                   ;;
                esac
              else
                /usr/bin/echo "getconf command is not found"
              fi
              if [ $OSBIT = 64 -a $GETCONFHWBIT = 64 ]
              then
                /usr/bin/echo "Certified with 10g RDBMS"
              else
                /usr/bin/echo "$OS $OSVER is not certified with 10g RDBMS"
              fi
              ;;
           *)
            /usr/bin/echo "$OS OS Version not determinable"
            ;;
    esac

    若以上脚本输出结果为Certified with 10g RDBMS,则说明当前的操作系统版本通过了10g的认证。

    2.系统软件包是否完整安装,其中包括"bos.adt.base" "bos.adt.lib" "bos.adt.libm" "bos.perf.perfstat" "bos.perf.libperfstat" "bos.perf.proctools"等基础包:

    OSpackagesOK=true
    if /usr/bin/test -x /usr/bin/lslpp
    then
      for PACKAGE in "bos.adt.base" "bos.adt.lib" "bos.adt.libm" "bos.perf.perfstat" "bos.perf.libperfstat" "bos.perf.proctools"
      do
        if [ `/usr/bin/lslpp -l | /usr/bin/grep -c $PACKAGE` != 0 ]
        then
          STATE=`/usr/bin/lslpp -l | /usr/bin/grep $PACKAGE | /usr/bin/awk '{print $3}' | /usr/bin/sed '2,$d'`
          if [ $STATE != "COMMITTED" ]
          then
             if [ $STATE != "APPLIED" ]
             then
                /usr/bin/echo "$PACKAGE"NotApplied
                OSpackagesOK=false
             fi
          fi
        else
          /usr/bin/echo "$PACKAGE"NotInstalled
          OSpackagesOK=false
        fi
      done
    else
      /usr/bin/echo "NoAccess"
    
      OSpackagesOK=false
    fi
    if [ $OSpackagesOK = true ]
    then
       /usr/bin/echo "All required OS packages are installed"
    fi

    若以上脚本未返回"All required OS packages are installed",则说明系统包安装不完整,各种返回结果的相关解释:

    ReturnValue            Action
    
    ---------------------------------------------------------------------
    
    "$PACKAGE"NotInstalled Please install OS $package or its latest
    
                           version. Please refer to the following list of
    
                           required OS packages:
    
                           bos.adt.base, bos.adt.lib, bos.adt.libm,
    
                           bos.perf.perfstat, bos.perf.proctools
    
    "$PACKAGE"NotApplied    The $package was found but is not applied or
    
                           commited, please make sure that it is applied.
    
    NoAccess               OS packages could not be verified because the
    
                           user has no execute permission to /bin/lslpp.
    
                           Please provide user with execute permission.

    3.是否安装了合适的操作系统补丁,如果是5.3的话要求在ML02的基础上安装有IY58143 IY59386 IY60930 IY66513 IY70159 apar fix。

    OSpatchesOK=true
    if /usr/bin/test oslevel
    then
      OSVER4CHAR=`/usr/bin/oslevel -r | /usr/bin/awk -F- '{print $1}'`
    else
      OSVER4CHAR="0000"
    fi
    if test -x /usr/sbin/instfix
    then
      if [ $OSVER4CHAR -eq "5200" ]
      then
        for PATCH in IY63133 IY64978 IY63366 IY64691 IY64737 IY65001
        do
          if [ `/usr/sbin/instfix -ik $PATCH 2>&1 | /usr/bin/grep -ic "no"` != 0 ]
          then
            /usr/bin/echo "$PATCH"_NotInstalled
            OSpatchesOK=false
          fi
        done
        if [ `/usr/sbin/instfix -ik 5200-04_AIX_ML 2>&1 | /usr/bin/grep -ic "no"` != 0 ]
        then
          /usr/bin/echo "5200-04_AIX_ML_NotInstalled"
    
          OSpatchesOK=false
        fi
      elif [ $OSVER4CHAR -eq "5300" ]
        then
        for PATCH in IY58143 IY59386 IY60930 IY66513 IY70159
        do
          if [ `/usr/sbin/instfix -ik $PATCH 2>&1 | /usr/bin/grep -ic "no"` != 0 ]
          then
            /usr/bin/echo "$PATCH"_NotInstalled
            OSpatchesOK=false
          fi
        done
        if [ `/usr/sbin/instfix -ik 5300-02_AIX_ML 2>&1 | /usr/bin/grep -ic "no"` != 0 ]
        then
          /usr/bin/echo "5300-02_AIX_ML_NotInstalled"
          OSpatchesOK=false
        fi
      fi
    else
      /usr/bin/echo "NoAccess"
    
      OSpatchesOK=false
    fi
    if [ $OSpatchesOK = true ]
    then
       /usr/bin/echo "PatchesFound"
    fi

    若返回的结果不为PatchesFound,则可能是系统补丁安装不到位,各种可能的返回结果:

    ReturnValue            Action
    
    ---------------------------------------------------------------------
    
    $PATCH#                Please install OS $PATCH or its latest
    
                           version.
    
                           5.2:  IY63133, IY64978, IY63366, IY64691,
    
                           IY64737, IY65001 and
    
                           5200-04_AIX_ML maintenance level.
    
                           5.3:  IY58142, IY59386, IY60930, IY66513,
    
                           IY70159 and
    
                           5300-02_AIX_ML maintenance level
    
    NoAccess               OS patches could not be verified because the
    
                           user has no execute permission to
    
                           /usr/sbin/instfix. Please provide user with
    
                           execute permission.

    4.正确配置了操作系统用户,当前登录的用户名应出现在/etc/passwd文件中:

    USER=`/usr/bin/id -nu`
    if /usr/bin/test -r /etc/passwd
    then
      if [ "x${USER}x" =  `/usr/bin/cat /etc/passwd | /usr/bin/awk -F: '{print "x"$1"x"}' | /usr/bin/grep -e "x${USER}x"` ]
      then
        /usr/bin/echo userOK
      else
        /usr/bin/echo "$USER not in /etc/passwd."
    
      fi
    else
      /usr/bin/echo "Can not read /etc/passwd"
    fi

    5.正确配置了用户组,当前用户的主用户组应出现在/etc/group文件中:

    GROUP=`/usr/bin/id -ng`
    if /usr/bin/test -r /etc/group
    then
      if [ "x${GROUP}x" = "`/usr/bin/cat /etc/group | /usr/bin/awk -F: '{print "x"$1"x"}' | /usr/bin/grep "x${GROUP}x"`" ]
      then
        /usr/bin/echo "GroupOK"
      else
        /usr/bin/echo "Group not in /etc/group"
    
      fi
    else
      /usr/bin/echo "Can not read /etc/group"
    fi

    6.验证ORACLE_HOME环境变量指定的目录是否有效:

    if /usr/bin/test %40%
    then
       if /usr/bin/test -d %40%
       then
          if /usr/bin/test -h %40%
          then
             /usr/bin/echo OHsymlink
          else
             /usr/bin/echo "OHexists"
          fi
       else
          /usr/bin/echo OHnotvalid
       fi
    else
      /usr/bin/echo "OHNotSpecified"
    fi

    该项其实可以不做硬性要求,可能返回的各种结果:

    Return value      Action required
    
    ---------------------------------------------------------------------
    
    OHnotvalid        Please ensure that the correct location is provided
    
                      or ensure that this directory has been created and
    
                      re-run this script
    
    OHsymlink         ORACLE_HOME is a symbolic link
    
    OHNotSpecified    No ORACLE_HOME value was provided for verification

    7.ORACLE_HOME环境变量指定目录的权限设置是否合理:

    READPERMISSION=false
    WRITEPERMISSION=false
    EXECUTEPERMISSION=false
    if /usr/bin/test %40%
    then
      if /usr/bin/test -d %40%
      then
        if /usr/bin/test -r %40%
        then
          READPERMISSION=true
        else
          /usr/bin/echo NoReadPerm
        fi
        if /usr/bin/test -w %40%
        then
          WRITEPERMISSION=true
        else
          /usr/bin/echo NoWritePerm
        fi
        if /usr/bin/test -x %40%
        then
          EXECUTEPERMISSION=true
        else
          /usr/bin/echo NoExecutePerm
        fi
      else
        /usr/bin/echo OHNotExist
      fi
    else
      /usr/bin/echo OHNotSpecified
    fi
    if [ $WRITEPERMISSION = true -a $READPERMISSION = true -a $EXECUTEPERMISSION = true ]
    then
      /usr/bin/echo CorrectPerms
    else
      if /usr/bin/test %40%
      then
        /usr/bin/echo WrongPerms
      fi
    fi

    若未设置ORACLE_HOME环境变量则无需关心,可能返回的各种结果:

    Return value        Action required
    
    ---------------------------------------------------------------------
    
    NoReadPerm          Make sure the install user has read permission
    
                        on ORACLE_HOME
    
    NoWritePerm         Make sure the install user has write permission
    
                        on ORACLE_HOME
    
    NoExecutePerm       Make sure the install user has execute permission
    
                        on ORACLE_HOME
    
    OHNotExist          ORACLE_HOME does not exist, please create the
    
                        ORACLE_HOME mount point and ensure the permissions
    
                        are correctly set (chmod 755)
    
    OHNotSpecified      ORACLE_HOME can not be verified as the ORACLE_HOME
    
                        is not specified
    
    WrongPerms          The specified ORACLE_HOME does not have correct
    
                        permissions.  Please have your System
    
                        Administrator correct the permissions to "rwx" for
    
                        the ORACLE_HOME mount point"

    8.当前用户的umask掩码是否设置为022,若不是则需要修改为022:

    MASK=`/usr/bin/umask`
    if [ $MASK -eq 022 ]
    then
      /usr/bin/echo UmaskOK
    else
      /usr/bin/echo UmaskNotOK
    fi

    9.是否设置了LD_LIBRARY_PATH环境变量,若设置了则需要unset该变量以保证安装顺利:

    if /usr/bin/test $LD_LIBRARY_PATH
    then
      /usr/bin/echo IsSet
    else
      /usr/bin/echo UnSet
    fi

    10.如上若设置了LIBPATH环境变量,则需要unset该变量:

    if /usr/bin/test $LIBPATH
    then
      /usr/bin/echo IsSet
    else
      /usr/bin/echo UnSet
    fi

    11.进一步验证当前PATH变量中不存在引用/etc/oratab文件中列出的其他ORACLE_HOME的条目,若存在则需要在安装前移除:

    NoneFound=true
    if /usr/bin/test -f /etc/oratab
    then
      for FILE in /etc/oratab
      do
        for LINE in `/usr/bin/cat $FILE | /usr/bin/grep -v '#' | /usr/bin/grep -v '^$' | /usr/bin/awk -F: '{print $2}' | /usr/bin/sort -u`
        do
          for ENVPATHS in PATH
          do
            if [ `/usr/bin/env | /usr/bin/grep -wc $ENVPATHS | /usr/bin/grep :$ENVPATHS= | /usr/bin/wc -l` -ge 1 ]
            then
              if [ `/usr/bin/env | /usr/bin/grep -w $ENVPATHS | /usr/bin/grep :$ENVPATHS= | /usr/bin/grep -c $LINE` -ge 1 ]
              then
    	    /usr/bin/echo OratabEntryInPath
                NoneFound=false
              fi
            fi
          done
        done
      done
    fi
    if [ $NoneFound = true ]
    then
      /usr/bin/echo NoneFound
    fi

    一般结果都为NoneFound,除非你的系统中确实使用到了多个ORACLE_HOME。

    12.oraInventory目录的权限设置是否合理,若不合理会导致安装程序无法写入软件安装信息:

    if /usr/bin/test -f /etc/oraInst.loc
    then
      ORAINVENTORYLOC=`/usr/bin/cat /etc/oraInst.loc | /usr/bin/grep 'inventory_loc' | /usr/bin/grep -v "#" | /usr/bin/awk -F= '{print $2}'`
      if /usr/bin/test -w "$ORAINVENTORYLOC"
    
      then
        if  /usr/bin/test -r "$ORAINVENTORYLOC"
        then
          /usr/bin/echo oraInventoryOK
        else
          /usr/bin/echo oraInventoryNotOK
        fi
      else
        /usr/bin/echo oraInventoryNotOK
      fi
    else
      /usr/bin/echo oraInventoryNotFound
    fi

    可能返回的各类结果:

    Return value         Action required
    
    ---------------------------------------------------------------------
    
    oraInventoryNotOK    Make sure the install user has write permission
    
                         to $ORAINVLOC
    
    oraInventoryNotFound The file /etc/oraInst.loc was not found.  This
    
                         is not a problem if this is the first install of
    
                         oracle on the server.

    13./tmp临时目录是否可写,并Free空间足够:

    tmpOK=false
    vartmpOK=false
    if /usr/bin/test $TEMP
    then
       TEMPLOC=$TEMP
    else
       if /usr/bin/test $TMP
       then
          TEMPLOC=$TMP
       else
          TEMPLOC=/tmp
       fi
    fi
    if /usr/bin/test -d $TEMPLOC
    then
       TMPFREE=`/usr/bin/df -k $TEMPLOC | /usr/bin/awk '{print $3}' | /usr/bin/sed '1d'`
       TMPFREE=`/usr/bin/expr $TMPFREE / 1024`
       if [ $TMPFREE -lt 400 ]
       then
          /usr/bin/echo TempFreeIsLow
       else
          if /usr/bin/test -w "$TEMPLOC"
          then
             tmpOK=true
          else
            /usr/bin/echo TempNoWrite
          fi
       fi
    else
      /usr/bin/echo invalidDIR
    fi
    if /usr/bin/test $TMPDIR
    then
       TMPDIRLOC=$TMPDIR
    else
       TMPDIRLOC=/var/tmp
    fi
    if /usr/bin/test -d $TMPDIRLOC
    then
       TMPDIRSIZE=`/usr/bin/df -k "$TMPDIRLOC" | /usr/bin/awk '{print $3}' | /usr/bin/sed '1d'`
       TMPDIRSIZE=`/usr/bin/expr $TMPDIRSIZE / 1024`
       if [ $TMPDIRSIZE -lt 200 ]
       then
          /usr/bin/echo TMPDIRTooSmall
       else
          if /usr/bin/test -w "$TMPDIRLOC"
          then
             vartmpOK=true
          else
             /usr/bin/echo TMPDIRNoWrite
          fi
       fi
    else
       /usr/bin/echo invalidDIR
    fi
    if [ $tmpOK = true -a $vartmpOK = true ]
    then
      /usr/bin/echo TempSpaceOK
    fi

    /tmp目录不可写或空间不足均会引起安装失败,可能返回的各类结果:

    ReturnValue      Action
    
    ----------------------------------------------------------------------
    
    TempFreeIsLow    ALERT- Your temp space ($TEMP or $TMP or /tmp) has
    
                     less than the required 400 Mb free space.  Please
    
                     make sure your temp space has at least 400 Mb of
    
                     free space
    
    TempNoWrite      ALERT- your temp space ($TEMP or $TMP or /tmp) does
    
                     not have write permissions for this user
    
    TMPDIRTooSmall   ALERT- $TMPDIR or /tmp has less than the
    
                     required 200 Mb.  Please point the TMPDIR
    
                     environmental variable to a mount point with at
    
                     least 200 Mb of free space
    
    TMPDIRNoWrite    ALERT- $TMPDIR is set in the environment;
    
                     however, $TMPDIRLOC does not have write permissions
    
                     for this user
    
    invalidDIR       ALERT- $TEMP or $TMPDIR are set in the environment
    
                     with invalid directory
    FYI: The runInstaller (OUI) uses/checks for temporary space by checking first for the TEMP environmental variable, then the TMP environmental variable and lastly the actual '/tmp' mount point FYI: The operating system also needs additional space by creating files under /tmp or if it finds TMPDIR environmental variable it will use that.

    14.空闲SWAP是否充足,SWAP过少可能导致安装失败:

    if test -x /usr/sbin/lsps
    then
      SWAP=`/usr/sbin/lsps -s | /usr/bin/awk '{print $1}' | /usr/bin/sed '1d' | /usr/bin/sed 's/MB/ /'`
      if /usr/bin/test -z "$SWAP"
      then
        /usr/bin/echo SWAPNotSet
      else
        /usr/bin/echo $SWAP
      fi
    else
      /usr/bin/echo "ALERT- SWAP space cannot be determined"
    fi

    15.是否有已启动的Oracle Universal Installer,若有则需要先停止OU的java安装界面进程:

    if [ `/usr/bin/ps -ef | /usr/bin/grep -i runInstaller | /usr/bin/grep -v grep | /usr/bin/wc -l` -ge 1 ]
    then
      /usr/bin/echo AnotherOUIup
    else
      /usr/bin/echo NoOtherOUI
    fi

    16.ORACLE_HOME指向文件夹所在文件系统是否有足够的磁盘空间,若空间不足则建议改变软件安装的文件系统或扩充文件系统:

    if /usr/bin/test %40%
    then
      if /usr/bin/test -d %40%
      then
        OHDISKSPACEKB=`/usr/bin/df -k %40% | /usr/bin/awk '{print $3}' | /usr/bin/sed '1d'`
        OHDISKSPACE=`/usr/bin/expr $OHDISKSPACEKB / 1024`
        DBANDSW=4200
        DBORSW=3000
        CLIENTONLY=1500
        if [ $OHDISKSPACE -ge $DBANDSW ]
        then
          /usr/bin/echo DiskSpaceOK
        elif [ $OHDISKSPACE -ge $DBORSW ]
        then
          /usr/bin/echo OnlySpaceForOne
        elif [ $OHDISKSPACE -ge $CLIENTONLY ]
        then
          /usr/bin/echo ClientOnly
        else
          /usr/bin/echo NoSpace
        fi
      else
        /usr/bin/echo OHNotValid
      fi
    else
      /usr/bin/echo OHNotSpecified
    fi

    可能返回的各类结果:

    ReturnValue             Action
    
    ----------------------------------------------------------------------
    
    OnlySpaceForOne        %40% has sufficient free disk space to
    
                           install the 10g software but not enough to create
    
                           a database.
    
    ClientOnly             %40% only has sufficient free disk space to
    
                           do a client installation.
    
    NoSpace                %40% has insufficient free disk space
    
                           to do a 10g install.
    
    OHNotFound             Disk space calculations cannot be performed
    
                           since $ORACLE_HOME is not a valid directory

    17. 环境变量AIXTHREAD_SCOPE是否设置为S,Oracle推荐设置AIX操作系统上特有的参数,以获取更佳的性能:

    if /usr/bin/test $AIXTHREAD_SCOPE
    then
      if [ $AIXTHREAD_SCOPE = "S" ]
      then
        /usr/bin/echo AIXTHREAD_SCOPEOK
      else
        /usr/bin/echo AIXTHREAD_SCOPEBad
      fi
    else
      /usr/bin/echo AIXTHREADNotSet
    fi
    若结果为AIXTHREADNotSet则可以在该用户的profile中指定"export AIXTHREAD_SCOPE=S"。

    18.保证未设置LINK_CNTRL环境参数:

    if /usr/bin/test $LINK_CNTRL
    then
       /usr/bin/echo LINK_CNTRLBad
    else
       /usr/bin/echo LINK_CNTRLunset
    fi

    若设置了该操作可能导致程序link阶段出错,通过unset LINK_CNTRL命令重置该变量。

    19.验证是否有足够的物理内存,若物理内存小于1023MB则不通过:

    MEM=`/usr/sbin/lsattr -HE -l sys0 -a realmem | /usr/bin/sed '1d' | /usr/bin/awk '{print $2}'`
    MEM=`/usr/bin/expr $MEM / 1024`
    /usr/bin/echo $MEM

    20.配置的交换空间是对比物理内存是否合理:

    if /usr/bin/test %130%
    then
      if [ %130% -lt 1610 ]
      then
        /usr/bin/echo InsufficientSwap
      else
        if [ %140% -gt 0 ]
        then
          if [ %140% -gt 1024 -a %140% -lt 2048 ]
          then
            if [ %130% -lt `/usr/bin/expr %140% \* 3 / 2` ]
            then
              /usr/bin/echo SwapLessThanRAM
            else
              /usr/bin/echo SwapToRAMOK
            fi
          elif [ %140% -gt 2049 -a %140% -lt 8192 ]
          then
            if [ %130% -lt %140% ]
            then
              /usr/bin/echo SwapLessThanRAM
            else
              /usr/bin/echo SwapToRAMOK
            fi
          else [ %140% -gt 8192 ]
            if [ %130% -lt `/usr/bin/expr %140% \* 3 / 4` ]
            then
              /usr/bin/echo SwapLessThanRAM
            else
              /usr/bin/echo SwapToRAMOK
            fi
          fi
        else
          /usr/bin/echo MemNotDetermined
        fi
      fi
    else
      /usr/bin/echo SwapNotDetermined
    fi

    Oracle推荐Swap空间至少同主机上的物理内存大小一致,若小于则建议扩展该交换空间,可能返回的各类结果:

    ReturnValue            Action
    
    --------------------------------------------------------------------
    
    SwapNotDetermined      ALERT- A Swap to Memory ratio cannot be
    
                           determined because swap has not been setup or
    
                           you do not have execute permission to
    
                           determine swap
    
    SwapLessThanRAM         ALERT- Swap space is less than the physical
    
                           memory. Set swap space at least the same
    
                           size as the physical memory
    
    InsufficientSwap       ALERT- 10g RDBMS requires at least 1.5 Gb of swap
    
                           space
    
    MemNotDetermined       ALERT- A Swap to Memory ratio cannot be
    
                           determined because you do not have execute
    
                           permission to determine the physical memory

    21.ld,nm,ar,make等编译工具是否可用,若不可能则在安装的编译阶段可能出错:

    ARFOUND=false
    LDFOUND=false
    NMFOUND=false
    MAKEFOUND=false
    arvalue=`/usr/bin/which ar`
    if /usr/bin/test -h $arvalue
    then
      arvalue=`/usr/bin/ls -l $arvalue | /usr/bin/awk '{print $11}' | /usr/bin/awk -F* '{print $1}'`
    fi
    if [ "$arvalue" != "/usr/ccs/bin/ar" ]
    then
      /usr/bin/echo ArFoundInPath
    else
      ARFOUND=true
    fi
    ldvalue=`/usr/bin/which ld`
    if /usr/bin/test -h $ldvalue
    then
      ldvalue=`/usr/bin/ls -l $ldvalue | /usr/bin/awk '{print $11}' | /usr/bin/awk -F* '{print $1}'`
    fi
    if [ "$ldvalue" != "/usr/ccs/bin/ld" ]
    then
      /usr/bin/echo LdFoundInPath
    else
      LDFOUND=true
    fi
    nmvalue=`/usr/bin/which nm`
    if /usr/bin/test -h $nmvalue
    then
      nmvalue=`/usr/bin/ls -l $nmvalue | /usr/bin/awk '{print $11}' | /usr/bin/awk -F* '{print $1}'`
    fi
    if [ "$nmvalue" != "/usr/ccs/bin/nm" ]
    then
      /usr/bin/echo NmFoundInPath
    else
      NMFOUND=true
    fi
    makevalue=`/usr/bin/which make`
    if /usr/bin/test -h $makevalue
    then
      makevalue=`/usr/bin/ls -l $makevalue | /usr/bin/awk '{print $11}' | /usr/bin/awk -F* '{print $1}'`
    fi
    if [ "$makevalue" != "/usr/ccs/bin/make" ]
    then
      /usr/bin/echo MakeFoundInPath
    else
      MAKEFOUND=true
    fi
    if [ $ARFOUND = true -a $LDFOUND = true -a $NMFOUND=true -a $MAKEFOUND = true ]
    then
      /usr/bin/echo ld_nm_ar_make_found
    fi

    一般来说这些编译工具不会丢失,但若在您的系统中它们不见了,则需要联系系统管理人员重新安装上,可能的各类结果:

    ReturnValue      Action
    
    ---------------------------------------------------------------------
    
    ArFoundInPath    ar is found in PATH but not in /usr/ccs/bin or symbolically linked to /usr/ccs/bin as
    
                     required
    
    LdFoundInPath    ld is found in PATH but not in /usr/ccs/bin or symbolically linked to /usr/ccs/bin as
    
                     required
    
    NmFoundInPath    nm is found in PATH but not in /usr/ccs/bin or symbolically linked to /usr/ccs/bin as
    
                     required
    
    MakeFoundInPath  make is found in PATH but not in /usr/ccs/bin or symbolically linked to /usr/ccs/bin as
    
                     required

    22.ulimit相关的参数是否设置合理其中包括stack size,open files等重要参数:

    TIMEOK=false
    TIME=`/usr/bin/ulimit -t`
    if /usr/bin/test -z "$TIME"
    then
    /usr/bin/echo TimeNotDef
    elif [ $TIME != "unlimited" ]
    then
    /usr/bin/echo TimeTooSmall
    else
    TIMEOK=true
    fi
    FILEOK=false
    FILE=`/usr/bin/ulimit -f`
    if /usr/bin/test -z "$FILE"
    then
    /usr/bin/echo FileNotDefined
    elif [ $FILE != "unlimited" ]
    then
    /usr/bin/echo FileTooSmall
    else
    FILEOK=true
    fi
    DATAOK=false
    DATA=`/usr/bin/ulimit -d`
    if /usr/bin/test -z "$DATA"
    
    then
    /usr/bin/echo DataNotDefined
    elif [ $DATA = "unlimited" ]
    then
    DATAOK=true
    elif [ $DATA -ge 1048576 ]
    then
    DATAOK=true
    else
    /usr/bin/echo DataTooSmall
    fi
    STACKOK=false
    STACK=`/usr/bin/ulimit -s`
    if /usr/bin/test -z "$STACK"
    then
    /usr/bin/echo StackNotDefined
    elif [ $STACK = "unlimited" ]
    then
    STACKOK=true
    elif [ $STACK -ge 32768 ]
    then
    STACKOK=true
    else
    /usr/bin/echo StackTooSmall
    fi
    NOFILESOK=false
    NOFILES=`/usr/bin/ulimit -n`
    if /usr/bin/test -z "$NOFILES"
    then
    /usr/bin/echo NoFilesNotDefined
    elif [ $NOFILES = "unlimited" ]
    then
    NOFILESOK=true
    elif [ $NOFILES -ge 4096 ]
    then
    NOFILESOK=true
    else
    /usr/bin/echo NoFilesTooSmall
    fi
    MEMORYOK=false
    MEMORY=`/usr/bin/ulimit -m`
    if /usr/bin/test -z "$MEMORY"
    
    then
    /usr/bin/echo MemoryNotDefined
    elif [ $MEMORY = "unlimited" ]
    then
    MEMORYOK=true
    elif [ $MEMORY -ge 2045680 ]
    then
    MEMORYOK=true
    else
    /usr/bin/echo MemoryTooSmall
    fi
    if [ $TIMEOK = true -a $FILEOK = true -a $DATAOK = true -a $STACKOK = true -a $NOFILESOK = true -a $MEMORYOK = true ]
    then
    /usr/bin/echo ulimitOK
    fi

    若未返回ulimitOK,则需要针对不同的结果修改/etc/security/limits.conf中当前用户相关的条目,各类不同的返回结果:

    Return value         Action required
    
    ----------------------------------------------------------------------
    
    TimeNotDef           ulimit(TIME) has not been defined
    
    TimeTooSmall         Increase the ulimit(TIME) to unlimited
    
    FileNotDefined       ulimit(FILE) has not been defined"
    
    FileTooSmall         Increase the ulimit(FILE) to unlimited
    
    DataNotDefined       ulimit(DATA) has not been defined
    
    DataTooSmall         Increase the ulimit(DATA) to at least 1048576
    
    StackNotDefined      ulimit(STACK) has not been defined
    
    StackTooSmall        Increase the ulimit(STACK) to at least 32768
    
    NoFilesNotDefined    ulimit(NOFILES) has not been defined
    
    NoFilesTooSmall      Increase the ulimit(NOFILES) to at least 4096
    
    MemoryNotDefined     ulimit(MEMORY) has not been defined
    
    MemoryTooSmall       Increase the ulimit(MEMORY) to at least 2045680

    23.此外一般大型的OLTP系统都需要运行成百上千的服务进程,AIX中单个用户同时能运行的进程数受到系统对象sys0的maxuproc属性限制,一般我们需要修改该参数:

    /* 列出当前sys0的maxuproc设置 */
    $ lsattr -El sys0|grep maxuproc|cut -c 1-20
    maxuproc        128 
    
    /* root用户可以修改该属性 */
    chdev -l sys0 -a maxuproc=4096

    24.配置合理的AIX Virtual Memeory参数,这些参数可能包括maxperm,minperm等,以下为IBM给出的推荐设置:

    minperm%=3
    maxperm%=90
    maxclient%=90
    lru_file_repage=0
    strict_maxperm=0
    strict_maxclient=1
    page_steal_method=1
    可以通过以下命令完成配置:
    #!/usr/bin/ksh
    vmo -p -o maxperm%=90;
    vmo -p -o minperm%=3;
    vmo -p -o maxclient%=90;
    vmo -p -o strict maxperm=0;
    vmo -p -o strict maxclient=1;
    vmo -p -o lru_file_repage=0;
    vmo -r -o page_steal_method=1; (need to reboot to take into effect)
    vmo -p -o strict_maxclient=1
    vmo -p -o strict_maxperm=0;
    This VMM tuning tip is applicable for AIX 5.2 ML4+ or AIX 5.3 ML1+ lru_file_repage : This new parametter prevents the computational pages to be paged out. By setting lru_file_repage=0 (1 is the default value) you’re telling the VMM that your preference is to steal pages from FS Cache only. minfree = 120 x # lcpus Increase if page stealing activity, vmstat “po” column maxfree = minfree +(maxpaghead x # lcpus) minperm% = from 3 to 10 maxperm% = maxclient% = from 70 to 90 strict_maxclient = 1 On AIX part vmo –p –o v_pinshm = 1 Leave maxpin% at the default of 80% unless the SGA exceeds 77% of real memory : vmo –p –o maxpin%=[(total mem-SGA size)*100/total mem] + 3 On Oracle part (9i/10g) LOCK_SGA = TRUE Large Page Support – improves performance of prefetching On AIX part vmo –r –o lgpg_size = 16777216 –o lgpg_regions=(SGA size / 16 MB) chuser capabilities=CAP_BYPASS_RAC_VMM,CAP_PROPAGATE oracle (allow Oracle user ID to use Large Pages) ldedit –b lpdata oracle (to allow oracle binary to use large page data) export LDR_CNTRL=LARGE_PAGE_TEXT=Y@LARGE_PAGE_DATA=M (prior Oracle user ID to starting Oracle instance and listener to allow both large page text and large page data)
    也可以参考VMM Tuning Tip: Protecting Computational Memory at http://www.ibm.com/developerworks/wikis/download/attachments/53871915/VMM+Tuning+Tip+-+Proctecting+Comp+Memory.pdf?version=2

    25.配置系统对象中的I/O pacing限制,在AIX 6.1中自动完成,而在5.3上我们需要手动修改sys0:

    Users of AIX occasionally encounter long interactive-application response times when other applications in the system are running large writes to disk. Configuring I/O pacing limits the number of outstanding I/O requests against a file. AIX 6.1 enables I/O pacing by default and the default value: "minpout=4096 and maxpout=8193" is good for AIX6.1. However, in AIX 5.3, you need to explicitly enable this feature. Oracle's testing has shown that starting values of 8 for minpout and 12 for maxpout are a good baseline for most Oracle customers. However, every environment is different, and therefore different values may very well be acceptable, if the system has been properly tuned and shown to perform with differing values. To configure I/O pacing on the system via SMIT, using Oracle's recommended baseline values, enter the following at the command line as root
    # smitty chgsys
    # chdev -l sys0 -a minpout=8 -a maxpout=12
    to be continued.......
  • 相关阅读:
    服务器监控
    Ubuntu16.04安装印象笔记
    在vi中打开多个文件,复制一个文件中多行到另一个文件中
    Ubuntu16.04安装和卸载MySQL 5.7
    Ubuntu16.04 sever 安装
    查看ubuntu 各系统的内核版本
    Ubuntu16.04中查看硬盘的型号和读取速度
    python 实现3-2 问候语: 继续使用练习 3-1 中的列表,但不打印每个朋友的姓名,而为每人打印一条消息。每条消息都包含相同的问候语,但抬头为相应朋友的姓名。
    线程
    并发编程
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967554.html
Copyright © 2020-2023  润新知