热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

重建控制文件-mysql教程

首先我们应该先了解一下控制文件的重要性控制文件的概念:控制文件是一个很小的二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控

首先我们应该先了解一下控制文件的重要性 控制文件的概念: 控制文件是一个很小的二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控

首先我们应该先了解一下控制文件的重要性

控制文件的概念:控制文件是一个很小的二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控制文件,控制文件的修改由Oracle完成。

数据库的启动和正常运行都离不开控制文件。启动数据库时,Oracle从初始化参数文件中获得控制文件的名字及位置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信息,最后打开数据库。数据库运行时,Oracle会修改控制文件,所以,一旦控制文件损坏,数据库将不能正常运行。如果没有数据库的备份和归档日志文件,数据库将无法恢复。因此,我们应该多路镜像控制文件(Multiplex Control Files),并把每个镜像的控制文件分布在不同的物理磁盘。根据经验,控制文件多路镜像以后,几个控制文件同时坏掉的可能性几乎为零。控制文件管理的重心是重在预防,而不是亡羊补牢!

控制文件的内容:

数据库名称(Database Name)

创建数据库的时间戳

数据文件的名字及位置

联机日志文件的名字及位置

表空间信息

日志历史记录(Log History)

归档日志的信息

备份信息

当前的日志序列号(Log Sequence Number)

检查点信息(Checkpoint)

控制文件的大小由下面的几个参数决定:

MAXLOGFILES

MAXLOGMEMBERS

MAXLOGHISTORY

MAXDATAFILES

MAXINSTANCES

当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle服务器进程(Server Process)会立即更新控制文件以反映数据库结构的这种变化。所以,Oracle总是告诫我们,在数据库的结构发生变化后,要备份控制文件。日志写进程LGWR负责把当前日志序列号记录到控制文件中。校验点进程CKPT负责把校验点的信息记录到控制文件中。归档进程负责把归档日志的信息记录到控制文件中。

初始化参数CONTROL_FILES的值记录控制文件的位置。通常,DBA应该镜像控制文件,把每个控制文件分布到不同的物理磁盘,发生灾难时,即使其中一个控制文件损坏,数据不会丢失,也不会使整个数据库陷于瘫痪。

我们了解了控制文件的重要性后,如果我们真的将控制文件丢失,我们该如何做呢?

1、 从备份中拷贝控制文件

2、 重建控制文件

一、重建控制文件:

Oracle提供如下命令:

alter databasebackup controlfile to trace;

操作步骤如下:

1、 连接数据库并查看版本

[oracle@edbjr2p1~]$ sqlplus / as sysdba

SQL*Plus:Release 10.2.0.1.0 - Production on Sat Mar 15 18:45:48 2014

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

Connected to:

Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production

With thePartitioning, OLAP and Data Mining options

SYS@PROD>selectversion from v$instance;

VERSION

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

10.2.0.1.0

SYS@PROD>archivelog list

Database logmode Archive Mode

Automaticarchival Enabled

Archivedestination /u01/app/oracle/product/10.2.0/db_1/dbs/arch

Oldest onlinelog sequence 2

Next logsequence to archive 4

Current logsequence 4

SYS@PROD>

2、得到创建控制文件的语句与操作

SYS@PROD>alterdatabase backup controlfile to trace;

Databasealtered.

3、查看跟踪文件的内容

[oracle@edbjr2p1udump]$ more prod_ora_18466.trc

Dump file/u01/app/oracle/admin/PROD/udump/prod_ora_17286.trc

Oracle Database10g Enterprise Edition Release 10.2.0.1.0 - Production

With thePartitioning, OLAP and Data Mining options

ORACLE_HOME =/u01/app/oracle/product/10.2.0/db_1

Systemname: Linux

Node name: edbjr2p1

Release: 2.6.18-238.el5

Version: #1 SMP Tue Jan 4 15:24:05 EST 2011

Machine: i686

Instance name:PROD

Redo threadmounted by this instance: 1

Oracle processnumber: 26

Unix processpid: 17286, image: oracle@edbjr2p1 (TNS V1-V3)

*** 2014-03-1520:15:21.711

*** SERVICENAME:(SYS$USERS) 2014-03-15 20:15:21.711

*** SESSIONID:(289.3) 2014-03-15 20:15:21.711

tkcrrsarc:(WARN) Failed to find ARCH for message (message:0x1)

tkcrrpa: (WARN)Failed initial attempt to send ARCH message (message:0x1)

*** 2014-03-1520:15:34.425

-- The followingare current System-scope REDO Log Archival related

-- parametersand can be included in the database initialization file.

--

--LOG_ARCHIVE_DEST=''

--LOG_ARCHIVE_DUPLEX_DEST=''

--

--LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

--

--DB_UNIQUE_NAME="PROD"

--

--LOG_ARCHIVE_COnFIG='SEND, RECEIVE, NODG_CONFIG'

--LOG_ARCHIVE_MAX_PROCESSES=2

--STANDBY_FILE_MANAGEMENT=MANUAL

-- STANDBY_ARCHIVE_DEST=?/dbs/arch

-- FAL_CLIENT=''

-- FAL_SERVER=''

--

--LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/product/10.2.0/db_1/dbs/arch'

--LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'

--LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'

-- LOG_ARCHIVE_DEST_1='NOREGISTERNOALTERNATE NODEPENDENCY'

--LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'

--LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'

--LOG_ARCHIVE_DEST_STATE_1=ENABLE

--

-- Below are twosets of SQL statements, each of which creates a new

-- control fileand uses it to open the database. The first set opens

-- the databasewith the NORESETLOGS option and should be used only if

-- the currentversions of all online logs are available. The second

-- set opens thedatabase with the RESETLOGS option and should be used

-- if onlinelogs are unavailable.

-- Theappropriate set of statements can be copied from the trace into

-- a scriptfile, edited as necessary, and executed when there is a

-- need tore-create the control file.

--

-- Set #1. NORESETLOGS case

--

-- The followingcommands will create a new control file and use it

-- to open thedatabase.

-- Data used byRecovery Manager will be lost.

-- Additionallogs may be required for media recovery of offline

-- Use this onlyif the current versions of all online logs are

-- available.

-- Aftermounting the created controlfile, the following SQL

-- statementwill place the database in the appropriate

-- protectionmode:

-- ALTER DATABASE SET STANDBY DATABASE TOMAXIMIZE PERFORMANCE

STARTUP NOMOUNT

CREATECONTROLFILE REUSE DATABASE "PROD" NORESETLOGS ARCHIVELOG

MAXLOGFILES 30

MAXLOGMEMBERS 5

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'/u01/app/oracle/oradata/PROD/disk1/redo01.log',

'/u01/app/oracle/oradata/PROD/disk2/redo01_b.log'

) SIZE 100M,

GROUP 2 (

'/u01/app/oracle/oradata/PROD/disk1/redo02.log',

'/u01/app/oracle/oradata/PROD/disk2/redo02_b.log'

) SIZE 100M,

GROUP 3 (

'/u01/app/oracle/oradata/PROD/disk1/redo03.log',

'/u01/app/oracle/oradata/PROD/disk2/redo03_b.log'

) SIZE 100M,

GROUP 4 (

'/u01/app/oracle/oradata/PROD/disk1/redo04_a.log',

'/u01/app/oracle/oradata/PROD/disk2/redo04_b.log'

) SIZE100M

-- STANDBYLOGFILE

DATAFILE

'/u01/app/oracle/oradata/PROD/disk1/system01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/EXAMPLE_01.dbf',

'/u01/app/oracle/oradata/PROD/disk3/USERS_01.dbf',

'/u01/app/oracle/oradata/PROD/disk5/dds_01.dbf'

CHARACTER SETUS7ASCII

;

-- Commands tore-create incarnation table

-- Below lognames MUST be changed to existing filenames on

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

-- re-createincarnation records.

-- ALTERDATABASE REGISTER LOGFILE'/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_1_842277968.dbf';

-- Recovery isrequired if any of the datafiles are restored backups,

-- or if thelast shutdown was not normal or immediate.

RECOVER DATABASE

-- All logs needarchiving and a log switch is needed.

ALTER SYSTEMARCHIVE LOG ALL;

-- Database cannow be opened normally.

ALTER DATABASEOPEN;

-- Commands toadd tempfiles to temporary tablespaces.

-- Onlinetempfiles have complete space information.

-- Othertempfiles may require adjustment.

ALTER TABLESPACETEMP01 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp01.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP1 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp1_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP2 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp2_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

-- End oftempfile additions.

--

*** 2014-03-1520:18:32.065

*** 2014-03-1520:18:32.065 60679 kcrr.c

ARCH: Archivaldisabled due to shutdown: 1089

*** 2014-03-1520:18:32.082 60679 kcrr.c

ARCH: Archivaldisabled due to shutdown: 1089

4、编辑这个trace文件,我们就可以获得创建控制文件的脚本.

根据数据库不同状况,你可以选择是使用RESETLOGS/NORESETLOGS来重建控制文件

我们获得以下脚本:

[oracle@standby tools]$ cat createctlf.sql

STARTUP NOMOUNT

CREATECONTROLFILE REUSE DATABASE "PROD" NORESETLOGS ARCHIVELOG

MAXLOGFILES 30

MAXLOGMEMBERS 4

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'/u01/app/oracle/oradata/PROD/disk1/redo01.log',

'/u01/app/oracle/oradata/PROD/disk2/redo01_b.log'

) SIZE 100M,

GROUP 2 (

'/u01/app/oracle/oradata/PROD/disk1/redo02.log',

'/u01/app/oracle/oradata/PROD/disk2/redo02_b.log'

) SIZE 100M,

GROUP 3 (

'/u01/app/oracle/oradata/PROD/disk1/redo03.log',

'/u01/app/oracle/oradata/PROD/disk2/redo03_b.log'

) SIZE 100M,

GROUP 4 (

'/u01/app/oracle/oradata/PROD/disk1/redo04_a.log',

'/u01/app/oracle/oradata/PROD/disk2/redo04_b.log'

) SIZE 100M

-- STANDBYLOGFILE

DATAFILE

'/u01/app/oracle/oradata/PROD/disk1/system01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/EXAMPLE_01.dbf',

'/u01/app/oracle/oradata/PROD/disk3/USERS_01.dbf',

'/u01/app/oracle/oradata/PROD/disk5/dds_01.dbf'

CHARACTER SET US7ASCII;

RECOVERDATABASE;

ALTER SYSTEMARCHIVE LOG ALL;

ALTER DATABASEOPEN;

ALTER TABLESPACETEMP01 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp01.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP1 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp1_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP2 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp2_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

5、运行此脚本即可重建控制文件:

SYS@PROD>startupnomount;

ORACLE instancestarted.

Total SystemGlobal Area 419430400 bytes

Fixed Size 1219784 bytes

VariableSize 121635640 bytes

DatabaseBuffers 293601280 bytes

RedoBuffers 2973696 bytes

SYS@PROD>CREATECONTROLFILE REUSE DATABASE "PROD" NORESETLOGS ARCHIVELOG

MAXLOGFILES 30

MAXLOGMEMBERS 4

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'/u01/app/oracle/oradata/PROD/disk1/redo01.log',

'/u01/app/oracle/oradata/PROD/disk2/redo01_b.log'

) SIZE 100M,

GROUP 2 (

'/u01/app/oracle/oradata/PROD/disk1/redo02.log',

'/u01/app/oracle/oradata/PROD/disk2/redo02_b.log'

) SIZE 100M,

GROUP 3 (

'/u01/app/oracle/oradata/PROD/disk1/redo03.log',

'/u01/app/oracle/oradata/PROD/disk2/redo03_b.log'

) SIZE 100M,

GROUP 4 (

'/u01/app/oracle/oradata/PROD/disk1/redo04_a.log',

'/u01/app/oracle/oradata/PROD/disk2/redo04_b.log'

) SIZE 100M

-- STANDBYLOGFILE

DATAFILE

'/u01/app/oracle/oradata/PROD/disk1/system01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf',

'/u01/app/oracle/oradata/PROD/disk1/EXAMPLE_01.dbf',

'/u01/app/oracle/oradata/PROD/disk3/USERS_01.dbf',

'/u01/app/oracle/oradata/PROD/disk5/dds_01.dbf'

CHARACTER SETUS7ASCII;

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Control filecreated.

SYS@PROD>RECOVERDATABASE;

ORA-00283:recovery session canceled due to errors

ORA-00264: norecovery required

SYS@PROD>ALTERSYSTEM ARCHIVE LOG ALL;

System altered.

SYS@PROD>ALTERDATABASE OPEN;

Databasealtered.

SYS@PROD>ALTERTABLESPACE TEMP01 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp01.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP1 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp1_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

ALTER TABLESPACETEMP2 ADD TEMPFILE '/u01/app/oracle/oradata/PROD/disk1/temp2_01_grp.dbf'

SIZE 20971520 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;

2

Tablespacealtered.

SYS@PROD> 2

Tablespacealtered.

SYS@PROD> 2

Tablespacealtered.

SYS@PROD>

二、备份控制文件

以上给出生成创建控制文件脚本并重建控制文件的方法,但是具体恢复中遇到的问题可能需要具体对待,当得不到trace文件,可根据这个格式,查看数据文件,更改相关内容再重建.这种方法通常是在没有控制文件(二进制文件)备份的情况下所采用的,如果存在备份应该使用备份的控制文件尝试恢复.


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
author-avatar
mobiledu2502907897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有