Managing Control Files
这章解释说明了怎样为你的数据库创建和维护控制文件,包含以下章节:
· What Is a Control File?—控制文件时什么
· Guidelines for Control Files—控制文件的指导方针
· Creating Control Files—创建控制文件
· Troubleshooting After Creating Control Files—在创建控制文件后的疑难解答
· Backing Up Control Files—备份控制文件
· Recovering a Control File Using a Current Copy-使用当前副本来恢复控制文件
· Dropping Control Files—删除控制文件
· Displaying Control File Information—显示与控制文件有关的信息
参考:
Part III, "Automated File and Storage Management" for information about creating control files that are both created and managed by the Oracle Database server
=>控制文件是什么?
每个oracle数据库都有一个用来记录数据库物理结构的小的二进制控制文件。这个控制文件包括:
· 数据库的名字
· 相关联的数据文件和重做日志文件的名字和他们的位置
· 数据库创建时的timestamp
· SCN
· 检查点指针信息
每当数据库打开时,控制文件必须是有效的。如果没有控制文件,数据库就不能加载(mount)而且恢复都会很困难.。默认情况下,在数据库被创建时,至少有一个控制文件的副本被创建
在Oracle的数据库被创建时,控制文件在相同的时间也被创建了。在许多操作系统中,控制文件被创建了多个。在数据库被创建期间,你也可以创建两个或更多的控制文件。如果你丢失了控制文件或者想要在控制文件中做一些特别的设置,这时你的控制文件可以创建的稍迟点。
=>控制文件的指导方针
这节介绍了让你使用来管理数据库控制文件的指导方针,包含以下主题:
· Provide Filenames for the Control Files---指明控制文件的文件名
· Multiplex Control Files on Different Disks---在不同硬盘上的复用控制文件
· Back Up Control Files—备份控制文件
· Manage the Size of Control Files—管理控制文件的大小
1、指明控制文件的文件名
你可以使用数据库初始化参数文件中的control_files初始化参数来指明控制文件的文件(参见"Creating Initial Control Files"),在startup期间,实例会识别和打开参数文件中列出的所有的文件,and在数据库操作期间,实例会写入和维修所有已列出的控制文件.
如果在数据库创建前你还不能用control_files来制定文件:
· 如果你不使用Oracle-managed files,那么数据库将会创建一个控制文件而且会使用默认的文件名。默认的文件名又操作系统来制定。
· 如果你使用Oracle-managed files,而且你设置了初始化参数文件来确定控制文件的名字和位置。
· 如果你使用Automatic Storage Management,,那么你可以在DB_CREATE_FILE_DEST 和 DB_RECOVERY_FILE初始化参数中放置不完全的ASM文件名。ASM然后会自动的在合适的位置创建控制文件。参考"About ASM Filenames" and "Creating a Database in ASM" 二获取更多的信息.
2、在不同硬盘上的复用控制文件
每个Oracle数据库应该至少有两个控制文件,分别存储在不通的物理磁盘上。如果因某个磁盘故障而导致其上的控制文件损坏,那么那个与之关联的实例必须被关闭。一旦磁盘被修复好,那个损坏的控制文件将会用另一个磁盘上的控制文件的完整副本来还原,然后实例重启。在这种情况下,不需要媒介恢复
复用控制文件的特真如下:
· 数据库写入初始化参数文件中的初始化参数control_files列出的所有控制文件的文件名
· 在数据库操作期间,数据库只读取control_files参数列举的第一个文件
· 在数据库操作期间,如果控制文件中的任意一个无效,实例会变得不能操作,应当终止
注意:
Oracle强烈建议:你的数据库应有最低标准的两个控制文件,而且他们要分别位于单独的物理磁盘上
复用控制文件是存储在每个磁盘驱动器控制文件的副本,如果redo log 是多路复用的,那么它存储了redo log组的成员。通过保存这些位置的控制文件,你最小化风险,所有的控制文件和redo log文件组在单个磁盘故障时都会丢失
3、备份控制文件
这是真正的开始:你每次改变你的数据库的物理结构时,备份控制文件时非常重要的。结构改变包括:
· 增加、删除或者重命名数据文件
· 增加或者删除表空间,或者改变表空间的读/写状态
· 增加或者删除重做日志文件或组
备份控制文件的方法请见以下章节
4、管理日志文件的大小
来确定一个控制文件的大小的主要参数是Create database语句里的MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、和MAXINSTANCES参数。这些参数的增长增加了与之相关联的数据库中的控制文件的大小.
5、创建控制文件
这节讲述了怎样创建控制文件,主要包含以下主题:
· 创建其他副本、重命名、和重定位控制文件
=>创建初始化控制文件
等你执行CREATE DATABASE语句时,初始化控制文件被创建。在数据库创建期间,控制文件的名字就被初始化参数文件中的CONTROL_FILES参数指定。下面是一个CONTRO_FILE初始化参数的例子:
CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
/u02/oracle/prod/control02.ctl,
/u03/oracle/prod/control03.ctl)
如果在数据库创建时你指定的当前的文件名已存在,那么你必须在CREATE DATABASE语句中指定CONTROLFILE REUSE 从句否则会触发一个ERROR 如果旧控制文件的大小参数设置和新建的控制文件的大小参数设置不相同也不能使用REUSE从句。
等控制文件的个数改变时,在许多ORACLE数据库的版本中控制文件的大小也改变。配置参数如:
MAXLOGFILES
, MAXLOGMEMBERS
, MAXLOGHISTORY
, MAXDATAFILES
, and MAXINSTANCES
都会引起控制文件的大小变化
你可以改变初始化参数CONTROL_FILES的值来增加更多的控制文件或者改变以存在的控制文件的名字或路径。
=>,创建其他副本、重命名、和重定位控制文件
你可以可以通过复制已存在的控制文件到新的位置或者或者增加control files的文件列表 来创建一个其他副本。同样你也可以通过控制文件来重命名已存在的控制文件或者它的路径,而且你也可以在控制文件列表里改变文件名。这两种情况下,为了保证在以上过程中控制文件不改变,你需在复制控制文件前关闭数据库.
To add a multiplexed copy of the current control file or to rename a control file:
1. 关闭数据库.
2. 用操作系统命令拷贝一个已存在的控制文件到一个新的位置
3. 编辑数据库的初始化参数文件的CONTROL_FILE参数来增加一个新的控制文件名或者改变以存在的控制文件名。
4. 重启数据库
=>创建新的控制文件
这节讨论什么时候和怎样创建控制文件两部分.
When to Create New Control Files
在你创建一个新的控制文件时需注意以下情况:
· 数据库的所有控制文件都被永久的破坏了而你有没有它们的备份
· 你想要改变数据库的名字
例如:等另一个数据库在环境变量里的名字和你的相冲突时,你需要改变你数据库的名字
注解:
你可以使用DBNEWID实用工具来改变数据库的名字或者DBID。如想使用这个工具请参考Oracle Database Utilities
- 早于10.2.0的版本,兼容级别被设置成了一个值,而且你必须更改数据库配置。它与CREATE DATABASE里的以下参数有关联:
MAXLOGFILES
,MAXLOGMEMBERS
,MAXLOGHISTORY
, andMAXINSTANCES
。如果兼容性
10.2.0
或者更高版本,如果需要做这样的改变,你就不需要创建新的控制文件,控制文件会自动扩展。如有必要,需适应新的配置信息
例子:
假设等你创建数据库或者重建控制文件时,你设置MAXLOGFILES的值为3.现在你想用alter database命令增加第4个redo log 文件组。如果兼容性是10.2.0或者更高,你可以做这些and控制文件会自动扩展已适应新的log file信息。然而,等兼容性早于10.2.0 and 你用ALTER DATABASE 命令做以上操作会产生ERROR and 你必须首先创建一个新的控制文件.
兼容性的信息请参考"The COMPATIBLE Initialization Parameter and Irreversible Compatibility".
The CREATE CONTROLFILE Statement
你可以使用Create controlfile语句为数据库创建一个新的控制文件。以下的语句为prod数据库创建了一个控制文件:
CREATE CONTROLFILE
SET DATABASE prod
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
'/u01/oracle/prod/redo01_02.log'),
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
'/u01/oracle/prod/redo02_02.log'),
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
'/u01/oracle/prod/redo03_02.log')
RESETLOGS
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
'/u01/oracle/prod/users01.dbs' SIZE 5M,
'/u01/oracle/prod/temp01.dbs' SIZE 5M
MAXLOGFILES 50
MAXLOGMEMBERS 3
MAXLOGHISTORY 400
MAXDATAFILES 200
MAXINSTANCES 6
ARCHIVELOG;
警示:
· CREATE CONTROFILE 语句可能破坏某个特定数据文件和重做日志文件。省略一个文件名可以都是那个文件的某些数据或者无法访问整个数据库。用这条语句时需谨慎,确信按照"Steps for Creating New Control Files".里的步骤执行
· 如果在创建新的控制文件之前,数据库已被迫启动了日志记录而且你希望它继续启用,那么你必须在CREATE CONTROFILE语句中指定FORCE LOGGING从句。参见"Specifying FORCE LOGGING Mode".
Steps for Creating New Control Files
完成下面的步骤来创建一个新的控制文件
1. 列举出所有的数据文件和重做日志文件
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
如果你不能这样列出而且你的控制文件已损坏,以至于数据库打不开。尝试找出所有数据文件和重做日志文件的位置来构建数据库。一旦新的控制文件被创建,在第5步中为指定的文件将无法恢复。此外,如果你省略某个文件来构建SYSTEM表空间,那么你将不能回复数据库
2. Shut down the database.
如果数据库是打开的,尽可能的正常关闭数据库。等实在没办法是才用IMMEDIATE或者ABORT从句
4. 启动一个新的实例,但是不能MOUNT或者OPEN数据库
STARTUP NOMOUNT
5. 使用CREATE CONTROLFILE语句创建新的控制文件
如果你除了控制文件还丢失了若干重做日志文件组的话,那么你在创建新的控制文件时,需指定RESETLOGS从句。在这种情况下,你需要恢复那些丢失的重做日志(第8步)。如果你重命名数据名,那么你必须指定RESETLOGS从句。其他情况,选择NORESLOGS从句
7. 修改CONTROL_FILE参数文件,让它指示现在数据库上所有的控制文件。如果你重命名了数据库,你需要修改instance文件中的DB_NAME参数来指定那个新的名字。
如果你把创建控制文件作为恢复数据库的一步方,恢复数据库。如果新的控制文件创建时使用了NORESETLOGS从句,那么你关闭数据库恢复,做数据库的完全恢复
如果新的控制创建时使用了RESETLOGS从句,那么你必须指定BACKUP CONTROL FILE。如果
你丢失了在线或者归档重做日志文件或数据文件,使用以上过程来恢复丢失的文件
1>如果你不能执行恢复或完全恢复,那么关闭数据库恢复,已normal打开数据库
ALTER DATABASE OPEN;
2>等你创建控制文件时指定了RESETLOGS:
ALTER DATABASE OPEN RESETLOGS;
下面的视图显示了控制文件的信息:
The following views display information about control files:
View |
Description |
V$DATABASE |
Displays database information from the control file |
V$CONTROLFILE |
Lists the names of control files |
V$CONTROLFILE_RECORD_SECTION |
Displays information about control file record sections |
V$PARAMETER |
Displays the names of control files as specified in the CONTROL_FILES initialization parameter |
这个例子列吃了控制文件的名字:
SQL> SELECT NAME FROM V$CONTROLFILE;
NAME
-------------------------------------
/u01/oracle/prod/control01.ctl
/u02/oracle/prod/control02.ctl
/u03/oracle/prod/control03.ctl
原文地址:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/control.htm#ADMIN10064