oracle闪回数据库flashback database的用法

2024-03-20 00:38

本文主要是介绍oracle闪回数据库flashback database的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在传统的数据库恢复中,如果为了应对用户错误,通常需要进行基于时间点的不完全恢复,恢复的过程需要恢复数据文件,归档日志、再通过日志应用恢复到指定的时间点,这种恢复可能需要更长的时间,而flashback database可以避免文件恢复过程,从而缩短恢复时间。

       flashback database的原理:要使用flashback database,必须先启用此功能 。当启用flashback database后,数据库会定期将发生变化的数据块的前镜像写入闪回日志的日志文件中,在数据库闪回时,这些数据块可以直接被复制过来以满足数据库的恢复需求,同时redo log可以被应用以辅助恢复到理精确的时间点,从而极有的缩小恢复时间。不过使用flashback database有一些限制:

1)、flashback database 不能解决media failue,对于这种错误只能是rman恢复;

2)如果删除了数据文件或者利用shrink技术缩小数据文件大小,这时是不能用flashback database技术回退到改变之前的状态,这时间就必须利用RMAN把删除之前或者缩小之前的文件备份restore出来,然后利用flashback  database执行剩下的恢复;

3)如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用flashback database;

4)使用flashback database 所能恢复到的最早的scn,取决于flashback log中的记录的最早的scn.


下面通过scott用户下的表作为测试:

步骤1:查看rvwr进程:

flashback database 的日志文件不是由传统的lgwr进程写入,而是由recovery  writer (RVWR)的进程写入(这是由oracle 10g新增的一个进程):

[oracle@localhost ~]$ ps -ef|grep rvwr

步骤2:启用flashback  database的功能

SQL> startup mount;
ORACLE instance started.
Total System Global Area 2405122048 bytes
Fixed Size    2255592 bytes
Variable Size  603981080 bytes
Database Buffers 1778384896 bytes
Redo Buffers   20500480 bytes
Database mounted.


SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.
SQL> select dbid,name,flashback_on,current_scn from v$database;
      DBID             NAME       FLASHBACK_ON   CURRENT_SCN
    ----------            ---------      ------------------           -----------
1821627089    WUTONG    YES           1133591

SQL> show parameter db_flashback
NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target     integer 1440

步骤3:在scott用户下查询有哪些表,并且分别查询emp和test_emp中的数据量

SQL> conn scott/tiger
Connected.
SQL> select * from tab;
TNAME       TABTYPECLUSTERID
------------------------------ ------- ----------
BONUS       TABLE
DEPT       TABLE
EMP       TABLE
SALGRADE       TABLE
TEST_EMP       TABLE

SQL> select count(*) from scott.emp;

COUNT(*)
----------
14

SQL> select count(*) from scott.emp;

COUNT(*)
----------
14

步骤4:设置会话时间格式,分别用truncate清除test_emp和emp表

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2016-09-12 03:37:30

SQL> truncate table test_emp;
Table truncated.
SQL> select sysdate from dual;
SYSDATE
-------------------
2016-09-12 03:38:39
SQL> truncate table emp;
Table truncated.

步骤5:把数据库启动到mount下,以timestamp/scn/sequence方式闪回,并且以只读方式打开数据库

SQL> select sysdate from dual;
SYSDATE
-------------------
2016-09-12 03:39:05
SQL> conn / as sysdba
Connected.
SQL> startup mount;
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 2405122048 bytes
Fixed Size    2255592 bytes
Variable Size  603981080 bytes
Database Buffers 1778384896 bytes
Redo Buffers   20500480 bytes
Database mounted.



SQL> flashback database to timestamp to_timestamp('2016-09-12 03:37:30','yyyy-mm-dd hh24:mi:ss');
Flashback complete.

SQL> alter database open read only;
Database altered.
SQL> select count(*) from scott.emp;
  COUNT(*)
----------
14
SQL> select count(*) from scott.test_emp;
  COUNT(*)
----------
14

最后以resetlogs方式打开数据库,但是一旦以resetlogs方式打开数据库就不能再flashback 至resetlogs之前的时间点了

此时可以看到数据已经恢复,如果数据恢复的不够理想,则关闭数据库后重新进行上述恢复。

这篇关于oracle闪回数据库flashback database的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827739

相关文章

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符

《sqlserver、mysql、oracle、pgsql、sqlite五大关系数据库的对象名称和转义字符》:本文主要介绍sqlserver、mysql、oracle、pgsql、sqlite五大... 目录一、转义符1.1 oracle1.2 sqlserver1.3 PostgreSQL1.4 SQLi

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

Java8 Collectors.toMap() 的两种用法

《Java8Collectors.toMap()的两种用法》Collectors.toMap():JDK8中提供,用于将Stream流转换为Map,本文给大家介绍Java8Collector... 目录一、简单介绍用法1:根据某一属性,对对象的实例或属性做映射用法2:根据某一属性,对对象集合进行去重二、Du