控制文件对于Oralce数据库的作用,就好像微软操作系统中注册表的作用一样。控制文件是一个比较小的二进制文件,记录着数据库的结构信息。如果数据库控制文件发生孙华的话,则Oracle将无法正常启动。通常情况下,在创建数据库时会自动创建控制文件;并且当数据库的结构发生变化时,也会自动修改自动文件的内容。
但是,当数据库遇到一些故障导致控制文件发生损坏时,数据库管理员可能需要手工重新创建控制文件,以解决数据库的启动故障。笔者在这里就谈谈手工创建控制文件的相关策略。希望能够帮助大家解决控制文件损坏导致的数据库故障问题。
一、什么情况下要手工重新创建控制文件?
通常情况下,在数据库创建过程中,系统就会自动创建控制文件。不过在遇到一些比较特殊的情况是,数据库管理员就需要手工重新创建新的控制文件。这些特殊情况,据笔者所知,主要有如下两种情况。
一是希望改变某个数据库参数的永久性设置。在创建数据库的时候,数据库管理员需要设置一些永久性的参数,如数据库的名字等等。有时候在一些特殊的情况下,需要修改这些永久性的参数。如企业后来随着规模的扩大,一台数据库服务器已经不能够满足企业日常作业的需要。为此,数据库管理员决定采用分布式环境来改善数据库的性能。可是,在刚创建数据库的时候,由于没有考虑到这种情况,所以给数据库命名的时候比较简便。现在需要创建多个数据库,管理员为了统一各个数据库的命名策略,即可能需要更改数据库的名字,以符合这个命名规则。遇到这种情况,数据库管理员必须要手工重新建立控制文件,才能够更改数据库名字。
二是所有数据库的控制文件都遭受到永久性损坏。通常情况下,数据库处于Archivelog模式时,ARCH进程会自动用归档日志文件名和日志序列号之类的信息修改控制文件。而当管理员利用RMAN执行备份操作时,RMAN的备份信息也会被记录到控制文件中。所以,如果当控制文件发生永久性损坏时,那么对于数据库的影响是致命的。如此此时,数据库管理员因为一时疏忽,没有做好数据库控制文件的备份(或者说备份文件比较早),那么此时数据库管理员不得不手工创建新的控制文件。
二、如何创建控制文件?
手工创建新的控制文件比较麻烦。不过数据库管理员若按照下面的步骤一步步来的话,还是可以创建一个完好无损的控制文件。
第一步:制作一个包含数据库据所有数据文件和重做日志文件的列表。
因为数据库启动时必须要有数据文件的相关信息。为此要创建新的控制文件,数据库管理员首先就需要收集数据库所有数据文件和重做日志文件的列表。这个列表可以从两个地方取得。一是如果对控制文件进行了备份的话,则可以从备份的控制文件中获取这些数据文件与重做日志文件的相关信息。如果没有控制文件的备份或者控制文件备份损坏的话,则可以从动态性能视图中查询相关的信息。如利用查询语句SELECT NAME FROM V$DATEFILE语句来查询所有的数据文件信息。此时的一个前提条件就是存在控制文件的最新备份文件或者数据库仍然可以正常启动。也就是说,如果需要改变数据库的永久性参数则可以利用这种方式获取所需要的信息。
但是如果此时数据库已经无法启动无法找到这些信息,或者控制文件已经受到严重破坏又没有合适的控制文件备份的话,那么上面这些方法就不适用了。此时数据库管理员只有人工定位构成数据库的所有数据文件和重做日志文件。也就是说,数据库管理员要根据日常工作中的笔记来整理这些记录。通常情况下,笔者新建数据文件的时候,都会有书面的记录。当遇到这个意外情况时,这些书面的记录就起到作用了。
注意如此此时数据库管理员收集到的数据文件不全,那么在数据库启动的时候就会发生错误。此时管理员就需要根据系统提供的错误信息来查找原因。在创建新的控制文件并且使用它打开数据库之后,Oracle会对数据字典和控制文件的内容进行检查。如果发现数据字典包含了某个数据文件、而控制文件中则没有列出这个数据文件,Oracle数据库就会报错。Oracle将会在新的控制文件中创建一个名为Missingnnn占位符入口。这里最后面的NNN是十进制的文件编号。此时数据库管理员就可以凭借这个信息来判断是否缺少必要的数据文件。找到数据文件之后,可以通过修改这个值,让数据库找到相对应的真正数据文件。
第二步:关闭数据库。
如果数据库仍然处于启动状态,需要把数据库先关闭掉。在关闭的时候,如果能够采用正常模式关闭的,则最好采用正常模式关闭。而其他关闭模式,则是不得已而为之的做法。采用正常模式关闭,可以减少数据库重新启动过程中可能出现的问题。
另外为安全起见,关闭数据库之后,最好把数据库中所有的数据文件、重做日志文件、参数文件备份到其他地方。这主要是为了不小心而给数据库造成无法挽回的损失。虽然这不是必须的,但是笔者强烈建议这么做。
第三步:开始创建新的控制文件。
数据库管理员备份好所有的数据文件、重做日志文件、参数文件之后,就需要启动一个新的例程。但是不要加载数据库或者打开数据库。也就是说,此阿如STARTUP NOMOUNT命令。数据库启动分三个步骤,分别为启动例程、加载数据库、打开数据库。此时数据库管理员一定要注意只要启动一个进程即可,不需要加载数据库或者打开数据库。否则的话,控制文件就无法创建成功。
启动例程后,数据库管理员要采用Create Controfile语句来创建一个新的控制文件。如果除了控制文件外,还丢失了某些重做日志组的话,还需要使用Resetlogs参数。也就是说,需要恢复丢失的重做日志。另外,跟数据库控制文件损害不同,如果只是更改数据库的名字,则也需要使用这个参数。建立好这个控制文件后,还没有全部完工。因为此时的控制文件中还没有初始化参数。数据库管理员还需要手工修改控制文件中的初始化参数。为了防止后续的工作导致新建的控制文件重新损坏,在配制控制文件的初始化参数的之前,最好对这个控制文件先进行备份。如此的话,即使手工修改控制文件初始化参数有错的话,也不用重头来过。而只需要把新建立的控制文件还原即可。
第四步:编辑控制文件初始化参数。
创建了新的控制文件之后,数据库管理员还需要根据实际的情况来修改控制文件的初始化参数。如数据库管理员需要更改数据库名字的话,就需要更改DB_NAME参数。在修改这个控制文件的时候,一定要小心。他跟微软操作系统的注册表一样,一个字符都不能够差的。为此,对于这些初始化参数,如果能够通过复制、粘贴等手段取得的,最好直接通过复制粘贴来修改初始化参数。手工输入的话,难免为出现错误。另外,再强调一次,跟修改注册表一样,对控制文件中的内容进行修改之前,最好先对这个控制文件进行备份。那么即使控制文件的初始参数有什么不准确的地方,也可以尽量采取一些弥补措施。
第五步:有选择的恢复数据库。
数据库管理员可以根据实际需要,选择是否需要恢复数据库。一般来说,这个步骤不适必须要进行的。即使控制文件重新建立后没有重新恢复数据库,此时也已经可以正常打开数据库了。
虽然Oracle数据库可以通过手工建立控制文件的方式来修复控制文件的错误。但是,笔者还是不建议采用这种方式来挽回控制文件损害而造成的损失。笔者建议,最好在数据库部署的时候采用磁盘阵列技术或者控制文件多路复用技术,在提高控制文件的安全性。并且,最好控制文件的日常备份工作,也可以免去手工建立控制文件的麻烦。手工重新建立控制文件只是一种不得已而为知的方法。而且,收集的资料如果不全的话,还可能会造成一些异常的错误。为此,数据库管理员应该尽量避免这种情况的发生。多采取一些预先防治的措施。而不是等到控制文件损坏了再临阵抱佛脚,这是非常不负责任的方法。总之手工创建新的控制文件是一种应急的方法,不可多行。
oracle数据库通过控制文件保持数据库的完整性,一旦控制文件被破坏数据库将无法启动,因此建议采用多路控制文件或者备份控制文件的方法。
控制文件是数据库建立的时候自动生成的二进制文件,只能通过实例进行修改,如果手动修改的话会造成控制文件与物理信息不符合,从而导致数据库不能正常工作。
[color=blue]另一个版本,感觉不错[color]
控制文件主要包括下面内容:
1.控制文件所属数据库的名字,一个控制文件只能属一个数据库
2.数据库创建时间
3.数据文件的名称,位置,联机,脱机状态信息
4.所有表空间信息
5.当前日志序列号
6.最近检查点信息
其中,数据库名称,标识和创建时间在数据库创建时写入;数据文件和重做日志名称和位置在增加,重命名或者删除的时候更新;表空间信息在增加或者删除表空间的时候进行更新。
在初始化参数文件中control_files参数主要来描述控制文件的文件名跟物理路径,如下所示:
control_files=("d:oracleoradataoradbcontrol01.ctl")
该参数只设置一个,也可以设置多个,如下所示:
control_files=("d:oracleoradataoradbcontrol01.ctl"
"e:oracleoradataoradbcontrol02.ctl",
"f:oracleoradataoradbcontrol03.ctl")
这个方法叫做多路控制文件,oracle可以利用这个方法恢复被破坏的控制文件,oracle最多允许设置8个多路控制文件。
必须所有的多路控制文件都完整正确数据库才能正常启动,只要丢失一个或者一个内容不正确数据库就不能顺利启动。
对控制文件的管理原则:
1.明确控制文件的名称和存储路径
参数设置错误将无法打开数据库,数据库打开以后,实例将同时写入所有的控制文件但是只会读取第一个控制文件的内容。
2.为数据库创建多路控制文件
a.多路控制文件内容必须完全一样,oracle实例同时将内容写入到control_files变量所设置的控制文件中。
b.初始化参数control_files中列出的第一个文件是数据库运行期间唯一可读取的控制文件。
c.创建,恢复和备份控制文件必须在数据库关闭的状态下运行,这样才能保证操作过程中控制文件不被修改。
d.数据库运行期间如果一个控制文件变为不可用,那么实例将不再运行,应该终止这个实例,并对破坏的控制文件进行修复。
3.将多路控制文件放在不同的硬盘上
4.采用操作系统镜像方式备份控制文件
5.手工方式备份控制文件
应该及时备份特别是发生了如下的操作的时候:
添加删除重命名数据文件
添加删除表空间,改变表空间读写状态
添加删除重做日志文件
如果手工备份不及时的话,就会产生备份的控制文件与正在使用的控制文件不一致,那么利用备份的控制文件启动数据库时会破坏数据库的一致性完整性,甚至不能启动数据库,因此手工备份控制文件要注意及时备份。
创建多路控制文件
利用spfile文件创建多路控制文件
(spfile以二进制文本形式存在,不能用vi编辑器对其中参数进行修改。文件格式为spfileSID.ora。如果要对spfile文件进行修改,可以采用SQL语言)
1.利用SYS帐号登陆SQL*PLUS,查询一下控制文件信息视图
SQL>select name from v$controlfile;
结果显示为:
NAME
----------------------------------
d:oracleoradataoradb01control01.ctl
e:oracleoradataoradb01control02.ctl
f:oracleoradataoradb01control03.ctl
这里列出了控制文件的名称以及位置
2.更改spfile中控制文件的信息:(增加了一个新的控制文件)
SQL>alter system set control_files=
'd:oracleoradataoradb01control01.ctl',
'e:oracleoradataoradb01control02.ctl',
'f:oracleoradataoradb01control03.ctl',
'g:oracleoradataoradb01control04.ctl'
scope=spfile
结果显示为:
系统已经更改。
(第二步的操作需要注意的是:进行这些操作,必须是在DB启动的时候,否则会弹出“ORACLE not available”错误。)
3.关闭数据库
4.在操作系统中将已有的控制文件复制,修改名称保存到刚才增加控制文件的指定位置。(这步必须做的,否则数据库无法启动)
5.重新启动控制文件,使控制文件改变生效。
管理控制文件
备份控制文件
SQL> alter database backup controlfile to ‘d:\20080326.ctl’
数据库已更改。
然后从这个备份的位置直接把文件拷贝回之前的目录覆盖就好了。
删除控制文件(删除某一路的控制文件)
spfile文件
1.利用SYS帐号登陆SQL*PLUS,查询一下控制文件信息视图
SQL>select name from v$controlfile;
结果显示为:
NAME
----------------------------------
d:oracleoradataoradb01control01.ctl
e:oracleoradataoradb01control02.ctl
f:oracleoradataoradb01control03.ctl
g:oracleoradataoradb01control04.ctl
这里列出了控制文件的名称以及位置
2.更改spfile中控制文件的信息,删除一个新的控制文件
SQL>alter system set control_files=
'd:oracleoradataoradb01control01.ctl',
'e:oracleoradataoradb01control02.ctl',
'f:oracleoradataoradb01control03.ctl',
scope=spfile
结果显示为:
系统已经更改。
3.关闭数据库
4.在操作系统中删除控制文件
5.重新启动数据库,使控制文件生效
- 浏览: 377785 次
- 性别:
- 来自: 深圳
最新评论
-
qw575408794:
请问 直角平面坐标 转 经纬度 怎么转 java实现,或者 ...
关于经纬度坐标转换的方法 -
horsely:
JavaScript图表FusionCharts免费在线公开课 ...
FusionCharts在Java中的基本使用 -
rzh0001:
good job
Excel 日期格式与数字格式转换的BUG -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
[JAVA]定时任务之-Quartz使用篇 -
liuweihug:
fusioncharts 图片2种方式使用java导出 - 项 ...
FusionCharts在Java中的基本使用
发表评论
-
cpu架构为power的JDk部署 jdk7 ppc64
2015-01-29 11:49 1993IBM提供了在cpu架构为power的linux操作系统的J ... -
CentOS 6.3下Samba服务器的安装与配置
2015-01-04 11:11 2602最近公司存储服务器 ... -
Intellij IDEA 快捷键整理
2014-10-21 15:54 903【常规】 Ctrl+Shift + Enter,语句完成 ... -
Maven: javax.sql:jdbc-stdext:2.0
2014-10-21 15:05 940今天搞maven遇到了这个小问题,google下,也没合适的 ... -
MySQL监控、性能分析——工具篇
2014-10-15 14:36 4944MySQL越来越被更多企业接受,随着企业发展,MySQL存储 ... -
Tomcat启动分析 【转】
2014-10-13 16:07 9181 - Tomcat Server的组成 ... -
MySQL Migration Toolkit initialized java loader 出错提示jre版本问题
2014-09-29 13:55 1814如果initialized java loader 出错提示j ... -
MySQL Migration Toolkit的使用
2014-09-29 13:54 1155MySQL Migration Toolkit是MySQL出 ... -
Oracle to MySQL
2014-09-29 13:52 10591.java 实体的移植 主键生成策略有JPA 提供与 ... -
jacob常用异常处理
2014-09-17 16:53 3363com.jacob.com.ComFailException ... -
java 使用jacob 操作word
2014-09-17 16:39 2402/** * word文档 */ ... -
HttpCLient实现对被GZip压缩过的Response进行解压
2014-05-22 15:33 12057发送请求(要求服务端对response进行GZip压缩): ... -
关于HttpClient的总结
2014-05-22 14:28 1252关于Httpclient的使用总结如下: (1)当Htt ... -
设置Tomcat的JAVA_OPTS参数
2014-03-20 17:23 1095修改 TOMCAT/bin/catalina.bat添加se ... -
Java_Thumbnailator
2014-03-20 14:49 774Thumbnailator 是一个为Java界面更流畅的缩略图 ... -
maven添加oracle驱动
2013-10-09 16:44 1286由于oracle商业版权问题,maven是不可以直接下载ja ... -
直接使用SQL操作Oracle空间数据的原理以及配置方法
2013-07-10 16:43 1799最近一直接到售前的请求,客户现场成功部署SDE for Or ... -
ORA-22992: 无法使用从远程表选择的 LOB 定位器
2013-07-09 11:08 1084现象描述:执行一条语句时报错,该语句是:select * ... -
ORA-28575:无法打开与外部过程代理程序的RPC连接
2013-07-09 10:54 19001. 修改listener.ora文件,增加如下内容,注意该 ... -
DBMS_STATS分析表
2013-07-05 16:54 950作用:DBMS_STATS.GATHER_TABLE_ST ...
相关推荐
### 手工创建Oracle数据库详解 #### 知识点一:手工创建Oracle数据库的环境配置与准备工作 在手工创建Oracle数据库之前,确保操作系统环境、Oracle软件版本以及必要的环境变量配置到位至关重要。根据提供的内容,...
如何手工创建Oracle数据库是一个涉及多个步骤的技术过程,尤其对于数据库管理员(DBA)来说,了解这些步骤至关重要。在本文中,我们将详细讨论如何在Red Hat Enterprise 3操作系统上手动创建一个Oracle 10g Release 2...
控制文件对于Oralce数据库的作用,就好像微软操作系统中注册表的作用一样。控制文件是一个比较小的二...通常情况下,在创建数据库时会自动创建控制文件;并且当数据库的结构发生变化时,也会自动修改自动文件的内容。
手工创建Oracle数据库时,学习如何创建控制文件、数据文件和重做日志文件的备份,以及如何利用RMAN(Recovery Manager)进行恢复操作,是保证数据安全的关键。 最后,性能优化是Oracle数据库管理员必备的技能。这...
创建Oracle数据库实例通常涉及以下步骤: 1. **配置环境变量**:设置如ORACLE_HOME、ORACLE_SID等环境变量,这些变量指定了Oracle软件的位置和即将创建的实例的标识。 2. **创建参数文件(init.ora)**:这是...
手工创建Oracle数据库涉及多个步骤,包括系统环境准备、目录结构搭建、初始化参数及口令文件配置、实例服务设置、数据库实体创建以及数据文件和日志文件的定义。每个步骤都需仔细操作,确保所有参数正确无误,以保障...
首先,手工创建Oracle数据库时,会遇到一个关键问题:新创建的数据库无法通过口令文件进行连接。这通常涉及到Oracle数据库的初始化参数设置。当`REMOTE LOGIN PASSWORD FILE`参数被设置为`EXCLUSIVE`或`SHARED`时,...
在Linux环境下手工创建Oracle数据库是一项复杂而精细的工作,涉及到多个步骤和配置。Oracle数据库是企业级的关系型数据库管理系统,广泛应用于各种大型系统中。在这个过程中,我们需要了解Oracle的安装、配置、初始...
43. 手工创建数据库的全部脚本及说明 44. 提高Oracle数据库应用系统安全的举例与分析 45. 在ORACLE7数据库并发控制技术的研究及其应用 46. 在SQLPlus中insert进的都是中文的,为什么一存入服务器后,再select出的...
手动创建Oracle数据库是一个复杂但关键的过程,特别是在企业级应用环境中,确保数据的高可用性和安全性。根据提供的内容,我们可以深入探讨这一过程中的各个步骤及其背后的技术细节。 ### 手工创建相关目录 首先,...
在Oracle数据库管理系统中,手工创建数据库是一个复杂而细致的过程,涉及到多个步骤和脚本的执行。这个过程通常由经验丰富的DBA(数据库管理员)来完成,以确保数据的安全性和系统的稳定性。以下是对“手工创建...
3. 创建目录:Oracle数据库需要特定的目录来存放数据文件、控制文件、归档日志、跟踪文件和转储信息。在Unix/Linux系统中,你可能需要创建如/data/oracle/data、/data/oracle/log、/data/oracle/backup等目录,并...
Oracle 10G 手工创建数据库是一个涉及多个步骤的过程,包括配置环境变量、创建必要的目录结构、生成密码文件、创建参数文件、启动数据库服务以及最终的数据库创建。以下是对这些步骤的详细解释: 1. **设置实例名**...
创建Oracle数据库可以通过手工方式,即使用命令行工具,或者使用图形化的Database Configuration Assistant (DBCA)。在着手创建数据库之前,必须完成以下准备: 1. 安装Oracle软件:确保已安装了对应版本的Oracle...
#### 一、Oracle数据库创建与管理 **1.1 Oracle软件的获取与安装** - **Oracle软件的获取**: Oracle官方提供了多种版本的数据库软件供用户下载,包括Oracle Database Enterprise Edition、Standard Edition以及...
创建Oracle数据库需要经历多个步骤,首先是硬件配置,包括选择合适的主机、存储设备、网络设备,并确保它们满足Oracle的最低系统要求。接着是软件安装,这涉及到环境确认、参数调整,比如根据主机配置调整系统参数,...
此外,还会讲解手工创建数据库的步骤,包括实例创建、表空间设定、数据文件和控制文件的管理,以及数据库的启动、关闭和挂载操作。 第5章:用户管理与安全性 本章重点讨论Oracle数据库中的用户账户管理,包括用户...