mysql数据库as表恢复_使用flashback database找回被误删除表空间

我个人不怎么推荐使用flashback database功能,因为在生产库中,谁能够承受得起整个库的回退(也许特别极端的情况下可能需要使用到),今天帮网友恢复了一个案例:删除表空间,然后尝试着flashback database功能把这个删除的表空间找回来,但是他在整个操作过程中思路比较混乱,最后导致数据库不能正常起来。因为网友有这个方面的需求,我做了一个flashback database 找回表空间操作的试验(官方建议:flashback database在不改变数据文件的情况下使用)

1、恢复过程

SQL> select * from v$version;

BANNER

-----------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0 Production

TNS for 32-bit Windows: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

YES

SQL> create tablespace xff_test datafile 'E:\ORACLE\ORADATA\XFF\xff_test01.dbf'

size 10m autoextend on next 1m maxsize 20m;

表空间已创建。

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

TO_CHAR(SYSDATE,'YY

-------------------

2011-11-12 21:05:07

SQL> create table chf.t_flashback tablespace xff_test

2 as

3 select * from dba_objects;

表已创建。

SQL> select count(*) from chf.t_flashback;

COUNT(*)

----------

73211

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

TO_CHAR(SYSDATE,'YY

-------------------

2011-11-12 21:06:35

SQL> host dir E:\ORACLE\ORADATA\XFF\xff_test01.dbf

驱动器 E 中的卷没有标签。

卷的序列号是 38D0-2A35

E:\ORACLE\ORADATA\XFF 的目录

2011/11/12 21:04 10,493,952 XFF_TEST01.DBF

1 个文件 10,493,952 字节

0 个目录 14,644,822,016 可用字节

SQL> drop tablespace xff_test including contents and datafiles;

表空间已删除。

SQL> host dir E:\ORACLE\ORADATA\XFF\xff_test01.dbf

驱动器 E 中的卷没有标签。

卷的序列号是 38D0-2A35

E:\ORACLE\ORADATA\XFF 的目录

找不到文件

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area 368263168 bytes

Fixed Size 1374668 bytes

Variable Size 276825652 bytes

Database Buffers 83886080 bytes

Redo Buffers 6176768 bytes

数据库装载完毕。

SQL> flashback database to timestamp

2 to_timestamp('2011-11-12 21:06:35','yyyy-mm-dd hh24:mi:ss');

闪回完成。

SQL> alter database open resetlogs;

数据库已更改。

SQL> select name from v$datafile;

NAME

-------------------------------------------------------------

E:\ORACLE\ORADATA\XFF\SYSTEM01.DBF

E:\ORACLE\ORADATA\XFF\SYSAUX01.DBF

E:\ORACLE\ORADATA\XFF\UNDOTBS01.DBF

E:\ORACLE\ORADATA\XFF\USERS01.DBF

E:\ORACLE\ORADATA\XFF\EXAMPLE01.DBF

E:\ORACLE\ORADATA\XFF\O_ORACLE.DBF

E:\ORACLE\ORADATA\XFF\XIFENFEI01.DBF

E:\ORACLE\ORADATA\XFF\P_TEST01.DBF

E:\ORACLE\ORADATA\XFF\SYS_MG01.DBF

E:\ORACLE\ORADATA\XFF\P101.DBF

E:\ORACLE\ORADATA\XFF\P201.DBF

NAME

---------------------------------------------------------------

E:\ORACLE\ORADATA\XFF\P301.DBF

E:\ORACLE\11_2_0\DATABASE\UNNAMED00013

E:\ORACLE\ORADATA\XFF\OGG01.DBF

E:\ORACLE\ORADATA\XFF\SPOT01.DBF

已选择15行。

SQL> desc chf.t_flashback;

ERROR:

ORA-04043: 对象 chf.t_flashback 不存在

SQL> COL ERROR FOR A20

SQL> SELECT FILE#,ONLINE_STATUS,ERROR FROM V$RECOVER_FILE;

FILE# ONLINE_ ERROR

---------- ------- --------------------

13 OFFLINE FILE NOT FOUND

SQL> SELECT NAME FROM V$DATAFILE WHERE FILE#=13;

NAME

-----------------------------------------------------------------

E:\ORACLE\11_2_0\DATABASE\UNNAMED00013

SQL> HOST DIR E:\ORACLE\11_2_0\DATABASE\UNNAMED00013

驱动器 E 中的卷没有标签。

卷的序列号是 38D0-2A35

E:\ORACLE\11_2_0\DATABASE 的目录

找不到文件

SQL> ALTER DATABASE CREATE DATAFILE 13

AS 'E:\ORACLE\ORADATA\XFF\xff_test01.dbf';

数据库已更改。

SQL> HOST DIR E:\ORACLE\ORADATA\XFF\xff_test01.dbf

驱动器 E 中的卷没有标签。

卷的序列号是 38D0-2A35

E:\ORACLE\ORADATA\XFF 的目录

2011/11/12 21:25 10,493,952 XFF_TEST01.DBF

1 个文件 10,493,952 字节

0 个目录 14,640,848,896 可用字节

SQL> recover datafile 13;

ORA-00279: 更改 10903431152368 (在 11/12/2011 21:04:40 生成) 对于线程 1

是必需的

ORA-00289: 建议: E:\ORACLE\ARCHIVELOG\ARC0000000241_0753489409.0001

ORA-00280: 更改 10903431152368 (用于线程 1) 在序列 #241 中

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

auto

已应用的日志。

完成介质恢复。

SQL> alter database datafile 13 online;

数据库已更改。

SQL> select count(*) from chf.t_flashback;

COUNT(*)

----------

73211

2、alert中关键信息

Sat Nov 12 21:12:30 2011

flashback database to timestamp to_timestamp('2011-11-12 21:06:35','yyyy-mm-dd hh24:mi:ss')

Flashback Restore Start

Flashback: created tablespace #18: 'XFF_TEST' in the controlfile.

Flashback: created OFFLINE file 'UNNAMED00013' for tablespace #18 in the controlfile.

Filename was:

'E:\ORACLE\ORADATA\XFF\XFF_TEST01.DBF' when dropped.

File will have to be restored from a backup and recovered.

Flashback: deleted datafile #13 in tablespace #18 from control file.

Flashback: dropped tablespace #18: 'XFF_TEST' from the control file.

Flashback Restore Complete

Flashback Media Recovery Start

started logmerger process

Parallel Media Recovery started with 2 slaves

Sat Nov 12 21:12:38 2011

Recovery of Online Redo Log: Thread 1 Group 1 Seq 241 Reading mem 0

Mem# 0: E:\ORACLE\ORADATA\XFF\REDO01

Flashback recovery: Added file #13 to control file as OFFLINE and 'UNNAMED00013'

because it was dropped during the flashback interval

or it was added during flashback media recovery.

File was originally created as:

'E:\ORACLE\ORADATA\XFF\XFF_TEST01.DBF'

File will have to be restored from a backup or

recreated using ALTER DATABASE CREATE DATAFILE command,

and the file has to be onlined and recovered.

Incomplete Recovery applied until change 10903431152644 time 11/12/2011 21:05:11

Sat Nov 12 21:12:44 2011

Flashback Media Recovery Complete

Completed: flashback database to timestamp to_timestamp('2011-11-12 21:06:35','yyyy-mm-dd hh24:mi:ss')

--flashback database 操作过程

……

Sat Nov 12 21:25:29 2011

ALTER DATABASE CREATE DATAFILE 13 AS 'E:\ORACLE\ORADATA\XFF\xff_test01.dbf'

Completed: ALTER DATABASE CREATE DATAFILE 13 AS 'E:\ORACLE\ORADATA\XFF\xff_test01.dbf'

Sat Nov 12 21:25:59 2011

ALTER DATABASE RECOVER datafile 13

Media Recovery Start

Serial Media Recovery started

Media Recovery start incarnation depth : 1, target inc# : 3, irscn : 10903431152644

ORA-279 signalled during: ALTER DATABASE RECOVER datafile 13 ...

Sat Nov 12 21:28:27 2011

ALTER DATABASE RECOVER CONTINUE DEFAULT

Media Recovery Log E:\ORACLE\ARCHIVELOG\ARC0000000241_0753489409.0001

Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0

Mem# 0: E:\ORACLE\ORADATA\XFF\REDO01

Completed: ALTER DATABASE RECOVER CONTINUE DEFAULT

Sat Nov 12 21:29:04 2011

alter database datafile 13 online

Completed: alter database datafile 13 online

--恢复被删除数据文件过程,flashbackup database会创建表空间,但是数据文件需要人工干预

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于MySQL误删除数据库恢复,可以通过以下方法进行: 1. 使用备份:如果你在删除数据库之前进行了备份,那么你可以从备份中恢复数据库。你可以使用MySQL的备份工具,如mysqldump命令,或者使用第三方备份工具来创建数据库备份。通过将备份文件导入到MySQL服务器中,可以还原误删的数据库。 2. 使用二进制日志(binlog):MySQL的二进制日志记录了所有的写操作,包括删除操作。你可以使用mysqlbinlog命令来解析二进制日志,并找到误删数据库的操作。然后,可以重新执行这些操作来恢复被删除的数据库。 3. 使用Flashback技术:对于使用DELETE语句误删数据行的情况,可以使用MySQLFlashback技术来恢复已删除的数据行。但对于使用TRUNCATE TABLE、DROP TABLE或DROP DATABASE命令误删数据的情况,无法通过Flashback来恢复数据。 需要注意的是,恢复误删数据库的方法需要在误删除后尽快采取行动,以免被覆盖或其他操作导致无法恢复。同时,要确保在恢复过程中遵循正确的步骤和安全措施,以防止进一步的数据损失。 引用中提到了使用Flashback来恢复使用DELETE命令删除的数据行,但无法恢复使用TRUNCATE TABLE、DROP TABLE或DROP DATABASE命令删除的数据。引用中指出,使用mysqlbinlog方法恢复数据可能不够快,并且无法指定只恢复一个的操作。 因此,根据引用的信息,对于MySQL误删除数据库恢复,可以使用备份、二进制日志和Flashback等方法来进行恢复操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [31误删数据后除了跑路,还能怎么办?](https://blog.csdn.net/sdaujsj1/article/details/114561607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值