在CentOS系统中配置Oracle Automatic Storage Management(ASM)时,不少用户会遇到各种报错情况,这些问题通常源于环境配置、权限设置或软件版本兼容性等因素,本文将从实际运维角度出发,分析几种常见报错的原因,并提供可行的解决方案。
ASM是Oracle数据库用于管理存储的重要组件,它通过磁盘组的形式简化存储管理,提升数据可用性,但在配置过程中,即使按照官方文档操作,也可能遇到意想不到的错误。

权限类报错及处理
安装ASM时,常见的报错之一是“ORA-01031: insufficient privileges”,这类错误往往与用户权限有关,ASM实例需要特定的操作系统用户和组权限,通常涉及“oracle”用户和“dba”、“asmadmin”等用户组。
解决这类问题,首先需检查当前用户是否属于必要的用户组,可以通过命令groups oracle查看oracle用户所属组,若发现缺少相关组,需用usermod -aG asmadmin oracle将用户添加到对应组中,修改后,需重新登录用户以使组变更生效。
还需检查Oracle安装目录的权限,ASM相关文件需要正确的所有权和权限设置,使用chown和chmod命令调整目录权限,确保oracle用户有读写和执行权限。
磁盘路径与权限问题
ASM配置中,磁盘设备的识别与权限是关键环节,错误信息如“ORA-15081: failed to submit an I/O operation to a disk”可能源于磁盘设备权限不足。

确认磁盘设备路径是否正确,使用/dev/sd*或/dev/mapper/路径时,需确保设备路径稳定不变,为避免设备名重启后变化,建议使用/dev/disk/by-id/或/dev/disk/by-uuid/下的符号链接。
检查磁盘设备的权限,通过ls -l /dev/sdb1查看设备权限,确保oracle用户和asmadmin组有读写权限,若权限不足,可创建udev规则来自动设置权限,创建文件/etc/udev/rules.d/99-oracle-asmdevices.rules,加入如下内容:
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="<SCSI_ID>", OWNER="oracle", GROUP="asmadmin", MODE="0660" 将<SCSI_ID>替换为实际设备的SCSI ID,保存后运行udevadm control --reload-rules和udevadm trigger使规则生效。
依赖包缺失导致的报错
在安装ASM软件时,可能会遇到依赖包缺失的报错。“Error in invoking target 'agent nmhs' of makefile”等错误通常是因为系统缺少必要的开发库。
CentOS系统需安装以下软件包:binutils、compat-libstdc++、gcc、gcc-c++、glibc、glibc-devel、ksh、libaio、libaio-devel、libgcc、libstdc++、libstdc++-devel、make、sysstat等。

可通过yum命令安装这些依赖包:
yum install -y binutils compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat
安装完成后,重新运行ASM安装程序,通常可解决依赖问题。
环境变量配置错误
环境变量设置不当也会引发ASM配置报错。“ORA-12547: TNS:lost contact”错误可能与ORACLE_HOME、ORACLE_SID等环境变量有关。
确保oracle用户的.bash_profile或.bashrc文件中正确定义了环境变量,以下为示例配置:
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export ORACLE_SID=+ASM export PATH=$ORACLE_HOME/bin:$PATH
配置后执行source ~/.bash_profile使变量生效。
防火墙与SELinux干扰
CentOS的防火墙和SELinux可能会阻止ASM相关进程的运行,导致报错,如遇到无法解释的连接问题,可尝试暂时关闭防火墙和SELinux进行排查。
关闭防火墙:
systemctl stop firewalld systemctl disable firewalld
设置SELinux为permissive模式:
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
生产环境中修改SELinux和防火墙设置需谨慎,建议根据实际安全需求配置规则而非直接关闭。
日志分析的重要性
遇到ASM报错时,查看详细日志是定位问题的关键,ASM实例的日志位于$ORACLE_HOME/log/+asm目录下,数据库实例的日志位于$ORACLE_HOME/log/diag/rdbms目录下,通过分析日志中的具体错误信息,可以更精确地找到问题根源。
日志中可能记录磁盘无法识别的具体原因,或权限不足的详细操作,结合日志信息与官方文档,往往能快速解决配置难题。
从运维经验来看,ASM配置虽有一定复杂性,但大部分报错都有明确的解决方案,关键在于细致检查每一步配置,确保权限、路径、环境变量等设置正确,遇到问题时,耐心分析日志,逐步排查,通常都能找到解决途径,Oracle官方文档和社区论坛也是宝贵的资源,善于利用这些资源能显著提高问题解决效率。
配置ASM的过程是对系统管理能力的锻炼,每一个问题的解决都会加深对Oracle存储管理的理解,随着经验的积累,处理这类报错将变得更加得心应手。
