很多朋友在掌握了文件系统安装后,纷纷问:生产环境用ASM存储怎么装? 确实,ASM作为Oracle自带的存储解决方案,在数据冗余、性能优化上比传统文件系统更有优势,是生产环境的首选。今天这篇就把单实例ASM安装讲透,从ASM磁盘组规划、图形化安装的点点操作,到静默安装的脚本编写,每一步都配具体命令和避坑提示,新手也能一次成功!
前置提醒:ASM安装比文件系统多了磁盘组配置环节,需提前准备好物理磁盘或分区;同时确保完成了Oracle 19c环境规划。
一、ASM磁盘组规划与创建
ASM的核心是磁盘组,把多个物理磁盘整合为一个逻辑单元,自动实现负载均衡和故障转移。在安装Oracle软件前,必须先规划并创建好ASM磁盘组,这是ASM安装的基础。
1.1 ASM磁盘组规划原则
至少创建3个磁盘组,分别存储不同类型文件,避免IO冲突,这是Oracle官方推荐的最佳实践:
| 磁盘组名称 | 存储内容 | 磁盘要求 | 冗余模式 |
|---|---|---|---|
| DATA | 数据文件、控制文件 | SSD优先,容量≥100GB(生产) | 外部冗余(依赖RAID)/ 正常冗余(2块盘) |
| RECO | 归档日志、备份集 | 机械硬盘或SSD,容量≥DATA的1.5倍 | 外部冗余(依赖RAID)/ 正常冗余(2块盘) |
| FRA | 快速恢复区(可选,也可合并到RECO) | 同RECO | 同RECO |
| 冗余模式选择:如果服务器做了RAID,选外部冗余;没做RAID选正常冗余。 |
1.2 实操:创建ASM磁盘(以CentOS 7为例)
ASM磁盘可以是物理磁盘、分区或LVM逻辑卷,这里以裸设备分区为例,步骤如下(root用户执行):
1.2.1 识别磁盘
# 查看服务器磁盘列表(识别新添加的磁盘,如/dev/sdb、/dev/sdc) lsblk # 或用fdisk查看 fdisk -l
假设识别到3块新磁盘:/dev/sdb(100GB,用于DATA)、/dev/sdc(150GB,用于RECO)、/dev/sdd(50GB,用于ASM元数据)。
1.2.2 磁盘分区
# 对/dev/sdb进行分区(其他磁盘操作相同) fdisk /dev/sdb # 输入以下命令(按提示操作) n # 新建分区 p # 主分区 1 # 分区号 (回车默认起始扇区) (回车默认结束扇区,或输入+100G指定大小) t # 修改分区类型 8e # 类型设为Linux LVM(ASM支持此类型) w # 保存退出 # 分区完成后,查看分区结果 fdisk -l /dev/sdb # 会显示/dev/sdb1分区
重复以上操作,完成/dev/sdc1、/dev/sdd1的分区。
1.2.3 标记ASM磁盘
用Oracle的asmca工具标记磁盘,让ASM识别为可用磁盘。先安装ASM依赖包(root用户):
yum install -y oracleasm-support oracleasmlib oracleasm-`uname -r`
然后配置ASM库并标记磁盘:
# 初始化ASM库(仅第一次执行) oracleasm init # 配置ASM磁盘组所属用户组(oinstall) oracleasm configure -i # 按提示输入:oracle用户、oinstall组 # 标记磁盘为ASM磁盘(命名规则:asm-磁盘用途-序号) oracleasm createdisk ASM_DATA_01 /dev/sdb1 oracleasm createdisk ASM_RECO_01 /dev/sdc1 oracleasm createdisk ASM_META_01 /dev/sdd1 # 查看标记后的ASM磁盘(状态为AVAILABLE表示正常) oracleasm listdisks
1.3 创建ASM磁盘组
磁盘标记完成后,可通过图形化(asmca)或命令行(sqlplus)创建磁盘组,这里先讲图形化方式(后续安装中会整合),命令行方式在静默安装部分介绍。
二、图形化安装
图形化安装的核心是通过VNC连接服务器,用runInstaller向导完成Oracle软件安装+ASM磁盘组配置+数据库创建,比文件系统安装多了ASM配置环节。
2.1 前置:VNC远程连接配置
# root用户安装VNC Server yum install -y tigervnc-server # 切换到oracle用户,启动VNC服务 su- oracle vncserver # 设置VNC密码,记住显示端口(如:1)
本地用VNC Viewer连接服务器IP:1,输入密码后进入图形化桌面。
2.2 图形化安装全流程
先解压Oracle 19c安装包到ORACLE_HOME目录(oracle用户执行):
unzip /tmp/LINUX.X64_193000_db_home.zip -d$ORACLE_HOME cd$ORACLE_HOME ./runInstaller
启动安装向导后,前4步与文件系统安装一致(跳过更新、选择创建并配置数据库、服务器级、典型安装),从第5步关键配置项开始差异显现:
2.2.1 步骤5:存储类型选择
在Storage type选项中,选择Automatic Storage Management,然后点击ASM Configuration进入ASM配置界面:
若未创建ASM磁盘组,选择Create new ASM disk group;
输入ASM磁盘组名称,选择冗余模式;
在Disks Available中勾选标记好的ASM磁盘,点击OK;
设置ASM实例的SYS用户密码,点击Next。
重复以上操作,创建RECO磁盘组。
2.2.2 步骤6:数据库存储配置
回到安装向导,此时Database files location会自动变为+DATA,Recovery options的恢复区路径设为+RECO,其他配置与文件系统一致:
SID设置:ORCL;
字符集:AL32UTF8;
内存分配:物理内存的70%(如32GB内存分配22GB);
密码:sys/system密码设为Oracle123#。
2.2.3 后续步骤
点击Next后完成先决条件检查(若ASM磁盘状态正常,会提示All prerequisite checks passed),确认概要信息后点击Install开始安装。
安装过程中会提示用root用户执行两个脚本(/u01/app/oraInventory/orainstRoot.sh和$ORACLE_HOME/root.sh),执行完成后回到安装界面点击OK,等待安装完成。
避坑提示:若先决条件检查提示ASM磁盘不可用,检查oracleasm listdisks是否显示磁盘,或重新标记ASM磁盘。
三、静默安装
生产环境ASM安装推荐用静默方式,核心是编写Oracle软件安装+ASM磁盘组创建+数据库创建三个响应文件,实现全自动化部署。
3.1 新增ASM配置文件
相比文件系统静默安装,ASM安装多了ASM磁盘组创建步骤,需要新增asmca.rsp响应文件。三个核心响应文件模板路径均在$ORACLE_HOME/assistants/下。
3.2 步骤1:准备并修改响应文件
3.2.1 复制模板文件
mkdir-p /tmp/rsp cd$ORACLE_HOME/assistants/ # 复制三个核心响应文件 cp dbca/dbca.rsp /tmp/rsp/ cp asmca/asmca.rsp /tmp/rsp/ cp ../install/response/db_install.rsp /tmp/rsp/ cd /tmp/rsp
3.2.2 修改db_install.rsp
关键参数修改如下(其他默认):
vi db_install.rsp # 安装类型:仅安装软件(后续手动创建数据库) oracle.install.option=INSTALL_DB_SWONLY # 基础路径(与环境变量一致) UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 # 数据库版本:企业版 oracle.install.db.InstallEdition=EE # 启用ASM支持 oracle.install.db.isCustomInstall=true oracle.install.db.asmSupport=true # 跳过更新 oracle.install.db.updates.enabled=false # 自动执行root脚本 oracle.install.db.rootconfig.executeRootScript=true
3.2.3 修改asmca.rsp
vi asmca.rsp # 操作类型:创建磁盘组 operation_type=create # ASM实例配置 asm_instance_sid=+ASM asm_instance_password=Asm_123# # ASM的SYS用户密码 # DATA磁盘组配置 diskgroup_name[0]=DATA redundancy[0]=EXTERNAL # 外部冗余 disk[0]=/dev/oracleasm/disks/ASM_DATA_01 # ASM磁盘路径 # RECO磁盘组配置 diskgroup_name[1]=RECO redundancy[1]=EXTERNAL disk[1]=/dev/oracleasm/disks/ASM_RECO_01
3.2.4 修改dbca.rsp
vi dbca.rsp # 操作类型:创建数据库 operationType=createDatabase createDatabase.type=typical # 数据库名和实例名 gdbName=ORCL sid=ORCL # 密码配置 sysPassword=Oracle123# systemPassword=Oracle123# # 存储配置(核心:ASM磁盘组) storageType=ASM datafileDestination=+DATA recoveryAreaDestination=+RECO # 字符集和内存 characterSet=AL32UTF8 totalMemory=22528 # 32GB内存分配22GB(单位MB) # 自动备份 enableArchive=true
3.3 步骤2:执行静默安装
3.3.1 静默安装Oracle软件
cd$ORACLE_HOME ./runInstaller -silent-responseFile /tmp/rsp/db_install.rsp -log /tmp/oracle_install.log
日志监控:tail -f /tmp/oracle_install.log,出现Successfully Setup Software表示软件安装成功。
3.3.2 静默创建ASM磁盘组
asmca -silent-responseFile /tmp/rsp/asmca.rsp -logfile /tmp/asmca.log
日志监控:tail -f /tmp/asmca.log,出现Diskgroup created successfully表示磁盘组创建成功。可通过asmcmd验证:
asmcmd lsdg # 会显示DATA和RECO磁盘组,状态为MOUNTED
3.3.3 配置ASM环境变量
编辑~/.bash_profile,添加ASM实例环境变量:
vi ~/.bash_profile # 新增ASM环境变量 exportORACLE_SID=+ASM exportPATH=$ORACLE_HOME/bin:$PATH # 生效 source ~/.bash_profile
3.3.4 静默创建数据库
# 切换回数据库实例环境变量(若需要) exportORACLE_SID=ORCL # 执行静默创建命令 dbca -silent-responseFile /tmp/rsp/dbca.rsp -logfile /tmp/dbca.log
日志监控:tail -f /tmp/dbca.log,出现Database created successfully表示数据库创建成功。
3.4 生产环境静默安装完整脚本
#!/bin/bash # Oracle 19c 单实例ASM静默安装完整脚本 # 适用环境:CentOS 7/8,已完成磁盘分区和ASM标记 # 1. 全局变量(根据实际环境修改) ORACLE_BASE=/u01/app/oracle ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 RSP_DIR=/tmp/rsp INSTALL_FILE=/tmp/LINUX.X64_193000_db_home.zip SYS_PWD=Oracle123# ASM_PWD=Asm_123# TOTAL_MEM=22528 # 内存(MB) # 2. root用户操作:安装依赖包和ASM库 su- root -c"yum install -y binutils compat-libcap1 glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libgcc libstdc++ libstdc++-devel libxcb make oracleasm-support oracleasmlib oracleasm-`uname -r`" # 3. root用户操作:配置ASM磁盘(若未配置) # su - root -c "oracleasm init" # su - root -c "oracleasm configure -i" # su - root -c "oracleasm createdisk ASM_DATA_01 /dev/sdb1" # su - root -c "oracleasm createdisk ASM_RECO_01 /dev/sdc1" # 4. oracle用户操作:解压安装包 su- oracle -c"unzip $INSTALL_FILE -d $ORACLE_HOME" # 5. oracle用户操作:创建响应文件目录并复制模板 su- oracle -c"mkdir -p $RSP_DIR" su- oracle -c"cp $ORACLE_HOME/assistants/dbca/dbca.rsp $RSP_DIR/" su- oracle -c"cp $ORACLE_HOME/assistants/asmca/asmca.rsp $RSP_DIR/" su- oracle -c"cp $ORACLE_HOME/install/response/db_install.rsp $RSP_DIR/" # 6. oracle用户操作:修改db_install.rsp su- oracle -c"sed -i 's/oracle.install.option=.*/oracle.install.option=INSTALL_DB_SWONLY/' $RSP_DIR/db_install.rsp" su- oracle -c"sed -i 's/ORACLE_BASE=.*/ORACLE_BASE=$ORACLE_BASE/' $RSP_DIR/db_install.rsp" su- oracle -c"sed -i 's/ORACLE_HOME=.*/ORACLE_HOME=$ORACLE_HOME/' $RSP_DIR/db_install.rsp" su- oracle -c"sed -i 's/oracle.install.db.asmSupport=.*/oracle.install.db.asmSupport=true/' $RSP_DIR/db_install.rsp" su- oracle -c"sed -i 's/oracle.install.db.rootconfig.executeRootScript=.*/oracle.install.db.rootconfig.executeRootScript=true/' $RSP_DIR/db_install.rsp" # 7. oracle用户操作:修改asmca.rsp su- oracle -c"sed -i 's/operation_type=.*/operation_type=create/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/asm_instance_sid=.*/asm_instance_sid=+ASM/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/asm_instance_password=.*/asm_instance_password=$ASM_PWD/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/diskgroup_name\[0\]=.*/diskgroup_name[0]=DATA/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/redundancy\[0\]=.*/redundancy[0]=EXTERNAL/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/disk\[0\]=.*/disk[0]=\/dev\/oracleasm\/disks\/ASM_DATA_01/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/diskgroup_name\[1\]=.*/diskgroup_name[1]=RECO/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/redundancy\[1\]=.*/redundancy[1]=EXTERNAL/' $RSP_DIR/asmca.rsp" su- oracle -c"sed -i 's/disk\[1\]=.*/disk[1]=\/dev\/oracleasm\/disks\/ASM_RECO_01/' $RSP_DIR/asmca.rsp" # 8. oracle用户操作:修改dbca.rsp su- oracle -c"sed -i 's/operationType=.*/operationType=createDatabase/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/gdbName=.*/gdbName=ORCL/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/sid=.*/sid=ORCL/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/sysPassword=.*/sysPassword=$SYS_PWD/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/systemPassword=.*/systemPassword=$SYS_PWD/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/storageType=.*/storageType=ASM/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/datafileDestination=.*/datafileDestination=+DATA/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/recoveryAreaDestination=.*/recoveryAreaDestination=+RECO/' $RSP_DIR/dbca.rsp" su- oracle -c"sed -i 's/totalMemory=.*/totalMemory=$TOTAL_MEM/' $RSP_DIR/dbca.rsp" # 9. oracle用户操作:静默安装Oracle软件 su- oracle -c"$ORACLE_HOME/runInstaller -silent -responseFile $RSP_DIR/db_install.rsp -log /tmp/oracle_install.log" # 10. oracle用户操作:静默创建ASM磁盘组 su- oracle -c"asmca -silent -responseFile $RSP_DIR/asmca.rsp -logfile /tmp/asmca.log" # 11. oracle用户操作:配置环境变量并创建数据库 su- oracle -c"echo 'export ORACLE_SID=ORCL' >> ~/.bash_profile" su- oracle -c"source ~/.bash_profile" su- oracle -c"dbca -silent -responseFile $RSP_DIR/dbca.rsp -logfile /tmp/dbca.log" # 12. 安装完成提示 echo"Oracle 19c ASM单实例安装完成!" echo"日志路径:/tmp/oracle_install.log、/tmp/asmca.log、/tmp/dbca.log"
3.5 ASM安装常见错误及解决办法
| 错误现象 | 报错原因 | 解决办法 |
|---|---|---|
| asmca创建磁盘组失败,提示磁盘不可用 | 磁盘未标记为ASM磁盘,或权限不足 | 1. 执行oracleasm listdisks查看磁盘;2. 重新标记磁盘:oracleasm createdisk;3. 检查磁盘权限:chown oracle:oinstall /dev/sdb1 |
| 静默安装软件时,提示ASM支持缺失 | 未安装ASM依赖包,或db_install.rsp未启用ASM支持 | 1. 安装oracleasm-support等依赖包;2. 确保db_install.rsp中oracle.install.db.asmSupport=true |
| 数据库创建失败,提示+DATA磁盘组未挂载 | ASM实例未启动,或磁盘组未挂载 | 1. 启动ASM实例:sqlplus / as sysasm → startup;2. 挂载磁盘组:alter diskgroup DATA mount; |
| asmcmd无法连接,提示ORA-12514 | ASM监听未启动 | 1. 配置ASM监听:netca -silent -responseFile /tmp/rsp/netca.rsp;2. 启动监听:lsnrctl start LISTENER_ASM |
四、安装后验证
ASM安装的验证比文件系统多了ASM磁盘组和实例的检查,需完成以下四步验证:
4.1 验证ASM实例与磁盘组
# 1. 切换到ASM实例环境变量 exportORACLE_SID=+ASM # 2. 登录ASM实例 sqlplus / as sysasm # 3. 查看ASM实例状态 select status from v$instance; # 应为OPEN # 4. 查看磁盘组状态 select name, state, total_mb, free_mb from v$asm_diskgroup; # 应为MOUNTED,有可用空间 # 5. 或用asmcmd查看 asmcmd lsdg
4.2 验证数据库监听状态
# 切换到数据库实例环境变量 exportORACLE_SID=ORCL # 查看监听状态(确保包含ASM和数据库服务) lsnrctl status # 正常输出应包含: # Service "+ASM" has 1 instance(s). Instance "+ASM", status READY # Service "ORCL" has 1 instance(s). Instance "ORCL", status READY
4.3 数据库连接测试
# 本地连接 sqlplus / as sysdba # 远程连接 sqlplus sys/Oracle123#@192.168.1.100:1521/ORCL as sysdba # 验证数据库存储路径(确认使用ASM磁盘组) select name from v$datafile; # 路径应为+DATA/ORCL/DATAFILE/... select member from v$logfile; # 路径应为+DATA/ORCL/ONLINELOG/...
4.4 关键进程确认
# 查看ASM进程(ora_pmon_+ASM等) ps-ef | grep+ASM | grep-vgrep # 查看数据库进程(ora_pmon_ORCL等) ps-ef | grep ORCL | grep-vgrep
若两类进程都存在,说明ASM实例和数据库实例都正常运行。
五、ASM安装的核心要点
ASM安装虽然比文件系统多了磁盘组配置环节,但只要抓住核心要点,就不会出错:
磁盘准备是基础:必须将磁盘标记为ASM可用磁盘,否则ASM无法识别;
磁盘组规划要合理:至少分DATA和RECO,冗余模式结合RAID选择;
环境变量别混淆:ASM实例和数据库实例的环境变量要区分,切换时注意修改;
验证要全面:不仅要验证数据库,还要确认ASM实例和磁盘组状态。