Oracle基于时间点的恢复(转载)

it2024-11-01  15

Oracle基于时间点的恢复 2010-10-19 18:43

Oracle基于时间点的恢复能够精确到什么样的精度?这是一个需要关心的问题。

以下测试用于进行一点说明。

1.首先做好冷备份2.创建测试数据D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on Mon Jan 17 11:56:43 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

11:56:44 SQL> startupORACLE instance started.

Total System Global Area 101785428 bytesFixed Size 454484 bytesVariable Size 75497472 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytesDatabase mounted.Database opened.

11:57:01 SQL> create table test (name varchar2(20));

Table created.

Elapsed: 00:00:00.0411:57:23 SQL> insert into test values('aaaaaaaaaaaaaaaaaaaa');

1 row created.

Elapsed: 00:00:00.0011:57:23 SQL> insert into test values('bbbbbbbbbbbbbbbbbbbb');

1 row created.

Elapsed: 00:00:00.0011:57:23 SQL> insert into test values('cccccccccccccccccccc');

1 row created.

Elapsed: 00:00:00.0011:57:24 SQL> commit;

Commit complete.

Elapsed: 00:00:00.0011:57:28 SQL>--注意这个时间,是Commit完成时间

11:57:29 SQL> drop table test;

Table dropped.

Elapsed: 00:00:00.0711:57:34 SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.11:57:45 SQL> exitDisconnected from Oracle9i Enterprise Edition Release 9.2.0.6.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.6.0 - Production

3.恢复备份数据保留当前日志

D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on Mon Jan 17 11:58:04 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

11:58:04 SQL> startup mount;ORACLE instance started.

Total System Global Area 101785428 bytesFixed Size 454484 bytesVariable Size 75497472 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytesDatabase mounted.

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

11:58:15 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

Elapsed: 00:00:00.0011:58:17 SQL> recover database until time '2005-01-17 11:57:28';Media recovery complete.

recover database until time '2010-10-19 18:25:03';

--恢复到提交完成时刻

11:58:33 SQL> alter database open resetlogs;

Database altered.

Elapsed: 00:00:05.0811:58:46 SQL> select * from test;

no rows selected

Elapsed: 00:00:00.00

--注意此时数据没有被恢复。--也就是说,落在了提交之前

4.第二个测试

D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on Mon Jan 17 11:48:50 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

11:48:50 SQL> startupORACLE instance started.

Total System Global Area 101785428 bytesFixed Size 454484 bytesVariable Size 75497472 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytesDatabase mounted.Database opened.11:49:03 SQL> create table test (name varchar2(20));

Table created.

Elapsed: 00:00:00.0411:49:32 SQL> insert into test values('aaaaaaaaaaaaaaaaaaaa');

1 row created.

Elapsed: 00:00:00.0011:49:32 SQL> insert into test values('bbbbbbbbbbbbbbbbbbbb');

1 row created.

Elapsed: 00:00:00.0011:49:32 SQL> insert into test values('cccccccccccccccccccc');

1 row created.

Elapsed: 00:00:00.0011:49:32 SQL> commit;

Commit complete.

Elapsed: 00:00:00.0011:49:34 SQL>--注意这里是提交时间11:49:34 SQL>11:49:35 SQL>--等待时间流逝一秒11:49:36 SQL>11:49:37 SQL> drop table test;

Table dropped.

Elapsed: 00:00:00.0611:49:44 SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.11:49:54 SQL> exitDisconnected from Oracle9i Enterprise Edition Release 9.2.0.6.0 - ProductionWith the Partitioning, OLAP and Oracle Data Mining optionsJServer Release 9.2.0.6.0 - Production

D:\>sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.6.0 - Production on Mon Jan 17 11:50:42 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to an idle instance.

11:50:42 SQL> startup mount;ORACLE instance started.

Total System Global Area 101785428 bytesFixed Size 454484 bytesVariable Size 75497472 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytesDatabase mounted.11:50:59 SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

Elapsed: 00:00:00.0011:51:20 SQL> recover database until time '2005-01-17 11:49:35';Media recovery complete.

--此时恢复到提交一秒之后

11:51:22 SQL> alter database open resetlogs;

Database altered.

Elapsed: 00:00:03.0911:51:32 SQL> select * from test;

NAME--------------------aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc

Elapsed: 00:00:00.00

--数据得以恢复

结论:Oracle能够恢复的时间精度为1秒,但是在Oracle数据库内部,用以产生SCN的时间点有更为精确的精度。所以,如果你指定秒级恢复,如11:57:28,那么秒后的精度被置00,反而就落在了提交之前。(猜测)而等待下一秒来到时,这种情况就不会出现了。

转载自: http://hi.baidu.com/%C9%E1%B5%C30710/blog/item/874337532d2e2c010cf3e3b6.html

转载于:https://www.cnblogs.com/wuhenke/archive/2010/10/28/1863580.html

相关资源:数据结构—成绩单生成器
最新回复(0)