首页 > 数据库 >Flashback Database闪回数据库功能实践

Flashback Database闪回数据库功能实践

时间:2024-03-28 14:55:04浏览次数:15  
标签:count 闪回 Database 数据库 SYS fd Flashback ora11g

Flashback Database闪回数据库功能极大地降低了由于用户错误导致的数据丢失的恢复成本。这是一种以空间换取缩短恢复时间的解决方案,这是值得的。
这里给出闪回数据库的使用方法,体验一下这种恢复操作的便利性。

1.使用Flashback Database的前提条件
1)启用了flashback database
2)必须打开flash recovery area,若为RAC,flash recovery area必须位于共享存储中。
3)必须处于archivelog模式,开启FORCE LOGGIN

2.一一确认上面的前提条件是否满足
1)验证是否启用了flashback database并确认FORCE LOGGIN是否开启
SYS@ora11g> select flashback_on,force_logging from v$database;

FLASHBACK_ON FOR
------------------ ---
YES NO

若flashback_on为“NO”,修改方法见《【Flashback】启用Flashback Database闪回数据库功能》(http://space.itpub.net/519536/viewspace-590636)
若force_logging为“NO”,请使如下SQL语句开启。

SYS@ora11g>更改数据库强制日志记录;

数据库已更改。

SYS@ora11g>从 v$database 中选择 flashback_on,force_logging;

FLASHBACK_ON FOR
------------------ ---
YES YES

2)验证是否开启flash recovery area
,此步骤在启用闪回数据库功能时已经确认过。
SYS@ora11g> show 参数 db_recovery_file

名称类型 VALUE

--------------------------- ----------- ------------------------------db_recovery_file_dest 字符串 /u01/app/oracle/flash_recovery
_area
db_recovery_file_dest_size 大整数 3852M

3)数据库是否处于archivelog模式
SYS@ora11g> archive log list;
数据库日志模式 存档模式
自动存档 已启用
存档目标 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 11
要存档的下一个日志序列 13
当前日志序列 13

3.确认数据库可以前滚到的SCN和Time的方法
如果需要恢复的数据点比这个时间还要早的话,很不幸,闪回数据库功能将无能为力。
SYS@ora11g> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

SYS@ora11g>从 v$flashback_database_log 中选择 oldest_flashback_scn,oldest_flashback_time;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1033529 2012-04-02 03:36:40

4.闪回数据库功能闪亮登场
1)创建测试表fd_1、fd_2和fd_3
SYS@ora11g> create table fd_1 as select * from dba_objects;

已创建表。

SYS@ora11g>创建表fd_2,从fd_1中选择*;

已创建表。

SYS@ora11g>创建表fd_3,从fd_1中选择*;

四能够创建。

SYS@ora11g>从fd_1中选择 count(*);

COUNT(*)
----------
72465

SYS@ora11g>从fd_2中选择 count(*);

COUNT(*)
----------
72465

SYS@ora11g>从fd_3中选择 count(*);

COUNT(*)
----------
72465

SYS@ora11g>21:59:40 设置时间SYS@ora11g>从 dual 中选择 sysdate;


SYSDATE

-------------------2012-04-07 21:59:44

2)truncate表fd_2、drop掉表fd_3
21:59:44 SYS@ora11g> truncate table fd_2;

表被截断。

22:00:06 SYS@ora11g> fd_3;

表掉了。

3)使用Flashback Database功能进行恢复到删除前的时间点2012-04-07 21:59:44
22:00:17 SYS@ora11g>立即关闭;
数据库已关闭。
数据库已卸除。
ORACLE 实例已关闭。
22:02:04 SYS@ora11g>启动安装独家;
ORACLE 实例已启动。

系统全局总面积 313860096 字节
固定大小 1336232 字节
可变大小 247467096 字节
数据库缓冲区 58720256 字节
重做缓冲区 6336512 字节
数据库已挂载。
22:02:52 SYS@ora11g> 闪回数据库到时间戳(to_date('2012-04-07 21:59:44','yyyy-mm-dd hh24:mi:ss'));

闪回完成。

4)闪回后修复数据库两种方式之一:open read only
推荐使用这样的方法进行恢复,因为在只读方式打开之后,将需要恢复的表EXP导出,然后通过recover database将数据库恢复到原状态,再将缺失的数据IMP到数据库中。这样操作对数据库的影响可以降低到最小,可以保证其他表没有数据的丢失。
read only打开后查看三张表的状态:
22:03:57 SYS@ora11g> alter database open read only;

数据库已更改。

22:04:33 SYS@ora11g> 从fd_1中选择 count(*);

COUNT(*)
----------
72465

22:04:37 SYS@ora11g>从fd_2中选择 count(*);

COUNT(*)
----------
72465

22:04:40 SYS@ora11g>从fd_3中选择 count(*);

COUNT(*)
----------
72465

取消闪回结果,恢复到闪回前状态的方法:
22:04:43 SYS@ora11g>立即关闭;
数据库已关闭。
数据库已卸除。
ORACLE 实例已关闭。
22:05:09 SYS@ora11g>启动安装;
ORACLE 实例已启动。

系统全局总面积 313860096 字节
固定大小 1336232 字节
可变大小 247467096 字节
数据库缓冲区 58720256 字节
重做缓冲区 6336512 字节
已装入数据库。
22:06:08 SYS@ora11g>恢复数据库;
介质恢复完成。
22:06:18 SYS@ora11g> 更改数据库打开;

数据库已更改。

22:06:41 SYS@ora11g> 从fd_1中选择 count(*);

COUNT(*)
----------
72465

22:06:55 SYS@ora11g>从fd_2中选择 count(*);

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

22:06:59 SYS@ora11g>从fd_3中选择 count(*);
select count(*) from fd_3
*
ERROR at line 1:
ORA-00942: table or view does not exist

可见,通过上面的recover后,数据库恢复到了闪回前的状态。

5)闪回后修复数据库两种方式之二:open resetlogs
通过open resetlogs方式打开数据库后,很显然,闪回到时间点之后的数据将全部丢失,慎用!

SYS@ora11g> alter database open resetlogs;
SYS@ora11g>从fd_1中选择 count(*);

COUNT(*)
----------
72465

SYS@ora11g>从fd_2中选择 count(*);

COUNT(*)
----------
72465

SYS@ora11g>从fd_3中选择 count(*);

COUNT(*)
----------
72465

5.小结
这里对Flashback Database闪回数据库的语法进行总结。闪回数据库可以在SQL*Plus环境和RMAN环境下使用。
基于时间戳进行闪回数据库操作方法:
Flashback Database to timestamp(to_date('2012-04-07 21:59:44','yyyy-mm-dd hh24:mi:ss'));
闪回数据库到时间戳(sysdate-1/24);
基于SCN进行闪回数据库操作方法:
Flashback Database to 1321427;


标签:count,闪回,Database,数据库,SYS,fd,Flashback,ora11g
From: https://www.cnblogs.com/ivenlin/p/18101691

相关文章

  • Conceptual Database Design 2
    1. ConsideruseofenhancedmodellingconceptsObjectiveistoidentifysuperclassandsubclassentitytypes,whereappropriate.•Themodellingofsuperclassesandsubclassesaddsmoreinformationtothedatamodel,butalsoaddsmorecomplexityaswel......
  • Flashback Drop闪回删除功能实践
    Oracle的FlashbackDrop闪回删除功能给出我们一种误DROP删除表的便捷恢复方式,实现这种功能的原理是Oracle的“回收站”(RecycleBin)功能。注意,如果被删除的表原先是存放在SYSTEM系统表空间上,则不支持此功能。1.FlashbackDrop功能 恢复被错误drop掉的表。当一张表被删除后,依然可以......
  • Mogdb - 安装报错Failed to encrypt the password for databaseError
    Mogdb-安装报错FailedtoencryptthepasswordfordatabaseError本文出处:https://www.modb.pro/db/418363版本MogdbV2.0.1红旗V6故障现象安装过程中出现报错[GAUSS-50322]:FailedtoencryptthepasswordfordatabaseError:/dbdata/app/mogdb/bin/gs_guc:error......
  • Amazon Aurora Limitless Database :数据库管理的全新境界
    在当今数亿用户、PB级数据和数百万交易的业务环境中,数据库管理面临着巨大的挑战。传统数据库扩展的繁琐性和耗时性使得许多组织需要花费数月甚至数年的时间来构建自定义软件以满足其极端的工在当今数亿用户、PB级数据和数百万交易的业务环境中,数据库管理面临着巨大的挑战。 ......
  • 【Database】基于Mybatis的多数据源连接实现方式
    场景出于种种原因有些时候我们的项目中会用到同时连接多个数据源的情况,比如数据太大了分了多个库,又比如统计任务只能读原始数据的数据库,写只能在统计结果的库中。设计思路基于mybatis我们的方案是这样的,需要自己实现一个SqlSessionTemplate,里面维护了一个dbId到SqlSessionFact......
  • 【Database】可选的数据源配置项
    【Database】可选的数据源配置项场景之前的版本中没有数据源依赖,新版本中有数据源依赖,只有部分模块需要配置数据源,其余模块仍然读老的配置,如果使用自动装配的mybatis会启动报错。方案通过一个默认为false的开关控制数据源的加载@Configuration@MapperScan(basePackages={"......
  • Tomcat DBCP(Database Connection Pool) 数据库连接池入门介绍
    拓展阅读从零开始手写mybatis(三)jdbcpool如何从零手写实现数据库连接池dbcp?万字长文深入浅出数据库连接池HikariCP/CommonsDBCP/Tomcat/c3p0/druid对比DatabaseConnectionPool数据库连接池概览c3p0数据池入门使用教程alibabadruid入门介绍数据库连接池HikariC......
  • Database Connection Pool 数据库连接池-01-概览及简单手写实现
    拓展阅读第一节从零开始手写mybatis(一)MVP版本。第二节从零开始手写mybatis(二)mybatisinterceptor插件机制详解第三节从零开始手写mybatis(三)jdbcpool从零实现数据库连接池第四节从零开始手写mybatis(四)-mybatis事务管理机制详解连接池的作用资源重用由于数据库......
  • Android Room DataBase
     AndroidRoomDataBase(一)https://blog.csdn.net/l_o_s/article/details/79346426AndroidRoomDataBase(二)https://blog.csdn.net/l_o_s/article/details/79348701AndroidRoomDataBase(三)https://blog.csdn.net/l_o_s/article/details/79388408使用AndroidJetpack......
  • 修复sqlite3数据库 database disk image is malformed
    databasediskimageismalformed错误sqlite是一个文本型数据库,其内部虽然做了异常处理,且官网上也说一般的异常不会引起数据库文件损坏,但是官方还是给出了有可能导致数据库文件损坏的情况。以下内容来自官网:SQLite经过非常仔细的测试,以帮助确保它尽可能没有错误。对每个SQ......