WEB开发网
开发学院数据库Oracle Oracle 11g闪回数据归档新功能解析 阅读

Oracle 11g闪回数据归档新功能解析

 2008-12-15 13:01:44 来源:WEB开发网   
核心提示: 接下来,我在表HR.APPLICANTS上使用默认FBDA开启了闪回数据归档跟踪然后,Oracle 11g闪回数据归档新功能解析(5),我对HR.DEPARTMENTS,HR.JOB_HISTORY和OE.CUSTOMERS表开启了闪回数据归档跟踪,并使用ALTER SYSTEM SET

接下来,我在表HR.APPLICANTS上使用默认FBDA开启了闪回数据归档跟踪

然后,我对HR.DEPARTMENTS,HR.JOB_HISTORY和OE.CUSTOMERS表开启了闪回数据归档跟踪,为它们的历史数据选择了不同的FBDA.

最后,为了显示如何在表上中断FBDA跟踪,我再次在OE.CUSTOMERS 表上使用了ALTER TABLE NO FLASHBACK ARCHIVE;命令。

闪回数据归档:历史数据和元数据

Oracle 11g在FBDA中存储数据时没有“重新设计车轮”,每个启用FBDA的表使用三个简单的表结构,每个都以<源表所有者>.SYS_FBA_<目的>_格式命名,如表1所示。这些表中的数据可以直接查询,对于那些想一探Oracle 11g是如何管理FBDA基础结构的人来说非使用这些表不可。

表1.闪回数据归档:历史数据存储

Oracle 11g闪回数据归档新功能解析

为了便于解说,我首先在HR.APPLICANTS表上使用DML语句对其做了一个改变,然后我清洗了数据库缓冲区,并使用ALTER SYSTEM SET UNDO_TABLESPACE=…… SCOPE=BOTH; 命令将UNDO过程切换到一个不同的表空间上,请看下面的代码:

-- 对HR.APPLICANTS表做一些改变以便在对应的FBDA对象中自动产生"delta"记录,对最接近1000美元的申请者申请的薪水进行四舍五入
  UPDATE hr.applicants
  SET salary_desired = ROUND(salary_desired, -3)
  WHERE MOD(applicant_id,5) = 0;
  COMMIT;
  -- 对最接近100美元的申请者申请的薪水进行四舍五入
  UPDATE hr.applicants
  SET salary_desired = ROUND(salary_desired, -2)
  WHERE MOD(applicant_id,5) <> 0
  AND MOD(applicant_id,3) = 0;
  COMMIT;
  -- 现在清空数据库缓冲区和当前UNDO表空间的内容,确保闪回版本查询从闪回数据归档中返回HR.APPLICANTS表的内容
  DROP TABLESPACE smallundo INCLUDING CONTENTS AND DATAFILES;
  CREATE UNDO TABLESPACE smallundo
  DATAFILE '/u01/app/oracle/oradata/ORCL/tsp_smallundo01.dbf'
  SIZE 2M;
  ALTER SYSTEM CHECKPOINT;
  ALTER SYSTEM FLUSH BUFFER_CACHE;
  ALTER SYSTEM SET UNDO_TABLESPACE = 'SMALLUNDO' SCOPE=BOTH;
  TTITLE 'Sample Data from Flashback Data Archives|(From SYS_FBA_HIST_73218)'
  COL applicant_id FORMAT 99999 HEADING 'Appl|ID'
  COL endscn FORMAT 9999999 HEADING 'Ending|SCN'
  COL last_name FORMAT A20 HEADING 'Last Name'
  COL gender FORMAT A2 HEADING 'G|N|D|R'
  COL salary_desired FORMAT 999999.99 HEADING 'Salary|Desired'
  COL job_desired FORMAT A10 HEADING 'Job|Desired'
  SELECT
  applicant_id
  ,endscn
  ,last_name
  ,gender
  ,salary_desired
  ,job_desired
  FROM HR.SYS_FBA_HIST_73218
  WHERE applicant_id < 10
  ORDER BY applicant_id, endscn;
  TTITLE OFF
  TTITLE 'Sample Data from HR.APPLICANTS|(Between Time Periods)'
  COL applicant_id FORMAT 99999 HEADING 'Appl|ID'
  COL versions_endscn FORMAT 9999999 HEADING 'Ending|SCN'
  COL last_name FORMAT A20 HEADING 'Last Name'
  COL gender FORMAT A2 HEADING 'G|N|D|R'
  COL salary_desired FORMAT 999999.99 HEADING 'Salary|Desired'
  COL job_desired FORMAT A10 HEADING 'Job|Desired'
  SELECT
  applicant_id
  ,VERSIONS_ENDSCN
  ,last_name
  ,gender
  ,salary_desired
  ,job_desired
  FROM hr.applicants
  VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2008-12-04 04:28','yyyy-mm-dd hh24:mi')
  AND TO_TIMESTAMP('2008-12-04 04:55','yyyy-mm-dd hh24:mi')
  WHERE APPLICANT_ID < 10
  ORDER BY applicant_id, versions_endscn;
  TTITLE OFF

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Oracle 数据 归档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接