【Oracle控制文件管理】控制文件的镜像、删除、备份与恢复

1. 概述

  • 控制文件是记录数据库结构信息的重要的二进制文件
  • 控制文件记录的信息有:数据库建立日期、数据库名、数据库中所有数据文件和日志文件的文件名及路径、恢复数据库时所需的同步信息
  • 用途:①在装载和存取数据库时都要访问该文件。②数据库恢复所需的同步信息存储在控制文件中。
  • 数据库的物理组成与控制文件中的记录不同时,系统则不能正常启动或发生down机现象。
  • 查看控制文件:
    • 方式1:SQL> select name from v$controlfile;
    • 方式2 :SQL> show parameter control_files
    • 方式3 :SQL> show parameter control
    • 注:处于nomount状态上面语句查不到控制文件。
  • 建议设置:
    • 至少使用两个控制文件,并存放于不同磁盘。(虽然只有一个也可以启动)
    • 控制文件的镜像可以在数据库创建或创建完成后进行。

2. 创建镜像控制文件

以服务器端参数文件为例(当前控制文件为CONTROL.DBF、CONTROL01.DBF,再添加一个CONTROL02.DBF),步骤如下:

Step1 查询当前控制文件的存储位置并规划控制文件的存储位置

show parameter control_files

  • 注意:处于nomount状态上面语句查不到控制文件,所以现在数据库是打开状态。
  • 当前控制文件所在目录为'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\',镜像控制文件可以存放在同一目录下,也可以自己放在自己规划的其他目录。

Step2 修改初始化参数

SQL> ALTER SYSTEM SET CONTROL_FILES=
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF',
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL01.DBF',
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF'
    SCOPE=SPFILE;

  • 注意是 CONTROL_FILES ,可以有多个控制文件,所以是有s的。
  • 注意标点符号,多个控制文件之间用“,”分隔,SCOPE前是空格。
  • 注意不要忘记 SCOPE=SPFILE ,因为是修改静态参数。

Step3 关闭数据库

shutdown immediate

  • 注意一定要先关闭数据库再复制,确保在复制过程中数据库不会发生任何更改。

Step4 复制控制文件到规划好的目录(操作系统级)

HOST COPY C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF

  • 注意路径不能加 ''
  • 也可手动复制

Step5 启动数据库

STARTUP

3. 删除控制文件

为了防止控制文件被损坏,应该启用镜像控制文件。但是, 当多个镜像控制文件中任意一个被损坏后,都将导致无法装载Oracle数据库。这时为了使得数据库可以正常工作,只需要删除损坏的控制文件即可。

例如删除CONTROL.DBF01,步骤如下:

--Step1.查询当前控制文件的存储位置
SQL> show parameter control_files

--Step2.修改初始化参数(静态参数)
SQL> ALTER SYSTEM SET CONTROL_FILES=
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF',
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF'
    SCOPE=SPFILE;

--Step3.关闭数据库
SQL> shutdown immediate

--Step4.操作系统级删除控制文件
SQL> HOST DEL C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL02.DBF
--也可手动删除

--Step5.启动数据库
SQL> STARTUP

4. 备份控制文件

4.1 二进制备份文件

以二进制形式备份文件控制文件,在数据库控制文件损坏时,可以直接用于控制文件的恢复。

Alter database backup controlfile to 'd:\backup_controlfile\control_20231219.bkp '; 
  • 前提是有这个文件夹 backup_controlfile。

  • 即使有多个控制文件,备份后得到的也是一个,因为多个控制文件是一样的,因此是controlfile,只备份一个。

  • 注意:alter system/session 一般是修改参数,alter database 一般是对文件进行操作。

4.2 脚本备份文件

将控制文件以文本方式备份到跟踪文件中,可利用记事本打开跟踪文件查看控制文件信息,并可以利用该文本信息重建控制文件。

Step1 设置文件名标识

alter session set tracefile_identifier='back_control';

  • 文件名标识可以自定义,便于后面找到自己备份的文件。
  • 注意是 alter session ,因为是会话级别的操作。

Step2 执行备份文件命令

alter database backup controlfile to trace;

Step3 查看脚本文件的存放位置

show parameter user_dump_dest;
select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));

  • 按照路径找到备份的控制文件,再复制到其他地方保存起来。

5. 恢复控制文件

在一般情况下,如果使用了复合控制文件,并且将各个控制文件分别存储在不同的磁盘中,则丢失全部控件文件的可能性将非常小。但是,如果数据库的所有控制文件全部丢失,这时惟一的补救方法就是以手动方式重新创建控制文件。

根据前面得到的脚本备份文件进行创建

建立控制文件的要点(脚本文件未注释部分的含义分析)

--NORESTLOGS方式
1.数据文件和重做日志文件的名称和路径
SQL> SELECT NAME FROM V$DATAFILE;
SQL> SELECT MEMBER FROM V$LOGFILE;

2.启动实例,不加载数据库(nomount)
SQL> startup nomount

3.建立控制文件 create controlfile
--RESTLOGS方式:CREATE CONTROLFILE REUSE DATABASE "XE" RESETLOGS  NOARCHIVELOG
CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 
  'C:\ORACLEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_LH3LPC1C_.LOG'  
  SIZE 50M BLOCKSIZE 512,
  GROUP 2 
  'C:\ORACLEXE\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_2_LH3LPC44_.LOG'  
  SIZE 50M BLOCKSIZE 512

DATAFILE
  'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF',
  'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF',
  'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF',
  'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF'
CHARACTER SET AL32UTF8
;

4.初始化参数 control_files 指向新建控制文件
SQL> ALTER SYSTEM SET CONTROL_FILES=
    'C:\ORACLEXE\APP\ORACLE\ORADATA\XE\CONTROL.DBF'
    SCOPE=SPFILE;

5.备份
SQL> Alter database backup controlfile to 'd:\backup_controlfile\control_20231219.bkp ';

6.数据库恢复
--RESTLOGS方式:RECOVER DATABASE USING BACKUP CONTROLFILE
SQL> RECOVER DATABASE

7.打开数据库
--RESTLOGS方式:ALTER DATABASE OPEN RESETLOGS;
SQL> ALTER DATABASE OPEN;
  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值