热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle在丢失控制文件的情况下,如何恢复数据库重建控制文件?

控制文件对于数据库来说是非常重要,在进行数据恢复时通常是必不可少的;丢失控制文件并不是致命的,但是会使恢复变得困难很多。因此,dba除了多路保存控制文件外,还需要备份控制文件。备份

控制文件对于数据库来说是非常重要,在进行数据恢复时通常是必不可少的;丢失控制文件并不是致命的,但是会使恢复变得困难很多。因此,dba除了多路保存控制文件外,还需要备份控制文件。

备份控制文件也有多种办法,例如cp拷贝、rman自动备份等,今天给大家介绍如何获取创建控制文件的脚本,这样数据库一旦出现意外,即使找不到可用的备份控制文件,也能通过重建控制文件来启动数据库。

Oracle提供了如下命令来实现这个功能:

alter database backup controlfile to trace;

下面将介绍在丢失控制文件的情况下如何恢复数据库。

测试环境:Linux6.5+Oracle 11g

1.环境准备

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE 11.2.0.4.0 Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 - Production

SQL> show parameter control_files

打开数据库,执行‘alter database backup controlfile to trace;’语句来生成trace文件。

NAME TYPE VALUE

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

control_files string /data/CEBPM/controlfile/o1_mf_

dm1flhj3_.ctl

2.生成trace文件

SQL> alter database backup controlfile to trace;

Database altered.

3.查找trace文件路径

trace文件的路径可以通过一个多表查询来获得,其中涉及v$processv、$sessionv和$mystat等三个动态视图。

SQL> select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));

TRACEFILE

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

/u01/app/oracle/diag/rdbms/cebpm/cebpm/trace/cebpm_ora_2225.trc

SQL>

4.查看trace文件

通过cat命令查看trace文件,内容如下:

......

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "CEBPM" NORESETLOGS FORCE LOGGING ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/data/CEBPM/onlinelog/o1_mf_1_dm1fljft_.log' SIZE 50M BLOCKSIZE 512,

GROUP 2 '/data/CEBPM/onlinelog/o1_mf_2_dm1fll24_.log' SIZE 50M BLOCKSIZE 512,

GROUP 3 '/data/CEBPM/onlinelog/o1_mf_3_dm1flmld_.log' SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

-- GROUP 11 '/data/CEBPM/onlinelog/redo11_stb01.log' SIZE 50M BLOCKSIZE 512,

-- GROUP 12 '/data/CEBPM/onlinelog/redo12_stb01.log' SIZE 50M BLOCKSIZE 512,

-- GROUP 13 '/data/CEBPM/onlinelog/redo13_stb01.log' SIZE 50M BLOCKSIZE 512,

-- GROUP 14 '/data/CEBPM/onlinelog/redo14_stb01.log' SIZE 50M BLOCKSIZE 512

DATAFILE

'/data/CEBPM/datafile/o1_mf_system_dm1flxkw_.dbf',

'/data/CEBPM/datafile/o1_mf_sysaux_dm1fnw5v_.dbf',

'/data/CEBPM/datafile/o1_mf_undotbs1_dm1foow9_.dbf',

'/data/CEBPM/datafile/o1_mf_users_dm1fqcrp_.dbf'

CHARACTER SET AL32UTF8

;

......

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "CEBPM" RESETLOGS FORCE LOGGING ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/data/CEBPM/onlinelog/o1_mf_1_dm1fljft_.log' SIZE 50M BLOCKSIZE 512,

GROUP 2 '/data/CEBPM/onlinelog/o1_mf_2_dm1fll24_.log' SIZE 50M BLOCKSIZE 512,

GROUP 3 '/data/CEBPM/onlinelog/o1_mf_3_dm1flmld_.log' SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

'/data/CEBPM/datafile/o1_mf_system_dm1flxkw_.dbf',

'/data/CEBPM/datafile/o1_mf_sysaux_dm1fnw5v_.dbf',

'/data/CEBPM/datafile/o1_mf_undotbs1_dm1foow9_.dbf',

'/data/CEBPM/datafile/o1_mf_users_dm1fqcrp_.dbf'

CHARACTER SET AL32UTF8

-- Commands to re-create incarnation table

-- Below log names MUST be changed to existing filenames on

-- disk. Any one log file from each branch can be used to

-- re-create incarnation records.

-- ALTER DATABASE REGISTER LOGFILE '/data/CEBPM/archivelog/1_1_945593423.arc';

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normal or immediate.

RECOVER DATABASE

-- All logs need archiving and a log switch is needed.

ALTER SYSTEM ARCHIVE LOG ALL;

-- Database can now be opened normally.

ALTER DATABASE OPEN;

-- Commands to add tempfiles to temporary tablespaces.

-- Online tempfiles have complete space information.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE '/data/CEBPM/datafile/o1_mf_temp_dm1fp4bs_.tmp'

SIZE 61865984 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

-- End of tempfile additions

.....

5.NORESETLOGS VS RESETLOGS

从trace文件可以看出,提供了两个创建控制文件的脚本,分别针对两种不同的应用场景:NORESETLOGS适用于当前redo log可用,而RESETLOGS适用于当前redo log不可用。

NORESETLOGS重建步骤

(1).执行脚本,重建控制文件(CREATE CONTROLFILE REUSE DATABASE "CEBPM NORESETLOGS NOARCHIVELOG......)

(2).执行介质恢复RECOVER DATABASE

(3).打开数据库ALTER DATABASE OPEN;

(4).添加临时表空间

RESETLOGS重建步骤

(1).执行脚本,重建控制文件(CREATE CONTROLFILE REUSE DATABASE "CEBPM" RESETLOGS NOARCHIVELOG......)

(2).执行介质恢复RECOVER DATABASE USING BACKUP CONTROLFILE

(3).打开数据库ALTER DATABASE OPEN RESETLOGS;

(4).添加临时表空间

6.删除控制文件

根据上面查到的控制文件的路径利用rm将其删除

cebpm:[email protected]>rm -rf o1_mf_dm1flhj3_.ctl

此时,强制关闭数据库,然后重启数据库,报ORA-00205错误。需要注意的是,此时执行shutdown immediate命令,数据库无法正常关闭,只能关闭到mounted状态;需要使用shutdown abort命令强制关闭数据库。

SQL> shutdown immediate

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/data/CEBPM/controlfile/o1_mf_dm1flhj3_.ctl'

ORA-27041: unable to open file

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

SQL> shutdown abort

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 688959488 bytes

Fixed Size 2256432 bytes

Variable Size 566231504 bytes

Database Buffers 117440512 bytes

Redo Buffers 3031040 bytes

ORA-00205: error in identifying control file, check alert log for more info

启动到nomount状态

SQL> startup nomount

ORACLE instance started.

Total System Global Area 688959488 bytes

Fixed Size 2256432 bytes

Variable Size 566231504 bytes

Database Buffers 117440512 bytes

Redo Buffers 3031040 bytes

利用刚才产生的trace里的控制文件创建脚本(如果事先没有产生创建控制文件trace文件,那么这一步则需要自己手动构造控制文件脚本)

cebpm:[email protected]>vi createcontrofile.sql

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "CEBPM" NORESETLOGS FORCE LOGGING ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 '/data/CEBPM/onlinelog/o1_mf_1_dm1fljft_.log' SIZE 50M,

GROUP 2 '/data/CEBPM/onlinelog/o1_mf_2_dm1fll24_.log' SIZE 50M,

GROUP 3 '/data/CEBPM/onlinelog/o1_mf_3_dm1flmld_.log' SIZE 50M

DATAFILE

'/data/CEBPM/datafile/o1_mf_system_dm1flxkw_.dbf',

'/data/CEBPM/datafile/o1_mf_sysaux_dm1fnw5v_.dbf',

'/data/CEBPM/datafile/o1_mf_undotbs1_dm1foow9_.dbf',

'/data/CEBPM/datafile/o1_mf_users_dm1fqcrp_.dbf'

CHARACTER SET AL32UTF8

;

cebpm:[email protected]>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Oct 19 08:02:56 2017

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to an idle instance.

SQL> @/u01/createcontrofile.sql

ORACLE instance started.

Total System Global Area 688959488 bytes

Fixed Size 2256432 bytes

Variable Size 566231504 bytes

Database Buffers 117440512 bytes

Redo Buffers 3031040 bytes

Control file created.

SQL> select status from v$instance;

STATUS

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

MOUNTED

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 1 needs media recovery

ORA-01110: data file 1: '/data/CEBPM/datafile/o1_mf_system_dm1flxkw_.dbf'

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE 11.2.0.4.0 Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 - Production

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME

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

SYSTEM

SYSAUX

UNDOTBS1

TEMP

USERS

SQL> select name from v$datafile;

NAME

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

/data/CEBPM/datafile/o1_mf_system_dm1flxkw_.dbf

/data/CEBPM/datafile/o1_mf_sysaux_dm1fnw5v_.dbf

/data/CEBPM/datafile/o1_mf_undotbs1_dm1foow9_.dbf

/data/CEBPM/datafile/o1_mf_users_dm1fqcrp_.dbf

SQL> select member from v$logfile;

MEMBER

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

/data/CEBPM/onlinelog/o1_mf_2_dm1fll24_.log

/data/CEBPM/onlinelog/o1_mf_1_dm1fljft_.log

/data/CEBPM/onlinelog/o1_mf_3_dm1flmld_.log

SQL> select name from v$controlfile;

NAME

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

/data/CEBPM/controlfile/o1_mf_dm1flhj3_.ctl

SQL> select name from v$tempfile;

no rows selected

添加临时表空间

SQL> alter tablespace temp add tempfile '/data/CEBPM/datafile/o1_mf_temp_dm1fp4bs_.tmp';

Tablespace altered.

SQL> select name from v$tempfile;

NAME

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

/data/CEBPM/datafile/o1_mf_temp_dm1fp4bs_.tmp

SQL> select open_mode from v$database;

OPEN_MODE

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

READ WRITE

SQL> alter system archive log current;

System altered.



推荐阅读
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
mobiledu2502904893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有