Oracle备份恢复之闪回技术

简介: Oracle备份恢复之闪回技术

1.闪回查询

原理:用户恢复删除的数据,利用的是undo表空间的数据,闪回查询过去的某一个时间点或SCN的数据信息。
SYS@PROD> conn scott/tiger
SCOTT@PROD> create table t_fb_query1 as select * from dept;
SCOTT@PROD> select * from t_fb_query1;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
SCOTT@PROD> set time on
14:30:49 SCOTT@PROD> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
##也可以更改当前会话的时间格式:
alter session set nls_date_format='yyyy-mm-dd hh24:miss';
select sysdate from dual;
2021-09-11 10:02:15
##查询当前SCN
14:31:58 SYS@PROD> select current_scn from v$database;
CURRENT_SCN
-----------
    1070729
模拟删除10号部门的数据
14:33:25 SCOTT@PROD> delete t_fb_query1 where deptno=10;
14:33:53 SCOTT@PROD> select * from t_fb_query1;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
语法:select * from 表名 as of  timestamp/SCN;
select * from t_fb_query1 
as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss');
   DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
 ##利用SCN查询   
14:35:31 SCOTT@PROD> select * from t_fb_query1 as of SCN  1070729;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
##插入闪回的数据  
insert into scott.t_fb_query1
select * from scott.t_fb_query1 
as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss')
minus
select * from scott.t_fb_query1;


2.闪回表

原理:利用的是Undo表空间的undo数据,闪回表到某个时间点或某个SCN
##连接SCOTT用户创建业务表:
conn scott/tiger
create table fb_1 (id number);
insert into fb_1 values(10);
commit;
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select sysdate from dual;
##查看此时的时间或者SCN:
时间:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2021-09-11 10:17:27
SCN:conn / as sysdba 
select current_scn from v$database;
CURRENT_SCN
-----------
     1071438
##执行数据删除操作:
delete from scott.fb_1;
commit;
##闪回表到数据删除之前
开启被闪回表的行迁移:
14:42:45 SYS@PROD> alter table scott.fb_1 enable row movement;
 闪回查询确认数据:
select  * from scott.fb_1 as of scn 1071438;
执行闪回,可以执行多次闪回操作:
flashback table scott.fb_1 to scn  1071438;
或者
flashback table scott.fb_1 
to timestamp to_timestamp('2021-09-11 10:17:27','yyyy-mm-dd hh24:mi:ss');
验证数据:
SYS@PROD> select * from scott.fb_1;
        ID
----------
        10
##关闭行迁移
SYS@PROD> alter table scott.fb_1 disable row movement;


3.闪回数据库

##设置闪回区
conn / as sysdba
show parameter recover
alter system set db_recovery_file_dest_size=4G;
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
##开启归档模式
查看归档模式
archive log list;
开归档
conn / as sysdba
shutdown immediate
startup mount
alter database archivelog;
alter database open;
##开启闪回及闪回日志保留数据的时间
目的:生成闪回日志
conn / as sysdba
验证是否开启了闪回
select flashback_on from v$database;
开启闪回
alter database flashback on;
如果为yes表示开启
闪回日志保留两天的数据,默认是一天(1440)
alter system set db_flashback_retention_target=2880;
SYS@PROD> show parameter retention_target
##模拟业务及误操作
连接scott用户:
conn scott/tiger
创建业务表:
create table fbdb_scn as select * from emp;
select count(*) from fbdb_scn;
 COUNT(*)
----------
        14
反馈回14条记录
查询当前的SCN或时间:
conn / as sysdba
SCN:select current_scn from v$database;
CURRENT_SCN
-----------
     1065436
时间:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2021-09-11 07:16:45
删除fbdb_scn的信息:
delete from scott.fbdb_scn;
commit;
SYS@PROD> drop user scott cascade;
闪回数据库到业务表有14条记录的状态:
关闭数据库:
shutdown immediate
启动到Mount状态:
startup mount
闪回数据库:
SYS@PROD> flashback database to SCN 1065436;
或者
flashback database 
to timestamp to_timestamp('2021-09-11 07:16:45','yyyy-mm-dd hh24:mi:ss');
以只读方式打开数据库,可以先验证是否是我们想要闪回的状态:
alter database open read only;
conn scott/tiger
select count(*) from fbdb_scn;
如果反馈是14条记录那么说明闪回成功,
如果不是14条记录,那么我们可以继续重复前两个步骤进行闪回,
直到是我们想要的状态。
重新关闭数据库:
conn / as sysdba
shutdown immediate
startup mount 
alter database open resetlogs;
注:为不可逆操作
SYS@PROD> select  GROUP#,SEQUENCE#,MEMBERS,STATUS from v$log;
    GROUP#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ----------------
         1          1          1 CURRENT
         2          0          1 UNUSED
         3          0          1 UNUSED
 SYS@PROD> alter system switch logfile;

a4c3fff066f84f2d93c411b362c5b3ba.png

目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
6月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
3月前
|
SQL 存储 Oracle
"挑战极限!Oracle数据库精英试炼场:夺命连环5问,你能否一路披荆斩棘,登顶技术巅峰?"
【8月更文挑战第9天】Oracle,数据库领域的巨擘,以卓越的数据处理能力、稳定性和安全性成为企业级应用首选。今天我们带来“Oracle夺命连环25问”。首问:核心组件有哪些?答:实例(含内存结构和后台进程)、物理存储(数据文件、控制文件等)及逻辑存储(表空间、段等)。第二问:如何理解事务隔离级别?答:Oracle支持四种级别,默认READ COMMITTED,避免脏读,但可能遇到不可重复读和幻读。
45 0
|
6月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
112 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
6月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
75 0
|
5月前
|
弹性计算 Oracle 关系型数据库
技术好文共享:谁说阿里云不能跑Oracle,让驻云架构师告诉你怎么办!
技术好文共享:谁说阿里云不能跑Oracle,让驻云架构师告诉你怎么办!
43 0
|
SQL Oracle 关系型数据库
PostgreSQL技术大讲堂 - 第27讲:Oracle-FDW部署
从零开始学PostgreSQL,PG技术大讲堂 - 第27讲:Oracle-FDW部署
220 2
|
6月前
|
Oracle 关系型数据库 数据库
Oracle闪回:时光倒流,数据重现的魔法
【4月更文挑战第19天】Oracle数据库的闪回功能如同时光机,借助撤销段保存数据旧版,实现数据丢失或误改后的恢复。包括闪回查询、闪回表、闪回删除和闪回数据库等,适用于不同场景。使用时注意撤销段空间、保留时间和定期备份。虽非万能,但在数据保护体系中扮演重要角色。
|
6月前
|
SQL 存储 Oracle
JAVAEE框架数据库技术之11 oracle入门
JAVAEE框架数据库技术之11 oracle入门
154 0
JAVAEE框架数据库技术之11 oracle入门
|
6月前
|
存储 SQL Java
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(一)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
64 0

推荐镜像

更多