当前位置: 首页 > news >正文

为一套现有RAC搭建一个单实例备库,组成DG高可用架构

资源规划:

主数据库RAC:

rac1 public ip:主库rac1的物理ip

rac2 public ip:主库rac2的物理ip

rac1 sid:orcl1

rac2 sid:orcl2

db_name:orcl

db_unique_name:orcl

备数据库单实例:

备库单实例:备库单实例ip

sid:orcl

db_name:orcl

db_unique_name:orclstd

数据库安装路径和文件路径

ORACLE_BASE

/data/app/oracle

ORACLE_HOME

/data/app/oracle/product/12.2.0

#需要提前在备库安装下数据库软件:

 开始前,先备份主库参数文件

create pfile='/home/oracle/bak.ora' from spfile;

 在主库建测试表(用于测试DG搭建完成后数据库同步是否正常)

create table sys.test(id int ,name char(20));

insert into sys.test values(9568,'华三');

insert into sys.test values(45768,'华四');

insert into sys.test values(9090,'华五');

commit;

select * from sys. test;

 更改主库的强制日志模式

查看当前主库是否开启归档和是否强制日志模式:

SQL> select name,log_mode,force_logging from v$database;

NAME LOG_MODE FORCE_LOGGING

--------- ------------ ---------------------------------------

ORCL ARCHIVELOG NO

如果log_mode是NOARCHIVELOG,则需要开启归档,rac如何开启归档可参考:rac 11g怎样开启归档日志_11grac 开启归档日志-CSDN博客

如果FORCE_LOGGING为NO的话,执行下面命令开启强制日志模式:

SQL> alter database force logging;

四 主库添加standby日志

select thread#,group#,members,bytes from v$log;

select group#,member from v$logfile;

standby redo log大小应该和源端的redo log一样。

standby redo 比online redo 需要多一组,这里主库一共有8组REDOLOG,需要建9组STANDBYLOG

#位置记得写共享盘的位置+DATA:

alter database add standby logfile thread 1 group 5 ('+DATA') size 200M;

alter database add standby logfile thread 1 group 6 ('+DATA') size 200M;

alter database add standby logfile thread 1 group 7 ('+DATA') size 200M;

alter database add standby logfile thread 1 group 8 ('+DATA') size 200M;

alter database add standby logfile thread 1 group 9 ('+DATA') size 200M;

alter database add standby logfile thread 2 group 10 ('+DATA') size 200M;

alter database add standby logfile thread 2 group 11 ('+DATA') size 200M;

alter database add standby logfile thread 2 group 12 ('+DATA') size 200M;

alter database add standby logfile thread 2 group 13 ('+DATA') size 200M;

#检查是否创建成功

SELECT GROUP#, TYPE, MEMBER, STATUS FROM V$LOGFILE WHERE TYPE = 'STANDBY';

五 在备库创建相关目录

su - oracle

cd /data/app/oracle

mkdir -p admin/orclstd/adump

mkdir -p /data/app/oracle/oradata/orclstd/tempfile

/*

使用 ASM 作为存储时,datafile 和 tempfile 是分别放在两个目录下的,所以在Standby

上也单独创建一个tempdata 目录。后面需要在db_file_name_convert 中作相应的设置。

*/

六 拷贝主库的密码文件到备库                     

此步骤只在主库上做

cd $ORACLE_HOME/dbs

scp  orapworcl1 备库单实例ip:/data/app/oracle/product/12.2.0/dbs/orapworclstd

/*

如果主库没orapw口令文件,需要先生成:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=自定义一个密码entries=4 force=y

*/

修改主库相关参数,并导出参数文件,修改后同步至从库

主库RAC文件路径为共享存储+DATA:

主库不停服务,使用alter system修改

alter system set  log_archive_config='dg_config=(orcl,orclstd)' scope=both sid='*';

alter system set log_archive_dest_1='location=+DATA/ORCL/ARCHIVELOG valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=both sid='*' ;

alter system set  log_archive_dest_2='service=orclstd valid_for=(online_logfiles,primary_role) db_unique_name=orclstd' scope=both sid='*';

alter system set log_archive_dest_state_1=enable scope=both sid='*';

alter system set log_archive_dest_state_2=enable scope=both sid='*';

alter system set  log_archive_max_processes=4 scope=both sid='*';

alter system set  fal_server='orclstd' scope=both sid='*' ;

alter system set  fal_client='orcl' scope=both sid='*';

alter system set  standby_file_management='auto' scope=both sid='*';

alter system set db_file_name_convert='/data/app/oracle/oradata/orclstd','+DATA/ORCL/DATAFILE','/data/app/oracle/oradata/orclstd/tempfile','+DATA/ORCL/TEMPFILE' scope=spfile sid='*';

alter system set log_file_name_convert='/data/app/oracle/oradata/orclstd','+DATA/ORCL/ARCHIVELOG' scope=spfile sid='*';

/*

db_file_name_convert 和 log_file_name_convert 仅当数据库被 standby 时才会生效,

这里配置,是 为切换做准备

*/

修改完成后,生成pfile参数文件 create pfile='/home/oracle/temp.ora' from spfile ;

将temp.ora拷贝到从库:

scp  /home/oracle/temp.ora 备库单实例ip:/home/oracle/temp.ora

修改从库temp.ora

修改以下参数值:

*.audit_file_dest='/data/app/oracle/admin/orclstd/adump'

*.control_files='/data/app/oracle/oradata/orclstd/control01.ctl','/data/app/oracle/oradata/orclstd/control02.ctl'

LOG_ARCHIVE_CONFIG='DG_CONFIG=(orclstd,orcl)' 

*.log_archive_dest_1='location=/data/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=orclstd'
*.log_archive_dest_2='service=orcl valid_for=(online_logfiles,primary_role) db_unique_name=orcl'
*.fal_server='orcl'

*.fal_client='orclstd'

*.db_file_name_convert='+DATA/ORCL/DATAFILE','/data/app/oracle/oradata/orclstd','+DATA/ORCL/TEMPFILE','/data/app/oracle/oradata/orclstd/tempfile'

*.log_file_name_convert='+DATA/ORCL/ARCHIVELOG','/data/app/oracle/oradata/orclstd'

DB_CREATE_FILE_DEST='/data/app/oracle/oradata/orclstd'

*.db_recovery_file_dest='/data/app/oracle/fast_recovery_area'

将以主库实例名开头的参数改成备库实例名开头,并去除重复配置,示例:

注释掉*.cluster_database=true

添加以下内容

*.db_unique_name='orclstd'

八 修改从库环境变量

vi /home/oracle/.bash_profile

修改export ORACLE_SID=orclstd

source ~/.bash_profile

九 将备库使用pfile启动至nomount状态

startup nomount pfile='/home/oracle/temp.ora' ;

十 配置监听

10.1 修改主库监听配置

在RAC环境中,监听默认路径grid用户下的$ORACLE_HOME/network/admin/listener.ora

su - grid

cd $ORACLE_HOME/network/admin/

cp listener.ora listener.ora_bak_250520

vi listener.ora

文件中加入如下内容:

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /data/app/oracle/product/12.2.0/db_1)

      (SID_NAME = orcl1)

    )

  )

LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))

  )

ADR_BASE_LISTENER = /data/app/grid

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))

  )

ADR_BASE_LISTENER_SCAN1 = /data/app/grid

节点 2,对应修改即可。

 [grid@rac2 admin]$ cat listener.ora

# listener.ora Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.ora

# Generated by Oracle configuration tools.

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = /data/app/oracle/product/12.2.0/db_1)

      (SID_NAME = orcl2)

    )

  )

LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))

  )

ADR_BASE_LISTENER = /u01/app/grid

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON

LISTENER_SCAN1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))

  )

ADR_BASE_LISTENER_SCAN1 = /data/app/grid

--这里写的 Oracle 用户的 ORACLE_HOME,否则连接时会报错:

ORA-01031: insufficient privileges

然后重启监听。  

注意在 oracle 11gR2  RAC 环境下,监听是在 grid 用户下配置的。所以这里可以用 grid 用户连接,

并修 改。 最后重启监听。 

10.2 修改备库监听

对于单实例,直接在 listener.ora 里添加: 

# listener.ora Network Configuration File: /data/app/oracle/product/12.2.0/db_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = orclstd)

      (ORACLE_HOME = /data/app/oracle/product/12.2.0)

      (SID_NAME = orclstd)

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 备库单实例ip)(PORT = 1521))

    )

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

    )

  )

ADR_BASE_LISTENER = /data/app/oracle

10.3 在主库加载监听文件配置

su - grid

lsnrctl reload

10.4启动备库监听

su - oracle

lsnrctl start

十一 修改tnsnames.ora文件

修改tnsnames.ora(主备节点一致)

cd ${ORACLE_HOME}/network/admin

cp tnsnames.ora tnsnames.ora_bak_250520

vi tnsnames.ora

新增:

节点1,节点2,单实例 的 tnsnames.ora 文件是一致的,添加以下内容:

orcl=

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = 主库rac1的物理ip)(PORT = 1521))

   (ADDRESS = (PROTOCOL = TCP)(HOST = 主库rac2的物理ip)(PORT = 1521))

   (CONNECT_DATA =

    (SERVER = DEDICATED)

    (SERVICE_NAME =orcl)

    )

  )

orclstd=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 备库单实例ip)(PORT = 1521))  

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orclstd)

    )

  )

执行tnsping orcl及tnsping orclstd确保反馈OK。

十二 主备数据同步

在主库上通过rman duplicate方式进行备库恢复     

shell>rman target sys/XXXXXXXX@orcl auxiliary sys/XXXXXXX@orclstd

RMAN>duplicate target database for standby from active database nofilenamecheck;

/*

假如登录报错:

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: initialization of internal recovery manager package failed

RMAN-04005: error from target database:

ORA-01017: invalid username/password; logon denied

检查该参数值:

SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE

如果值是NONE,需要将其改为exclusive时,启用口令文件,允许远程登录

#主库

alter system set REMOTE_LOGIN_PASSWORDFILE=exclusive scope=spfile;

然后重启库

#从库

关闭数据库,添加remote_login_passwordfile=exclusive一行,再重新启动数据库startup nomount pfile='/home/oracle/temp.ora' ;

SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE

*/

Duplicate完成后,从库自动启动到了mount状态。

在此期间,在主库新增一些数据,切几个归档日志,看DG配置完之后主库新增的数据是否能同步到从库。

insert into sys.test(id,name) values(9091,'baidd');

insert into sys.test(id,name) values(9092,'jiao');

十三 启动从库数据库

alter database open ;

/*

假如启动报错:

第 1 行出现错误:

ORA-10458: standby database requires recovery

ORA-01152: ?? 1 ???????????

ORA-01110: ???? 1: '/data/app/oracle/oradata/orclstd/system.257.1200563609'

则:

alter database recover managed standby database using current logfile disconnect from session;

alter database recover managed standby database cancel;

再open库:

alter database open ;

*/

十四 备库启动日志应用

alter database recover managed standby database using current logfile disconnect from session;

/*

停止日志应用的命令是:

alter database recover managed standby database cancel;

*/

#验证数据

可以看到在开启日志应用后,后来新增的两条数据也同步过来了。

SQL>  select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE

---------------- --------------------

PHYSICAL STANDBY READ ONLY WITH APPLY

#在主库再插入条数据,看能否同步到从库。

insert into sys.test(id,name) values(9093,'mubai');

#查看数据库保护模式

select database_role,protection_mode,protection_level,open_mode from v$database;

select switchover_status from v$database;

查看standby启动的DG进程

SQL>select process,client_process,sequence#,status from v$managed_standby;

十五 将从库改为用spfile方式启动

create spfile from pfile='/home/oracle/temp.ora';

shutdown immediate;

startup;

#检查确认

show parameter spfile;

#开启同步

SQL> alter database recover managed standby database using current logfile disconnect from session;

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE

---------------- --------------------

PHYSICAL STANDBY READ ONLY WITH APPLY

十六 用客户端工具连接下主备,确保能连接成功

……

相关文章:

  • vue3+uniapp中使用高德地图实现撒点效果
  • Linux中的文件介绍
  • C++ 常见知识积累
  • Nginx 强制 HTTPS:提升网站安全性的关键一步
  • Temporary failure in name resolution
  • DVWA-XSS
  • PT5F2307触摸A/D型8-Bit MCU
  • 【Flutter】创建BMI计算器应用并添加依赖和打包
  • Flutter 中 build 方法为何写在 StatefulWidget 的 State 类中
  • 【Vue 3 步骤进度条组件实现与使用教程】
  • RESTful API设计:从原则到Gin实现
  • Rust 学习笔记:泛型
  • 从电商角度设计大模型的 Prompt
  • Baklib知识中台驱动智能服务创新
  • 牛客网NC15869:长方体边长和计算问题解析
  • 力扣热题100, 力扣.167两数之和II 力扣80.删除有序数组中的重复项力扣99.恢复二叉搜索树力扣.110平衡二叉树
  • AtCoder 第406场初级竞赛 A~E题解
  • 如何在element ui中el-select的选择项目中添加自定义图标
  • ABC 353
  • 建立java项目
  • 做曖网站/网站自然排名怎么优化
  • 网站首页关键词如何优化/郑州网站推广优化公司
  • wordpress 检索文件/win7优化极致性能