首页 > 数据库 >闪回数据库的应用场景和测试

闪回数据库的应用场景和测试

时间:2023-06-27 23:46:26浏览次数:55  
标签:闪回 SCN 备库 recovery database 数据库 场景 SQL select

如果是用户主生产环境,通常不会有用户会开启这个功能。
但如果是在ADG备库端,就会有不少客户选择开启这个功能,这可以有效补充误操作应急处置方法。

今天给某客户做技术支持的时候,在现场遇到一个蛮有意思的问题:
XTTS测试场景,库非常大,数据文件很多,远超db_files的默认值。
在表空间元数据导入阶段,因此中断报错退出,修改db_files参数后发现很多表空间数据文件已经存在,压力就比较大,还好找到了方法drop tablespace xxx including contents的方式,注意还不能是OMF管理的,否则即便不加including datafiles也会被删掉,那就麻烦了。。

如果能参考我之前写过的一篇《XTTS系列之一:U2L迁移解决方案之XTTS的使用》,会发现我通常会建议大家在这种关键测试节点前,都会做一个动作;

就是开启闪回数据库的基础上,创建强制还原点,这样有任何问题,直接闪回数据库到操作前状态即可。

这个动作非常简单,同时也为了顺便验证下在备库开启的步骤,我就在自己一套19c的ADG备库环境下验证下这个开启操作:

1.确认db_recovery_file_dest_size 和 db_recovery_file_dest 的设置值

我这里单实例设置到文件系统了,你也可以设置到ASM磁盘组中:

SQL> alter system set db_recovery_file_dest_size=100g scope=both;
System altered.

SQL> alter system set db_recovery_file_dest='/flash/fast_recovery_area' scope=both;
System altered.

2.开启闪回并确认状态

备库在应用的话,直接开启会报错ORA-01153,需要取消应用再开启闪回,开启闪回后再启动备库日志应用:

--1.直接开启会报错ORA-01153:
SQL> select database_role, open_mode from v$database;

DATABASE_ROLE	 OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY

SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active

--2.需要取消应用再开启:
SQL> recover managed standby database cancel;
Media recovery complete.
SQL> select database_role, open_mode from v$database;

DATABASE_ROLE	 OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY

SQL> alter database flashback on;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

--3.开启闪回后再启动备库日志应用
SQL> recover managed standby database disconnect;
Media recovery complete.
SQL> select database_role, open_mode from v$database;

DATABASE_ROLE	 OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY

3.创建一个强制还原点

比如这里建立 before_imp_xtts 强制还原点:

SQL> create restore point before_imp_xtts guarantee flashback database;
Restore point created.

SQL> select name from v$restore_point;
--确认有刚建立的restore point。

注意:如果是在备库创建,那也是需要先cancel日志应用才能创建的!

4.举例ADG备库创建还原点

比如举例在备库创建一个 before_truncate_t 强制还原点:

目前T表有9条数据:

SQL> select count(*) from t;

  COUNT(*)
----------
	 9

在ADG备库创建还原点:

SQL> recover managed standby database cancel;
Media recovery complete.
SQL> create restore point before_truncate_t guarantee flashback database;

Restore point created.

开启应用后(19cADG实时应用不再需要指定using current logfile关键字),
主库此时去truncate T这张表,ADG备库查询已经实时同步被删除了。

SQL> recover managed standby database disconnect;
Media recovery complete.
SQL> select count(*) from t;

  COUNT(*)
----------
	 9

SQL> select count(*) from t;

  COUNT(*)
----------
	 0

如何闪回到before_truncate_t呢?

SQL> flashback database to restore point before_truncate_t;
flashback database to restore point before_truncate_t
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active


SQL> recover managed standby database cancel;
Media recovery complete.
SQL> flashback database to restore point before_truncate_t;

Flashback complete.

SQL> select count(*) from t;
select count(*) from t
                     *
ERROR at line 1:
ORA-01219: database or pluggable database not open: queries allowed on fixed
tables or views only


SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> alter database open;

Database altered.

SQL> select count(*) from t;

  COUNT(*)
----------
	 9

还是要在停止应用日志的状态下,直接闪回数据库到指定的这个restore point,然后开库就可以看到被误操作的T表数据又回来了~

可能有人会问,除了计划内的测试,谁也不会在误操作之前去手工创建还原点,真实误操作场景如何进行闪回呢?
蛮好的问题,其实闪回可以基于时间进行的。
删除还原点,然后开启同步,又到了误操作场景,如何操作呢?

SQL> drop restore point BEFORE_TRUNCATE_T;

Restore point dropped.

SQL> recover managed standby database disconnect;
Media recovery complete.
SQL> select count(*) from t;

  COUNT(*)
----------
	 0

可以查询闪回数据库的信息:

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT * FROM V$FLASHBACK_DATABASE_STAT
  2  /

BEGIN_TIME	    END_TIME		FLASHBACK_DATA	  DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE	  CON_ID
------------------- ------------------- -------------- ---------- ---------- ------------------------ ----------
2023-06-27 22:09:07 2023-06-27 22:51:28       25362432	  7741440	   0			    0	       0

--此时主库又插入一条数据,备库也同步了:
SQL>  select count(*) from t;

  COUNT(*)
----------
	 1

SQL> select TIMESTAMP_TO_SCN(to_timestamp('2023-06-27 22:51:28','yyyy-mm-dd hh24:mi:ss')) from dual;

TIMESTAMP_TO_SCN(TO_TIMESTAMP('2023-06-2722:51:28','YYYY-MM-DDHH24:MI:SS'))
---------------------------------------------------------------------------
								   58518875
注意:这个转换其实不够精确,3秒内的时间都被转换成同一个SCN。但这里的场景是足够用的;闪回到这个SCN,flashback database to scn 58518875;

SQL> recover managed standby database cancel;
Media recovery complete.
SQL> flashback database to scn 58518875;

Flashback complete.

SQL> alter database open;

Database altered.

SQL> select * from t;

no rows selected

SQL>

看T表又无数据了,相当于再没有任何还原点存在的情况下,可以直接闪回到某个时间,而这个时间可以是 V$FLASHBACK_DATABASE_STAT 查到时间范围区间内的任意时间。
真的是蛮强大的一个功能。

Tips:这里用到了时间和SCN的转换,其实Oracle很多场景都会用到SCN和时间的互相转换,可以记下:

  • 将SCN转换成时间戳,使用 SCN_TO_TIMESTAMP(scn_number)
  • 将时间戳转换成SCN,使用 TIMESTAMP_TO_SCN(timestamp)
--eg:将SCN转换成时间戳,使用 SCN_TO_TIMESTAMP(scn_number)
SQL> select SCN_TO_TIMESTAMP(58518875) from dual;

SCN_TO_TIMESTAMP(58518875)
---------------------------------------------------------------------------
27-JUN-23 10.51.27.000000000 PM

--eg:将时间戳转换成SCN,使用 TIMESTAMP_TO_SCN(timestamp)
SQL> select TIMESTAMP_TO_SCN(to_timestamp('2023-06-27 22:51:28','yyyy-mm-dd hh24:mi:ss')) from dual;

TIMESTAMP_TO_SCN(TO_TIMESTAMP('2023-06-2722:51:28','YYYY-MM-DDHH24:MI:SS'))
---------------------------------------------------------------------------
								   58518875

标签:闪回,SCN,备库,recovery,database,数据库,场景,SQL,select
From: https://www.cnblogs.com/jyzhao/p/17510203.html

相关文章

  • kubernetes探针及应用场景
    kubernetes提供了哪几种探针?分别有什么功能?应用场景有哪些?LivenessProbe:容器存活性检查,用于判断容器是否健康。功能:如果LivenessProbe探针探测到容器不健康,则kubelet将删除该容器,并根据容器的重启策略做相应的处理。 如果一个容器不包含LivenessProbe探针,那么kubele......
  • 数据库Oracle12C忘记密码
    解决方案:1.使用sysdba账号登陆之后可以修改其他账号密码按下WIN+R输入cmd按下回车,运行cmd按如下输入命令sqlplus/assysdba 2.解除锁定账号alteruser用户名accountunlock;---------解除锁定(必须带“;”号)以system用户名为例,即命令为alterusersystemaccountunl......
  • JMS - ActiveMQ - 介绍 、使用场景、优点和不足
    ActiveMQj简介ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。开源的JMSProvider大部分都已经停止发展。  Active......
  • 云数据库产品
    服务:通过网络来获得。 国内:goole:优势:微软:(支持局部事务) ......
  • 云数据库
    云计算概念:云计算八大优势:1.按需服务  2.随时服务  3.通用性 4.高可靠性 5.极其廉价6.超大规模  7.虚拟化  8.高扩展性云数据库概念和特点:云数据库优良特性: 腾讯云数据库和自建数据库的比较个性化存储需求:1.大企业海量数据存储需求。2.中小企业......
  • 文档数据库MongoDB
    MongoDB简介:特点:1.提供了一个面向文档储存,操作起来比较简单和容易2.可以设置任何属性的索引,实现更快的排序3.具有较好的水平可扩展性4.支持丰富的查询表达式,可查询文档中内嵌的对象及数组5.可替换已完成文档某个指定的数据字段6.MongoDB中的MapReduce主要是用来对数据进......
  • 从NoSQL到NewSQL数据库
    数据库的发展:应用场景:NewSQL数据库:(同时具备Nosql和关系型数据库的优点)关系数据库,NoSQL和NewSQL数据库的产品分类图......
  • 性能_3 jmeter连接数据库jdbc(sql server举例)
    一、下载第三方工具包驱动数据库1.因为JMeter本身没有提供链接数据库的功能,所以我们需要借助第三方的工具包来实现。 (有这个jar包之后,jmeter可以发起jdbc请求,没有这个jar包,也有jdbc取样器,但不能发起请求。)2.进入maven仓库-http://mvnrepository.com/,找到想要的......
  • Windows系统中的组策略、计算机配置、管理模板、系统凭据分配、加密数据库修正、易受
    介绍与Windows系统中的组策略、计算机配置、管理模板、系统凭据分配、加密数据库修正、易受攻击和批处理相关的信息:Windows组策略(WindowsGroupPolicy):Windows组策略是用于管理Windows操作系统中用户和计算机配置的一种功能。它允许系统管理员通过集中的方式对多台计算机应用相......
  • 数据库架构优化
    数据库架构优化一.分库分表1.整除取余比如有user有10个库,每个库有100张表userid=100087存放的数据库和表格的路径100087%10=7第7个库10087%100=87第87张表2.根据id最后1位和两位插入数据库和表Id的最后1位为数据库的位置Id的最后两位为表格的位置二.读写分离,主从配置主数据库进......