Oracle ADG Snapshot Standby体验

本文参考了OBE文章Using Snapshot Standby

Snapshot Standby的概念

参见这里。

A snapshot standby database is a fully updatable standby database. It receives and archives redo data from a primary database, but does not apply it.

Redo data received from the primary database is applied when a snapshot standby database is converted back into a physical standby database, after discarding all local updates to the snapshot standby database.

A snapshot standby database typically diverges from its primary database over time because redo data from the primary database is not applied as it is received. Local updates to the snapshot standby database cause additional divergence. The data in the primary database is fully protected however, because a snapshot standby can be converted back into a physical standby database at any time, and the redo data received from the primary is then applied.

A snapshot standby database provides disaster recovery and data protection benefits that are similar to those of a physical standby database. Snapshot standby databases are best used in scenarios where the benefit of having a temporary, updatable snapshot of the primary database justifies increased time to recover from primary database failures.

准备工作,搭建ADG环境

搭建了一个标准的ADG配置,一个Primary,一个Physical Standby。

$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Jul 31 03:18:49 2023
Version 19.19.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys
Password:
Connected to "DB0730_n5p_fra"
Connected as SYSDBA.
DGMGRL> show configurationConfiguration - DB0730_n5p_fra_DB0730_8th_fraProtection Mode: MaxPerformanceMembers:DB0730_n5p_fra - Primary databaseDB0730_8th_fra - Physical standby databaseFast-Start Failover:  DisabledConfiguration Status:
SUCCESS   (status updated 15 seconds ago)

确认FlashBack Database特性已开启

Snapshot Standby 依赖于Flashback Database,详见这里。此时Flashback Database的作用为:

Flashback Database is used to convert a snapshot standby database back into a physical standby database.

确认主备数据库均已开启Flashback Database,并且默认的保留期为24小时:

SQL> select FLASHBACK_ON from v$database;FLASHBACK_ON
------------------
YESSQL> show parameter flashbackNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440

将Physical Standby数据库转换为Snapshot Standby 数据库

在转换之前,确认此时并没有restore point:

SQL> select * from V$RESTORE_POINT;no rows selected

将Physical Standby转换为Snapshot Standby:

DGMGRL> convert database DB0730_8th_fra to snapshot standby;
Converting database "db0730_8th_fra" to a Snapshot Standby database, please wait...
Database "db0730_8th_fra" converted successfully-- 以下是另一种方法
-- SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;

此时在备库上已自动创建了有保障的恢复点:

SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZEFROM V$RESTORE_POINT;NAME                                             SCN        TIME                               DATABASE_INCARNATION#    GUARANTEE_FLASHBACK_DATABASE    STORAGE_SIZE    
SNAPSHOT_STANDBY_REQUIRED_07/31/2023 03:22:47       1952214 31-JUL-23 03.22.47.000000000 AM                           2 YES                                  1073741824 

此时的配置如下,注意其中的Snapshot standby

DGMGRL> show configurationConfiguration - DB0730_n5p_fra_DB0730_8th_fraProtection Mode: MaxPerformanceMembers:DB0730_n5p_fra - Primary databaseDB0730_8th_fra - Snapshot standby databaseWarning: ORA-16855: transport lag has exceeded specified thresholdFast-Start Failover:  DisabledConfiguration Status:
WARNING   (status updated 29 seconds ago)

上面输出中ORA-16855的错误是正常的,可以看下要求的delay是多少:

SQL> show parameter log_archive_dest_nNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2                   string      service="DB0730_8th_fra", ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name="DB0730_8th_fra" net_timeout=30,valid_for=(online_logfile,all_roles)

DGMGRL也可以看:

DGMGRL> show database verbose "DB0730_n5p_fra" DelayMinsDelayMins = '0'

可以看到,要求的为0,而实际的滞后为36分钟:

SQL> SELECT * FROM v$dataguard_stats WHERE name LIKE '%lag%';SOURCE_DBID SOURCE_DB_UNIQUE_NAME            NAME
----------- -------------------------------- --------------------------------
VALUE
----------------------------------------------------------------
UNIT                           TIME_COMPUTED
------------------------------ ------------------------------
DATUM_TIME                         CON_ID
------------------------------ ----------1907664404 DB0730_n5p_fra                   transport lag
+00 00:36:14
day(2) to second(0) interval   07/31/2023 03:59:02
07/31/2023 03:59:00                     0SOURCE_DBID SOURCE_DB_UNIQUE_NAME            NAME
----------- -------------------------------- --------------------------------
VALUE
----------------------------------------------------------------
UNIT                           TIME_COMPUTED
------------------------------ ------------------------------
DATUM_TIME                         CON_ID
------------------------------ ----------1907664404 DB0730_n5p_fra                   apply lag
+00 00:36:16
day(2) to second(0) interval   07/31/2023 03:59:02
07/31/2023 03:59:00                     0

更新数据库并确认Redo仍在复制

登录备库,查询表v$managed_standby,记录其BLOCK#的值:

SELECTv$managed_standby.status,v$managed_standby.sequence#,v$managed_standby.block#
FROMv$managed_standby
WHEREv$managed_standby.client_process = 'LGWR'STATUS       SEQUENCE#    BLOCK#    
RECEIVING              36      1135

清空备库中某表,同时也可以证明Snapshot Standby是可写的:

SQL> select count(*) from date_dim;COUNT(*)
----------2556SQL> truncate table date_dim;Table truncated.SQL> select count(*) from date_dim;COUNT(*)
----------0

在主库中将此表数据翻倍:

SQL> select count(*) from date_dim;COUNT(*)
----------2556SQL> insert into date_dim select * from date_dim;2556 rows created.SQL> commit;Commit complete.SQL> select count(*) from date_dim;COUNT(*)
----------5112

再次查询表v$managed_standby,记录其BLOCK#的值,此时由1135变为了2836:

SELECTv$managed_standby.status,v$managed_standby.sequence#,v$managed_standby.block#
FROMv$managed_standby
WHEREv$managed_standby.client_process = 'LGWR'STATUS       SEQUENCE#    BLOCK#    
RECEIVING              36      2836 

BLOCK#的定义为:

Last processed archived redo log block number

将Snapshot Standby 还原为Physical Standby

关于这一步,以下文档非常有用:

  • Data Guard Physical Standby - Converting a Snapshot Standby back to a Physical Standby using Data Guard Broker (Doc ID 1546657.1)

注意要用口令而非以下方式登录dgmgrl,否则在后续操作过程中会报错:

$ dgmgrl / as sysdba
...
DGMGRL> convert database DB0730_8th_fra to physical standby;
Converting database "db0730_8th_fra" to a Physical Standby database, please wait...
Oracle Clusterware is restarting database "DB0730_8th_fra" ...
ORA-01017: invalid username/password; logon deniedPlease complete the following steps and reissue the CONVERT command:shut down instance "DB0730" of database "DB0730_8th_fra"start up instance "DB0730" of database "DB0730_8th_fra"

应该用connect sys命令登录:

$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Jul 31 04:29:42 2023
Version 19.19.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys
Password:
Connected to "DB0730_n5p_fra"
Connected as SYSDBA.
DGMGRL> show configurationConfiguration - DB0730_n5p_fra_DB0730_8th_fraProtection Mode: MaxPerformanceMembers:DB0730_n5p_fra - Primary databaseDB0730_8th_fra - Snapshot standby databaseFast-Start Failover:  DisabledConfiguration Status:
SUCCESS   (status updated 31 seconds ago)DGMGRL> convert database DB0730_8th_fra to physical standby;
Converting database "db0730_8th_fra" to a Physical Standby database, please wait...
Oracle Clusterware is restarting database "DB0730_8th_fra" ...
Connected to "DB0730_8th_fra"
Continuing to convert database "db0730_8th_fra" ...
Database "db0730_8th_fra" converted successfully
DGMGRL> show configurationConfiguration - DB0730_n5p_fra_DB0730_8th_fraProtection Mode: MaxPerformanceMembers:DB0730_n5p_fra - Primary databaseDB0730_8th_fra - Physical standby databaseWarning: ORA-16809: multiple warnings detected for the memberFast-Start Failover:  DisabledConfiguration Status:
WARNING   (status updated 11 seconds ago)

以上输出中的警告是临时的,过一会就正常了:

DGMGRL> show configurationConfiguration - DB0730_n5p_fra_DB0730_8th_fraProtection Mode: MaxPerformanceMembers:DB0730_n5p_fra - Primary databaseDB0730_8th_fra - Physical standby databaseFast-Start Failover:  DisabledConfiguration Status:
SUCCESS   (status updated 15 seconds ago)

在备库中确认数据已复制,并且只读

SQL> show con_nameCON_NAME
------------------------------
ORCLPDB1
SQL> show pdbsCON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------3 ORCLPDB1                       MOUNTEDSQL> alter pluggable database orclpdb1 open;Pluggable database altered.SQL> alter session set container=orclpdb1;Session altered.SQL> select count(*) from ssb.date_dim;COUNT(*)
----------5112SQL> truncate table ssb.date_dim;
truncate table ssb.date_dim*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database or pluggable database open for read-only access

参考

  • Flashback Database Best Practices & Performance (Doc ID 565535.1)
  • Data Guard Physical Standby - Converting a Snapshot Standby back to a Physical Standby using Data Guard Broker (Doc ID 1546657.1)
  • Managing Physical and Snapshot Standby Databases
  • Using Snapshot Standby Database. (Doc ID 443720.1)

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

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

相关文章

选择排序算法

选择排序 算法说明与代码实现&#xff1a; 以下是使用Go语言实现的选择排序算法示例代码&#xff1a; package mainimport "fmt"func selectionSort(arr []int) {n : len(arr)for i : 0; i < n-1; i {minIndex : ifor j : i 1; j < n; j {if arr[j] < a…

Springboot使用AOP编程简介

AOP简介 AOP&#xff08;面向切面编程&#xff09;是一种编程范式&#xff0c;Spring AOP是基于代理模式的AOP框架&#xff0c;它通过动态代理实现切面的织入&#xff0c;更加轻量级和易于使用。 Joinpoint (连接点):类里面可以被增强的方法即为连接点。例如&#xff0c;想修…

Vue2-Vue3组件间通信-EventBus方式-函数封装

Vue3中采用EventBus方式进行组件间通信与Vue2有一定区别 1.创建EventBus 在Vue2中&#xff0c;我们可以在main.js中创建一个全局的EventBus&#xff0c;代码如下&#xff1a; // EventBus.js import Vue from vue const EventBus new Vue() export default EventBus// main.…

iOS开发-AFNetworking网络请求及上传下载功能

iOS开发-AFNetworking网络请求及上传下载功能 AFNetworking是一个轻量级的iOS网络通信类库&#xff0c;可以方便实现网络请求。 一、使用AFNetworking 在Podfile中安装 pod AFNetworking导入AFNetworking #import "AFNetworking.h"AFNetworking下载地址&#xf…

GmSSL-3.0.0国密支持的验证笔记

GmSSL-3.0.0国密支持的验证笔记 github上直接下源码编译 github上的tag只有3.0.0和3.1.1两个版本 GmSSL-3.1.1 ubuntu18.04上直接编译报错&#xff0c;放弃了。 GMSSL-3.0.0 cmake直接编译&#xff0c;没有问题 验证 # root ubuntu in /opt/GmSSL-3.0.0/bin [5:54:26]…

JS垃圾回收机制详解

本文介绍了JavaScript中的垃圾回收机制&#xff0c;包括它的原理&#xff0c;常用的算法&#xff0c;以及优化的方法。本文旨在帮助程序员理解和掌握JavaScript的内存管理&#xff0c;提高程序的性能和稳定性 JavaScript是一种动态类型的编程语言&#xff0c;它不需要程序员手动…

杨辉三角,给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

题记&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: …

Jenkins通过OpenSSH发布WinServer2016

上一篇文章> Jenkins集成SonarQube代码质量检测 一、实验环境 jenkins环境 jenkins入门与安装 容器为docker 主机IP系统版本jenkins10.10.10.10rhel7.5 二、OpenSSH安装 1、下载 官网地址&#xff1a;https://learn.microsoft.com/zh-cn/windows-server/administration/op…

JavaWeb教程笔记

JavaWeb Java Web 1、基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思 &#xff0c; www.baidu.com静态web html&#xff0c;css提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人…

Spring Boot使用@Async实现异步调用:自定义线程池

一、定义线程池 第一步&#xff0c;先在Spring Boot主类中定义一个线程池&#xff0c;比如&#xff1a; SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}EnableAsyncConfigurat…

综合能源系统(5)——综合能源系统优化控制技术

综合能源系统关键技术与典型案例  何泽家&#xff0c;李德智主编 综合能源系统优化控制技术是打破原有各能源供用系统单独规划、单独设计和独立运行的既有模式&#xff0c;实现多能协同互补和综合能源系统稳定运行的关键技术&#xff0c;以实现能源高效利用与可再生能源消纳为…

3ds Max建模教程:模拟布料拖拽撕裂和用剑撕裂两种效果

推荐&#xff1a; NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 拖拽撕布 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 在透视视口中创建平面。保持其长度 后座和宽度后座为 100。 创建平面 步骤 3 转到助手>假人并在 飞机的两侧。 助手>假人 步骤 4 选…

2023牛客暑期多校训练营2

D.The Game of Eating 思路&#xff1a;考虑贪心。每个人都会选择一道对于自身价值最大的菜&#xff0c;但考虑到其他人会帮自己提供一定的贡献&#xff0c;即样例二&#xff0c;第一个只需要点第三道菜&#xff0c;第二个人点第四道菜&#xff0c;自动帮第一个人补全了第四道…

Arthas实战:阿里巴巴开源的Java诊断利器

Arthas实战:阿里巴巴开源的Java诊断利器 Arthas简介 Arthas是Alibaba开源的Java诊断工具,可以在线排查问题,无需重启即可直观分析JVM的状况。 Arthas支持JDK 6,采用命令行交互模式,同时提供丰富的tab自动补全功能,进一步方便进行问题的定位和诊断。 Arthas安装 有以下几种…

Rust的入门篇(下)

这篇博客是rust入门篇下 45. 生命周期注释 // 生命周期// 下面代码不能通过编译 // longer 函数取 s1 和 s2 两个字符串切片中较长的一个返回其引用值 // 返回值引用可能会返回过期的引用 // fn longer(s1: &str, s2: &str) -> &str { // if s2.len() >…

亚马逊、虾皮、Lazada、速卖通、阿里国际等跨境电商平台怎么获取优质评价?

在跨境电商平台上&#xff0c;产品的评价直接影响卖家账户的评定因素&#xff0c;同时也影响产品页面的曝光量和流量&#xff0c;从而对产品销量产生影响&#xff0c;因此&#xff0c;产品评价的重要性不言而喻&#xff0c;除了产品的图片、描述、详情、广告和站外推广&#xf…

【LeetCode】不同路劲(动态规划)

不同路劲 题目描述算法流程编程代码 链接: 不同路劲 题目描述 算法流程 编程代码 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m 1,vector<int>(n 1));dp[1][0] 1;for(int i 1;i < m;i){for(int j 1;j < n…

嵌入式基础知识-存储器

本篇介绍计算机存储硬件的一些基础知识&#xff0c;在嵌入式开发中&#xff0c;也同样适用。 1 计算机存储结构 存储器是计算机中的重要部件&#xff0c;理想的存储器应该是执行快&#xff0c;容量足&#xff0c;价格便宜等。但实际上&#xff0c;目前无法同时满足这些目标&a…

blender凹凸感和置换形变

一、怎么做出凹凸感 需要三个部分的内容&#xff1a; 1、一个基础的纹理&#xff1a;告诉计算机需要用一个什么样的纹理做凹凸&#xff0c;纹理一般采用黑白&#xff0c;在计算机里面&#xff0c;从 0 - 1之间的值可以用从黑到白之间不同的灰度来表示因此&#xff0c;有一张黑白…

【Java】Spring——创建Spring + 对Spring的存储 /读取对象操作

文章目录 前言一、创建Spring项目二、向Spring容器中存储 Bean 对象三、从Spring容器中读取 Bean 对象得到Spring上下文对象得到 Bean 对象 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#xff0c;互…