1-闪回技术有什么用?
闪回是Oracle提供的一系列人为错误更正技术。闪回从根本上改变了数据恢复。利用闪回技术,更正错误的时间与错误发生时间几乎相同。而且它非常易用,使用一条短命令便可恢复整个数据库,而不必执行复杂的程序。闪回技术提供了一个 SQL 界面,能够快速分析和修复人为错误。闪回技术是 Oracle 数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。
2-UNDO是什么?
撤销(Undo)数据是反转DML语句结果所需的信息。是记录数据的备份用的。 简单举个例子说明(实际过程比这要复杂的多): 1、当你发出一条update语句后,oracle先将更改前后信息写进redo(当满足一定条件后由日志写进程写入日志文件) 2、然后将更新前得数据镜像copy到undo中。 3、用道户rollback后,oracle 将undo中的数据覆盖回去。用户commit后,oracle可以根据redo的信息进行数据恢复,当然也可以利用undo进行flashback。
3-图文形式写出本机配置闪回恢复区操作步骤。
只要使用闪回技术操作数据,就必须首先建立闪回恢复区。闪回恢复区是一块用来集中存储所有与数据库恢复相关文件的存储区域,它为数据恢复提供了一个集中化的存储空间,这在很大程度上减小了管理开销。
配置闪回恢复区是一个很简单的过程,只需要在初始化参数文件中指定恢复区的位置(DB_RECOVERY_FILE_DEST)和大小(DB_RECOVERY_FILE_DEST_SIZE)即可,通常使用alter system语句来实现配置闪回恢复区。
alter system set db_recovery_file_dest_size=500M scope=both;
4-【闪回数据库】 recovery_database 代码每行写注释
在配置闪回恢复区之后,若要启用闪回数据库功能,还要需要进一步的配置,主要包括以下3点:
设置数据库必须运行在归档模式下(ARCHIVELOG);
通过数据库参数DB_FLASHBACK_RETENTION_TARGET,指定可以在多长时间内闪回数据库。
需要在MOUNT状态下使用ALTER DATABASE FLASHBACK ON命令启动闪回数据库功能。
SQL> archive log list;--查看数据库归档模式
数据库日志模式 非存档模式
自动存档 禁用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 50
当前日志序列 52
SQL> shutdown immediate;--关闭数据库实例
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;--mount模式打开数据库
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 679477712 bytes
Database Buffers 385875968 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
SQL> alter database archivelog;--更改数据库归档模式
数据库已更改。
SQL> alter system set db_flashback_retention_target=7200;--指定闪回时间
系统已更改。
SQL> alter database flashback on;--启用闪回功能
数据库已更改。
SQL> alter database open;--打开数据库
数据库已更改。
SQL> archive log list;--查看此时数据库的归档模式
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 50
下一个存档日志序列 52
当前日志序列 52
5-闪回表技术作用是什么?
闪回表技术可以恢复到之前的某个时间戳、SCN号或之前的任何drop动作
6-本地演示下闪回表实际案例的操作步骤。
7-【闪回表】 flashtable 代码每行写注释
SQL> conn scott/123456--连接数据库
已连接。
SQL> create table dept2 as select * from dept;--新建一个和dept一样的表dept2
表已创建。
SQL> select * from dept2;--查看dept2
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> set time on;--设置时间戳
16:06:55 SQL> delete from dept2 where deptno = 30;--删除dept2表的一行
已删除 1 行。
16:07:21 SQL> commit;
提交完成。
16:07:26 SQL> alter table dept2 enable row movement;--启用迁移功能
表已更改。
16:08:01 SQL> flashback table scott.dept2 to timestamp to_timestamp('2020-05-08 16:07:26','yyyy-mm-dd hh24:mi:ss');--闪回到删除一行之前的时间戳
闪回完成。
16:10:18 SQL> select * from dept2;--此时表已经恢复
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
8-闪回丢弃的技术作用是什么?
闪回丢弃技术:类似于操作系统的垃圾回收站,可以从其中恢复被DRO掉的表或索引,该功能基于撤销数据。
9-【闪回丢弃】 recycle 代码每行写注释
请输入用户名: scott
输入口令:
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> create table dept_copy as select * from dept;--根据dept表创建dept_copy表
表已创建。
SQL> select * from tab;--查看系统tab表,有dept_copy这个表
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
DEPT2 TABLE
DEPT_COPY TABLE
EMP TABLE
SALGRADE TABLE
SYS_TEMP_FBT TABLE
已选择7行。
SQL> drop table dept_copy;--删除dept_copy这个表
表已删除。
SQL> select object_name,original_name from user_recyclebin;--从dba_recyclebin中可以查看当前删除的对象和名字
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$3bwOA643Ruat/PJHAdHotg==$0 DEPT_COPY
SQL> flashback table dept_copy to before drop;--闪回表格
闪回完成。
SQL> select * from dept_copy;--查看闪回的表格
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
10-本地演示下闪回丢弃实际案例的操作步骤。
11-闪回版本查询技术 本地演示下实际操作步骤
12:16:30 SQL> create table sct3(
12:24:07 2 id number(4),
12:24:07 3 name varchar2(20)
12:24:07 4 );--新建一个表格sct3
表已创建。
12:24:09 SQL> insert into sct3 values(1,'lili');
已创建 1 行。
12:24:20 SQL> commit;
提交完成。
12:24:20 SQL> insert into sct3 values(2,'lilic');
已创建 1 行。
12:24:20 SQL> commit;--向表格插入两行数据
提交完成。
12:24:20 SQL> update sct3 set name='yuyuanshang' where id=2;--更新数据
已更新 1 行。
12:24:20 SQL> commit;
提交完成。
12:24:20 SQL> insert into sct3 values(3,'lilid');--插入一行数据
已创建 1 行。
12:24:20 SQL> commit;
提交完成。
--VERSIONS_STARTTIME是数据被修改的起始时间
--VERSIONS_ENDTIME是数据被修改后新数据的有效时间,也就是VERSIONS_STARTTIME和VERSIONS_ENDTIME时间段内,这条数据再没被修改过,如果VERSIONS_ENDTIME为空,就说明这天记录从VERSIONS_STARTTIME时间起再没被修改过。
--VERSIONS_OPERATION是修改状态,I代表INSERT,U代表UPDATE,D代表DELETE。此时如果想回滚INSERT的数据,只需要DELETE反向操作即可,如果想回滚UPDATE操作,将数据反向UPDATE回去即可
SQL> select id, name,versions_operation,versions_starttime,versions_endtime
2 from sct3
3 versions between timestamp minvalue and maxvalue
4 order by id,versions_endtime;
ID NAME VERSIONS_O VERSIONS_STARTTIME VERSIONS_ENDTIME
--- -------------------- ---------- ------------------------- -------------------------
1 lili I 18-5月 -20 11.22.54 下午
2 lilic I 18-5月 -20 11.22.54 下午 18-5月 -20 11.22.54 下午
2 yuyuanshang U 18-5月 -20 11.22.54 下午
3 lilid I 18-5月 -20 11.22.54 下午
12-闪回事务查询技术 本地演示下实际操作步骤
SQL> create table sct4(id number(4), name varchar2(20));
表已创建。
SQL> insert into sct4 values(2,'lilic');
已创建 1 行。
SQL> commit;
提交完成。
SQL> delete sct4 where id=1;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select id, name,versions_xid,versions_operation,versions_starttime,versions_endtime from sct4 versions between timestamp minvalue and maxvalue order by id,versions_endtime;
ID NAME VERSIONS_XID VERSIONS_O VERSIONS_STARTTIME VERSIONS_ENDTIME
--- -------------------- -------------------- ---------- ------------------------- -------------------------
1 lili 02000800B2060000 I 18-5月 -20 11.31.48 下午 18-5月 -20 11.31.48 下午
1 lili 02001A00B2060000 D 18-5月 -20 11.31.48 下午
2 lilic 0400210020060000 I 18-5月 -20 11.31.48 下午
SQL> select xid,undo_change#,operation,table_name,undo_sql from flashback_transaction_query where xid ='02000800B2060000';
XID UNDO_CHANGE# OPERATION TABLE_NAME UNDO_SQL
-------------------- ------------ -------------------- -------------------- --------------------
02000800B2060000 1 UNKNOWN SCT4
02000800B2060000 2 BEGIN
--最后再执行undo_sql就可以恢复操作之前的数据库了
闪回事务查询是一种诊断工具,帮助识别数据库发生的事务级变化,可以用于事务审计的数据分析。通过闪回事务分析;可以识别在一个特定的时间段内所发生的所有变化,也可以对数据库表进行事务级恢复。
闪回事务查询的基础是依赖于撤销数据,它也是利用初始化参数UNDO_RETENTION来确定已经提交的撤销数据在数据库中的保存时间。flashback transaction query 可实现撤销处理,因为可以从flashback_transaction_query视图中获得事务的历史操作及撤销语句,也就是说,我们可以审计一个事务到底做了什么,也可以撤销一个已经提交的事务。
13-闪回数据归档技术有什么用?
闪回数据归档技术:通过该技术可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要使用UNDO,在有审计需要的环境下,或者是安全性特别重要的高可用数据库中,是一个非常好的特性。缺点是如果该表变化很频繁,则对空间的要求可能很高。