Windows Server2016下Oracle19c DG配置实操步骤
文章目录
前言
网络上关于Oracle19c DG(Oracle Data Guard)配置教程有很多,大多数都是在Linux环境下部署,针对Windows环境的教程寥寥无几(一般不建议用Windows Server部署服务)。此外,这些教程的操作流程对初学者而言往往不够友好。因此,笔者通过查阅大量资料并请教技术大佬后,总结出以下内容,希望对大家尤其是刚接触DG的新手们有所帮助。
在Windows环境下配置Oracle Data Guard时,可能会遇到各种难以预料的错误。为了确保信息的全面性和准确性,本文详细记录了每一步操作过程,尽管这样会导致内容较为冗长和复杂。作为DG的初学者,文中难免会有疏漏或错误,欢迎各位读者提出宝贵的批评和指正。
Oracle Data Guard实现原理
Oracle Data Guard是一种数据库容灾备份解决方案,它通过在主数据库服务器上创建一个或多个备数据库来实现。备数据库可以在主数据库服务器的本地或者远程机器上创建。Data Guard通过日志文件传输服务将主数据库的日志文件实时传输到备数据库,备数据库接收到日志文件后,会按照日志文件中的记录对数据进行相应的修改操作,从而保持与主数据库的数据同步。用一句话总结,就是“从主库获取数据到备库,在主库发生异常时,备库可以接管主库,完成身份变化”。
Oracle中有两种日志:重做日志(Redo log)和归档日志(Archive log)
重做日志(Redo log):记录数据库增、删、改以及新建表、索引等内容,将其记录到日志文件中。理论中按顺序记录这些SQL语句就可以还原数据库。
归档日志(Archive log):重做日志是将指令写入到一个日志文件中,当日志文件超过一定大小,重做日志就会对其进行覆盖,历史的重做日志将会被备份到归档日志中。
将归档日志从主库传输到备库进行恢复后,然后实时将重做日志传输到备库并执行,就可实现数据库的热备。其实主库DG就是用来传输主库的Archive log和Redo log,从库的DG用来接收主库的日志并执行。Archive log也需要传输的目的是为了保障主备库事务一致性。
【引用】https://blog.csdn.net/Asgard_Hu/article/details/126967794
其工作原理如下图所示
以下是本篇文章正文内容,下面案例可供参考
一、部署规划
1.1、虚拟机搭建:
虚拟机搭建:初学者,不建议直接在生产环境操作,避免出现操作不当造成不可挽回的损失(切记切记)。虚拟机软件建议使用VMware,VMware和操作系统安装步骤另找教程,本文不再详细讲解。
1.2、环境规划:
类型 | 主库 | 备库 |
---|---|---|
操作系统 | Windows Server2016 | Windows Server2016 |
IP | 192.168.0.180 | 192.168.0.181 |
主机名 | Oraclepd | Oraclesd |
数据库 | Oracle19c | Oracle19c |
实例名 | orcl | orcl |
DB_UNQNAME | orclpd | orclsd |
注:网上很多教程主库安装Oracle软件后创建实例,备库仅安装软件不创建实例,且主备库的实例名称不一样。但为了方便操作,本文主备库都安装软件和创建实例,且实例名称均为orcl。
本次采用VMware虚拟机进行部署,为了方便,先完成主库Oracle软件安装和实例创建后,克隆一个虚拟机,对克隆机操作系统进行配置后用作备库。
1.3、主库操作系统配置
1.3.1 关闭防火墙。操作系统安装完成后,先将防火墙关闭。
1.3.2 配置主机IP。
1.3.3 修改主机名称。修改后重启生效。
1.4、安装Oracle数据库。
1.4.1 安装包解压至D盘根目录,并将文件夹名称改为“db_home”。
1.4.2 Oracle软件安装
1.4.3 创建实例步骤
1.4.4 创建监听
1.4.5 修改监听配置
# listener.ora Network Configuration File: D:\db_home\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\db_home)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.180)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\db_home\log
1.4.6 修改网络配置
# tnsnames.ora Network Configuration File: D:\db_home\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.181)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
ORCLDG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.180)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
1.4.7 sqlnet服务认证配置
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES = (NONE)
SQLNET.AUTHENTICATION_SERVICES是Oracle数据库中的一个参数,用于设置数据库的认证服务。这个参数定义了数据库使用哪些认证服务来验证用户连接请求。在Oracle中,SQLNET.AUTHENTICATION_SERVICES参数的常见设置如下:
NONE:不使用任何外部认证服务,由Oracle数据库自行处理所有认证工作。
NTSRM:使用Microsoft的NTLanMan (NTLM) 认证协议,主要用于Windows环境。
K5CRYPTO:使用基于Kerberos 5的认证服务,适用于UNIX和大型组织环境中。
将SQLNET.AUTHENTICATION_SERVICES 参数设置为NONE后,将不能使用sqlplus / as sysdba登录,必须使用显性密码和指向实例登录,即sqlplus sys/aqa@orcl as 进行登录。前期为了部署方便,可以先试用默认参数TNS,到使用Rman工具进行数据同步时再修改为NONE(注:不修改为NONE,远程登录会报错)。
1.5、克隆虚拟机
前面主库基础配置基本完成,现将主库虚拟机关机,将其克隆一个作为备库。
1.5.1 配置备库IP。
1.5.2 配置备库监听。
# listener.ora Network Configuration File: D:\db_home\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\db_home)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.181)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\db_home\log
1.5.3 修改备库主机名称为oraclesd,电脑重启生效。
至此,主备库的准备工作已经完成,下面开始DG配置。
二、主库配置
2.1、查看主库归档和附加日志配置
SQL> select log_mode, force_logging from v$database;
LOG_MODE FORCE_LOGGING
----------------- --------------------------
NOARCHIVELOG NO
2.2、开启归档模式
# 关闭数据库
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
# 开启mount模式
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1728050808 bytes
Fixed Size 9029240 bytes
Variable Size 1006632960 bytes
Database Buffers 704643072 bytes
Redo Buffers 7745536 bytes
数据库装载完毕。
# 设置数据库为归档模式
SQL> alter database archivelog;
数据库已更改。
# 打开数据库
SQL> alter database open;
数据库已更改。
# 启动自动归档模式
SQL> alter system archive log start;
系统已更改。
# 再次查看配置情况
SQL> select log_mode, force_logging from v$database;
LOG_MODE FORCE_LOGGING
------------------------ --------------------
ARCHIVELOG NO
2.3、开启主库附加日志
SQL> alter database force logging;
数据库已更改。
SQL> select log_mode, force_logging from v$database;
LOG_MODE FORCE_LOGGING
----------------------- ---------------
ARCHIVELOG YES
2.4、查看主库归档目的地
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\db_home\RDBMS
最早的联机日志序列 1
下一个存档日志序列 2
当前日志序列 2
# 为了便于检查自动存档日志,建议自定义一个路径,手动创建一个oralog文件夹,存档终点路径为“D:\app\Administrator\oralog”。
SQL> ALTER SYSTEM SET log_archive_dest_1 = 'location=D:\app\Administrator\oralog';
系统已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\app\Administrator\oralog
最早的联机日志序列 1
下一个存档日志序列 2
当前日志序列 2
2.5、在主库中添加附加日志
# 查看重做日志redo路径
SQL> select group#, type, member from v$logfile order by 1;
GROUP# TYPE MEMBER
-------- -------- ----------------------------------------------
1 ONLINE D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG
2 ONLINE D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
3 ONLINE D:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
# 查看重做日志redo大小
SQL> select group#,bytes/1024/1024 as Mb from v$log;
GROUP# MB
---------- ----------
1 200
2 200
3 200
# 在相同路径下创建大小相同的附加日志stredo,且附加日志stredo必重做日志redo多一组。(后面备库也需要添加)
SQL>alter database add standby logfile group 4 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo04.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 5 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo05.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 6 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo06.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 7 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo07.log') size 200m;
数据库已更改。
添加附件日志后,查询如下图即说明创建成功。
2.6、编辑spfile参数
Spfile是二进制的动态参数文件,不能直接编辑,需将其参数内容复制至静态参数文件pfile中,在静态参数文件进行编辑,再将编辑后的pfile参数复制到spfile中。
创建pfile文件
SQL> create pfile='D:\app\INITORCL.ORA' from spfile;
文件已创建。
打开“D:\app\INITORCL.ORA”文件,将“*.”部分删掉,把下面配置粘贴进去,根据各自实际情况修改。
*.audit_file_dest='D:\app\Administrator\admin\orcl\adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='D:\app\Administrator\oradata\ORCL\CONTROL01.CTL','D:\app\Administrator\oradata\ORCL\CONTROL02.CTL'
*.db_block_size=8192
*.db_create_file_dest='D:\app\Administrator\oradata'
*.db_file_name_convert='D:\APP\ADMINISTRATOR\ORADATA\ORCL\','D:\APP\ADMINISTRATOR\ORADATA\ORCL\' # 设置数据库备份文件恢复路径(主备库路径不一致时可通过此处进行转换)
*.db_name='orcl' # 注意,主备必须一致
*.diagnostic_dest='D:\app\Administrator'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='ORCL' # 设定主库名称
*.fal_server='ORCLDG' # 设定备库名称
*.DB_UNIQUE_NAME=ORCL # 注意,主备全局名称不能一样
*.log_archive_config='DG_CONFIG=(ORCL,ORCLDG)' # 设置日志配置
*.log_archive_dest_1='LOCATION=D:\app\Administrator\oralog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL' # 设置日志推送通道1,主库通道设定
*.log_archive_dest_2='SERVICE=ORCLDG ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCLDG' # 设置日志推送通道2,备库通道设定
*.log_archive_format='ORCL_%t_%s_%r.arch' # 格式化归档日志文件格式
*.log_file_name_convert='D:\APP\ADMINISTRATOR\ORADATA\ORCL\','D:\APP\ADMINISTRATOR\ORADATA\ORCL\' # 设置日志备份文件恢复路径(主备库路径不一致时可通过此处进行转换)
*.open_cursors=300
*.pga_aggregate_target=819m
*.processes=320 # 设置数据库最大连接数
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2457m
*.standby_file_management='AUTO' # 启动热备功能
*.undo_tablespace='UNDOTBS1'
每个人搭建的环境可能有所不同,最好对以上每个参数含义都要做了解,根据实际情况做修改,直接复制容易翻车。
将修改后的pfile文件复制到spfile中。
# 先关闭数据库
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
# 开启pfile进入nomount模式中
SQL> startup pfile='D:\app\INITORCL.ORA' nomount;
ORACLE 例程已经启动。
Total System Global Area 2583687184 bytes
Fixed Size 9031696 bytes
Variable Size 301989888 bytes
Database Buffers 2264924160 bytes
Redo Buffers 7741440 bytes
# 通过创建方式将pfile参数复制到spfile文件中
SQL> create spfile from pfile='D:\app\INITORCL.ORA';
文件已创建
# 打开数据库
SQL> alter database mount;
数据库已更改。
SQL> alter database open;
数据库已更改。
2.7、创建密码文件
进入CMD,执行重建口令命令
C:\Users\Administrator>orapwd file=D:\db_home\database\PWDorcl.ora password=his entries=10 ignoreCase=Y force=y
OPW-00029: SYS 用户的口令复杂性失败: Password must contain at least 8 characters。
由于密码复杂度不满足Oracle19c要求报错,需在后面加format=12即可解决
C:\Users\Administrator>orapwd file=D:\db_home\database\PWDorcl.ora password=his entries=10 ignoreCase=Y force=y format=12
重建密码文件后需要重启服务
至此,主库的DG配置基本完成,下面开始备库DG配置。
三、备库配置
3.1、文件参数配置
3.1.1 将主库重建的密码文件复制到对应路径,重启实例后生效。
3.1.2 在备库添加附加日志
SQL>alter database add standby logfile group 4 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo04.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 5 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo05.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 6 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo06.log') size 200m;
数据库已更改。
SQL>alter database add standby logfile group 7 ('D:\APP\ADMINISTRATOR\ORADATA\ORCL\stredo07.log') size 200m;
数据库已更改。
3.1.3 将主库pfile文件复制到对应路径,并对pfile文件进行修改。打开“D:\app\INITORCL.ORA”文件,将一下参数进行修改。
*.fal_client='ORCLDG'
*.fal_server='ORCL'
*.DB_UNIQUE_NAME=ORCLDG
*.log_archive_dest_1='LOCATION=D:\app\Administrator\oralog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCLDG'
*.log_archive_dest_2='SERVICE=ORCL ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'
*.log_archive_format='ORCLDG_%t_%s_%r.arch'
3.1.4 将修改后的pfile文件复制到spfile中。
# 先关闭数据库
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
# 开启pfile进入nomount模式中
SQL> startup pfile='D:\app\INITORCL.ORA' nomount;
ORACLE 例程已经启动。
Total System Global Area 2583687184 bytes
Fixed Size 9031696 bytes
Variable Size 301989888 bytes
Database Buffers 2264924160 bytes
Redo Buffers 7741440 bytes
# 通过创建方式将pfile参数复制到spfile文件中
SQL> create spfile from pfile='D:\app\INITORCL.ORA';
文件已创建
此时先不挂载数据库
3.1.5 在“D:\app\Administrator\”路径下手动创建oralog文件夹。
至此,备库基础配置已完成,下面将开始进行数据同步。
四、用Rman方式将主库数据同步到备库
4.1 用rman连接主备库(在备库操作)
C:\Users\Administrator>rman target sys/his@orcl auxiliary sys/his@orcldg
恢复管理器: Release 19.0.0.0.0 - Production on 星期六 8月 17 21:24:50 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1705039964)
已连接到辅助数据库: ORCL (未装载)
RMAN>
4.2 执行命令复制主库数据文件到备库(在备库操作)
RMAN> duplicate target database for standby from active database nofilenamecheck;
从位于 19-8月 -24 的 Duplicate Db 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=11 设备类型=DISK
内存脚本的内容:
{
backup as copy reuse
passwordfile auxiliary format 'D:\db_home\DATABASE\PWDorcl.ORA' ;
}
正在执行内存脚本
......
......
(后面内容省略)
4.3、检查测试:
4.3.1 启动adg模式(备库执行
)
SQL> alter database open;
数据库已更改。
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
4.3.2 日志切换(主库执行
)
SQL> alter system switch logfile;
系统已更改。
4.3.3 主库检查dataguard状态(主库为读写状态
)
SQL> select NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
----- ----------- -------------------- --------------- ------------------
ORCL READ WRITE MAXIMUM PERFORMANCE PRIMARY TO STANDBY
4.3.4 备库检查dataguard状态(备库为仅读状态
)
SQL> select NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE SWITCHOVER_STATUS
---- -------------------- ------------------- -------------- --------------------
ORCL READ ONLY WITH APPLY MAXIMUM PERFORMANCE PRIMARY TO STANDBY
4.3.5 dataguard数据同步测试
(1)主库创建test数据表,并插入一行数据。
SQL> CREATE TABLE test(id NUMBER);
表已创建。
SQL> INSERT INTO test(id) VALUES(1);
已创建 1 行。
SQL> commit;
提交完成。
(2) 备库查询数据是否同步
SQL> select * from test;
ID
----------
1
(3)可以重复主库插入数据,备库执行查询,查看数据同步是否正常。
至此,Oracle19c单实例DG配置全部完成。主备库角色切换,将在下一篇文章发布。
结束语
Data Guard 通过创建备用数据库来同步主数据库的事务日志,确保数据的一致性和安全性。在主数据库发生故障时,备用数据库可以快速切换,实现无缝接管,最小化停机时间。此外,Data Guard 还支持异地容灾,增强了企业对自然灾害和人为错误的防护能力。我们通过学习 Data Guard,可以更好地理解数据库的高可用性和灾难恢复机制,为保障企业数据的安全和业务的连续性提供技术支持。
注:全篇万字长文,略显冗长啰嗦。本文仅作为像笔者一样的初学者参考所用,不作为生产环境的实际指导,请各位谨慎操作。