- 浏览: 76405 次
- 性别:
- 来自: 广州
文章分类
最新评论
转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
这个参数的单位是分钟。指定的是一个数据库可以使用闪回恢复的时间,这个时间越长,需要的闪回恢复区域就月大。
SQL> show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
3、使用ALTER DATABASE FLASHBACK ON;将数据库启动为闪回数据库状态。
ALTER DATABASE FLASHBACK ON;
这里需要注意的是数据库需要是在archivelog模式之下启动闪回数据库,并使用MOUNT EXCLUSIVE模式下运行的。
开启闪回数据库以后可以通过查询视图v$database的列flashback_on来查看闪回数据库是否开启。
SQL> select flashback_on from v$database;
FLA
---
YES
实例:
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database flashback on;
数据库已更改。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SQL> alter database open;
数据库已更改。
SQL>
关闭闪回数据库
关闭闪回数据库状态需要使用命令:
ALTER DATABASE FLASHBACK OFF;
SQL> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
NO
闪回数据库
闪回数据库由三种方式进行,一种是使用OEM的UI操作,二种是使用RMAN进行。三是使用SQL PLUS来实现。OEM在这里就不介绍了。
使用RMAN
将数据库恢复到一个时间点
RMAN> FLASHBACK DATABASE
2> TO TIME = TO_DATE
3> ('2002-12-10 16:00:00',
4> 'YYYY-MM-DD HH24:MI:SS');
将数据库闪回恢复到一个SCN
指定一个redo日志的SEQUENCE和THREAD号,作为闪回恢复的上限。这个功能是RMAN特有的。
使用SQL*Plus
将数据库恢复到一个时间点
将数据库闪回恢复到一个SCN
闪回数据库实例:
查询闪回数据库的状态
Oracle提供了三个视图有关于闪回数据库的
v$flashback_database_log
v$flashback_database_logfile
v$flashback_database_stat
排除某个表空间出闪回恢复数据库
使用命令将某个表空间排除出闪回数据库恢复。
ALTER TABLESPACE <ts_name> FLASHBACK {ON|OFF}
并可以通过查询视图v$tablespace的flashback_on来查看表空间的状态。
需要注意的问题
在以下的情况下是不能使用闪回数据库的:
n 控制文件被还原或者重新添加
n 表空间被删除
n 一个数据文件被收缩
Resetlogs和闪回(这个似乎容易出错。我做的时候就出现ORA-600的错误,后来解决办法就是重建控制文件恢复的。至今不知道为什么,以后有机会好好检查一下。)
每一次使用FLASHBACK DATABASE闪回数据库的时候,需要使用resetlogs打开数据库。假如在使用resetlogs打开数据库的时候,发现有错误的时候。只需要简单执行FLASHBACK DATABASE TO BEFORE RESETLOGS命令就能够将数据库安装并恢复到前像的(incarnation)最后的SCN。
闪回完成。 这个地方正常恢复,从后来的恢复的数据库上看也是恢复了数据。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [kcvcrv_fb_inc_mismatch], [0], [556264],
[598815894], [0], [609776], [598877589], []
但是这里为什么出现内部错误。
因为没有metalink帐号,也没有深究,在这里存档,以后查看
随后使用重建控制文件的重建日志文件来恢复数据库。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-00600: 内部错误代码, 参数: [kcvcrv_fb_inc_mismatch], [0], [556264],
[598815894], [0], [609776], [598877589], []
SQL> alter database backup controlfile to trace;
在mount状态下执行的这个语句。
数据库已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10" RESETLOGS ARCHIVELOG
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;
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
这个参数的单位是分钟。指定的是一个数据库可以使用闪回恢复的时间,这个时间越长,需要的闪回恢复区域就月大。
引用
SQL> show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
3、使用ALTER DATABASE FLASHBACK ON;将数据库启动为闪回数据库状态。
引用
ALTER DATABASE FLASHBACK ON;
这里需要注意的是数据库需要是在archivelog模式之下启动闪回数据库,并使用MOUNT EXCLUSIVE模式下运行的。
开启闪回数据库以后可以通过查询视图v$database的列flashback_on来查看闪回数据库是否开启。
引用
SQL> select flashback_on from v$database;
FLA
---
YES
实例:
引用
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> alter database flashback on;
数据库已更改。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SQL> alter database open;
数据库已更改。
SQL>
关闭闪回数据库
关闭闪回数据库状态需要使用命令:
引用
ALTER DATABASE FLASHBACK OFF;
SQL> select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------------
NO
闪回数据库
闪回数据库由三种方式进行,一种是使用OEM的UI操作,二种是使用RMAN进行。三是使用SQL PLUS来实现。OEM在这里就不介绍了。
使用RMAN
将数据库恢复到一个时间点
引用
RMAN> FLASHBACK DATABASE
2> TO TIME = TO_DATE
3> ('2002-12-10 16:00:00',
4> 'YYYY-MM-DD HH24:MI:SS');
将数据库闪回恢复到一个SCN
引用
RMAN> FLASHBACK DATABASE TO SCN=23565;
指定一个redo日志的SEQUENCE和THREAD号,作为闪回恢复的上限。这个功能是RMAN特有的。
引用
RMAN> FLASHBACK DATABASE
2> TO SEQUENCE=223 THREAD=1;
2> TO SEQUENCE=223 THREAD=1;
使用SQL*Plus
将数据库恢复到一个时间点
引用
SQL> FLASHBACK DATABASE
2 TO TIMESTAMP(SYSDATE-1/24);
2 TO TIMESTAMP(SYSDATE-1/24);
将数据库闪回恢复到一个SCN
引用
SQL> FLASHBACK DATABASE TO SCN 53943;
闪回数据库实例:
引用
SQL> conn test/test
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as test
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
609755
SQL> create table t as select * from all_objects where rownum < 11;
Table created
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
609841
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
T
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as test
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
609755
SQL> create table t as select * from all_objects where rownum < 11;
Table created
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
609841
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
T
引用
SQL>
现在数据库中有一个表t,然后进行恢复。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 2
下一个存档日志序列 4
当前日志序列 4
SQL> flashback database to scn 609755
2 ;
flashback database to scn 609755
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
SQL> conn /as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 71305028 bytes
Database Buffers 8388608 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to scn 609755;
闪回完成。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
数据库已更改。
SQL> conn test/test
已连接。
SQL> select table_name from user_tables;
未选定行
现在数据库中有一个表t,然后进行恢复。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 2
下一个存档日志序列 4
当前日志序列 4
SQL> flashback database to scn 609755
2 ;
flashback database to scn 609755
*
第 1 行出现错误:
ORA-38757: 要闪回数据库, 数据库必须已装载但不能打开。
SQL> conn /as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 71305028 bytes
Database Buffers 8388608 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to scn 609755;
闪回完成。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
数据库已更改。
SQL> conn test/test
已连接。
SQL> select table_name from user_tables;
未选定行
查询闪回数据库的状态
Oracle提供了三个视图有关于闪回数据库的
v$flashback_database_log
v$flashback_database_logfile
v$flashback_database_stat
排除某个表空间出闪回恢复数据库
使用命令将某个表空间排除出闪回数据库恢复。
ALTER TABLESPACE <ts_name> FLASHBACK {ON|OFF}
并可以通过查询视图v$tablespace的flashback_on来查看表空间的状态。
需要注意的问题
在以下的情况下是不能使用闪回数据库的:
n 控制文件被还原或者重新添加
n 表空间被删除
n 一个数据文件被收缩
Resetlogs和闪回(这个似乎容易出错。我做的时候就出现ORA-600的错误,后来解决办法就是重建控制文件恢复的。至今不知道为什么,以后有机会好好检查一下。)
每一次使用FLASHBACK DATABASE闪回数据库的时候,需要使用resetlogs打开数据库。假如在使用resetlogs打开数据库的时候,发现有错误的时候。只需要简单执行FLASHBACK DATABASE TO BEFORE RESETLOGS命令就能够将数据库安装并恢复到前像的(incarnation)最后的SCN。
引用
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to before resetlogs;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
SQL> flashback database to before resetlogs;
闪回完成。 这个地方正常恢复,从后来的恢复的数据库上看也是恢复了数据。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-00600: 内部错误代码, 参数: [kcvcrv_fb_inc_mismatch], [0], [556264],
[598815894], [0], [609776], [598877589], []
但是这里为什么出现内部错误。
因为没有metalink帐号,也没有深究,在这里存档,以后查看
随后使用重建控制文件的重建日志文件来恢复数据库。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
ORA-00600: 内部错误代码, 参数: [kcvcrv_fb_inc_mismatch], [0], [556264],
[598815894], [0], [609776], [598877589], []
SQL> alter database backup controlfile to trace;
在mount状态下执行的这个语句。
数据库已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP NOMOUNT
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE 例程已经启动。
Total System Global Area 83886080 bytes
Fixed Size 1247420 bytes
Variable Size 67110724 bytes
Database Buffers 12582912 bytes
Redo Buffers 2945024 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10" RESETLOGS ARCHIVELOG
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;
发表评论
-
exp/imp命令详解
2010-12-23 16:16 876exp 引用 D:\>exp help=y Expor ... -
Oracle数据库三种标准的备份方法
2010-12-23 14:35 716Oracle数据库的三种标准的备份方法: 1.导出/导入 ... -
truncate能恢复
2010-12-22 15:40 1683Truncate的恢复相对delete表和drop表来说,要困 ... -
使用oracle 的闪回功能
2010-12-22 12:20 9101.查询是否打开了闪回功能 引用SQL> select ... -
Oracle Flashback 闪回功能--恢复错误的DML,DDL(Drop)操作
2010-12-22 12:13 1168人为的错误是数据库系 ... -
Oracle数据库联机热备份的原理简介
2010-12-22 11:10 877转http://oracle.chinaitlab.com/b ... -
oracle rman语法解析
2010-12-21 17:57 14351.@ 是执行由rman命令组成的一个文件,@/oracle/ ... -
oracle 备份和恢复基础
2010-12-21 17:31 673下图是oracle RMAN的语法图 RMAN关键字 AB ...
相关推荐
### Oracle 10g 闪回技术总结 Oracle 10g 引入了一系列闪回技术,极大地增强了数据库管理和恢复的能力。本文将详细介绍 Oracle 10g 的三种闪回技术:全库闪回、表被 DROP 后的闪回以及表被 DML 操作之后的闪回,并...
### Oracle 10g 闪回恢复区详解 #### 一、引言 随着数据库规模的不断增大和技术的发展,数据库的备份与恢复成为了确保数据安全的重要环节。Oracle 10g 引入了一项名为“闪回恢复区”(Flash Recovery Area)的新...
总结来说,Oracle 10g的闪回技术在“军卫一号”信息系统中的应用,极大地提升了数据管理和维护的效率,增强了系统的灾难恢复能力,同时也为医院信息系统的安全运行提供了有力保障。对于医院信息系统维护人员来说,...
总结来说,Oracle 10g的闪回查询是数据库管理的重要工具,它提高了数据恢复的效率和灵活性,同时也为数据分析和问题排查提供了便利。然而,正确使用和管理闪回查询需要对数据库内部机制有深入的理解,并考虑到安全性...
### Oracle 10g 回闪技术详解 #### 一、引言 Oracle 10g引入了一系列回闪(Flashback)技术,旨在提供一种快速恢复数据库至特定时间点的能力,而无需传统的备份和恢复过程。这些技术允许数据库管理员轻松地撤消数据...
### Oracle 10g 的闪回设置详解 在Oracle 10g中,闪回功能是一种非常重要的数据库恢复工具,它允许用户恢复到特定的时间点而不会丢失事务数据。但是,在使用这一强大功能时,可能会遇到一些问题,比如在启动过程中...
总结来说,Oracle Database 11g的闪回技术提供了一套全面的数据恢复解决方案,帮助用户在不影响数据库正常运行的情况下,快速恢复误操作或修复数据错误。通过理解和熟练掌握这些技术,数据库管理员可以大大提高系统...
### Oracle 10g 闪回机制详解 #### 一、引言 在数据库管理过程中,数据的安全性和准确性至关重要。然而,在实际操作中难免会出现误操作的情况,比如错误地更新了数据或不小心删除了重要的表格。传统的事务处理机制...
自Oracle 11g开始,引入了闪回数据存档,这是一种持久化的闪回机制,可以长期保存被删除或更新的行,以便在需要时检索。FBDA对于满足合规性和审计需求非常有用。 7. **闪回恢复区**: 闪回恢复区是Oracle用来存储...
### 使用Oracle 10g的Flashback闪回功能快速恢复被删除的表 #### Oracle 10g Flashback 特性概述 Oracle Database 10g 引入了一项非常强大的特性——Flashback,该特性使得数据库管理员(DBA)能够轻松地恢复误删除...
本文将依据给定的实验手册内容,详细阐述Oracle 10G闪回功能的使用方法、工作原理及其在不同场景下的应用。 ### 闪回功能概述 Oracle的闪回功能允许用户回溯至数据库中的某一特定时间点或系统变更号(SCN),查看或...
除了上述方法,Oracle 10g还提供了归档日志和闪回技术来增强恢复能力。归档日志记录了数据库的所有更改,使得在发生问题后可以通过redo log进行前滚恢复。闪回功能则允许用户在特定时间点恢复整个数据库或单个表,...
随着Oracle 10g的发布,闪回技术得到进一步扩展,涵盖了闪回查询、闪回版本查询、闪回事务查询、闪回表、闪回删除和闪回数据库等多个方面。这些功能的实现主要基于撤销表空间(Undo Tablespace)的回滚信息和Oracle ...
在Oracle RAC(Real Application Clusters)环境下启用Flashback闪回功能是一项高级的数据库管理技术,它能够帮助数据库管理员在不丢失数据的情况下恢复到过去某一时间点的状态,这对于数据安全和灾难恢复至关重要。...
闪回数据库(Flashback Database)是Oracle 10g及以后版本引入的功能,它可以将整个数据库恢复到过去某个时间点的状态。为了实现这一目标,Oracle利用了多种机制和技术。 ##### 3.1 Flashback Log - **定义**:闪回...
- 介绍了Oracle 10g的闪回恢复技术。 - **重要特性**:能够在不需要恢复完整备份的情况下恢复数据。 **3.12 增加恢复的可能性:在每次批处理后提交** - 通过在每次批处理后提交事务,可以提高数据恢复的可能性。 - ...
这项技术自Oracle 9i版本开始引入,并在后续版本中逐渐增强和完善,特别是在Oracle 11g中,闪回技术的应用范围进一步扩大。 1. **闪回技术概述**: 闪回技术主要包括闪回数据库、闪回表、闪回查询、闪回版本查询、...
总结起来,Oracle Database 10g的闪回表特性提供了一种高效且安全的方法来处理意外删除的表,极大地降低了数据丢失的风险。通过合理配置数据库参数并充分利用闪回功能,数据库管理员可以更加自信地面对日常操作中的...
### Oracle 闪回技术详解 #### 一、概述 Oracle闪回技术是Oracle数据库中一项非常重要的特性,它主要用于逻辑错误的恢复,而非物理损坏的修复。这项技术可以帮助数据库管理员在遇到逻辑错误的情况下,比如误删数据...