首先我们应该先了解一下控制文件的重要性 控制文件的概念: 控制文件是一个很小的二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,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文件,可根据这个格式,查看数据文件,更改相关内容再重建.这种方法通常是在没有控制文件(二进制文件)备份的情况下所采用的,如果存在备份应该使用备份的控制文件尝试恢复.

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql控制文件位置_重建控制文件相关推荐

  1. WIN/LINUX 本地指定域名IP,hosts,hosts文件位置在哪里_hosts文件怎么修复

    本地指定域名IP,hosts,hosts文件位置在哪里_hosts文件怎么修复,linux hosts文件位置,本地域名修改IP 系统:windows/linux windwos系统位置:hosts ...

  2. mysql 从物理文件恢复_从物理文件恢复MySQL数据库

    从@Vicent的答案,我已经恢复如下MySQL数据库: 步骤1.关闭MySQL服务器 第二步复制数据库,数据库文件夹(在Linux中,默认位置是的/ var/lib中/ MySQL的).保持数据库名 ...

  3. python定位文件位置_在Python中定位文件位置

    tell()方法告诉您文件中的当前位置:换句话说,下一次读取或写入将发生在从文件开头开始的那么多个字节处. seek(offset [,from])方法更改当前文件位置.offset参数指示要移动的字 ...

  4. 鼠标右键 移动选定的文件夹到指定位置_鼠标拖动文件是复制还是移动?——拖动文件技巧大全...

    用鼠标拖动文件可以实现文件的移动.复制甚至是删除的操作,你相信吗?如果相信,说明你已经掌握了这些方法,如果不信,请接着往下看. 拖动文件的手法有:左键拖动.右键拖动.按下Ctrl键并拖动.按下Shif ...

  5. java 更改excel文件名称_根据Excel文件中的内容,修改指定文件夹下的文件名称

    问题:根据Excel文件中内容,把文件名称由第2列,改为第1列.比如:把文件"123.jpg"修改为"1.jpg". aaarticlea/png;base64 ...

  6. mysql查看脚本错误位置_记一次mysql启动不了查找经历

    在linux上用的是xampp,mysql启动没有报任何错误,但就是查找不到进程,于是找mysql错误日志,日志在哪?在lampp/var/mysql 以.err结尾的文件里.里面内容如下; /opt ...

  7. python3文件处理_简述 Python3 文件处理

    1.文件处理 找到文件 --> 打开文件 --> 操作:读.写 --> 保存 --> 关闭 1.1.1 写文件 (只要牵扯到文件操作,都是字符串:写文件的时候需要把写的数字转换 ...

  8. linux j查找文件位置,Linux下的文件查找命令——find

    Linux下几个常见的文件查找命令: which       查看可执行文件的位置 whereis    寻找特定文件,查看文件的位置 locate       配合数据库查看文件位置 find    ...

  9. Clover 驱动文件夹_四叶草Clover文件夹结构功能+快捷键——墨涩网

    四叶草Clover引导主要的作用就是把你普通的PC电脑模拟成一台真实的苹果电脑,他是安装黑苹果的引导工具,是目前使用最多的黑苹果引导方式,当然四叶草Clover也可以引到windows等其他操作系统, ...

  10. Flume监听文件夹中的文件变化_并把文件下沉到hdfs

    摘要: 1.采集目录到HDFS 采集需求:某服务器的某特定目录下,会不断产生新的文件,每当有新文件出现,就需要把文件采集到HDFS中去 根据需求,首先定义以下3大要素 采集源,即source--监控文 ...

最新文章

  1. 鱼佬:百行代码入手数据挖掘赛!
  2. httpd服务的访问控制
  3. 命令行神器 Click 简明笔记
  4. 二叉树的先序、中序、后序遍历
  5. XCode 6 制作framework
  6. eclipse发布rest_在Eclipse中高效运行HTTP / REST集成测试
  7. 学计算机的能看出批图吗,高手教你:如何看出一张图有没有被P过?
  8. 番茄钟怎么调_番茄时钟起床时间怎么设置 番茄时钟起床时间设置方法
  9. cfree5文件标签混乱处理。
  10. Go语言程序开发之ARM开发环境搭建
  11. 36种漂亮的CSS3网页按钮Button样式 - 改进版
  12. a豆:在讲一个珍重每一个人的故事
  13. eclipse官网下载收费 怎么办?
  14. [有感而发]与刺客独行
  15. [软件]Safe3 Web漏洞扫描系统企业版v10.1 破解版
  16. Origin作图流程
  17. SyntheticChineseStringDataset 标签
  18. 东北大学软件项目管理与过程改进bb平台期末复习题整理(Part Four)
  19. 怎么把php项目导入dw,DreamweaverCS5怎么导入项目?
  20. 安卓班级同学录校友录系统app毕业设计

热门文章

  1. java中String类和StringBuffer类实例详解
  2. 装ubuntu_系统安装_win10下安装Ubuntu后,启动时无win10选项的解决办法。
  3. wpf listbox绑定不跟新_苦逼的程序员,Python又有新版本3.9,跟还是不跟?
  4. koa mysql mongodb_koa如何连接MongoDB
  5. NYOJ 表达式求最值305
  6. 双向绑定 当obj的值修改时_Vue3为什么选择Proxy做双向绑定?
  7. 挑战程序设计竞赛_竞赛通知 | 第二届全国高校计算机能力挑战赛——程序设计赛来啦...
  8. python生成折线图怎么对特定点做颜色_python库matplotlib绘制折线图,散点图以及设置样式...
  9. 【2019年天梯赛L2-029】特立独行的幸福(模拟)
  10. SLAM--intel realsense2在ORB SLAM2 和 ORB SLAM3下建图和重定位(ubuntu 20.04, opencv 4.2.0 以上)