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的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1