一、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企服之家,中国第一个企服评测及商务社交产业平台。 |