一、背景
以下是基于Oracle 19c ADG(Active Data Guard)集群的搭建WBS(工作分解结构),包括必要的安装命令和配置步骤。假设主库IP为172.21.100.10,备库IP为172.21.100.11。
二、环境准备
1.1 系统环境检查
- 确保两台主机的CentOS 7.9系统已安装并配置好网络,IP地址分别为
172.21.100.10和172.21.100.11。 - 确保两台主机之间可以互相通信。
- 确保主机名已正确配置,例如:
hostnamectl set-hostname primary-db --static # 主库
hostnamectl set-hostname standby-db --static # 备库
1.2 配置yum源
- 在两台主机上分别配置yum源:
rpm -qa|grep yum|xargs rpm -e --nodeps # 删除旧的yum包
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-3.4.3-168.el7.centos.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-langpacks-0.4.2-7.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-rhn-plugin-2.0.1-10.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-54.el7_8.noarch.rpm
rpm -ivh yum-*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/centos/7/atomic/x86_64/repo/CentOS-Base.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
yum -y clean all && yum -y makecache
1.3 创建Oracle用户和组
- 在两台主机上分别创建Oracle用户和组:
groupadd -g 1001 oinstall
groupadd -g 1002 dba
useradd -u 1001 -g oinstall -G dba oracle
passwd oracle # 设置oracle用户密码
1.4 创建Oracle目录
- 在两台主机上分别创建Oracle目录:
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oradata
mkdir -p /u01/app/oracle/oraInventory
mkdir -p /u01/app/oracle/product/19.3.0/db_1
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app
三、安装oracle
2.1 下载Oracle安装文件
- 下载Oracle 19c安装文件到主库的
/soft目录下(需要提前创建此目录)。 - 将安装文件上传到主库的
/soft目录,并解压:
su - oracle
unzip -q /soft/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/db_1/
2.2 编辑安装响应文件
- 编辑安装响应文件
db_install.rsp:
cd /u01/app/oracle/product/19.3.0/db_1/install/response
cp db_install.rsp /soft/db_install.rsp
vim /soft/db_install.rsp
修改以下内容:
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oracle/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
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
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.SID=oracle
2.3 静默安装Oracle软件
- 在主库上静默安装Oracle软件:
cd /u01/app/oracle/product/19.3.0/db_1
./runInstaller -silent -responseFile /soft/db_install.rsp -ignorePrereq
- 执行以下脚本:
/u01/app/oracle/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.3.0/db_1/root.sh
2.4 配置监听
- 编辑监听配置文件
netca.rsp:
cat >>/soft/netca.rsp <<EOF
[GENERAL]
RESPONSEFILE_VERSION="19.0"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE="typical"
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START="LISTENER"
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}
EOF
- 配置监听
netca -silent -responseFile /soft/netca.rsp
四、配置主库
3.1 确保主库开启归档模式
- 检查并开启归档模式:
SQL> select log_mode from v$database;
SQL> alter database archivelog;
SQL> alter database force logging;
3.2 配置tnsnames.ora
- 编辑
tnsnames.ora文件:
cd /u01/app/oracle/product/19.3.0/db_1/network/admin
vi tnsnames.ora
添加一下内容:
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.100.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = primary)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.100.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = standby)
)
)
- 将
tnsnames.ora文件复制到备库:
scp tnsnames.ora oracle@172.21.100.11:/u01/app/oracle/product/19.3.0/db_1/network/admin/
3.3 创建pfile文件并传到备库
- 创建pfile文件:
SQL> create pfile='/u01/app/oracle/mespfile.ora' from spfile;
- 将pfile文件复制到备库:
scp /u01/app/oracle/mespfile.ora oracle@172.21.100.11:/u01/app/oracle/
五、配置备库
4.1 在备库上安装Oracle软件
- 重复主库的安装步骤(2.1-2.3),确保备库上也安装了Oracle软件。
4.2 创建备库目录
- 创建备库目录:
mkdir -p /u01/app/oracle/oradata/orcl
4.3 创建备库
- 使用RMAN创建备库:
rman target sys/oracle@primary auxiliary sys/oracle@standby
在RMAN中执行以下命令:
duplicate target database for standby from active database
spfile
parameter_value_convert 'primary','standby'
set db_unique_name='standby'
set log_archive_dest_2='service=primary lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=primary'
set fal_client='standby'
set fal_server='primary'
set db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
set log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'
;
六、配置ADG
5.1 配置主库
- 在主库上配置ADG:
SQL> alter system set log_archive_config='dg_config=(primary,standby)';
SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/orcl/arch valid_for=(all_logfiles,all_roles) db_unique_name=primary';
SQL> alter system set log_archive_dest_2='service=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standby';
SQL> alter system set log_archive_dest_state_1=enable;
SQL> alter system set log_archive_dest_state_2=enable;
SQL> alter system set fal_server=standby;
5.2 配置备库
- 在备库上配置ADG:
SQL> alter system set log_archive_config='dg_config=(primary,standby)';
SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/orcl/arch valid_for=(all_logfiles,all_roles) db_unique_name=standby';
SQL> alter system set log_archive_dest_state_1=enable;
SQL> alter system set fal_client=primary;
SQL> alter system set fal_server=primary;
5.3 启动ADG
- 在备库上启动ADG:
SQL> alter database recover managed standby database using current logfile disconnect from session;
七、测试ADG
- 在主库上创建表并插入数据:
SQL> create table test_adg (id number);
SQL> insert into test_adg values (1);
SQL> commit;
- 在备库上查询数据:
SQL> select * from test_adg;
八、配置自动切换主从
- 配置Data Guard Broker以实现自动切换:
dgmgrl sys/oracle@primary
在DGMGRL中执行以下命令:
create configuration 'my_dg_config' as primary database is 'primary' connect identifier is primary;
add database 'standby' as connect identifier is standby maintained as physical;
enable configuration;
show configuration;
九、测试故障切换
- 在主库上执行故障切换:
failover to standby;
-
验证备库是否成功切换为主库。
十、监控和维护
- 定期检查ADG的状态:
dgmgrl sys/oracle@primary
show configuration;
show database primary;
show database standby;
- 确保日志同步正常,及时处理任何警告或错误。