Oracle第七节-Oracle控制文件详解

文章详细介绍了Oracle控制文件的结构,包括数据库名称、数据文件、重做日志信息、检查点信息等关键内容。控制文件分为循环重用和非循环重用记录,前者可覆盖,后者不可。多路复用策略用于提高安全性,确保至少有两个控制文件在不同磁盘上。文章还涵盖了如何查看和操作控制文件,包括创建、更改和恢复控制文件的步骤,以及备份恢复策略。
摘要由CSDN通过智能技术生成

Oracle控制文件详解

控制文件的结构
  1. 数据库名称和SID标识
  2. 数据文件和日志文件列表
  3. 数据库创建时间戳
  4. 空间表信息
  5. 当前重做日志文件序列号
  6. 归档日志信息
  7. 检查点信息
  8. 回滚段的起始和结束
  9. 备份数据文件信息
与数据库相关的信息存储在控制文件中的不同部分中。每个部分是有关数据库的某个方面的一组记录。例如,控制文件中有一个部分追踪数据文件,并包含你一个记录集合,每个数据文件有一条记录。每个部分存储在多个逻辑控制文件块中。同一部分可以跨越多个块。
控制文件中包含以下类型的记录:
  • 循环重用记录
这些记录包含可以被覆盖的非关键信息。当所有可用的记录槽用完时,数据库需要扩展控制文件或覆盖最旧的记录,以便为新记录腾出空间。循环重用记录可以删除,并且不会影响数据库运行,如:RMAN备份记录,归档日志历史信息等信息。
  • 非循环重用记录
这些记录包含不经常更改且不能被覆盖的关键信息。包括表空间、数据文件、联机重做日志文件、重做线程。oracle数据库绝不会重用这些记录,除非从表空间中删除相应的对象。
控制文件的多路复用
  为了提高数据库的安全性,至少要为数据库建立两个控制文件,而且这两个文件最好分别放在不同的磁盘中,这样可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略称为多路复用控制文件。当多路复用控制文件某个磁盘发生故障导致其包含的控制文件损坏,数据库将被关闭或者发生异常,此时可以用另一磁盘中保存的控制文件来恢复被损坏的控制位文件,然后再重启数据库,达到保护控制文件的目的。
  数据库建立时,一般会默认创建两个控制文件,我们可以手动的再创建多个控制文件且不要与默认的放在同一个磁盘中,首先我们可以修改control_files参数来增加控制文件。
控制文件查看操作
select * from v$controlfile;---查看控制文件的基本信息
select * from v$controlfile_record_section;---查看控制文件中的更新记录
select * from v$parameter where name='control_files' ----v$parameter包含了系统所有初始化参数,可以查询到control_files的信息
操作控制文件
更改控制文件
alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl','/home/oracle/ControlFiles/control03.ctl','/home/oracle/ControlFiles/control04.ctl' scope=spfile;
 上面的代码中,前3个控制文件已经创建好,第4个文件是用户将要手动添加的,但是目前还没有创建该文件,创建该文件前需要关闭数据库,然后将第1个复制过去即可,必须先关闭数据库才能把可用的控制文件复制过去,如果没有关闭就复制过去,在重启的时候会报错原控制文件与新增的不一致的错误:
创建控制文件
  当数据库所有的控制文件都丢失或者损坏,唯一补救方法就是手动创建一个新的控制文件。创建的语法如下:
  create controlfile
  reuse database db_name
  logfile
  group 1 redofiles_list1
  group 2 redofiles_list2
  group 3 redofiles_list3
  ...
  datafile
  datafile1
  datafile2
  datafile3
  ...
  maxlogfiles max_value1
  maxlogmembers max_value2
  maxinstances max_value3
  maxdatafiles max_value4
  noresetlogs|resetlogs
  archivelog|noarchivelog;
  db_name: 数据名称,通常是orcl
  redofiles_list: 重做日志组中的重做日志文件列表;
  datafile1: 数据文件路径;
  max_value1: 最大的重做日志文件数,这是一个永久性参数,一旦设置就不能修改,如果想要修改只有重建控制文件;
创建过程
  创建之前要先对数据文件与重做日志文件备份,因为创建过程中可能会引起某些异常导致数据文件与日志文件损坏。
  查看日志文件,v$logfile
  

 

 

  查看数据文件
  

 

  根据上面的查询可以得到文件所在的路劲,然后备份日志文件与数据文件,备份之前一定先关闭数据库,不然会卡死或者出现异常情况。进入到数据文件与日志文件所在目录,测试系统正好这两个文件都在一个文件夹下,直接使用 cp 命令把它们备份到其他磁盘的文件夹下即可:
  

 

  备份完之后,将数据启动到nomount状态,即启动但不加载数据库,因为加载数据库时实例将会打开控制文件,无法达到创建新控制文件的效果。
  数据库启动到nomount状态之后,执行create controlfile 命令
create controlfile
reuse database "orcl"
logfile 
group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
datafile
'/usr/oracle/app/oradata/orcl/system01.dbf',
'/usr/oracle/app/oradata/orcl/sysaux01.dbf',
'/usr/oracle/app/oradata/orcl/undotbs01.dbf',
'/usr/oracle/app/oradata/orcl/users01.dbf',
'/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'
maxlogfiles 50
maxlogmembers 4
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;
  执行创建命令之后,新的控制文件还是被存放在原来的文件下,可以尝试备份然后将之前的控制文件删掉,会发现原来的文件下名字一样的控制文件又出现了,编辑SPFILE 文件中的初始化参数 CONTROL_FILES,使其指向新建的控制文件:
alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl'
scope=spfile;
备份恢复控制文件
  1 备份控制文件
  直接将当前可用的任意一个多路复用下的控制文件复制到你想要备份的路劲即可;
  我们可以将控制文件备份成一个可读的数据文件,然后就可以查看里面的具体内容;
  alter database backup controlfile to trace; --备份成可读的文本文件,此方法备份之后,可以查看控制文件的具体内容,首先使用语句:
  select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat)); 可以获取到备份之后的文件路径与名称:
  

 

  得到路径之后,我们可以在linux去查看备份文件的具体内容:
  

 

  
  将其拷贝出来,主要内容就是创建控制文件的语法:
  
 
  5.2 恢复控制文件
  当控制文件所在磁盘损坏,只需要在初始化文件中重新设置control_files参数的值,使它指向备份的控制文件,就可以重启数据库,但是要保证control_files下对应的路劲下所有的控制文件版本一致才行,不然会报错误;
  如果是控制文件本身损坏,我们可以将备份文件复制到对应的目录下,然后重启数据库即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shanshan3003

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值