环境:windows xp,oracle9i
操作:执行oracle基于时间的恢复
1、先冷备份所有数据文件和控制文件
2、startup
3、表中增加一条记录
4、SHUTDOWN IMMEDIATE;
5、从冷备份中拷贝回所有数据文件
6、startup mount
7、recover database until time '2009-03-30:11:45:00';
显示:
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'D:\ORACLE\ORADATA\XUJIE\SYSTEM01.DBF'请问:如何解决
操作:执行oracle基于时间的恢复
1、先冷备份所有数据文件和控制文件
2、startup
3、表中增加一条记录
4、SHUTDOWN IMMEDIATE;
5、从冷备份中拷贝回所有数据文件
6、startup mount
7、recover database until time '2009-03-30:11:45:00';
显示:
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'D:\ORACLE\ORADATA\XUJIE\SYSTEM01.DBF'请问:如何解决
alter database open;
如果只备份数据文件和控制文件也是打开的,你先
start mount;
select checkpoint_change# from v$datafile;
select checkpoint_change# from v$database;
alter database recover automatic datafile 1
alter database open resetlogs;
如果是非归档,就只有还是把控制文件也恢复过来,而且不能做until time的还原,只能还原到冷备的时间点。
首先表示感谢.
数据库是归档模式。请问还原时,1、除了拷贝回全部数据文件,还要拷贝回控制文件吗?2、是拷贝回全部数据文件,还是只拷贝回要时间恢复的部分数据文件?
如果是归档模式,可以拷贝回控制文件进行恢复,利用rman恢复是要做几个动作的,
首先restore,恢复数据文件,
再recover,产生redolog,tmp等数据文件,
recover的时候指定一个时间参数即可恢复到一个时间点,前提是你的归档文件是完整的
allocate channel c1 type disk;
allocate channel c2 type disk;
set until time='2007-11-09:11:44:00';
restore database;
recover database;
alter database open resetlogs;
}
archive log list
看下提示,主要看下存档终点是哪个文件夹
或者
show parameter log_archive_dest_n(注:n换成1-10)
看下VALUE列的值,如果是空值,那归档文件估计就没
这样的话,重做日志文件应该已经被覆盖了
select scn,time_dp from sys.smon_scn_time where time_dp like to_date('2009 4 09','yyyy-mm-dd');可以通过系统表smon_scn_time查询scn和时间的关系
SQL> select versions_starttime,versions_startscn,versions_endscn from test versi
ons between timestamp minvalue and maxvalue;
首先表示感谢.
能解释一下9i与10g的区别吗?
----------
2308386SQL> select scn_to_timestamp(2308386) from dual;SCN_TO_TIMESTAMP(2308386)
---------------------------------------------------------------------------
15-APR-09 10.10.26.000000000 PMSQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';Session altered.SQL> select scn_to_timestamp(2308386) from dual;SCN_TO_TIMESTAMP(2308386)
---------------------------------------------------------------------------
15-APR-09 10.10.26.000000000 PMSQL> select timestamp_to_scn(to_date('2009-04-15 10:10:26','yyyy-mm-dd hh24:mi:ss')) from dual;TIMESTAMP_TO_SCN(TO_DATE('2009-04-1510:10:26','YYYY-MM-DDHH24:MI:SS'))
----------------------------------------------------------------------
2283500
首先表示感谢.
我在执行select scn_to_timestamp(2308386) from dual; 时,报如下错误,请指导. select scn_to_timestamp(2308386) from dual
*
第 1 行出现错误:
ORA-00904: "SCN_TO_TIMESTAMP": 无效的标识符
9i要获取这个,非得使用logmnr
前提你要先分析log
下面命令获得, 系统当前的SCN. 如果你计划在一个时间点模拟损坏数据库,可以先执行,
获取SCN后记忆下来.select checkpoint_change# from v$database;
====================================================================================
Inthirties关注Oracle数据库 优化,安全,备份,恢复,迁移如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
QQ群: 85837884(注明:数据库)
电子邮件:[email protected]
网站: http://www.inthirties.com
首先表示感谢.
“select checkpoint_change# from v$database; ”只能查询现在的SCN号,我需要过去某一时间的SCN号,请问如何得到?
1)建立一个记录SCN,时间的对照表,把上述SQL写成为一个PROCEDURE. 执行写入.
2)建立JOB,每5分钟定时执行.这样你就可以得到时间和SCN的对照了. 至于ORACLE自身,可能没有一个特定的地方保存这些资料,没有意义的.
即使有,也是一个特定的功能临时保存,例如STATSPACK等包的定时运行.无论做技术还是其他,需要灵活处理,不要耗到一个地方了.谢谢!
根据系统当前的SCN号推测错误操作的SCN,系统有一个函数用于转换SCN和时间的,不过9i的不是太准确,具体可以baidu或者google一下举个例子:
select current_scn from v$database;一般情况下还是用基于时间点的恢复较多,SCN不太容易得到确切的
这个查询出来的是database的scn号,如果基于scn恢复的话,这个没有太大的意义。我们来查scn来恢复的话,可以用过dump log,bloc或者根据rman里记录的scn号来做,比较有实际意义了。
首先表示感谢。
“用过dump log,bloc或者根据rman里记录的scn号来做”,能具体讲一下吗?
====================================================================================
Inthirties关注Oracle数据库 优化,安全,备份,恢复,迁移 如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
QQ群: 85837884(注明:数据库)
电子邮件:[email protected]
网站: http://www.inthirties.com