Oracle 19C Data Guard 单实例1+1部署(Duplicate方式)

环境描述

项目主库备库
操作系统CentOS 7.9CentOS 7.9
数据库版本Oracle 19.3.0.0Oracle 19.3.0.0
ORACLE_UNQNAMEhishisdg
IP地址10.172.1.10110.172.1.102
Hostnamehisdb01hisdb02
SIDhishis
db_namehishis
db_unique_namehishisdg
说明
  • 主库和备库建议采用相同服务器配置。
  • 主库和备库建议采用相同操作系统版本。
  • 主库和备库需要采用相同数据库版本(含 PSU)。

注:本次环境中主库和备库文件路径是保持一致的,如果不一致请注意修改。

主库配置

1. 查看是否归档模式

[oracle@hisdb01 dbs]$ sqlplus / as sysdba
SQL> archive log list;

如果没有归档,则执行以下步骤切换为归档模式:

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

2. 启动 FORCE_LOGGING 模式

SQL> alter database FORCE LOGGING;
SQL> select FORCE_LOGGING from v$database;
FOR
---
YES

3. 创建参数文件

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

4. 拷贝口令文件到备库

scp -P2222 orapwhis 10.172.1.102:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/

5. 修改 /etc/hosts

主备库都进行配置:

cat >> /etc/hosts <<EOF
10.172.1.101 hisdb01
10.172.1.102 hisdb02
EOF

6. 修改主库参数文件

修改生成的参数文件 /home/oracle/pfile.ora 文件,参考添加以下内容:

*.db_name='his'
*.db_unique_name='his'
*.FAL_SERVER='standby'
*.FAL_CLIENT='primary'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_config='dg_config=(his,hisdg)' 
*.log_archive_DEST_1='location=/u01/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=his'
*.LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=hisdg'
*.db_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his'
*.log_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his'
*.LOG_ARCHIVE_DEST_STATE_1='enable'
*.LOG_ARCHIVE_DEST_STATE_2='enable'
*.standby_file_management='AUTO' 

如果不停机在线修改主库参数,参考如下:

alter system set db_unique_name='his' scope=spfile;
alter system set FAL_SERVER='standby' scope=both;
alter system set FAL_CLIENT='primary' scope=both;
alter system set db_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his' scope=spfile;
alter system set log_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his' scope=spfile;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(his,hisdg)' scope=both;
alter system set log_archive_dest_1='LOCATION=/u01/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=his' scope=both;
alter system set log_archive_dest_2='SERVICE=standby LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=hisdg' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_1='enable' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_2='enable' scope=both;
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;

7. 修改监听文件

主库编辑 listener.ora 文件,添加以下内容:

vi /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora

SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = his)(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)(SID_NAME = his)))

8. 修改 TNS文件

主库修改tnsnames.ora 追加以下内容:

primary =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.172.1.101)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = his)))standby =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.172.1.102)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = his)))

测试TNS:

tnsping primary
tnsping standby
sqlplus sys/oracle@primary as sysdba
sqlplus sys/oracle@standby as sysdba

备库配置

1. 创建必要的文件目录

手动建立以下目录,保持与主库目录一致:

$ cd $ORACLE_BASE
$ mkdir -p /u01/app/oracle/oradata/his
$ mkdir -p /u01/app/oracle/admin/his/adump
$ mkdir -p /u01/app/oracle/fast_recovery_area

2. 创建密码文件

主库和备库的 SYS 密码一致(前面已经从主库拷贝了):

# 方式 1:使用 orapwd 设置相同密码:
orapwd file=orapwhis password=<password># 方式 2:将主库密码文件复制到备库 $ORACLE_HOME/dbs 目录下,并修改密码文件名为 orapwhis:
scp <主库密码文件> <备库用户>@<备库IP>:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwhis

注:参考主库配置中 4.拷贝口令文件到备库

3. 修改监听文件

编辑 /u01/app/oracle/product/19.3.0/dbhome_1/network/admin/listener.ora 文件,添加以下内容:

SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = his)(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)(SID_NAME = his)))

5. 修改 tnsnames.ora 文件

追加以下内容:

primary =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.172.1.101)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = his)))standby =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.172.1.102)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = his)))

测试TNS:

tnsping primary
tnsping standby
sqlplus sys/oracle@primary as sysdba
sqlplus sys/oracle@standby as sysdba

6. 修改备库参数文件并生成 spfile文件

通过从主库拷贝过来的参数文件,修改成备库参数文件,参考如下:

*.audit_file_dest='/u01/app/oracle/admin/his/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/his/control01.ctl','/u01/app/oracle/oradata/his/control02.ctl'
*.db_block_size=8192
*.db_name='his'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=7851m
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=hisXDB)'
*.log_archive_dest_1='LOCATION=/u01/archivelog'
*.log_archive_format='%t_%s_%r.arc'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=9639m
*.processes=3000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=28917m
*.undo_tablespace='UNDOTBS1'# 添加如下内容
*.db_unique_name='hisdg'
*.service_names='his'
*.log_archive_config='dg_config=(his,hisdg)' 
*.FAL_SERVER='primary'
*.FAL_CLIENT='standby'
*.log_archive_DEST_1='location=/u01/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=hisdg'
*.LOG_ARCHIVE_DEST_2='SERVICE=primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=his'
*.db_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his'
*.log_file_name_convert='/u01/app/oracle/oradata/his','/u01/app/oracle/oradata/his'
*.LOG_ARCHIVE_DEST_STATE_1='enable'
*.LOG_ARCHIVE_DEST_STATE_2='enable'
*.standby_file_management='AUTO' 

通过新创建修改的pfile文件生成spfile文件

SQL> startup pfile='/home/oracle/pfile.ora' nomount;
SQL> create spfile from pfile='/home/oracle/pfile.ora';
SQL> shutdown immediate
-- 最后再重新启动到nomount
SQL> startup nomount;

7. 使用 Duplicate 创建物理 Standby

-- 接 RMAN 并连接辅助(auxiliary)实例,备库目前是 nomount 状态:
rman target sys/His#2021@primary auxiliary sys/His#2021@standby-- 执行复制:
duplicate target database for standby from active database nofilenamecheck DORECOVER;

8. 查询备库数据库所有文件

SQL> select status from v$instance;
SQL> select member from v$logfile;
SQL> select name from v$datafile;
SQL> select name from v$tempfile;
SQL> show parameter control

添加standby日志文件

1. 添加主库standby日志文件

新建4个日志组作为standby redolog 日志组,大小与原来的日志组一致:

alter database add standby logfile group 11 '/u01/app/oracle/oradata/his/standby_redo11.log' size 500m;
alter database add standby logfile group 12 '/u01/app/oracle/oradata/his/standby_redo12.log' size 500m;
alter database add standby logfile group 13 '/u01/app/oracle/oradata/his/standby_redo13.log' size 500m;
alter database add standby logfile group 14 '/u01/app/oracle/oradata/his/standby_redo14.log' size 500m;

2. 添加备库standby日志文件

alter database add standby logfile group 11 '/u01/app/oracle/oradata/his/standby_redo11.log' size 500m;
alter database add standby logfile group 12 '/u01/app/oracle/oradata/his/standby_redo12.log' size 500m;
alter database add standby logfile group 13 '/u01/app/oracle/oradata/his/standby_redo13.log' size 500m;
alter database add standby logfile group 14 '/u01/app/oracle/oradata/his/standby_redo14.log' size 500m;

在备库执行

备库打开数据库并实时应用

alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database using current logfile disconnect; -- 简写

查看未应用的归档日志

-- 查询未应用的归档日志的最小和最大序列号,以及每个线程未应用的日志数量
select thread#, min(sequence#) no_applied_min, max(sequence#) no_applied_max, count(1) no_applied_all from v$archived_log where applied='NO' and STANDBY_DEST='NO' and deleted<>'YES' group by thread# order by thread#;-- 查询所有未应用的归档日志的详细信息
select thread#, sequence#, applied from v$archived_log where applied='NO' order by thread#, sequence#;

查看进程状态

select process, pid, status, sequence# from v$managed_standby;select name, open_mode, PROTECTION_MODE, DATABASE_ROLE from v$database;

验证主备同步

在主库执行生成一张表:

create table test(a varchar2(2), b date);
insert into test values('1', sysdate);
commit;

在备库查询:

select * from test;

切回主库删除测试表:

drop table test;

然后在主备库执行:

select * from test; -- 应报错则OK.

自动启动DataGuard脚本

创建 /etc/init.d/dataguard 启动脚本

脚本内容如下:

#!/bin/bash
# chkconfig: 2345 98 01
# description: Oracle database dataguard server
# Starts the oracle database dataguard server
# If more than four archive no application will be under the mout synchronization
# make SHELL: MUXINQNG
case $1 in
'start')if [ ! -f /var/lock/subsys/oracle ]; thenprog="listener"echo -n $"Starting $prog: "su - oracle -c "lsnrctl start" >> /var/log/oracle.logRETVAL=$?[ $RETVAL -eq 0 ] && echo "success" || echo "failed"prog="oracle dataguard"echo -n $"Starting $prog: "su - oracle -c "sqlplus /nolog" << EOF >> /var/log/oracle.logconnect / as sysdbastartup mount! sleep 3select name, open_mode, PROTECTION_MODE, DATABASE_ROLE from v\$database;select thread#, min(sequence#) no_applied_min, max(sequence#) no_applied_max, count(1) no_applied_all from v\$archived_log where applied='NO' and STANDBY_DEST='NO' and deleted<>'YES' group by thread# order by thread#;declare wyyn number;beginselect count(1) into wyyn from v\$archived_log where applied='NO' and standby_dest='NO';if wyyn < 5 thenEXECUTE IMMEDIATE 'alter database open';EXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect';elseEXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect';end if;end;/select name, open_mode, PROTECTION_MODE, DATABASE_ROLE from v\$database;select applied, count(1) from v\$archived_log where applied='NO' group by applied;exit
EOFRETVAL=$?[ $RETVAL -eq 0 ] && echo "success" || echo "failed"echo[ $RETVAL -eq 0 ] && touch /var/lock/subsys/oracle || RETVAL=1fi;;
'stop')prog="listener"echo -n $"Stopping $prog: "su - oracle -c "lsnrctl stop" >> /var/log/oracle.logRETVAL=$?[ $RETVAL -eq 0 ] && echo "success" || echo "failed"echoprog="oracle dataguard"echo -n $"Stopping $prog: "su - oracle -c "sqlplus /nolog" << EOF >> /var/log/oracle.logconnect / as sysdbaalter database recover managed standby database cancel;shutdown immediateexit
EOFRETVAL=$?[ $RETVAL -eq 0 ] && echo "success" || echo "failed"echo[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/oracle;;
'restart')prog="oracle dataguard"echo -n $"Stopping $prog: "$0 stopprog="oracle dataguard"echo -n $"Starting $prog: "$0 start;;
'status')su - oracle -c "lsnrctl status"su - oracle -c "sqlplus /nolog" << EOFconnect / as sysdbaselect name, open_mode, PROTECTION_MODE, DATABASE_ROLE from v\$database;select process, status from v\$managed_standby;exit
EOF;;
*)echo $"Usage: $0 {start|stop|restart|status}";;
esac

设置脚本权限:

chmod 775 /etc/init.d/dataguard

将脚本转换为 systemd 服务单元文件

创建一个 systemd 服务单元文件 /etc/systemd/system/dataguard.service,内容如下:

[Unit]
Description=Oracle database dataguard server
After=network.target[Service]
Type=forking
ExecStart=/etc/init.d/dataguard start
ExecStop=/etc/init.d/dataguard stop
User=root
Group=root
Restart=on-failure[Install]
WantedBy=multi-user.target

重新加载 systemd 配置:

systemctl daemon-reload

启用服务(开机自启):

systemctl enable dataguard

手动启停dataguard服务:

systemctl start dataguard
systemctl stop dataguard
systemctl status dataguard

删除应用归档日志

创建定时任务和脚本:

crontab -l
00 01 * * * /u01/script/del_dg_arch.sh 

del_dg_arch.sh脚本内容:

#!/bin/bash
# delete dataguard applied archive log
# use database v$archived_log get applied archive log in os rmarchive_name=$(su - oracle -c "sqlplus -silent / as sysdba" <<EOF
set pagesize 0 feedback off verify off heading off echo off numwidth 4
select NAME from V\$ARCHIVED_LOG WHERE STATUS='A' AND APPLIED='YES' and registrar='RFS' and name is not null;
exit
EOF
)
result=$?
if [ $result -eq 0 ]; thenrecord=`echo $archive_name | wc -w`if [  $record -gt 0 ]; thenfor arch_list in $archive_namedoecho $arch_listrm -f $arch_list && echo 'delete archive succeed' || echo 'delete archive Failure'donefi
fi
su - oracle -c "rman target /" <<EOF
crosscheck archivelog all; 
delete noprompt expired archivelog all;
exit;
EOF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20配置mysql注意事项

目录 一、mysql安装 二、初始化配置密码 三、配置文件的位置 四、常用的mysql命令 五、踩坑以及解决方法 一、mysql安装 1.更新apt源 sudo apt update 2.安装mysql服务 sudo apt-get install mysql-server 3.初始化配置 sudo mysql_secure_installation 4.配置项 VALI…

开展网络安全成熟度评估:业务分析师的工具和技术

想象一下,您坐在飞机驾驶舱内。起飞前,您需要确保所有系统(从发动机到导航工具)均正常运行。现在,将您的业务视为飞机,将网络安全视为飞行前必须检查的系统。就像飞行员依赖检查表一样,业务分析师使用网络安全成熟度评估来评估组织对网络威胁的准备程度。这些评估可帮助…

MySql(面试题理解B+树原理 实操加大白话)

数据的定位 通过磁道和扇区定位到数据的位置 扇区为512字节 黄色地方数据位置为2磁道3扇区 黑色地方数据位置为1磁道1扇区 通过磁道和扇区还有偏移量定位到数据的位置 比如这里有一张表 由id、name、no、address组成id为主键 列占有大小&#xff08;字节&#xff09; id int …

目标检测,图像分割,超分辨率重建

目标检测和图像分割 目标检测和图像分割是计算机视觉中的两个不同任务&#xff0c;它们的输出形式也有所不同。下面我将分别介绍这两个任务的输出。图像分割又可以分为&#xff1a;语义分割、实例分割、全景分割。 语义分割&#xff08;Semantic Segmentation&#xff09;&…

K8s内存溢出问题剖析:排查与解决方案

文章目录 一、背景二、排查方案&#xff1a;1. 可能是数据量超出了限制的大小&#xff0c;检查数据目录大小2. 查看是否是内存溢出2.1 排查数据量&#xff08;查看数据目录大小是否超过limit限制&#xff09;2.2 查看pod详情发现问题 三、解决过程 一、背景 做redis压测过程中…

python3 + selenium 中用PIL获取全屏幕截图

获取当前屏幕截图非常简单&#xff0c;需要import PIL.ImageGrab。调用grab函数即可得到Image对象&#xff0c;显示图片如图所示。 高版本的PIL中的grab函数还提供有一些参数。要查看当前PIL包的版本&#xff0c;可以import然后查看其__version__属性。 如果是较高版本的PIL…

openssl编译安装升级为新版本

文章目录 1、下载版本2、上传并解压3、编译安装4、验证 1、下载版本 https://www.openssl.org/source/old/1.1.1/ 2、上传并解压 tar zxvf openssl-1.1.1s.tar.gz 3、编译安装 注意&#xff1a;要提前安装好 gcc perl cd openssl-1.1.1s ./config --prefix/usr/local/open…

请求(request)

目录 前言 request概述 request的使用 获取前端传递的数据 实例 请求转发 特点 语法 实例 实例1 实例2 【关联实例1】 域对象 组成 作用范围&#xff1a; 生命周期&#xff1a; 使用场景&#xff1a; 使用步骤 存储数据对象 获得数据对象 移除域中的键值…

2039:【例5.6】冒泡排序

【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数&#xff0c;然后自动按从大到小的顺序输出。&#xff08;冒泡排序&#xff09; 【输入】 第一行&#xff0c;数的个数n; 第二行&#xff0c;n个非负整数。 【输出】 由大到小的n个非负整数&#xff0c;每个数占一行。 【输…

离线安装 Docker-IO:详细步骤指南

离线安装 Docker-IO:详细步骤指南 一、准备工作1.1 下载 Docker 离线安装包1.2 准备安装环境1.3 配置防火墙和 SELinux(可选)二、上传和解压离线安装包2.1 上传安装包2.2 解压安装包三、安装 Docker-IO3.1 移动 Docker 文件到系统目录3.2 配置 Docker 服务3.3 赋予服务文件执…

python图像彩色数字化

效果展示&#xff1a; 目录结构&#xff1a; alphabets.py GENERAL {"simple": "%#*-:. ","complex": "$B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_~<>i!lI;:,\"^. " } # Full list could be found here…

.net core 创建linux服务,并实现服务的自我更新

目录 创建服务创建另一个服务&#xff0c;用于执行更新操作给你的用户配置一些systemctl命令权限 创建服务 /etc/systemd/system下新建服务配置文件&#xff1a;yourapp.service&#xff0c;内容如下&#xff1a; [Unit] Descriptionyourapp Afternetwork.target[Service] Ty…

TongWeb8 错误码查询方法及说明

TongWeb8可通 过 ./admin.[bat|sh] error-code [Error Code] 命令查 找错误码 说 明。 如&#xff1a;./admin.sh error-code 显示所有错误码说明。 ./admin.sh error-code 008 显示008错误码的说明。 Execute the command: error-code ****** TongWeb ErrorCode Info ***…

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题&#xff0c;有人认为宠物空气净化器肯定不是智商税&#xff0c;有些人认为将其购回家就是个没用的东西&#xff0c;还占地方&#xff0c;双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…

屏幕分辨率|尺寸|颜色深度指纹

一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度&#xff0c;横屏竖屏信息。 二、window.screen c接口实现&#xff1a; 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …

3mf 格式详解,javascript加载导出3mf文件示例

3MF 格式详解 3MF&#xff08;3D Manufacturing Format&#xff09;是一种开放标准的文件格式&#xff0c;专门用于三维制造和打印。3MF 格式旨在解决 STL 格式的局限性&#xff0c;提供更丰富和灵活的数据表示。3MF 文件是一种 ZIP 文件&#xff0c;其中包含了描述三维模型的…

Unity UGUI 垂直循环复用滚动

一 基础类 在unity里面新建这几个类 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 垂直方向滚动 /// </summary> public class CustomScroll:MonoBehaviour {public …

Spring Boot整合Redis Stack构建本地向量数据库相似性查询

Spring Boot整合Redis Stack构建本地向量数据库相似性查询 在微服务架构中&#xff0c;数据的高效存储与快速查询是至关重要的。Redis作为一个高性能的内存数据结构存储系统&#xff0c;不仅可以用作缓存、消息代理&#xff0c;还可以扩展为向量数据库&#xff0c;实现高效的相…

[OS] A4-前菜介绍

从你的描述来看&#xff0c;这段话是给你的一些 预备知识 和 mkfs工具的使用 提示&#xff0c;帮助你了解如何构建和管理文件系统&#xff0c;特别是关于 xv6 文件系统的一些基本操作。 我会通过比喻和通俗化的方式逐步解释&#xff1a; 预备知识&#xff1a;xv6 文件系统的基…

LLM学习笔记(10)Transformers 库与 pipeline() 函数(下)

自动问答&#xff08;QA&#xff09; 自动问答&#xff08;QA&#xff09;的功能介绍 自动问答&#xff08;Question-Answering, QA&#xff09; 是自然语言处理中的一项任务&#xff0c;用于从给定的上下文中找到问题的答案。基于 Hugging Face 的 pipeline&#xff0c;可以…