Oracle中的控制文件管理

Oracle 控制文件呢,是数据库中最小的文件,是一个二进制文件,其中包括了数据库的结构信息,

同时也包括了数据文件和日志文件的一些信息,控制文件虽小,但可以说是 Oracle 中最重要的文件,

只有 Oracle 进程才能够更新控制文件中的内容,

控制文件中呢主要包括数据库名称,位置,联机或者脱机状态,Redo Log File 的位置和名称,

表空间名称, Archive Log File 信息,CheckPoint 信息,Undo 信息,RMAN 信息等等,

从上面对控制文件中包含的内容也可以看出控制文件在整个 Oracle 中的重要性。

控制文件的多路复用技术

何为控制文件的多路复用技术呢?

由于控制文件的重要性,Oracle 呢官方是建议至少应该拥有控制文件的三个以上的副本,

而您可以通过多路复用技术,将控制文件的副本创建到不同的磁盘上,

然后再修改初始化参数文件 init . ora

(现在的 Oracle 版本中的参数基本上都是使用二进制的 spfile,只有个老版本的 Oracle 才使用 init.ora 文件)

中的 control_files 参数,使之包含所有的控制文件,

也就是将其他磁盘上的控制文件也包含到这个 control_files 中,这样的话,

这样呢,有一个好处,

就是你的这个一个磁盘坏了,Oracle 仍然能够快速的恢复,

一个控制文件损坏了,还可以自动使用另一个控制文件,

但是这里要提一点的是,控制文件并不是越多越好的,

因为当 Oracle 更新控制文件时,会将所有的控制文件全部进行更新,自然性能就有一定的影响了,

所以,

控制文件的副本也不是越多越好的!!!

下面呢就介绍一下如何启用多路复用的技术了,

主要是针对于使用 spfile (System Parameter File)实现多路复用控制文件,

(对于 init . ora 实质上也差不多)

1.查看控制文件信息

SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 1月 5 10:12:00 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn sys/ as sysdba
请输入口令: *
已连接。
SQL> select name from v$controlfile;

NAME

D:\ORACLE\ORADATA\HQH\CONTROL01.CTL
D:\ORACLE\ORADATA\HQH\CONTROL02.CTL
D:\ORACLE\ORADATA\HQH\CONTROL03.CTL

SQL> select value from v$parameter where name=’control_files’;

VALUE

D:\oracle\oradata\hqh\CONTROL01.CTL, D:\oracle\oradata\hqh\CONTROL02.CTL, D:\ora
cle\oradata\hqh\CONTROL03.CTL

查看控制文件中关于数据文件中的数据记录信息:(注意,DATAFILE一定要大写,否则会提示”未选定行”)

SQL> select type,record_size,records_total,records_used from v$controlfile_record_section
where type=’DATAFILE’;

TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED


DATAFILE 180 100 13

2.创建控制文件的副本和备份控制文件

(1).创建控制文件的副本

此例子中,用户将为数据库HQH创建一个新的控制文件副本D:\oracle\backup\hqh\control02.ctl

SQL> alter system set control_files=’D:\oracle\oradata\hqh\control01.ctl’,’D:\oracle\oradata\hqh\control02.ctl’,
‘D:\oracle\backup\hqh\control02.ctl’
scope=spfile

SQL> /

系统已更改

然后用shutdown关闭数据库.因为上述控制文件D:\oracle\backup\hqh\control02.ctl并不存在,所以应该将’D:\oracle\oradata\hqh\control02.ctl’文件复制到D:\oracle\backup\hqh\下.

SQL> shutdown;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭

再用startup启动数据库,数据库正常启动.

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。

注意:如果忘了把文件复制到指定位置,启动时将报错.

SQL> startup;
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00205: ?????????????????????

再查看控制文件信息,新增的控制文件已经在使用了.

SQL> select name from v$controlfile;

NAME

D:\ORACLE\ORADATA\HQH\CONTROL01.CTL
D:\ORACLE\ORADATA\HQH\CONTROL02.CTL
D:\ORACLE\ORADATA\HQH\CONTROL03.CTL
D:\ORACLE\BACKUP\HQH\CONTROL02.CTL

直此,已经成功创建一个新的控制文件的副本.

(2).备份控制文件

SQL> alter database backup controlfile to ‘D:\oracle\backup\hqh\control.bkp’;

数据库已更改。

就这么简单,备份控制文件成功!打开文件所在目录看看吧.

(3).使用副本恢复控制文件

a.首先使用shutdown关闭实例,在关闭SQL*Plus.

b.打开’D:\oracle\oradata\hqh\control01.ctl’文件,进行随意修改,并保存.

c.启动SQL*Plus,以sysdba连接到数据库hqh.

d.用startup启动数据库实例hqh.系统返回ORA-00205错误.

e.现在使用数据文件副本进行恢复.先shutdown.

f.将文件’D:\oracle\oradata\hqh\control01.ctl’ 删除.将control02.ctl复制一个改名为control01.ctl.

h.再startup即可成功启动.


1.查看当前日志组成员:
SQL> select member from v$logfile;

MEMBER

C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG
2.查看当前日志组状态:
SQL> select group#,members,bytes/1024/1024,status from v$log;

GROUP#    MEMBERS BYTES/1024/1024 STATUS

     1          1              50 INACTIVE
     2          1              50 INACTIVE
     3          1              50 CURRENT

现有三个日志组,每个组内有一个成员,每个成员的大小为50MB,现在想把此三个日志组的成员大小都改为100MB ,步骤如下:

1、创建2个新的日志组
SQL> alter database add logfile group 4 (‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO04.LOG’) size 100M;
SQL> alter database add logfile group 5 (‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO05.LOG’) size 100M;

2、切换当前日志到新的日志组
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;

GROUP#    MEMBERS BYTES/1024/1024 STATUS

     1          1              50 ACTIVE
     2          1              50 ACTIVE
     3          1              50 ACTIVE
     4          1             100 CURRENT
     5          1             100 ACTIVE

3、删除旧的日志组
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;

4、操作系统下删除原日志组1、2、3中的文件REDO01.LOG、REDO02.LOG、REDO03.LOG。

5、重建日志组1、2、3
SQL> alter database add logfile group 1 (‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG’) size 100M;
SQL> alter database add logfile group 2 (‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG’) size 100M;
SQL> alter database add logfile group 3 (‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG’) size 100M;

6、切换日志组
SQL> alter system switch logfile;
SQL> alter system switch logfile;

7、删除中间过渡用的日志组4、5
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> select group#,status from v$log;

GROUP# STATUS

     1 UNUSED
     2 UNUSED
     3 UNUSED
     4 INACTIVE
     5 CURRENT

8、到操作系统下删除原日志组4、5中的文件

9、备份当前的最新的控制文件
SQL> conn / as sysdba
SQL> alter database backup controlfile to trace resetlogs;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值