在执行恢复后,应该检查数据库的alert文件,看是否出现控制文件中的数据文件名称和数据字典中数据文件名称无法一一对应的现象。

这篇文章描述通过RESETLOGS方式打开数据库时,如果发现不一致情况及解决方法。

如果是利用备份的控制文件,除了数据文件的新增和删除以外,不会出现不一致的情况。这种不一致的情况更多的是出现在手工重建控制文件过程中。

SQL> CONN /@TEST AS SYSDBA

已连接。

SQL> ALTER TABLESPACE INDX READ ONLY;

表空间已更改。

SQL> ALTER TABLESPACE TOOLS OFFLINE;

表空间已更改。

SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' BEGIN BACKUP;'

2 FROM DBA_TABLESPACES WHERE CONTENTS != 'TEMPORARY' AND STATUS = 'ONLINE';

'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'

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

ALTER TABLESPACE SYSTEM BEGIN BACKUP;

ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;

ALTER TABLESPACE USERS BEGIN BACKUP;

ALTER TABLESPACE YANGTK BEGIN BACKUP;

SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE USERS BEGIN BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE YANGTK BEGIN BACKUP;

表空间已更改。

SQL> HOST COPY F:ORACLEORADATATEST*.DBF F:ORACLEBACKUPTEST20060307

SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE RESETLOGS;

数据库已更改。

SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' END BACKUP;'

2 FROM DBA_TABLESPACES WHERE CONTENTS != 'TEMPORARY' AND STATUS = 'ONLINE';

'ALTERTABLESPACE'||TABLESPACE_NAME||'ENDBACKUP;'

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

ALTER TABLESPACE SYSTEM END BACKUP;

ALTER TABLESPACE UNDOTBS1 END BACKUP;

ALTER TABLESPACE USERS END BACKUP;

ALTER TABLESPACE YANGTK END BACKUP;

SQL> ALTER TABLESPACE SYSTEM END BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE UNDOTBS1 END BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE USERS END BACKUP;

表空间已更改。

SQL> ALTER TABLESPACE YANGTK END BACKUP;

表空间已更改。

假设在恢复过程中,发现丢失了所有控制文件和备份的控制文件。那么需要手工重建控制文件,而这时候手工重建控制文件可能会遗漏部分数据文件。

创建控制文件的脚本应该如下:

CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGSARCHIVELOG

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 680

LOGFILE

GROUP 1 'F:ORACLEORADATATESTREDO01.LOG'SIZE 100M,

GROUP 2 'F:ORACLEORADATATESTREDO02.LOG'SIZE 100M,

GROUP 3 'F:ORACLEORADATATESTREDO03.LOG'SIZE 100M

DATAFILE

'F:ORACLEORADATATESTSYSTEM01.DBF',

'F:ORACLEORADATATESTUNDOTBS01.DBF',

'F:ORACLEORADATATESTUSERS01.DBF',

'F:ORACLEORADATATESTYANGTK01.DBF'

CHARACTER SET ZHS16GBK

;

但是由于没有将脚本保存到trace文件中,而完全通过手工创建。因此,在创建的时候丢失了USERS01.DBF。

SQL> SHUTDOWN IMMEDIATE

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> HOST DEL F:ORACLEORADATATEST*.CTL

SQL> HOST COPY F:ORACLEBACKUPTEST20060307* F:ORACLEORADATATEST

SQL> STARTUP NOMOUNT

ORACLE 例程已经启动。

Total System Global Area 76619308 bytes

Fixed Size 454188 bytes

Variable Size 50331648 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

SQL> CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG

2 MAXLOGFILES 50

3 MAXLOGMEMBERS 5

4 MAXDATAFILES 100

5 MAXINSTANCES 1

6 MAXLOGHISTORY 680

7 LOGFILE

8 GROUP 1 'F:ORACLEORADATATESTREDO01.LOG' SIZE 100M,

9 GROUP 2 'F:ORACLEORADATATESTREDO02.LOG' SIZE 100M,

10 GROUP 3 'F:ORACLEORADATATESTREDO03.LOG' SIZE 100M

11 DATAFILE

12 'F:ORACLEORADATATESTSYSTEM01.DBF',

13 'F:ORACLEORADATATESTUNDOTBS01.DBF',

14 'F:ORACLEORADATATESTYANGTK01.DBF'

15 CHARACTER SET ZHS16GBK

16 ;

控制文件已创建

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE

ORA-00279: ?? 46320665 (? 03/08/2006 02:49:29 ??) ???? 1 ????

ORA-00289: ??: F:ORACLEORADATATESTARCHIVEARC00001.001

ORA-00280: ?? 46320665 ???? 1 ???? # 1 ???

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

F:ORACLEORADATATESTREDO03.LOG

已应用的日志。

完成介质恢复。

SQL> ALTER DATABASE OPEN RESETLOGS;

数据库已更改。

SQL> SELECT NAME FROM V$DATAFILE;

NAME

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

F:ORACLEORADATATESTSYSTEM01.DBF

F:ORACLEORADATATESTUNDOTBS01.DBF

F:ORACLEORACLE920DATABASEMISSING00003

F:ORACLEORACLE920DATABASEMISSING00004

F:ORACLEORACLE920DATABASEMISSING00005

F:ORACLEORADATATESTYANGTK01.DBF

已选择6行。

SQL> COL FILE_NAME FORMAT A50

SQL> SELECT FILE_NAME, TABLESPACE_NAME FROM DBA_DATA_FILES;

FILE_NAME TABLESPACE_NAME

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

F:ORACLEORADATATESTSYSTEM01.DBF SYSTEM

F:ORACLEORADATATESTUNDOTBS01.DBF UNDOTBS1

F:ORACLEORACLE920DATABASEMISSING00003 INDX

F:ORACLEORACLE920DATABASEMISSING00004 TOOLS

F:ORACLEORACLE920DATABASEMISSING00005 USERS

F:ORACLEORADATATESTYANGTK01.DBF YANGTK

已选择6行。

从上面的数据字典可以看到,存在不正常的表空间和数据文件。也可以从alert日志中得到相应的信息。

Dictionary check beginning

Tablespace 'TEMP' #2 found in data dictionary,

but not in the controlfile. Adding to controlfile.

Tablespace 'INDX' #3 found in data dictionary,

but not in the controlfile. Adding to controlfile.

Tablespace 'TOOLS' #4 found in data dictionary,

but not in the controlfile. Adding to controlfile.

Tablespace 'USERS' #5 found in data dictionary,

but not in the controlfile. Adding to controlfile.

File #3 found in data dictionary but not in controlfile.

Creating OFFLINE file 'MISSING00003' in the controlfile.

File #4 found in data dictionary but not in controlfile.

Creating OFFLINE file 'MISSING00004' in the controlfile.

File #5 found in data dictionary but not in controlfile.

Creating OFFLINE file 'MISSING00005' in the controlfile.

This file can no longer be recovered so it must be dropped.

Dictionary check complete

由于TOOLS表空间在备份之前就正常脱机了。因此,TOOLS表空间不需要额外的恢复,将数据文件直接RENAME就可以了。

SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORACLE920DATABASEMISSING00004'

2 TO 'F:ORACLEORADATATESTTOOLS01.DBF';

数据库已更改。

INDX表空间在备份之前就处于只读状态,因此不需要进行恢复,RENAME后ONLINE就可以了。

SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORACLE920DATABASEMISSING00003'

2 TO 'F:ORACLEORADATATESTINDX01.DBF';

数据库已更改。

SQL> ALTER TABLESPACE INDX ONLINE;

表空间已更改。

SQL> SELECT STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'INDX';

STATUS

---------

READ ONLY

对于临时表空间,直接增加临时文件就可以了。

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'F:ORACLEORADATATESTTEMP01.DBF' SIZE 40M REUSE;

表空间已更改。

但是,对于表空间USERS,由于没有被添加到控制文件中,且数据库以RESETLOGS方式打开,用来恢复表空间的日志已经被重置,因此只能将表空间删除。

SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORACLE920DATABASEMISSING00005'

2 TO 'F:ORACLEORADATATESTUSERS01.DBF';

数据库已更改。

SQL> ALTER TABLESPACE USERS ONLINE;

ALTER TABLESPACE USERS ONLINE

*

ERROR 位于第 1 行:

ORA-01190: ?????????5??????? RESETLOGS ??

ORA-01110: ???? 5: 'F:ORACLEORADATATESTUSERS01.DBF'

SQL> RECOVER TABLESPACE USERS;

ORA-00283: ??????????

ORA-01190: ?????????5??????? RESETLOGS ??

ORA-01110: ???? 5: 'F:ORACLEORADATATESTUSERS01.DBF'

SQL> DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;

表空间已丢弃。

一旦重建控制文件中没有包含需要恢复的表空间,且以RESETLOGS方式打开了数据库,则被遗漏的表空间无法在正常联机,只能从数据库中删除。因此,控制文件的备份和重建操作一定要谨慎。

数据字典恢复mysql数据_恢复之数据字典和控制文件不一致的恢复(一)相关推荐

  1. Oracle数据库断电致使控制文件不一致的恢复方法

    一. 数据库断电致使控制文件不一致的恢复方法 数据库服务器意外断电出现ORA-00600[kcratr_nab_less_than_odr],不能open数据库 1.open数据库报ORA-00600 ...

  2. innobackupex和Xtrabackup备份和恢复MySQL数据

    innobackupex备份和恢复MySQL数据 当MySQL数据量很小时,我们可以使用mysqldump来备份,无论是myisam引擎还是innodb引擎都是没有问题的. 但数据量很大,比如上百GB ...

  3. mysql is not empty_MySQL数据库之Xtrabackup恢复mysql数据时候报错:Original data directory is not empty!...

    本文主要向大家介绍了MySQL数据库之Xtrabackup恢复mysql数据时候报错:Original data directory is not empty! ,通过具体的内容向大家展现,希望对大家 ...

  4. 计算机清理垃圾文件丢失怎么恢复,清理电脑后怎样恢复丢失数据_电脑数据恢复_迷你兔...

    清理电脑后怎样恢复丢失数据_电脑数据恢复_迷你兔 分类:数据恢复常见问题|最后更新:2019年5月10日 许多人会有规划地对自己的电脑进行清理工作,这么做的原因有可能是电脑垃圾文件太多,也可能是电脑剩 ...

  5. oracle日志文件打开,oracle日志文件和控制文件损坏的恢复

    oracle日志文件和控制文件损坏的恢复 恢复步骤: 1.加入_allow_resetlogs_corruption=true,_corrupted_rollback_segments=true,_o ...

  6. mysql binlog 备份_偷偷的删表删库,跑路之前,尝试用binlog恢复MySQL数据

    一. Binlog二进制日志: MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(所有的写入,除了(读)数据查询语句select),以事件形式记录,还 ...

  7. mysql拷贝恢复.frm_通过.frm .ibd文件恢复MySQL数据

    重新安装完mysql,当我初始化MySQL的时候,报错提示以前的数据目录还存在着,于是把之前的数据拷贝到其他目录,然后初始化成功.由于以前的数据还存在,我便想将以前的数据迁移的刚安装的MySQL中. ...

  8. mysqlbinlog 恢复mysql数据

    确保my.cnf启动了 log-bin (既log-bin=mysql-bin) mysql> show master status;   #查看使用的那个logbin文件 mysql> ...

  9. MYSQL专题-使用Binlog日志恢复MySQL数据

    大家有没有碰到过由于误操作把测试数据库的一张表给删除了,导致测试的数据都被删除了,然后手足无措,测试把你一定数落,顿时感觉自己要死了?今天就教你即使误删了也可以将删除的数据恢复,以后误删再也不用惊吓了 ...

最新文章

  1. python统计字母空格个数_python统计字母、空格、数字等字符个数的实例
  2. 《软件工程》实验报告——需求获取与分析
  3. 登录id 黑苹果_黑苹果MacOSCatalina无法登录AppStore修复
  4. python可变参数教学,Python函数可变参数详解
  5. 关于h264bitstream的bug修正及完善
  6. Ubuntu系统用户忘记密码
  7. pcb文件转成原理图_电子设计基础教学-PCB板制作之 AD(Altium Designer)的工程建立过程...
  8. Nginx PageSpeed模块配置和使用
  9. 有限差分法MATLAB程序
  10. 利用Axure制作动态表格(Axure学习日志1)
  11. vue.js自定义软键盘“删除键”问题
  12. GAEfan qiang教程
  13. 第三届SaaS峰会——超超级大咖前来助阵!上午场门票价格即将上调!
  14. SpringBoot整合MyBatis实现数据增删改查
  15. 英语用法整理_英式\美式英语区分
  16. 想知道全国有多少人和你同名同姓吗?我教你免费查询
  17. 自定义右键的打开方式
  18. css 文本超出2行就隐藏并且显示省略号
  19. 正则表达式,数字位超过1位时,首位不为0
  20. 四、Testbench

热门文章

  1. 数组的相乘java_Java程序的数组元素相乘
  2. c语言游戏call调用,C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)...
  3. 阿里P8连肝一周整理出这份python自动化测试实战PDF
  4. python小游戏系列记忆宫殿,儿时的回忆
  5. python中字典格式_如何在Python中使用带有字典的格式函数和整数键
  6. W1000变频器如何设定频率_变频器参数如何设定,参数故障处理办法
  7. or函数python_Python numpy.bitwise_or函数方法的使用
  8. 【c语言】求两数之和
  9. go build不从本地gopath获取_Go包管理GOPATH、vendor、go mod机制
  10. 打印机没有反应计算机管理,计算机基础知识:如何解决打印机没有反应的问题(二)...