关于Oracle控制文件

控制文件用于记录和维护数据库的物理结构,当启动例程并打开数据库时,oracle会根据初始化参数control files 在例程和数据库之间建立关联.装载数据库(MOUNT状态),ORACLE会安装初始化参数control_files定位并打开控制文件和重做日志.

控制文件时oracle数据库最重要的物理文件.控制文件不仅记载了数据库的物理结构(数据文件的名称和位置,重做日志的名称和位置).装载和打开数据库时也需要这些文件,而且它们还记载了日志序列好,检查点和日志历史信息.同步和恢复数据库时需要这些信息.

控制文件主要记载了以下信息

数据库名称

数据文件名称和位置

重做日志名称和位置

表空间名称

当前日志序列好

检查点信息

日志历史信息

RMAN信息

控制文件主要是由永久参数和RMAN信息组成.

永久参数包括

MAXINSTANCES:用于指定可以同时访问数据库的最大例程个数

MAXDATAFILES:用于指定oracle数据库的最大数据文件个数

MAXLOGFILES:用于指定oracle数据库的最大日志组个数

MAXLOGMEMBERS:用于指定每个日志组的最大日志成员个数.

MAXLOGHISTORY:用于指定控制文件可记载日志历史的最大个数.

使用RMAN执行备份操作时,RMAN备份信息会被记载到控制文件中.初始化参数control_file_record_keep_time指定了RMAN备份信息在控制文件中的保留时间,默认值为7.

多元化控制文件

使用PFILE多元化控制文件

如果在启动例程时使用了pfile,在多元化控制文件时需要手工编辑文本参数文件,并修改初始化参数control_files.具体步骤如下:

1,手工修改初始化参数control_files

Control_files=d:democontrol01.ctl,e:democontrol02.ctl

此时e:democontrol02.ctl文件还不存在.

2,关闭数据库,

3,复制控制文件

4,启动数据库.

因为例程使用PFILE,所以启动时应该指定PFILE全名

STARTUP PFILE=%oracle_home%databaseinitdemo.ora

使用spfile多元化控制文件

如果启动例程使用spfile,在多元化控制文件时需要执行ALTER SYSTEM命令修改初始化参数control_files

1,修改初始化参数

C:sqlplus sys/oracle@demo as sysdba

Sql>ALTER SYSTEM SET control_files=

‘d:democontrol01.ctl’,’e:democontrol02.ctl’

SCOPE=SPFILE;

此时e:democontrol02.ctl还不存在.

2,关闭数据库,

3,复制控制文件

4,启动数据库.

处理意外丢失的控制文件

多元化控制文件以后,如果某个控制文件丢失或损坏,数据库将无法装载,在启动例程并装载数据库时,会报告如下错误;

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

出现如上错误时,应修改初始化参数control_files,去掉损坏或丢失的控制文件,然后重新启动数据库.

重建控制文件.

以建立demo数据库的控制文件为例,说明重新建立控制文件的方法

1,修改初始化参数CONTROL_FILES,改变控制文件的位置.

如果控制文件所在的磁盘出现损坏,那么必须使用ALTER SYSTEM命令改变控制文件的存放位置.当例程处于NOMOUNT状态时,执行以下命令可以改变控制文件位置.

Alter system set control_files=’c:democontrol01.ctl’,’d:democontrol02.ctl’ scope=spfile;

2,关闭例程

3.启动例程(startup nomunt)

建立控制文件时,要求例程必须处于NOMOUNT状态.正确地设置了初始化参数CONTROL_FILES,玉女国国重新启动例程,并应检查初始化参数CONTROL_FILES的设置是否正确.

Startup nomount

Select value FROM v$parameter where name=’control_files’;

4,建立控制文件.

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
    MAXLOGFILES 5
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 292
   LOGFILE GROUP 1 ('/u01/app/oracle/oradata/orcl/redo01a.log',
                    '/u01/app/oracle/oradata/orcl/redo01b.log'),
           GROUP 2 ('/u01/app/oracle/oradata/orcl/redo02a.log',
                    '/u01/app/oracle/oradata/orcl/redo02b.log'),
           GROUP 3 ('/u01/app/oracle/oradata/orcl/redo03a.log',
                    '/u01/app/oracle/oradata/orcl/redo03b.log')
   DATAFILE '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
            '/u01/app/oracle/oradata/orcl/system01.dbf',
            '/u01/app/oracle/oradata/orcl/tbs_a01.dbf',
            '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
            '/u01/app/oracle/oradata/orcl/users01.dbf'
CHARACTER SET ZHS16GBK;

其中,DATABASE用于指定数据库名,该名称必须和初始化参数db_name完全一致;

NORESETLOGS用于指定仍然使用原有重做日志,如果不希望使用原有重做日志,可以指定RESETLOGS选项;

LOGFILE用于指定数据库原有重做日志大组号,尺寸已经对应的日志成员;

DATAFILE用于指定数据库原有的数据文件

CHAARACETR SET 用于指定数据库字符集.

5,打开数据库

Alter database open;

如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).

6,增加临时文件.

打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.

Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760

Reuse autoextend off;

修改永久参数

当某个DBA执行CREATE DATABASE ADD LOGFILE MEMBER为某日志组增加日志成员时,oracle显示如下错误信息:

ALTER DATABASE ADD LOGFILE MEMBER

*

ERROR at line 1:

ORA-00357:too many members specified for log file,the maximum is 2

出现如上错误时,表示日志组成员个数超出了永久参数MAXLOGMEMBERS的设置.

在这种情况下,为了给日志组增加多个日志成员,必须修改永久参数MAXLOGMEMBERS.

然后才可以增加多个日志成员.下面以限制DEMO数据库最多10个日志组,每个日志组最多4个日志成员为例,说明修改永久参数的方法.

1,启动例程 STARTUP NOMOUNT

2,建立控制文件.

建立控制文件时必须提供正确的数据文件和重做日志清单.因为原有控制文件仍然存在,所有必须指定REUSE选项覆盖控制文件.

CREATE CONTROLFILE REUSE DATABASE “ORCL” NORESETLOGS
MAXLOGFILES 10
MAXLOGMEMBERS 4
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;

3.打开数据库

Alter database open;

如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).

4增加临时文件.

打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.

Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760

Reuse autoextend off;

修改数据库名称

使用CREATE CONTROLFILE命令冲击建立控制文件.

使用工具DBNEWID改变数据库名.

下面以DEMO数据库名称修改为EXAMPLE为例,说明通过建立控制文件修改数据库名称的方法.

1,初始化参数DB_NAME

因为oracle数据库名称是通过初始化参数db_name来标识的,所有在建立控制文件之前,必须正确的设置该参数.需要注意,因为初始化参数DB_NAME不能使用ALTER SYSTEM命令进行修改,所以必须建立PFILE,然后修改参数DB_NAME.最后使用该PFILE重新建立SPFILE

建立PFILE文件:SQL>CREATE PFILE FROM SPFILE;

编辑PFILE文件initdemo.ora,修改参数DB_NAME:db_name=example

建立临时的SPFILE文件.

因为当前例程使用的SPFILE文件不能覆盖,所有执行CREATE SPFILE是应该指定一个临时的SPFILE文件.示例如下:

CREATE SPFILE=’ORACLE_HOME%databasespfiletemp.ora’ from

PFILE=’%ORACLE_HOME%databaseinitdemo.ora’;

2,关闭oracle数据库.

关闭oracle数据库后,为了使用新的spfile文件,应该使用OS命令删除原来的SPFILE文件,然后将临时spfile文件修改为spfiledemo.ora

3,启动例程.

建立控制文件必须在nomount状态下进行,所以必须启动例程.启动例程后还应该初始化参数DB_NAME设置是否正确

STARTUP NOMOUNT

SELECT value FROM v$parameter WHERE name=’db_name’;

4,建立控制文件.

因为要修改数据库名称,所有建立控制文件时必须指定SET DATABASE选项和RESETLOGS选项.因为原有控制文件仍然存在,所有必须指定REUSE选项覆盖控制文件

CREATE CONTROLFILE REUSE SET DATABASE “ORCL” RESETLOGS
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 ‘D:DEMOREDO01.LOG’ SIZE 10M,
GROUP 2 ‘D:DEMOREDO02.LOG’ SIZE 10M
DATAFILE
‘D:DEMOSYSTEM01.DBF’,
‘D:DEMOUNDOTBS01.DBF’,
‘D:DEMOSYSAUX01.DBF’
CHARACTER SET ZHS16GBK;

5,打开数据库

Alter database open;

如果建立控制文件时指定了RESETLOGS选项,那么在打开数据库时必须带有该选项(格式为ALTER DATABASE OPEN RESETLOGS).

6,增加临时文件.

打开数据库后,客户应用可以执行各种数据库访问操作,如果执行排序操作,可能会显示错误信息.为了顺利执行排序操作,必须重新建立临时文件.

Alter tablespace temp add tempfile ‘d:demotemp.dbf’ size 10485760

Reuse autoextend off;

删除控制文件

使用ALTER SYSTEM命令修改初始化参数

Alter system set control_files=’d:democontrol01.ctl’ scope=spfile;然后重新启动数据库

查看控制文件的信息

1,显示控制文件名称.

Select * from v$controlfile;

2, 显示初始化参数control_files

Select value from v$parameter where name=’control_files’;

3,获得控制文件不同部分的信息.

Col type format a20

Select type,record_size,records_total,records_used from v$controlfile_record_section;

其中,type用于标识特定记录类型,record_size用于标识每条记录所占用的字节数,

RECORDS_TOTAL用于标识记录的最大条数,RECORDS_USED用于标识已占用记录条数.

猜你喜欢

转载自blog.csdn.net/zsy02111/article/details/80866530