Oracle闪回详解(闪回查询,闪回数据,回退数据,闪回表,闪回数据库,闪回 ...

打印 上一主题 下一主题

主题 974|帖子 974|积分 2922

一、Oracle闪回概述

二、Oracle闪回利用详解
1、闪回开启
(1)开启闪回必要条件
a.开启归档日记
SQL> archive log list;
b.设置合理的闪回区   
db_recovery_file_dest:指定闪回规复区的位置
db_recovery_file_dest_size:指定闪回规复区的可用空间巨细
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟(1天),实际取决于闪回区巨细
(2)查抄是否开启闪回
SQL> select flashback_on from v$database;
(3)开启闪回
a.开启归档
mount状态:alter database archivelog;
b.设置闪回区先巨细,后位置,反之报错
设置闪回区位置
SQL> alter system set db_recovery_file_dest='/app/fast_recovery_area' scope=both;
设置闪回区巨细:
SQL> alter system set db_recovery_file_dest_size=10G scope=both;
设置闪回区位置:
SQL> alter system set db_recovery_file_dest='/app/fast_recovery_area' scope=both;
设置闪回目的为5天,以分钟为单位,每天为1440分钟:
SQL> alter system set db_flashback_retention_target=4320 scope=both;
c.开启flashback (10g在mount开启)
SQL> alter database flashback on;
(4)确定闪回开启
SQL> select flashback_on from v$database;
(5)关闭闪回
SQL> alter database flashback off;
2、闪回利用
(1)闪回查询
SQL> select * from yangqingbo_ghq.dept;
DEPTNO   DNAME       LOC
————   ————     ————
10       ACCOUNTING    NEW YORK
20       RESEARCH        DALLAS
30       SALES                 CHICAGO
40       OPERATIONS     BOSTON
SQL> delete from yangqingbo_ghq.dept where deptno=40;    commit;
查询两分钟时 表的信息
SQL> select * from yangqingbo_ghq.dept as of timestamp sysdate - 2/1440;
SQL> select * from yangqingbo_ghq.dept;

查询指定时间表的信息(丢失数据时加筛选条件,找到这部分这个时候的数据给开发)
SQL> select * from scott.dept as of timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
SQL> select * from scott.dept as of scn 1166880011552233;

b.闪回版本查询
用于查询行级数据库随时间变化的方法
c.闪回事务查询
用于提供查看事务级别数据库变化的方法
(2)闪回表(update/insert/delete)
A.闪回表示例:
a.将表闪回到指定时间点(2024-03-03 16:30:00删除DEPTNO=40
SQL> flashback table yangqingbo_ghq.dept to timestamp to_timestamp('2024-03-03 16:30:00','yyyy-mm-dd hh24:mi:ss');
b.查看scott.dept表是否开启行迁移
SQL>select row_movement from dba_tables where table_name='DEPT' and owner='YANGQINGBO_GHQ';
c.被闪回的表必须启用行移动功能
SQL> alter table YANGQINGBO_GHQ.dept enable row movement;

d.再次将表闪回到指定时间点
SQL> flashback table scott.dept to timestamp to_timestamp('2024-03-03 16:30:00','yyyy-mm-dd hh24:mi:ss');
e.验证表信息,已闪回到2024-03-03 16:30:00
SQL> select * from scott.dept;
f.关闭表的行移动功能
如果一块数据磁盘空间无法保存某个数据时(比如以前是1k,现在update到2k,而当前块的空闲空间不足1k),则会将新的数据保存到别的一个新的块里,然后在以前的块保存一个新位置的地点连接
但是“行移动”在默认情况下是禁用的,所以启用它会导致一些性能问题。固然,当一行移动时 - 它将被更新,删除并重新插入,并相应调整所有相关的索引条目。 rowid在行被移动后会被修改(我很确定我们的系统中不利用rowid,所以这不会成为问题)
SQL> alter table YANGQINGBO_GHQ.dept disable row movement;
(3)闪回DROP(drop table)
当一个表被drop掉,表会被放入recyclebin接纳站,可通过接纳站做表的闪回。表上的索引、约束等同样会被规复不支持sys/system用户表空间对象,可通过alter system set recyclebin=off;关闭接纳站功能
A.闪回DROP示例:
接纳站功能要打开
开启接纳站
SQL> ALTER SYSTEM SET RECYCLEBIN=ON;
SQL> SHOW PARAMETER RECYCLEBIN;
a.查看表
SQL> select * from yangqingbo_ghq.dept; ;
b.删除表
SQL> drop table yangqingbo_ghq.dept;
c.接纳站里查看被删除表的信息
SQL> show recyclebin;
d.闪回drop表
SQL> flashback table yangqingbo_ghq.dept to before drop;
e.查看表(已规复)
SQL> select * from yangqingbo_ghq.dept;
备注:即使不开始flashback,只要开启了recyclebin,那么就可以闪回DROP表。
但如果连续覆盖,就必要指定规复的表名,如果已经存在表,则必要规复重命名。
三、备注
1、相关数据字典
V$FLASHBACK_DATABASE_LOG ##查看数据库可闪回的时间点/SCN等信息
V$flashback_database_stat ##查看闪回日记空间记录信息
2、常用查询语句
(1)查看数据库状态
SQL> select NAME,OPEN_MODE ,DATABASE_ROLE,CURRENT_SCN,FLASHBACK_ON from v$database;
(2)获取当前数据库的系统时间和SCN
SQL> select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') as sysdt , dbms_flashback.get_system_change_number scn from dual;

(3)查看数据库可规复的时间点
SQL> select * from V$FLASHBACK_DATABASE_LOG;
(4)查看闪回日记空间情况
SQL> select * from V$flashback_database_stat;
(5)SCN和timestamp装换关系查询
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;
(6)查看闪回restore_point
select scn, STORAGE_SIZE ,to_char(time,'yyyy-mm-dd hh24:mi:ss') time,NAME from v$restore_point;
(7)闪回语句
a.闪回数据库
FLASHBACK DATABASE TO TIMESTAMP to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd HH24:MI:SS');
flashback database to scn 16813234;
b.闪回DROP
其中table_name可以是删除表名称,也可以是别名
flashback table table_name to before drop;
flashback table table_name to before drop rename to table_name_new;
c.闪回表
flashback table table_name to scn scn_number;
flashback table table_name to timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
d.闪回查询
select * from table_name as of timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
select * from scott.dept as of scn 16801523;
e.闪回快照
create restore point before_201712151111 guarantee flashback database;
flashback database to restore point before_201712151111;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表