ORACLE ADG单机配置指导

技术相关   2024-06-21 10:43   326   0  

注意事项

基础环境

主库与备库建议操作系统版本一致,主库与备库目录路径可以相同也可以不同。主库与备库BD_NAME必须一致,主库与备库数据库软件版本必须一致,包括应用补丁。

查询数据库安装版本:

以Oracle用户登录,进入ORACLE_HOME下OPatch目录,执行以下命令:
./opatch lspatches

结果如下:

spacer.gif8914_bzv9_7982.png

克隆安装

克隆安装说明

因主库与备库数据库软件版本必须保持一致,所以可以采用克隆安装的方式安装备库,克隆安装时需要对主库安装文件进行TAR打包,请注意TAR打包保存路径有充足的磁盘空间。

克隆安装步骤并非必须项,可以以全新安装方式安装备库。

克隆安装步骤

1、打包已安装好的数据库文件

[root@db1 product]# cd /u01
[root@db1 product]# tar -cvf app.tar app/

2、SCP传输打包的tar文件

[root@db1 product]# scp app.tar 172.16.1.20:/u01/app.tar

3、解压tar文件

[root@db2 db_home_1]# tar -xvf app.tar

4、执行安装

[oracle@db2 db_home_1]$ cd $ORACLE_HOME/clone/bin
[oracle@db2 bin]$ perl clone.pl ORACLE_BASE=$ORACLE_BASE ORACLE_HOME=$ORACLE_HOME ORACLE_HOME_NAME=OraDB19Home1

5、根据提示用root用户分别执行两个root脚本

配置Active Data Guard

前置条件

  • 主库与备库DB_NAME需保持一致

  • 主库需开启强制日志模式以及归档模式(未开启需要重启数据库)

  • 主库需要保持是正常读写状态(Read write),备库需要NOMOUNT状态

数据库PDB相关SQL命令:

SQL> show pdbs                      #查看数据库PDB容器状态
SQL> alter pluggable database pdb open;        #open某个pdb
SQL> alter pluggable database pdb save state;     #保存open状态,下次会自动启动

名称解释:

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器;PDB全称为Pluggable Database,即可插拔数据库。

主库开启强制日志模式

以Oracle用户执行

sqlplus / as sysdba

进入SQL命令窗口;在SQL 命令窗口执行命令:

alter database force logging;

用于开启强制日志模式。

开启归档模式

查询主库是否开启归档模式:

在SQL 命令窗口执行命令:

archive log list;

返回如下结果则表示当前库已经开启归档。如果返回结果绿色字体部分为disable则表示未开启归档。

注意:如果是在图形化安装时开启归档,可能会出现不生效的情况。会造成主库无法传送归档日志备库状态MRP0一直WAIT_FOR_LOG等待日志传送的情况。

开启归档模式的操作步骤:

创建归档保存目录并赋予权限:
mkdir -p /u01/arch
chown -R oracle:oinstall /u01/arch
以下命令均在SQL命令窗口执行
1、设置归档路径:
alter system set log_archive_dest_1='location=/u01/arch';
2、关闭数据库
shutdown immediate;
3、加载数据库到MOUNT状态
startup mount;
4、开启日志归档模式
alter database archivelog;
5、查询归档模式是否开启
archive log list;
6、开启数据库
alter database open;


添加standby logfile

查询归档日志文件大小:
SQL> select thread#,GROUP#,BYTES ,status from v$log;
THREAD#     GROUP#      BYTES STATUS
---------- ---------- ---------- ----------------
1          1  209715200 INACTIVE
1          2  209715200 CURRENT
3  209715200 INACTIVE

查询Redo日志路径:
SQL> select member from v$logfile;
MEMBER
-------------------------------------------------
/u01/app/oracle/oradata/ORCL/redo03.log
/u01/app/oracle/oradata/ORCL/redo02.log
/u01/app/oracle/oradata/ORCL/redo01.log

为主数据库添加"备用联机日志文件",这里要保证备用日志文件与主库联机日志文件相同大小。并且需要比原来的redo log多一组。
以下命令以;分号结尾,由于长度原因导致自动换行,建议复制到TXT文档中查看修改。本例为Group 4、5、6、7共四条命令,以下命令均在SQL命令窗口执行
alter database add standby logfile thread 1 group 4   '/u01/app/oracle/oradata/ORCL/stredo01.log' size  209715200;
alter database add standby logfile thread 1 group 5   '/u01/app/oracle/oradata/ORCL/stredo02.log' size  209715200;
alter database add standby logfile thread 1 group 6   '/u01/app/oracle/oradata/ORCL/stredo03.log' size  209715200;
alter database add standby logfile thread 1 group 7   '/u01/app/oracle/oradata/ORCL/stredo04.log' size  209715200;

配置完成后,检查standby redo log:
SQL> select THREAD#,GROUP#,BYTES from v$standby_log;
THREAD#     GROUP#   BYTES
---------- ---------- ----------
1    4  209715200
1    5  209715200
1    6  209715200
1    7  209715200

配置监听

如果主库已经有正在运行的监听程序,则需要先停止监听再修改监听配置文件。


监听相关命令:
[oracle@db admin]$ lsnrctl status   #查看监听状态
[oracle@db admin]$ lsnrctl stop    #停止监听
[oracle@db admin]$ lsnrctl start    #启动监听
SQL> alter system register;      #注册监听


监听配置文件路径:

/u01/app/oracle/product/19.3.0/db_home_1/network/admin/listener.ora

主库:

新增动态监听配置:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_home_1)
      (PROGRAM = extproc)
    )
  )
以下为单机默认监听:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.10)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

备库:

新增静态监听配置:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcldg)
      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/db_home_1)
      (SID_NAME = orcldg)
    )
  )
以下为单机默认监听:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.20)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

配置完成后启动监听服务并将数据库注册到监听。

配置网络服务名

配置文件路径:

/u01/app/oracle/product/19.3.0/db_home_1/network/admin/tnsnames.ora

主库与备库配置一致,可修改主库tnsnames.ora配置文件后以SCP方式传到备库即可。

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
 
orcldg =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcldg)
    )
  )

添加完成后,使用tnsping测试一下主库备库是否互通:

tnsping orcl          #这里ping的是orcl表示刚刚添加到配置文件中的网络服务名

tnsping orcldg      #这里ping的是orcldg表示刚刚添加到配置文件中的网络服务名

修改数据库参数文件

主库:

alter system set log_archive_config='DG_CONFIG=(orcl,orcldg)';
alter system set log_archive_dest_1='location=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcldg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg';
alter system set FAL_SERVER=orcldg;
alter system set FAL_CLIENT=orcl;
alter system set STANDBY_FILE_MANAGEMENT=AUTO;

备库:

如果没有spfile参数文件,则需要先创建一个pfile,作为备库的参数文件

主库上执行:

SQL> create pfile from memory;

新生成的参数文件:

SCP传到备库:

参数文件路径:/u01/app/oracle/product/19.3.0/db_home_1/dbs/

参数文件:initorcl.ora  (命名方式:init+数据库SID+后缀名ora)

将备库参数文件中包含目录或路径的条目删除,然后将备库启动到nomount模式

为备库创建spfile

SQL> create spfile from pfile;

再通过spfile启动:

SQL> shut abort
SQL> startup nomount

先执行:
alter system set DB_UNIQUE_NAME='orcldg' scope=spfile;
再重启:
shutdown immediate
startup nomount
重启后执行:
alter system set log_archive_config='DG_CONFIG=(orcl,orcldg)';
alter system set log_archive_dest_1='location=/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcldg';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
alter system set FAL_SERVER=orcl;
alter system set FAL_CLIENT=orcldg;
alter system set standby_file_management=manual;

检查数据库路径

SQL> select member from v$logfile;
SQL> select name from v$datafile;

如果主库与备库的路径不一致,需要进行转换设置:(单条执行)

主库:

alter system set db_file_name_convert='/u01/app/oracle/oradata/ORCLDG/','/u01/app/oracle/oradata/ORCL/' scope=spfile;
alter system set log_file_name_convert='/u01/app/oracle/oradata/ORCLDG/','/u01/app/oracle/oradata/ORCL/'  scope=spfile;

备库:

alter system set db_file_name_convert='/u01/app/oracle/oradata/ORCL/','/u01/app/oracle/oradata/ORCLDG/' scope=spfile;
alter system set log_file_name_convert='/u01/app/oracle/oradata/ORCL/','/u01/app/oracle/oradata/ORCLDG/'  scope=spfile;

复制主库密码文件至备库

密码文件路径:/u01/app/oracle/product/19.3.0/db_home_1/dbs/

密码文件:orapworcl  (命名方式:orapw+数据库SID)

使用SCP传输密码文件至备库

scp orapworcl 172.16.1.20:/u01/app/oracle/product/19.3.0/db_home_1/dbs/orapworcldg

初始化备库

注意:备库需在nomount状态,如果不是nomount状态,则先shutdown immediate再startup nomount状态。

在备库执行rman:

rman target sys/password@orcl auxiliary sys/password@orcldg  nocatalog

执行以下命令,将数据同步至备库:

duplicate target database for standby from active database dorecover nofilenamecheck;

拉取主库数据完成后,查询备库状态,是否MOUNTED

SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED

配置备库应用实时同步

备库应用实时同步:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

备库取消日志应用同步:


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

设置备库以只读模式打开

以只读模式打开 :

SQL> alter database open read only;

切换到PDB:

SQL> alter session set container=PDB;

以只读模式打开 :

SQL> alter database open read only;

切换回CDB:

SQL> alter session set container=CDB$ROOT;

继续备库日志应用同步

备库继续日志应用同步:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

后续事宜

配置完成后,记得为主库备库生成新的参数文件。

SQL命令:create pfile from memory;

验证:

在主库写入数据后,登录备库进行查询,验证是否成功同步。


检查同步进程:

SQL命令:select process,status,sequence# from v$managed_standby;

常用SQL命令

SQL连接:
sqlplus sys@orcldg as sysdba

查询数据库日志情况:
select * from v$log;

备库同步检测:
ALTER SESSION SYNC WITH PRIMARY;

手动切换主库日志:
ALTER SYSTEM SWITCH LOGFILE;

设置自动归档:
ALTER SYSTEM SET log_archive_start=true SCOPE=spfile;

启用自动归档:
ALTER SYSTEM ARCHIVE LOG START;

手动归档主库日志:
alter system archive log all;

检查日志应用情况:
SELECT NAME,applied FROM v$archived_log;

查看DG状态:
SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

查询log_archive_dest_2 参数:
show parameter log_archive_dest_2

log_archive_dest_2参数说明:
使用LGWR,有两种模式:
ASYNC - 异步:redo written by LGWR to local disk---LGWR将redo写到本地LOG文件。LNS进程读取redo,传到standby服务器上。
SYNC - 同步:Redo written to standby by LGWR -  LGWR将Redo信息直接写到standby数据库服务器上
同步传输对主库性能影响较大,异步传输对主库性能影响较小。
  • 主备库切换:

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

查看主库DG状态为TO STANDBY 则表示在往备库进行同步,执行主备切换后,主库将被自动关闭。

主备切换成功后,检查备库DG状态为TO PRIMARY


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。