读书人

10g闪来总结

发布时间: 2012-07-26 12:01:08 作者: rapoo

10g闪回总结
转http://litterbaby.itpub.net/post/16841/276210
Oracle从9i就有了闪回这个新功能,在Oracle 10g中这个功能被大大增强。在Oracle 9i中只是以闪回查询的形式查看某一时间点上的数据,就是某一时刻的数据的快照,而不是在两个时间点之间的被更改数据的运行状态的表示,在Oracle 10g中就提供了这样的功能。


优点


闪回应该说是一个技术革新,比传统意义上的恢复更快更加简单方便。传统意义上的恢复需要还原数据库和数据文件,而这些数据文件则是在前一阶段备份而来的。然后在通过数据库日值在数据文件上的前滚来实现数据的每一次改变。这样的过程相对而言是比较慢的。而闪回通过事务或者行的改变来构架闪回,只有数据的改变的前像和后像被存储。


闪回技术应用的范围


闪回技术恢复在Oracle 10g上提供了三个级别的恢复。我们可以根据不同的应用来实现不同的级别的数据库恢复实现。

数据库级

n Drop user (Flashback Database)

n Truncate table (Flashback Database)

n Batch job : partial change (Flashback Database)


表级

n Drop table (flashback drop)

n Update with wrong where clause (Flashback table)

n Compare current data against the data at some time in the past (Flashback Query)


事务级

Batch job runs twice, but you are unsure of the objects affected (Flashback Query)


需要的权限


由于需要使用不同的闪回版本则是需要不同的权限:

n Flashback Database:

SYSDBA database connection

n Flashback Table or Flashback Versions Query:

FLASHBACK ANY TABLE

Appropriate object privileges

n Flashback Transaction Query:

SELECT ANY TRANSACTION


闪回数据库


这个功能是非常强大的,在上面也介绍了,当发生错误使用drop user,删除用户这样的错误的时候,是必须使用数据库闪回来进行恢复的,这项功能能够使得快速将你的数据库返回到以前某个时间点上的状态,从而恢复你的数据库。能够使用这个功能实现逻辑数据实效的错误,在这里需要解释的是,在闪回恢复和通常的日志恢复的不同。

闪回恢复是将你现在的数据库回退到以前的某个时间点,主要目的是为了解决数据库上人为的逻辑错误,注意这是逻辑错误,意义就是说,是由于人为的错误,而发现的相对比较早,在闪回恢复的时间期限内。

而日志恢复则是将数据库还原到以前的某个时间点(实在你需要恢复的时间点之前的时间点),这里的根据你恢复的不同而还原,如果是只是恢复数据文件,只是需要还原这个数据文件。使用归档和联机日志文件将你的数据库应用到当前或者以前的某个时间点。主要目的是为了恢复物理上的错误。

闪回恢复数据库之所以说要比普通意义上的恢复快的原因就是因为,在闪回恢复数据库是没有还原这一说的。

闪回数据库也是通过应用日志来恢复数据库,只不过不是使用重做日志,而是使用的是闪回日志。


机制


由图上可以看到,闪回数据库使用的是一个新的日志:闪回数据库日志,Oracle数据库服务器定期在闪回数据库日志数据块的前像写入到日志文件中去。当进行闪回数据库恢复的时候,日志上的前像将被回滚应用在数据库的数据文件中。闪回数据库日志是被自动管理和添加到恢复区域的。当闪回数据库被开启的时候,会有一个新的恢复写进程RVWR被开启。


启动配置闪回数据库


1、 配置flash 恢复区域

2、 设置参数db_flashback_retention_target


这个参数的单位是分钟。指定的是一个数据库可以使用闪回恢复的时间,这个时间越长,需要的闪回恢复区域就月大。


2 MAXLOGFILES 16

3 MAXLOGMEMBERS 3

4 MAXDATAFILES 100

5 MAXINSTANCES 8

6 MAXLOGHISTORY 292

7 LOGFILE

8 GROUP 1 'E:ORACLEORADATAORA10REDO01.LOG' SIZE 10000K,

9 GROUP 2 'E:ORACLEORADATAORA10REDO02.LOG' SIZE 10000K,

10 GROUP 3 'E:ORACLEORADATAORA10REDO03.LOG' SIZE 10000K

11 -- STANDBY LOGFILE

12 DATAFILE

13 'E:ORACLEORADATAORA10SYSTEM01.DBF',

14 'E:ORACLEORADATAORA10UNDOTBS01.DBF',

15 'E:ORACLEORADATAORA10SYSAUX01.DBF',

16 'E:ORACLEORADATAORA10USERS01.DBF'

17 CHARACTER SET ZHS16GBK

18 ;


控制文件已创建。


SQL> -- Commands to re-create incarnation table

SQL> -- Below log names MUST be changed to existing filenames on

SQL> -- disk. Any one log file from each branch can be used to

SQL> -- re-create incarnation records.

SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC

HIVELOG2006_08_19O1_MF_1_1_%U_.ARC';

SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC

HIVELOG2006_08_19O1_MF_1_1_%U_.ARC';

SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC

HIVELOG2006_08_19O1_MF_1_1_%U_.ARC';

SQL> -- Recovery is required if any of the datafiles are restored backups,

SQL> -- or if the last shutdown was not normal or immediate.

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE

ORA-00279: ?? 609775 (? 08/19/2006 10:40:41 ??) ???? 1 ????

ORA-00289: ??:

E:ORACLEFLASH_RECOVERY_AREAORA10ARCHIVELOG2006_08_19O1_MF_1_4_%U_.ARC

ORA-00280: ?? 609775 (???? 1) ??? #4 ?



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

-- Database can now be opened zeroing the online logs.

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ALTER DATABASE OPEN RESETLOGS;

ORA-00308: ???????? 'ALTER'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

-- Commands to add tempfiles to temporary tablespaces.

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

-- Online tempfiles have complete space information.

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

-- Other tempfiles may require adjustment.

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ALTER TABLESPACE TEMP ADD TEMPFILE 'E:ORACLEORADATAORA10TEMP01.DBF' REUSE;

ORA-00308: ???????? 'ALTER'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

-- End of tempfile additions.

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

--

ORA-00308: ???????? '--'

ORA-27041: ??????

OSD-04002: ????????????

O/S-Error: (OS 2) ??????????????????????



指定日志: {<RET>=suggested | filename | AUTO | CANCEL}


已应用的日志。

完成介质恢复。

SQL> ALTER DATABASE OPEN RESETLOGS;


数据库已更改。


SQL> -- Commands to add tempfiles to temporary tablespaces.

SQL> -- Online tempfiles have complete space information.

SQL> -- Other tempfiles may require adjustment.

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'E:ORACLEORADATAORA10TEMP01.DBF' REU

SE;


表空间已更改。


SQL>

这时候数据库正常的。





闪回版本查询


闪回版本查询就是指能够在数据库上查询某一时间点或者用户指定的特定的SCN的版本数据。在查询的时候,需要使用versions子句来使用在两个时间点之间的所有版本。通过闪回提取的是行的历史,这里的行的历史是事务行的改变。所有只是查询已经提交的行,没有提交的行版本并不会被查询。

伪列

VERSIONS_OPERATION

VERSIONS_XID

VERSIONS_ENDTIME

VERSIONS_ENDSCN

VERSIONS_STARTTIME

VERSIONS_STARTSCN

SELECT [Pseudocolumns]…

FROM …

VERSIONS BETWEEN

{SCN|TIMESTAMP {expr|MINVALUE} AND

{expr|MAXVALUE}}

[AS OF {SCN|TIMESTAMP expr}]

WHERE [Pseudocolumns…]…



需要注意的问题

VERSIONS子句不能用于以下情况的查询:

n 外部表

n 临时表

n Fixed表

n 视图

VERSIONS子句不能跨DDL查询,意思就是在使用VERSIONS子句的时候,如果对这个表有DDL操作的时候,只能查看DDL之后的信息。当段被收缩操作的时候也是被排除出去的。


实例:

SQL> create table rates (currency varchar2(4) not null,rate number(15,10));


Table created


SQL> insert into rates values('euro',1.1012);


1 row inserted


SQL> update rates set rate = 1.1014;


1 row updated


SQL> commit;


Commit complete


SQL> update rates set rate = 1.1013;


1 row updated


SQL> commit;


Commit complete


SQL> delete rates;


1 row deleted<





分类: ( Oracle 10g ) :: 评论 (1) :: 静态链接网址 :: 引用 (0)
有关flashback database to before incarnation 的ORA-600错误 [回复]


在报了ORA-600错误后,查看alert_sid.log文件,可以发现报了以下的错误
---------------------------
Database incarnation does not match that in flashback
database logs. You can workaround this internal error and
restart database by turning flashback off first.
Wed Nov 14 16:37:12 2007
Errors in file d:oracleproduct10.2.0adminzyyudumpzyy_ora_3824.trc:
ORA-00600: 内部错误代码, 参数: [kcvcrv_fb_inc_mismatch], [0], [1], [637272271], [0], [964437], [638641226], []

可以看到,是由于化身(incarnation)的不同,需要先把flashback disable,然后再打开

步骤:
sql> shutdown immediate
sql> startup mount
sql> alter database flashback off;
sql> alter database open resetlogs;

读书人网 >其他数据库

热点推荐