【Windows Server2016下Oracle19c DG配置实操步骤】

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 Server2016Windows Server2016
IP192.168.0.180192.168.0.181
主机名OraclepdOraclesd
数据库Oracle19cOracle19c
实例名orclorcl
DB_UNQNAMEorclpdorclsd

注:网上很多教程主库安装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 星期六 817 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,可以更好地理解数据库的高可用性和灾难恢复机制,为保障企业数据的安全和业务的连续性提供技术支持。

注:全篇万字长文,略显冗长啰嗦。本文仅作为像笔者一样的初学者参考所用,不作为生产环境的实际指导,请各位谨慎操作。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值