最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

【赵渝强老师】Oracle的闪回数据归档

网站源码admin2浏览0评论

【赵渝强老师】Oracle的闪回数据归档

Oracle的闪回数据归档(Flashback Data Archive)的本质就是给表创建一个快照,便于用于保护重要表中的数据。视频讲解如下:

一、 闪回数据归档简介

闪回数据归档可以将表中的还原数据进行归档,从而提供全面的历史数据查询。因此这便引入一个新的概念:Oracle Total Recall,即Oracle全面回忆。闪回数据归档与归档日志是两个不同的概念。闪回数据归档是将还原数据的历史记录进行归档,可以用于对数据进行闪回和追溯查询;而归档日志是将重做日志的历史记录进行归档,可以用于保证恢复的连续性。

二、 【实战】启用闪回数据归档

在了解到了什么是Oracle数据库的闪回数据归档后,下面将通过一个具体是示例来演示如何使用闪回数据归档生成表的归档数据。

(1)使用数据库管理员登录数据,并创建新的表空间用于保存还原数据归档。

代码语言:sql复制
SQL> conn / as sysdba
SQL> create tablespace fda datafile '/home/oracle/fda01.dbf' size 100M;

(2)在新创建的表空间上创建数据归档。

代码语言:sql复制
SQL> create flashback archive fda1 tablespace fda retention 1 year;

# 这里的retention 1 year表示创建的数据归档将保留1年。

(3)将新创建的数据归档设置系统默认的数据归档。

代码语言:sql复制
SQL> alter flashback archive fda1 set default;

# 设置系统默认的数据归档这一步不是必须的。

(4)授予c##scott用户访问数据归档的权限。

代码语言:sql复制
SQL> grant flashback archive on fda1 to c##scott;

(5)切换到c##scott用户,并确定表c##scott.emp中的记录数。

代码语言:sql复制
SQL> conn c##scott/tiger
SQL> select count(*) from emp;

# 输出的信息如下:
COUNT(*)
----------
	14

(6)开启表c##scott.emp的数据归档。

代码语言:sql复制
SQL> alter table emp flashback archive fda1;

(7)记录当前的时间和SCN号。

代码语言:sql复制
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
    timestamp_to_scn(sysdate) SCN from dual;

# 输出的信息如下:
current time		   SCN
------------------- -------------------
2025-03-28 14:30:52    2769089

(8)执行一个误操作,不小心清空了表c##scott.emp中的数据。

代码语言:sql复制
SQL> truncate table emp;

(9)查看生成的数据归档。

代码语言:sql复制
SQL> select * from USER_FLASHBACK_ARCHIVE_TABLES;

# 开启表的数据归档后会在当前用户下自动生成一张表SYS_FBA_HIST_76659
# 该表用于保存表的数据归档信息。输出的信息的信息如下图所示。

(10)查看表SYS_FBA_HIST_76659的结构。

代码语言:sql复制
SQL> desc SYS_FBA_HIST_76659;

# 输出的信息如下:
 Name					Null?		Type
 --------------------- -------  -------------- 
 RID							VARCHAR2(4000)
 STARTSCN						NUMBER
 ENDSCN 						NUMBER
 XID							RAW(8)
 OPERATION						VARCHAR2(1)
 EMPNO							NUMBER(4)
 ENAME							VARCHAR2(10)
 JOB							VARCHAR2(9)
 MGR							NUMBER(4)
 HIREDATE						DATE
 SAL							NUMBER(7,2)
 COMM							NUMBER(7,2)
 DEPTNO 						NUMBER(2)

(11)查看表SYS_FBA_HIST_76659中的数据如下图所示。

(12)在员工表上执行一个简单的闪回查询。

代码语言:sql复制
SQL> select * from emp as of scn 2769089;

# 此时将从生成的数据归档中返回历史数据。这里的scn 2769089是在第(7)步中得到的。

(13)为确定数据来至数据归档,可以将第(12)步的SQL执行计划输出。执行下面的语句:

代码语言:sql复制
SQL> set pagesize 40
SQL> explain plan for select * from emp as of scn 2769089;
SQL> select * from table(dbms_xplan.display);

# 输出的信息如下图所示。

从上图可以看出,当查询员工表的数据时,对数据归档SYS_FBA_HIST_76659执行了全表扫描(TABLE ACCESS FULL)。

发布评论

评论列表(0)

  1. 暂无评论