欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入 oracle href=http://search.e800.com.cn/oracle target=_blank alt=oracle> oracle 9i引入的闪回查询功能显示前一个时间点的查询结果。但是,表本身并没有改变。 oracle 10g 增强了闪回功能,可
欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入
oracle href=http://search.e800.com.cn/oracle target=_blank alt=oracle>oracle 9i引入的闪回查询功能显示前一个时间点的查询结果。但是,表本身并没有改变。oracle 10g增强了闪回功能,可以永久闪回一个表格。现在oracle 10g第二版通过增加指定的恢复点,使这一过程更加方便。
存储
应用恢复点不必知道准确的scn。恢复点建立后,它即恢复当前scn。因此,使用恢复点名称等同于使用对应的scn。
create restore point(创建恢复点)命令的语法很简单:
create restore point restore_point_name;
flashback any table或select any dictionary权限需要建立一个正常(无保证)的恢复点。一旦恢复点不再需要,对应的drop restore point命令就将它删除。
列表a显示向oe模式提供的正确许可,建立一个恢复点,然后在一个错过正确where子句的错误update后建立一个flashback table。
sql> connect / as sysdba
connected.
sql> grant select any dictionary to oe;
grant succeeded.
sql> connect oe/oe
connected.
sql> -- tables must have row movement enabled to flash back
sql> alter table warehouses 2 enable row movement;
table altered.
sql> create restore point my_update;
restore point created.
sql> column name format a25
sql> column time format a32
sql>
sql> select name, scn, time,
guarantee_flashback_database 2 fromv$restore_point;
name scn time gua
------------------------- ---------- ------------------------------
my_update 734934 10-aug-06 03.32.29.000000000 pm no
sql> update warehouses 2 set warehouse_name = ''bellevue, wa'';
9 rows updated.
sql> commit;
commit complete.
sql> select warehouse_id, warehouse_name 2 from warehouses;
warehouse_id warehouse_name
------------ -----------------------------------
1 bellevue, wa 2 bellevue, wa 3 bellevue, wa 4 bellevue,
wa 5 bellevue, wa 6 bellevue, wa 7 bellevue, wa 8 bellevue,
wa 9 bellevue, wa 9 rows selected.sql> connect / as sysdba connected.
sql> grant select any dictionary to oe;
grant succeeded.
sql> connect oe/oe
connected.
sql> -- tables must have row movement enabled to flash back
sql> alter table warehouses 2 enable row movement;
table altered.
sql> create restore point my_update;
restore point created.
sql> column name format a25
sql> column time format a32
sql>
sql> select name, scn, time,
guarantee_flashback_database 2 fromv$restore_point;
name scn time gua
------------------------- ---------- -------------------------------
my_update 734934 10-aug-06 03.32.29.000000000 pm no
sql> update warehouses 2 set warehouse_name = ''bellevue, wa'';
9 rows updated.
sql> commit;
commit complete.
sql> select warehouse_id, warehouse_name 2 from warehouses;
warehouse_id warehouse_name
------------ -----------------------------------
1 bellevue, wa 2 bellevue, wa 3 bellevue,
wa 4 bellevue, wa 5 bellevue, wa 6 bellevue, wa 7 bellevue,
wa 8 bellevue, wa 9 bellevue, wa 9 rows selected.
sql> flashback table warehouses 2 to restore point my_update;
flashback complete.
sql> select warehouse_id, warehouse_name 2 from warehouses;
warehouse_id warehouse_name
------------ -----------------------------------
1 southlake, texas 2 san francisco 3 new jersey 4 seattle,
washington 5 toronto 6 sydney 7 mexico city 8 beijing 9 bombay
9 rows selected.
sql> flashback table warehouses 2 to restore point my_update;
flashback complete.
sql> select warehouse_id, warehouse_name 2 from warehouses;
warehouse_id warehouse_name
------------ -----------------------------------
1 southlake, texas 2 san francisco 3 new jersey 4 seattle,
washington 5 toronto 6 sydney 7 mexico city 8 beijing 9 bombay
9 rows selected.
列表a
恢复点存储在控制文件中,所以即使数据库关闭(安装好,但未开),它们仍然有效。这意味着你还可在flashback database命令中使用它们。
作者:bob watkins(ocp、mcdba、mcse、mct)是一位有25年经验的计算机专业人士,从事过技术培训师、顾问与数据库管理员等职。