oracleasm configure -i
oracleasm status
oracleasm init
oracleasm status
oracleasm createdisk DATA /dev/vgdata/lvdata
oracleasm scandisks
oracleasm listdisks
/etc/init.d/oracleasm --help
asm磁盘:仲裁盘3个(/dev/sdb1、/dev/sdc1、/dev/sdd1),数据盘2个(/dev/sde1、/dev/sdf1)
查看各磁盘设备的UUID号
/usr/lib/udev/scsi_id -g -u -d /dev/sdb1
/usr/lib/udev/scsi_id -g -u -d /dev/sdc1
规则文件配置
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="f8158779-ca37-4fe0-9935-f860d66c2595", SYMLINK+="asm-ocr1", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="/dev/vgdata/lvdata", SUBSYSTEM=="block", PROGRAM=="blkid /dev/vgdata/lvdata", RESULT=="f8158779-ca37-4fe0-9935-f860d66c2595", SYMLINK+="asm-ocr1", OWNER="oracle", GROUP="oinstall", MODE="0660"
加载更新后的块设备
/sbin/partprobe /dev/sdb1
/sbin/partprobe /dev/sdc1
/sbin/partprobe /dev/sdd1
测试rule文件
udevadm test /block/sdb/sdb1
重启服务生效
udevadm control --reload-rules
ll /dev/asm*
ll /dev/sd*
# Oracle 19c ASM Restart环境安装
echo "创建CentOS 7.6的容器"
docker run -d --name lhr2019ocpasm -h lhr2019ocp \
-p 5500-5510:5500-5510 -p 1521:1521 -p 222:22 \
--privileged=true \
lhrbest/lhrcentos76:2.0 init
docker exec -it lhr2019ocpasm bash
echo "操作系统配置:添加组和用户"
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba grid
-- 修改密码
echo "oracle:lhr" | chpasswd
echo "grid:lhr" | chpasswd
echo "创建安装目录"
mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
mkdir -p /u01/app/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory
echo "配置grid、oracle和root用户的环境变量文件"
echo "oracle用户:"
cat >> /home/oracle/.bash_profile <<"EOF"
umask 022
export ORACLE_SID=lhr19cdb
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_PATH=.:$ORACLE_BASE/dba_scripts/sql:$ORACLE_HOME/rdbms/admin
export SQLPATH=$ORACLE_HOME/sqlplus/admin
#export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
#AL32UTF8 SELECT userenv('LANGUAGE') db_NLS_LANG FROM DUAL;
export NLS_LANG="AMERICAN_CHINA.ZHS16GBK"
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias asmcmd='rlwrap asmcmd'
alias dgmgrl='rlwrap dgmgrl'
alias sas='sqlplus / as sysdba'
EOF
echo "grid用户:"
cat >> /home/grid/.bash_profile <<"EOF"
umask 022
export ORACLE_SID=+ASM
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$PATH
alias sqlplus='rlwrap sqlplus'
alias asmcmd='rlwrap asmcmd'
alias dgmgrl='rlwrap dgmgrl'
alias sas='sqlplus / as sysdba'
EOF
echo "配置root用户的环境变量"
cat >> /etc/profile <<"EOF"
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export GRID_HOME=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME/bin
EOF
cat >> /root/.bashrc <<"EOF"
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export GRID_HOME=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME/bin
EOF
echo "安装OS的依赖包"
echo "检查命令:"
rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' binutils \
compat-libcap1 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
glibc \
glibc-devel \
ksh \
libgcc \
libstdc++ \
libstdc++-devel \
libaio \
libaio-devel \
libXext \
libXtst \
libX11 \
libXau \
libxcb \
libXi \
make \
elfutils-libelf-devel \
sysstat | grep "not installed"
echo "安装依赖包:"
yum install binutils compat-libstdc++-33 gcc gcc-c++ glibc glibc.i686 glibc-devel \
ksh libgcc.i686 libstdc++-devel libaio libaio.i686 libaio-devel libaio-devel.i686 \
libXext libXext.i686 libXtst libXtst.i686 libX11 libX11.i686 libXau libXau.i686 \
libxcb libxcb.i686 libXi libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel \
zlib-devel.i686 compat-libcap1 -y
echo "配置内核参数"
echo "修改/etc/sysctl.conf文件"
echo "
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.panic_on_oops = 1
" >> /etc/sysctl.conf
/sbin/sysctl -p
echo "修改/etc/security/limits.conf文件"
echo "grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
grid soft nproc 2047
grid hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
root soft nproc 2047 " >> /etc/security/limits.conf
echo "修改/etc/pam.d/login文件"
echo "session required pam_limits.so" >> /etc/pam.d/login
echo "配置/dev/shm大小"
mount -o remount,size=4G /dev/shm
echo "mount -o remount,size=4G /dev/shm" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
echo "配置ASM磁盘,我们这里使用asmlib的方式。一般来说,我们创建ASM磁盘,用的是udev。"
echo "安装oracleasm软件,先安装kmod-oracleasm,再安装oracleasmlib和oracleasm-support。"
yum install -y kmod-oracleasm
# wget http://rpmfind.net/linux/centos/7.8.2003/os/x86_64/Packages/kmod-oracleasm-2.0.8-27.el7.x86_64.rpm
wget https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracleasm-support-2.1.11-2.el7.x86_64.rpm
wget https://download.oracle.com/otn_software/asmlib/oracleasmlib-2.0.12-1.el7.x86_64.rpm
rpm -ivh *.rpm
# 如果rpm不能直接安装,需要依赖包,那就使用yum来安装:
yum install -y kmod-oracleasm-2.0.8-27.el7.x86_64.rpm
systemctl enable oracleasm.service
oracleasm configure -i # grid,asmadmin,y,y
oracleasm configure -d
oracleasm configure -e
oracleasm init #若初始化失败,则尝试重启OS
oracleasm status
创建loop设备
mkdir /asmdisk
dd if=/dev/zero of=/asmdisk/disk1 bs=1024k count=2000
dd if=/dev/zero of=/asmdisk/disk2 bs=1024k count=2000
dd if=/dev/zero of=/asmdisk/disk3 bs=1024k count=2000
dd if=/dev/zero of=/asmdisk/disk4 bs=1024k count=2000
dd if=/dev/zero of=/asmdisk/disk5 bs=1024k count=2000
dd if=/dev/zero of=/asmdisk/disk6 bs=1024k count=8000
dd if=/dev/zero of=/asmdisk/disk7 bs=1024k count=8000
mknod -m 0660 /dev/loop1 b 7 1
mknod -m 0660 /dev/loop2 b 7 2
mknod -m 0660 /dev/loop3 b 7 3
mknod -m 0660 /dev/loop4 b 7 4
mknod -m 0660 /dev/loop5 b 7 5
mknod -m 0660 /dev/loop6 b 7 6
mknod -m 0660 /dev/loop7 b 7 7
/sbin/losetup /dev/loop1 /asmdisk/disk1
/sbin/losetup /dev/loop2 /asmdisk/disk2
/sbin/losetup /dev/loop3 /asmdisk/disk3
/sbin/losetup /dev/loop4 /asmdisk/disk4
/sbin/losetup /dev/loop5 /asmdisk/disk5
/sbin/losetup /dev/loop6 /asmdisk/disk6
/sbin/losetup /dev/loop7 /asmdisk/disk7
losetup -a
echo "创建ASM磁盘"
oracleasm createdisk ASM1 /dev/loop1
oracleasm createdisk ASM2 /dev/loop2
oracleasm createdisk ASM3 /dev/loop3
oracleasm createdisk ASM4 /dev/loop4
oracleasm createdisk ASM5 /dev/loop5
oracleasm createdisk ASM6 /dev/loop6
oracleasm createdisk ASM7 /dev/loop7
echo "配置开机启动脚本"
echo "
#!/bin/bash
mknod -m 0660 /dev/loop1 b 7 1
mknod -m 0660 /dev/loop2 b 7 2
mknod -m 0660 /dev/loop3 b 7 3
mknod -m 0660 /dev/loop4 b 7 4
mknod -m 0660 /dev/loop5 b 7 5
mknod -m 0660 /dev/loop6 b 7 6
mknod -m 0660 /dev/loop7 b 7 7
systemctl restart oracleasm.service
/sbin/losetup -d /dev/loop1
/sbin/losetup -d /dev/loop2
/sbin/losetup -d /dev/loop3
/sbin/losetup -d /dev/loop4
/sbin/losetup -d /dev/loop5
/sbin/losetup -d /dev/loop6
/sbin/losetup -d /dev/loop7
/sbin/losetup /dev/loop1 /asmdisk/disk1
/sbin/losetup /dev/loop2 /asmdisk/disk2
/sbin/losetup /dev/loop3 /asmdisk/disk3
/sbin/losetup /dev/loop4 /asmdisk/disk4
/sbin/losetup /dev/loop5 /asmdisk/disk5
/sbin/losetup /dev/loop6 /asmdisk/disk6
/sbin/losetup /dev/loop7 /asmdisk/disk7
oracleasm scandisks
/u01/app/19.3.0/grid/bin/crsctl start res -all
" > /etc/initASMDISK.sh
chmod +x /etc/initASMDISK.sh
echo "
[Unit]
Description=Run a Custom Script at Startup
After=default.target
[Service]
ExecStart=/etc/initASMDISK.sh
[Install]
WantedBy=default.target
" > /etc/systemd/system/initASMDISK.service
systemctl daemon-reload
systemctl enable initASMDISK.service
echo "数据库软件包准备"
echo "上传、解压安装包。需要注意的是,从Oracle 18c开始,解压安装包的位置,解压后需要放到相应的ORACLE_HOME里边去。"
echo "grid用户:"
unzip /soft/LINUX.X64_193000_grid_home.zip -d /u01/app/19.3.0/grid
echo "oracle用户:"
unzip /soft/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_1
echo "图形化安装grid和db"
:<<EOF
[grid@asm19clhr ~]$ export DISPLAY=192.168.59.1:0.0
[grid@asm19clhr ~]$ /u01/app/19.3.0/grid/gridSetup.sh
[root@raclhr-18c-n1 ~]# su - oracle
Last login: Fri Sep 14 15:39:02 CST 2018 on pts/3
[oracle@raclhr-18c-n1 ~]$ cd $ORACLE_HOME
[oracle@raclhr-18c-n1 dbhome_1]$ export DISPLAY=192.168.59.1:0.0
[oracle@raclhr-18c-n1 dbhome_1]$ ./runInstaller
EOF
echo "静默安装grid和db,静默安装主要涉及到的是相应文件。"
find /u01 -name *.rsp
响应文件:/u01/app/19.3.0/grid/inventory/response/grid_install.rsp
/u01/app/oracle/product/19.3.0/dbhome_1/assistants/netca/netca.rsp
/u01/app/oracle/product/19.3.0/dbhome_1/assistants/dbca/dbca.rsp
/u01/app/oracle/product/19.3.0/dbhome_1/install/response/db_install.rsp
/u01/app/19.3.0/grid/assistants/netca/netca.rsp
/u01/app/19.3.0/grid/install/response/gridsetup.rsp
more /u01/app/19.3.0/grid/install/response/gridsetup.rsp | grep oracle.install.option -B 14
echo "静默安装grid"
/u01/app/19.3.0/grid/gridSetup.sh -silent -force -noconfig -ignorePrereq \
oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0 \
INVENTORY_LOCATION=/u01/app/oraInventory \
oracle.install.option=HA_CONFIG \
ORACLE_BASE=/u01/app/grid \
oracle.install.asm.OSDBA=asmdba \
oracle.install.asm.OSOPER=asmoper \
oracle.install.asm.OSASM=asmadmin \
oracle.install.asm.SYSASMPassword=lhr \
oracle.install.asm.monitorPassword=lhr \
oracle.install.crs.config.scanType=LOCAL_SCAN \
oracle.install.crs.config.ClusterConfiguration=STANDALONE \
oracle.install.crs.config.configureAsExtendedCluster=false \
oracle.install.crs.config.useIPMI=false \
oracle.install.asm.storageOption=ASM \
oracle.install.asm.diskGroup.name=DATA \
oracle.install.asm.diskGroup.redundancy=EXTERNAL \
oracle.install.asm.diskGroup.AUSize=4 \
oracle.install.asm.diskGroup.disksWithFailureGroupNames=ORCL:ASM1,,ORCL:ASM2,,ORCL:ASM3, \
oracle.install.asm.diskGroup.disks=ORCL:ASM1,ORCL:ASM2,ORCL:ASM3 \
oracle.install.asm.diskGroup.diskDiscoveryString=ORCL:* \
oracle.install.crs.rootconfig.executeRootScript=false
-- 以root用户执行:
1. /u01/app/oraInventory/orainstRoot.sh
2. /u01/app/19.3.0/grid/root.sh
-- 以grid用户:
/u01/app/19.3.0/grid/gridSetup.sh -silent -executeConfigTools -responseFile /u01/app/19.3.0/grid/install/response/grid_2020-08-03_09-33-56PM.rsp
echo "静默安装ASM实例,创建ASM实例可以使用图形界面创建:"
export DISPLAY=192.168.59.1:0.0
/u01/app/19.3.0/grid/bin/asmca
echo "可以静默创建ASM实例:"
/u01/app/19.3.0/grid/bin/asmca -silent -configureASM -sysAsmPassword lhr -asmsnmpPassword lhr -diskString 'ORCL:*' -diskGroupName DATA -diskList ORCL:ASM1,ORCL:ASM2,ORCL:ASM3 -redundancy EXTERNAL
echo "创建FRA磁盘组、给磁盘组添加磁盘"
export GRID_HOME=$ORACLE_HOME
# 查询ASM磁盘
$GRID_HOME/bin/kfod disks=asm st=true ds=true cluster=true
# /grid/stage/ext/bin/kfod disks=asm st=true ds=true cluster=true
alter system set asm_diskstring='ORCL:*';
col name format a10
set line 9999
col path format a25
select GROUP_NUMBER,path,name,disk_number,total_mb,free_mb,CREATE_DATE,MOUNT_STATUS,MOUNT_DATE from v$asm_disk order by GROUP_NUMBER desc,disk_number;
select name,state,free_mb,required_mirror_free_mb,usable_file_mb from v$asm_diskgroup;
create diskgroup FRA external redundancy disk 'ORCL:ASM4','ORCL:ASM5' ATTRIBUTE 'compatible.rdbms' = '19.0', 'compatible.asm' = '19.0';
# alter diskgroup fra add disk 'ORCL:ASM7';
# alter diskgroup data add disk 'ORCL:ASM6';
echo "静默安装oracle软件"
/u01/app/oracle/product/19.3.0/dbhome_1/runInstaller -silent -force -noconfig -ignorePrereq \
oracle.install.responseFileVersion=oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0 \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSOPER_GROUP=oper \
oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
oracle.install.db.OSDGDBA_GROUP=dgdba \
oracle.install.db.OSKMDBA_GROUP=kmdba \
oracle.install.db.OSRACDBA_GROUP=racdba
-- root用户
/u01/app/oracle/product/19.3.0/dbhome_1/root.sh
echo "静默建库"
# 删除一个数据库
dbca -silent -deleteDatabase -sourceDB lhr19cdb -sysDBAUserName sys -sysDBAPassword lhr -forceArchiveLogDeletion
# 创建一个ASM磁盘存储的CDB,只创建一个pdb$seed
dbca -silent -ignorePreReqs -ignorePrereqFailure -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-gdbname lhr19cdb -sid lhr19cdb \
-createAsContainerDatabase TRUE \
-sysPassword lhr -systemPassword lhr -pdbAdminPassword lhr -dbsnmpPassword lhr \
-datafileDestination '+DATA' -recoveryAreaDestination '+FRA' \
-storageType ASM \
-characterset AL32UTF8 \
-sampleSchema true \
-totalMemory 1024 \
-databaseType MULTIPURPOSE \
-emConfiguration NONE
# 创建一个ASM磁盘存储的CDB,额外创建1个pdb
dbca -silent -ignorePreReqs -ignorePrereqFailure -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-gdbname cdb1 -sid cdb1 \
-createAsContainerDatabase TRUE \
-numberOfPDBs 1 \
-pdbName pdb \
-pdbAdminPassword lhr \
-sysPassword lhr -systemPassword lhr -dbsnmpPassword lhr \
-datafileDestination '+DATA' -recoveryAreaDestination '+FRA' \
-storageType ASM \
-characterset AL32UTF8 \
-sampleSchema true \
-totalMemory 1024 \
-databaseType MULTIPURPOSE \
-emConfiguration NONE
# 创建一个非ASM磁盘存储的非cdb库
dbca -silent -ignorePreReqs -ignorePrereqFailure -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-gdbname lhr19sdb -sid lhr19sdb \
-createAsContainerDatabase FALSE \
-sysPassword lhr -systemPassword lhr -dbsnmpPassword lhr \
-datafileDestination '/u01/app/oracle/oradata' -recoveryAreaDestination '/u01/app/oracle/flash_recovery_area' \
-storageType FS \
-characterset ZHS16GBK \
-sampleSchema true \
-totalMemory 1024 \
-databaseType MULTIPURPOSE \
-emConfiguration NONE