如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:[email protected]
使用flashback 恢复数据可以使用多种方法完成,可以使用最后一条DROP 语句, SCN 或者实际的时间标记。
FLASHBACK TABLE SQUIRRELPATCH TO BEFORE DROP;
FLASHBACK TABLE SQUIRRELPATCH TO SCN 2202666520;
FLASHBACK TABLE SQUIRRELPATCH to timestamp to_timestamp (’21/03/2006 18:51:06′, ‘mm/dd/yyyy hh24:mi:ss’);
使用flashback ?AS? 查询,相当容易地选择某一时间的数据,只要不是很久之前的,对取证调查员来书哦,查阅某一时间的数据版本是强有力的,将数据恢复到之前最近的状态的最简便方法是使用Flashback 和 Oracle回收站。
但是还存在精确的问题。 实际上Oracle 不记录完整的时间线,每五分钟加入一个新的SCN ,最后一个被取走,使用时间标记得到大约5分钟的精度。随着时间的保持,10g 仍旧比之前的版本更精确,这意味着误差的主要来源可能是计算机硬件和涉及协议(如NTP)的网络时间同步问题。关于时间误差和误差对Oracle Forensics影响的更多细节,请参考第 6.7节。
同时,只要剩下的还原段允许,Oracle 只能闪回到过去的一个点,这由重做保留期控制,通常五天左右,该查询应有助于确定,可用于闪回目标的最古老的时间。
SQL> select OLDEST_FLASHBACK_TIME from V$FLASHBACK_DATABASE_LOG;
为恢复到比这更久的之前的状态,我们需要使用LogMiner (后面会提到)。关系模式倾向于为一件事物的每个实例保持单行,例如,一个雇员表中雇员的单行。 这对组织数据集是有用的,但对随着时间组织每一个元组的信息是无益的,例如,如果雇员离开了公司,然后又回来了,该数据可能会引起问题。
使用下列的关键词PURGE,数据可能被用户真正删除。
DROP TABLE test PURGE; –this will really delete table test.
PURGE RECYCLEBIN; –this will purge the users recyclebin
PURGE TABLE TEST; –this will delete table test from recyclebin
PURGE TABLE “BIN$04LhcpndanfgMAAAAAANPw==$0”; — purge by new name.
purge index in_test3_03;–you can purge indexes
PURGE TABLESPACE USERS; –purge by tablespace
PURGE TABLESPACE USERS USER SCOTT;–user within tablespace
PURGE DBA_RECYCLEBIN;–purge all objects in recyclebins
Flashback 和 LogMiner 在在线重做日志和归档重做日志上是相互依赖的,所以应该注意保证这些自愿的安全,这些都应该被作为事件处理过程的一部分进行备份。
在重做日志上使用的LogMiner可用于从归档重做日志中高效地浏览和观察删除的历史数据。
使用 LogMiner 查询归档重做日志:
运行LogMiner的准确的事件顺序如下:
1. 开启补充日志(可选)
2. 指定重做日志文件和它们的路径
3. 分配一个字典
4. 开始 LogMiner
5. 读取关于过去状态的数据,恢复数据库
6. 停止 LogMiner
对上述事件顺序的细节补充如下。
1. 为了使用LogMiner ,补充日志应该使用下列命令启用。
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
And then check it has worked with the following query.
SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
SUPPLEME..
YES
2. 指定在线重做日志的位置
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME =>
‘/export/home/u01/app/oracle/oradata/sales/redo01.log’, OPTIONS =>
DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed.
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME =>
‘/export/home/u01/app/oracle/oradata/sales/redo02.log’, OPTIONS =>
DBMS_LOGMNR.ADDFILE);
PL/SQL procedure successfully completed.
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME =>
‘/export/home/u01/app/oracle/oradata/sales/redo03.log’, OPTIONS =>
DBMS_LOGMNR.ADDFILE);
PL/SQL procedure successfully completed.
我在同一行发出这三个命令,因为我没有时间来试验回车,但是字节??? 会使新行在很多行上扩展命令,然后,我们需要的命令来告诉它字典从在线数据库直接取走的位置。
3. 使用在线数据字典目录开始LogMiner
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS =>
DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQL procedure successfully completed
这意味着,在这种情况下的LogMiner将只在正确启动和打开数据库时正确工作,因为我们使用的是数据库在线字典的资源。使用在线目录的问题是只有数据库的当前版本能被查询,因为旧模式已丢失,所以,如果在生产环境下使用LogMiner备份随后的纯文本文件或重做日志本身的模式版本,推荐这种方法,现在 LogMiner 已启动并准备好进行查询。
4. 用 LogMiner进行查询的例子 – v$logmnr_contents
这是用 v$logmnr_contents进行查询的例子,表示LogMiner能从重做日志中提取所有的数据。
SQL> select scn,timestamp,username,table_name,operation from v$logmnr_contents;
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND INSERT
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND UPDATE
509304 04-JAN-2005 14:00:57 INTERNAL
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND INSERT
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND UPDATE
509304 04-JAN-2005 14:00:57 INTERNAL
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND INSERT
509304 04-JAN-2005 14:00:57 WRH$_SQLBIND UPDATE
5. 结束LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR;
LogMiner 对查询数据的之前版本很有帮助,但它实际上不能显示用户获得这些状态所采取的行动,但是这些信息可以从记录在重做日志的DBEXTENDED 审核中获得,并随后显示。
Leave a Reply