9月29日闪回技术概论+闪回数据库

-、闪回技术概念
1、定义:闪回并不是某个固定的操作,而是基本闪回技术获取之前的原数据操作;通过
DDLDML语句误操作,导致数据改变,可以通过闪问技术恢复数据;
     DDL语句:truncate/drop
     DML语句:updata/insert/delete
2、应用场景
     --依赖对像和对像级别的不同,采用不同的闪回技术;
截断表--闪回日志--闪回库,闪回表    --影响数据
删除表--回收站              --影响数据
updata--闪回查询--重新做插入      --影响数据
版本比对--闪回版本查询          --不影响数据
3、误删除三种操作
     delete误删除
     -->未提交-->rollbakc进行事务回滚--> 需要undo功能
     -->已提交-->闪回查询          -->  需要undo 功能
     drop误删除
     -->重命名-->闪回表操作        -->  回收站
      -->不会回收高水位线-->数据还在数据块里
   truncate误删除
1、DDL操作  --> 不记录undo -->  不需要undo功能
2、会回收高水位线 --> 释放数据段点用的数据块;
        注:高水位线是用于标记数据块的使用位置,数据增加时高水位线会上升,删除数据时它不会下降,因此不能释放空间
3、开启闪回功能--闪回数据库必须要回闪回功能
1)查询闪回状态
SQL>SELECT FLASHBACK_ON FROM V$DATABASE;
2)开启/关闭闪回
SQL>ATER DATABASE FLASHBACK_ON
二、实验
1、闪回数据库
         使用前提条件--建立闪回区并开始归档
1)开启归档功能
查看归档状态
archive log list
设置归档路径
alter system set log_archive_dest_1='location=/home/oracle/orcl_arch' scope=spfile;
!  mkdir  location=/home/oracle/orcl_arch
shutdown immediate;
startup mount
alter database archivelog;  -->必须在mount状态才能开启
alter database open;
archive log list
2)设置闪回区大小和闪回日志存放路径
a) 闪回日志必须保存在闪回区中;
b) 闪回区除了可以保存闪回日志,还可以保存:控制文件 归档文件 备份文件
当闪回功能开启时
一份控制文件和数据文件在一起
一份控制文件在闪回区中
      查看闪回设置
       show parameter recover
            db_recovery_file_dest_size  --> 设置闪回区大小
            db_recovery_file_dest      --> 设置闪回区文件路径       
       先设置闪回区大小  再设置闪回区路径 (有先后顺序)
       流程:
       select FLASHBACK_ON from v$database;  --查看FLASHBACK_ON状态
       alter database set db_recovery_file_dest_size  = 大小;
       alter database set db_recovery_file_dest =’路径’;
       alter database FLASHBACK ON;   开启闪回功能;
       建好闪回区会自动生产SID/flashback目录,并生成闪回日志文件       
       /u01/app/oracle/fast_recovery_area/ORCL1/flashback
       建好闪回,其中一个控制文件会存放在闪回区
       /u01/app/oracle/fast_recovery_area/orcl1/control02.ctl
     模拟闪回数据库操作
1、建表test1
create table test1 as select * from hr.EMPLOYEES;
2、记录时间点--闪回到的时间
   SQL>! date +"%F %T";
3、建表test2
  create table test2 as select * from hr.EMPLOYEES;
4truncate删除test1
           truncate table test1;
        5、闪回数据
        flashback database to timestamp to_timestamp('2020-09-26 09:36:15','yyyy-mm-dd hh24:mi:ss');
        报错 --数据不一致,因此必须关库,回到mount状态
        ERROR at line 1:
ORA-38757: Database must be mounted and not open to FLASHBACK.
        SQL> shutdown immediate;   关库
        SQL> startup mount         开库到mount状态
flashback database to timestamp to_timestamp('2020-09-26 09:36:15','yyyy-mm-dd hh24:mi:ss');
                              --再次执行闪回
        SQL> alter database open;检查数据文件和控制文件一致性;
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
                    --必须要加上选项才可以执行
     SQL> alter database open RSSETLOGS;  
6、查询结果
SELECT COUNT(*) FROM TEST1;  --数据回来了;
SELECT COUNT(*) FROM TEST2;  --数据消失了;
注:
      使用resetlogs选择,相当于初始化了,当前准备变成UNUSED
SQL> select GROUP#,SEQUENCE#,STATUS from v$log;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1            1 CURRENT
         2            0 UNUSED
         3            0 UNUSED
                           

标签: 暂无标签
fm98888

写了 26 篇文章,拥有财富 100,被 0 人关注

转播转播 分享分享 分享聚知识
回复

使用道具

成为第一个吐槽的人

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈