Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103667950
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-19 15:36:32

出处:赛迪网

在10gR2中,Oracle通过重新存储点简化了这个过程。一个重新存储点就是一个用户定义的与数据库PIT相关连的名字,可以在时间戳或者SCN中使用。可以认为重新存储点是一个redo历史的参考标记。重新存储点保留在控制文件中,直到重新存储点被删除或者重现日志被删除。第二个例子保证了重现数据库对于恢复是可用的。
create restore point my_restore_point;

Operation 206 succeeded.

或者创建重新存储点my_restrore_point来保证重现数据库;

注意:重新存储点并不会保证所有的事务都在那个时间点上提交。它不应该与DB2的关系型数据库管理系统中的静默点混淆了。

模拟数据库损坏

70. 模拟数据库损坏
71. insert into my_table values (2);
72. 
73. 1 row created.
74. 
75. commit;
76. 
77. 提交完成
78. 判断数据库是否由于人为错误导致逻辑损坏。
79. select c1, ora_rowscn from my_table;
80. 
81.         C1 ORA_ROWSCN
82. ---------- ----------
83.          1    1320954
84.          2    1321231

注意:在默认情况下,Oracle在时钟级别上检索SCN。当然,时钟当中的所有行都有一样的SCN。激活行级别的SCN检索,可以在CREATE TABLE命令中使用ROWDEPENDENCIES关键字。

检验重现数据库是可能的。 判断你可以重现的最早的时间。

SELECT OLDEST_FLASHBACK_SCN
      ,to_char(OLDEST_FLASHBACK_TIME,'YYYY-MM-DD:HH24:MI:SS') 
      "OLDEST_FLASHBACK_TIME"
  FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
             1319629 2006-09-23:19:51:56

判断你是否有重新存储点。

select name, scn, time from v$restore_point;

NAME                    SCN TIME
---------------- ---------- ----------------------------
MY_RESTORE_POINT 1321136 23-SEP-06 08.16.24.000000000 PM

这里是一些你感兴趣的视图。

重现数据库

你可以在SQL*Plus 或者 RMAN中执行重现数据库。重现数据库可以是基于修改和重新存储点的时间。RMAN提供了额外的基于选项的日志顺序。

使用先前创建的重新存储点来重现数据库。

SQL> shutdown immediate;

Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
.
.
.
Database mounted.

SQL> flashback database to restore point my_restore_point;

Flashback complete.

在警告日志中检查重现数据库消息

.
.
.
Sat Sep 23 20:38:11 2006
flashback database to restore point my_restore_point
Sat Sep 23 20:38:12 2006
Flashback Restore Start
Flashback Restore Complete
Flashback Media Recovery Start
 parallel recovery started with 2 processes
Sat Sep 23 20:38:14 2006
Recovery of Online Redo Log: Thread 1 Group 2 Seq 33 Reading mem 0
  Mem# 0 errs 0: 
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG
Sat Sep 23 20:38:16 2006
Incomplete Recovery applied until change 1321137
Flashback Media Recovery Complete
Completed: flashback database to restore point my_restore_point

验证你的数据库恢复到你想要的状态如果你不满意,你可以再次重现,把数据库向前恢复,直到或者执行了完全恢复:recover database.注意:重现数据库可以通过RESETLOGS执行。

SQL> alter database open read only;

Database altered.

SQL> select c1, ora_rowscn from my_table;

        C1 ORA_ROWSCN
---------- ----------
         1    1321002

为一般用途打开数据库

对我们的恢复满意了之后,为了一般用途打开数据库。

SQL> shutdown;

Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.
.
.
.
Database mounted.

SQL> alter database open resetlogs;
Database altered.

结论

重现数据库将会成为我最喜欢的Oracle10g特性之一。无论你是否纠正了用户的错误,只是看看先前的数据库状态,或者在衰退测试之后回到测试环境中,这个特性都是减少恢复时间的最好策略。我们看到这项技术很容易使用,比传统的恢复更快,并且最好的是,它是免费的!我希望你也会认为重现数据库是可用性体系结构中的一项主要组件。

阅读(279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~