Oracle 19c Data Guard 主备完整部署文档(亲测)
Oracle 19c Data Guard 主备完整部署文档
yum install unzip lrzsz -y
环境信息
- 主库:192.168.65.100
DB_UNIQUE_NAME=orcl_pri - 备库:192.168.65.110
DB_UNIQUE_NAME=orcl_stby ORACLE_BASE=/u01/app/oracleORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1- 安装包解压到临时目录,不解压到$ORACLE_HOME
- 仅主库创建 standby redo log,备库由 RMAN 自动继承
一、前置配置(主备都执行,root)
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
echo oracle | passwd --stdin oracle
mkdir -p /u01/app/oracle/product/19c/dbhome_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01
cat >> /etc/hosts <<EOF
192.168.65.100 primary
192.168.65.110 standby
EOF
cat >> /etc/sysctl.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 16777216
kernel.shmmax = 1024*1024*1024*2 # 2GB 建议值:≥ 物理内存的 1/2 或 全部物理内存(Oracle 推荐)
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
sysctl -p
cat >> /etc/security/limits.conf <<EOF
root soft nofile 16384
root hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 524288
oracle hard nofile 524288
oracle soft stack 10240
oracle hard stack 32768
#oracle hard memlock unlimited
#oracle soft memlock unlimited
EOF
pam限制
echo "session required pam_limits.so" >> /etc/pam.d/login
设置主机名(主备都执行,root)
主库
hostnamectl set-hostname primary
备库
hostnamectl set-hostname standby
防火墙(主备都执行)
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
#依赖的安装
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel elfutils-libelf-devel smartmontools
二、环境变量(主备 oracle 用户)
cat > ~/.bash_profile <<EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=\$ORACLE_HOME/bin:\$PATH
# 核心:设置NLS_LANG,解决ORA-12705
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LANG=C
EOF
source ~/.bash_profile
三、安装 Oracle 软件(主备相同,oracle)
unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME
# 3. 重新生成正确的响应文件(路径完全匹配)
cat > db_install.rsp <<EOF
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_HOME=/u01/app/oracle/product/19c/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
DECLINE_SECURITY_UPDATES=true
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
EOF
./runInstaller -silent -responseFile ./db_install.rsp -ignorePrereqFailure
root 用下执行:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19c/dbhome_1/root.sh
四、主库配置(192.168.65.100)
# 进入ORACLE_HOME目录
cd $ORACLE_HOME
cat > ./dbca.rsp <<EOF
gdbName=orcl
sid=orcl
databaseConfigType=SI
createAsContainerDatabase=false
templateName=General_Purpose.dbc
sysPassword=Oracle_123
systemPassword=Oracle_123
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
memoryPercentage=45
automaticMemoryManagement=true
emConfiguration=NONE
datafileDestination=/u01/app/oracle/oradata
recoveryAreaDestination=/u01/app/oracle/fra
recoveryAreaSize=20480
EOF
# 必须加 createDatabase 命令,否则语法错误
dbca -silent -createDatabase -responseFile $ORACLE_HOME/dbca.rsp -ignorePrereqFailure
2. 开启归档 + 强制日志
sqlplus / as sysdba
shutdown immediate
startup mount
alter database archivelog;
alter database force logging;
alter database open;
3. 创建密码文件
host orapwd file=$ORACLE_HOME/dbs/orapworcl password=Spring#1987 force=y
scp $ORACLE_HOME/dbs/orapworcl oracle@192.168.65.110:$ORACLE_HOME/dbs/orapworcl
4. DG 核心参数(全路径正确)
alter system set db_unique_name=orcl_pri scope=spfile;
alter system set log_archive_config='DG_CONFIG=(orcl_pri,orcl_stby)';
alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pri';
alter system set log_archive_dest_2='SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLES) DB_UNIQUE_NAME=orcl_stby';
alter system set log_archive_dest_state_2=ENABLE;
alter system set standby_file_management=AUTO;
alter system set log_file_name_convert='/u01/app/oracle/oradata/ORCL/','/u01/app/oracle/oradata/ORCL/' scope=spfile;
alter system set db_file_name_convert='/u01/app/oracle/oradata/ORCL/','/u01/app/oracle/oradata/ORCL/' scope=spfile;
alter system set fal_server=orcl_stby;
alter system set fal_client=orcl_pri;
5. 【关键】主库创建 Standby Redo Log(克隆前执行,备库自动继承)
alter database add standby logfile group 4 '/u01/app/oracle/oradata/ORCL/srl04.log' size 500M;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/ORCL/srl05.log' size 500M;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/ORCL/srl06.log' size 500M;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/ORCL/srl07.log' size 500M;
6. 重启主库使参数生效
shutdown immediate;
startup;
7. 监听 & tnsnames
cat > $ORACLE_HOME/network/admin/listener.ora <<EOF
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=orcl_pri)
(ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1)
(SID_NAME=orcl)
)
)
EOF
cat > $ORACLE_HOME/network/admin/tnsnames.ora <<EOF
orcl_pri =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.65.100)(PORT=1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_pri)
)
)
orcl_stby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.65.110)(PORT=1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_stby)
)
)
EOF
lsnrctl stop
lsnrctl start
五、备库前置配置(192.168.65.110)
mkdir -p /u01/app/oracle/admin/ORCL/adump
mkdir -p /u01/app/oracle/oradata/ORCL
mkdir -p /u01/app/oracle/arch
mkdir -p /u01/app/oracle/fra
orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle force=y
极简 pfile(仅2行)
cat > $ORACLE_HOME/dbs/initorcl.ora <<EOF
db_name=orcl
db_create_file_dest=/u01/app/oracle/oradata
EOF
sqlplus / as sysdba
startup nomount pfile=$ORACLE_HOME/dbs/initorcl.ora
从主库拷贝监听配置
# 主库执行
scp $ORACLE_HOME/network/admin/*.ora oracle@192.168.65.110:$ORACLE_HOME/network/admin/
# 备库执行
sed -i 's/orcl_pri/orcl_stby/g' $ORACLE_HOME/network/admin/listener.ora
lsnrctl stop
lsnrctl start
六、RMAN 克隆备库(主库执行)
rman target sys/oracle@primary auxiliary sys/oracle@standby
run {
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate auxiliary channel stb1 device type disk;
allocate auxiliary channel stb2 device type disk;
duplicate target database
for standby
from active database
spfile
set db_unique_name='orcl_stby' comment 'standby'
set log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_stby'
set log_archive_dest_2='SERVICE=orcl_pri ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_pri'
set fal_server='orcl_pri' comment 'primary'
set standby_file_management='auto'
nofilenamecheck;
}
七、备库开启日志应用(备库执行)
sqlplus / as sysdba
alter database recover managed standby database disconnect from session;
八、验证同步
-- 主库
alter system switch logfile;
-- 主备查询
select sequence#,applied from v$archived_log order by sequence# desc;
就主备切换
1. 主库执行(切换前检查)
select switchover_status from v$database;
-- 必须返回TO STANDBY,才能切换
alter database commit to switchover to physical standby with session shutdown;
shutdown immediate;
startup mount;
2. 备库执行(切换为主库)
select switchover_status from v$database;
-- 必须返回TO PRIMARY,才能切换
alter database commit to switchover to primary with session shutdown;
shutdown immediate;
startup;
3. 原主库(新备库)启动 MRP
alter database recover managed standby database using current logfile disconnect from session;
浙公网安备 33010602011771号