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