Oracle数据库闪回功能的详解和相关命令

前言

今日看了Oracle原厂老师讲的数据库闪回技术的公开课,感觉受益匪浅。整理了一下关于数据库闪回功能的一些知识和相关测试,在此做下分享。

什么是闪回?

Oracle数据库闪回技术是一组独特而丰富的数据恢复解决方案,通过有选择地、有效地消除错误的影响,可以逆转人为错误。
查看数据的过去状态
可沿时间轴向前或向后闪回
协助用户进行错误分析和恢复
简单的命令行操作(或者DBMS_FLASHBACK包)
闪回时间与数据库大小无关

闪回支持不同级别的恢复,包括行、事务、表和整个数据库:
Flashback Database
Flashback Table
Flashback Drop
Flashback Transaction
Flashback Transaction Query
Flashback Query
Flashback Version Query
在这里插入图片描述

基于UNDO的闪回:闪回查询、闪回版本查询、闪回表

闪回查询技术

闪回查询某精确时间点
select * from table_name AS OF TIMESTAMP TO_TIMESTAMP('2023-02-23 13:14:00', 'YYYY-MM-DD HH24:MI:SS');
闪回查询到多久之前(例如 一分钟前)
select * from table_name AS OF TIMESTAMP sysdate-1/24/60;
闪回查询到指定scn
select * from table_name as of scn 55124124;

闪回版本查询技术

查看某一时间段内数据的变化

SELECT versions_startscn,
       versions_starttime,
       versions_endscn,
       versions_endtime,
       versions_xid,
       versions_operation,
       last_name,
       salary
  FROM employees VERSIONS BETWEEN TIMESTAMPTO_TIMESTAMP('2023-03-08 14:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2023-03-08 17:00:00', 'YYYY-MM-DD HH24:MI:SS')
 WHERE first_name = 'John';

字段含义
VERSIONS_STARTSCN:数据版本被创建时的SCN
VERSIONS_STARTTIME:数据版本被创建时的时间戳
VERSIONS_ENDSCN:数据版本消逝时的SCN
VERSIONS_ENDTIME:数据版本消逝时的时间戳
VERSIONS_XID:数据版本被创建时的事务号
VERSIONS_OPERATION: 数据版本创建时的事务类型

闪回表技术

可以将表恢复到过去的指定时间点

开启行移动功能
alter table table_name enable row movement;
闪回表到指定时间点
flashback table table_name to timestamp to_timestamp('2023-02-23 13:14:00','yyyy-mm-dd hh24:mi:ss');
闪回表到多久之前
flashback table table_name to timestamp to sysdate-1/24/60;
闪回表到指定scn号
flashback table table_name to scn 3823947923;

FDA闪回数据归档技术

因为undo有保留时间限制,可以被覆盖,时间久远的数据无法通过undo进行闪回,此时可以利用闪回数据归档技术,根据时间限制将undo数据持久化在其他表空间上,不受undo的时间限制
闪回数据归档步骤:
创建一个供闪回数据库使用的表空间在该表空间
创建闪回数据归档,时间期限自定义
创建一个用户并授予DBA的角色
授予用户操作的必要权限登录
创建一个表启用闪回数据归档
执行查询来确定归档创建的对象

先创建普通表空间   然后在表空间中创建FDA
CREATE FLASHBACK ARCHIVE DEFAULT fla1 TABLESPACE tbs1QUOTA 10G RETENTION 1 YEAR;

基于Recyclebin(回收站)的闪回删除技术

闪回删除技术:
针对非system 表空间
适用于通过drop 操作和非purge 的方式删除的对象可以在recyclebin使用闪回删除操作还原删除的对象(包括相关索引,约束,触发器)

回收站(recycle bin)
通过数据字典视图快速查看:USER_RECYCLEBIN 和DBA_RECYCLEBIN。
删除的表在回收站中被重新命名

闪回被删除的表
flashback table table_name to before drop;

基于闪回数据库日志的闪回数据库技术

需开启数据库闪回日志
查看数据库是否开启闪回日志
select flashback_on from v$database;
在这里插入图片描述
开启闪回日志之前必须要设置闪回恢复区的路径和大小
show parameter recover
在这里插入图片描述

开启闪回日志
alter database flashback on;
闪回数据库:把数据库闪回到过去的时间点,针对逻辑故障,或者对相同数据做循环迭代测试。
flashback database to timestamp to_timestamp('2023-03-08 16:18:00','yyyy-mm-dd hh24:mi:ss');
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你关于 Oracle 导入导出命令的问题,并且提供一个数据库每天定时备份的脚本。 首先,Oracle 提供了两个主要的工具用于数据的导入和导出: 1. exp(Export):用于将 Oracle 数据库中的数据导出到一个平面文件中。 2. imp(Import):用于将一个平面文件中的数据导入到 Oracle 数据库中。 以下是这两个命令的基本语法: 导出数据到平面文件: ``` exp 用户名/密码@数据库名 file=导出文件名.dmp tables=要导出的表名 ``` 导入数据到数据库: ``` imp 用户名/密码@数据库名 file=导入文件名.dmp full=y ``` 其中,`用户名/密码@数据库名` 指的是要导入/导出的 Oracle 数据库的连接信息;`file=` 指定导出/导入的文件名;`tables=` 指定要导出的表名;`full=y` 表示导入整个数据库。 另外,还有一些其他的参数可以用于导出/导入数据,可以通过 `exp help=y` 和 `imp help=y` 命令查看详细的用法和参数说明。 至于每天定时备份脚本,可以使用以下脚本: ``` #!/bin/bash # 设置备份文件名和路径 backup_dir=/backup/oracle backup_file=oracle_$(date +%Y%m%d_%H%M%S).dmp # 导出整个数据库 exp username/password@database full=y file=$backup_dir/$backup_file # 删除超过7天的备份文件 find $backup_dir -type f -name 'oracle_*.dmp' -mtime +7 -exec rm -f {} \; ``` 这个脚本会将整个数据库导出到一个以当前时间命名的备份文件中,并将备份文件保存在指定的路径下。同时,还会删除超过7天的备份文件,以免占用过多的磁盘空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值