oracle控制文件的管理

1 说明

Oracle数据库中的控制文件是数据库管理中的重要组成部分,是一个二进制小文件,在 mount 阶段被读取。它包含了数据库的元数据信息和文件位置等重要数据,记录数据库当前物理状态,维护数据库的一致性,记录 RMAN 备份的元数据。

查看控制文件位置:

bash 复制代码
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
+DATA/orcl/controlfile/current.260.1166397623

#或
SQL> show parameter control_files
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/orcl/controlfile/current
                                                 .260.1166397623

2 实时更新机制

  1. 当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle 服务器进程(Server Process)会立即更新控制文件以反映数据库结构的变化。
  2. 日志写进程 LGWR 负责把当前日志序列号记录到控制文件中。
  3. 检查点进程 CKPT 负责把校验点的信息记录到控制文件中。
  4. 归档进程 ARCn 负责把归档日志的信息记录到控制文件中。

3 备份控制文件

备份控制文件是数据库维护的常规操作,以防止因意外情况导致控制文件损坏或丢失。可以使用 RMAN (Recovery Manager) 工具进行备份。通过配置适当的备份策略,管理员可以定期自动备份控制文件,以确保数据的完整性和可恢复性。此外,也可以手动备份控制文件。通常是将控制文件复制到另一个安全的存储位置,如备份服务器或外部存储设备。

备份控制文件是非常重要的,在对数据库的物理结构进行改变后,也需要重新对控制文件进行备份,这些操作包括:

  • 增加、删除、重命名数据文件
  • 增加、删除表空间
  • 增加、删除日志组或日志文件

备份控制文件

sql 复制代码
--备份二进制文件
SQL> alter database backup controlfile to '/home/oracle/ctrl/controlfile1';

-- 备份文本文件,可用于执行恢复
SQL> alter database backup controlfile to trace as '/home/oracle/ctrl/controlfile2.trace';

rman备份

sql 复制代码
RMAN> backup current controlfile;

RMAN> list backup of controlfile;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
2       Full    9.33M      DISK        00:00:01     16-APR-24
        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: TAG20240416T024414
        Piece Name: /u01/app/oracle/product/11.2/db_1/dbs/022oc03u_1_1
  Control File Included: Ckp SCN: 969725       Ckp time: 16-APR-24

4 控制文件的多路复用

多路复用是 Oracle 数据库控制文件管理的一种策略,旨在提高数据库的可靠性和可用性。当数据库启动时,Oracle 会按照配置的顺序查找控制文件。一旦找到可用的控制文件,数据库就会加载并继续启动过程。这种多路复用的方式降低了因控制文件损坏而导致数据库宕机的风险。可以通过配置多个控制文件来实现多路复用。这些控制文件通常存储在数据库的不同物理位置,以确保在发生硬件故障或磁盘损坏时,至少有一个控制文件可用。

多路复用配置

多路复用指的是相互镜像。配置多个controlfile,控制文件最好是3个,最多8个。三个 control 文件要一致,同一版本,scn相同。

  1. 备份spfile;
  2. 修改spfile中的control_files参数;
  3. shutdown immediate;
  4. 复制控制文件,建议将多个控制文件分配在不同的物理磁盘上。

详细过程如下(基于asm):

bash 复制代码
--查看当前控制文件配置
SQL> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/orcl/controlfile/current
                                                 .260.1166397623
--备份动态参数文件spfile
SQL> create pfile='/home/oracle/pfile/initorcl.ora' from spfile;

File created.

--修改控制文件参数
SQL> alter system set control_files='+DATA/orcl/controlfile/current.260.1166397623','+DATA/orcl/controlfile/controlfile2.ctl','+DATA/orcl/controlfile/controlfile3.ctl' scope=spfile;

System altered.

--关机
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

--asmcmd,cp控制文件(grid用户)
[grid@oracle11g ~]$ asmcmd
ASMCMD> cp +DATA/orcl/controlfile/current.260.1166397623 +DATA/orcl/controlfile/controlfile2.ctl
copying +DATA/orcl/controlfile/current.260.1166397623 -> +DATA/orcl/controlfile/controlfile2.ctl
ASMCMD> cp +DATA/orcl/controlfile/current.260.1166397623 +DATA/orcl/controlfile/controlfile3.ctl
copying +DATA/orcl/controlfile/current.260.1166397623 -> +DATA/orcl/controlfile/controlfile3.ctl

--检查
ASMCMD> ls +DATA/orcl/controlfile
Current.260.1166397623
controlfile2.ctl
controlfile3.ctl

--启动
SQL> startup;
ORACLE instance started.

Total System Global Area  835104768 bytes
Fixed Size                  2257840 bytes
Variable Size             541068368 bytes
Database Buffers          289406976 bytes
Redo Buffers                2371584 bytes
Database mounted.
Database opened.

--检查配置
SQL> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      +DATA/orcl/controlfile/current
                                                 .260.1166397623, +DATA/orcl/co
                                                 ntrolfile/controlfile2.ctl, +D
                                                 ATA/orcl/controlfile/controlfi
                                                 le3.ctl

5 恢复控制文件

控制文件一旦损坏,系统将不能正常工作。受损的控制文件会记录在告警日志中,恢复或重建控制文件必须使系统在 NOMOUNT下

5.1 某个控制文件损坏的恢复

如果某个控制文件损坏,但其他控制文件仍然可用,那么数据库可以继续正常运行。在这种情况下,dba应尽快备份损坏的控制文件并替换为有效的备份副本。如果没有可用的备份,参照多路复用的方式,需要从其他可用的控制文件中复制来重建损坏的控制文件。

5.2 所有控制文件损坏,重建控制文件

5.2.1 如果有binary控制文件备份,利用备份恢复控制文件

bash 复制代码
SQL> startup nomount;
RMAN> restore controlfile from '+FRA/orcl/backupset/2024_04_16/ncnnf0_tag20240416t042723_0.257.1166416045';
RMAN> alter database mount;
RMAN> recover database;
RMAN> alter database open RESETLOGS;

5.2.2 如果没有备份,利用 trace 脚本文件重新创建控制文件

这种情况会丢失归档记录信息和RMAN信息。

bash 复制代码
--启动报错
SQL> startup;
ORACLE instance started.

Total System Global Area  835104768 bytes
Fixed Size                  2257840 bytes
Variable Size             541068368 bytes
Database Buffers          289406976 bytes
Redo Buffers                2371584 bytes
ORA-00205: error in identifying control file, check alert log for more info

--启动到nomount状态
SQL> startup force nomount;
ORACLE instance started.

Total System Global Area  835104768 bytes
Fixed Size                  2257840 bytes
Variable Size             541068368 bytes
Database Buffers          289406976 bytes
Redo Buffers                2371584 bytes

--执行trace脚本文件中的脚本
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '+DATA/orcl/onlinelog/group_1.261.1166397623'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '+DATA/orcl/onlinelog/group_2.262.1166397623'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '+DATA/orcl/onlinelog/group_3.263.1166397623'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '+DATA/orcl/datafile/system.256.1166397573',
  '+DATA/orcl/datafile/sysaux.257.1166397573',
  '+DATA/orcl/datafile/undotbs1.258.1166397573',
  '+DATA/orcl/datafile/users.259.1166397573'
CHARACTER SET ZHS16GBK;

Control file created.

--此时三个控制文件都已经恢复,且数据库在mount状态下
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
MOUNTED

--打开数据库
SQL> alter database open;

Database altered.

--执行trace文件最后一行,添加临时数据文件信息
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/orcl/tempfile/temp.264.1166397625'
     SIZE 30408704  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;  2

Tablespace altered.
相关推荐
FIN技术铺2 小时前
Redis集群模式之Redis Sentinel vs. Redis Cluster
数据库·redis·sentinel
CodingBrother4 小时前
MySQL 中的 `IN`、`EXISTS` 区别与性能分析
数据库·mysql
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
甄臻9245 小时前
Windows下mysql数据库备份策略
数据库·mysql
内蒙深海大鲨鱼5 小时前
qt之ui开发
数据库·qt·ui
不爱学习的YY酱5 小时前
【计网不挂科】计算机网络第一章< 概述 >习题库(含答案)
java·数据库·计算机网络
Mephisto.java5 小时前
【大数据学习 | HBASE高级】storeFile文件的合并
大数据·sql·oracle·json·hbase·database
这样の我5 小时前
hbase集成phoenix
大数据·数据库·hbase
安静读书6 小时前
MongoDB 详解:深入理解与探索
数据库·mongodb