Oracle 控制文件管理
控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据文件和日志文件信息。控制文件在数据库创建时被自动创建,并在数据库发生物理变数时更新。控制文件被不断更新,在任何时候都要保证控制文件可用,否则数据库将无法启动或者使用。
1 控制文件包含的主要信息如下:
数据库名称和SID标识;
数据文件和日志文件列表;
数据库创建的时间戳;
表空间信息;
当前重做日志文件序列号;
归档日志信息;
检查点信息;
回滚段的起始与结束;
备份数据文件信息;
控制文件包含了如此多的重要信息,需要保护并及时备份控制文件,以便它被损坏或者磁盘介质损货时,能够及时恢复。目前保护控制文件的主要策略为多路复用控制文件与备份控制文件。
2 查看目前系统的控制文件信息,主要是查看相关的字典视图
v$controlfile 包含所有控制文件的名称和状态信息

v$controlfile_record_section 包含控制文件中各个记录文档段的信息

v$parameter 包含了系统所有初始化参数,可以查询到control_files的信息

3 控制文件的多路复用
为了提高数据库的安全性,至少要为数据库建立两个控制文件,而且这两个文件最好分别放在不同的磁盘中,这样可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略称为多路复用控制文件。当多路复用控制文件某个磁盘发生故障导致其包含的控制文件损坏,数据库将被关闭或者发生异常,此时可以用另一磁盘中保存的控制文件来恢复被损坏的控制位文件,然后再重启数据库,达到保护控制文件的目的。
数据库建立时,一般会默认创建两个控制文件,我们可以手动的再创建多个控制文件且不要与默认的放在同一个磁盘中,首先我们可以修改control_files参数来增加控制文件。
3.1 更改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个复制过去即可;
3.2 复制控制文件
其实添加控制文件就是将之前可用的控制文件复制过去,重命名即可,首先我们需要关闭数据库,然后将/usr/oracle/app/oradata/orcl/control01.ctl 复制为/home/oracle/ControlFiles/control04.ctl即可

复制完之后,再重启数据库,重启之后查询v$control_files;

到此我们控制文件多路复用的操作完成,过程中需要注意的就是,必须先关闭数据库才能把可用的控制文件复制过去,如果没有关闭就复制过去,在重启的时候会报错原控制文件与新增的不一致的错误:
ORA-00214: control file '/usr/oracle/app/oradata/orcl/control01.ctl' version
7136 inconsistent with file '/home/oracle/ControlFiles/control04.ctl' version
7133
4 创建控制文件
当数据库所有的控制文件都丢失或者损坏,唯一补救方法就是手动创建一个新的控制文件。创建的语法如下:
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: 最大的重做日志文件数,这是一个永久性参数,一旦设置就不能修改,如果想要修改只有重建控制文件;
4.1 创建过程
创建之前要先对数据文件与重做日志文件备份,因为创建过程中可能会引起某些异常导致数据文件与日志文件损坏。
查看日志文件,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;
5 备份恢复控制文件
5.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下对应的路劲下所有的控制文件版本一致才行,不然会报错误;
如果是控制文件本身损坏,我们可以将备份文件复制到对应的目录下,然后重启数据库即可。
Oracle 控制文件管理的更多相关文章
- Oracle体系结构之控制文件管理
控制文件作用:记录了数据库的结构和行为,有多少个数据文件,日志文件及其位置名称,状态,维护数据库的一致性,即记录了数据库的启动SCN号和终止SCN号. 控制文件的位置和个数记录在参数文件中,通常控制文 ...
- [20190530]oracle Audit文件管理.txt
[20190530]oracle Audit文件管理.txt --//昨天听课,讲一些oracle相关安全的问题,对方提到audit file的管理,应该引入OS audit,这样目的是仅仅root查 ...
- Oracle日志文件管理与查看
Oracle日志文件管理与查看 from:http://hi.baidu.com/shuker/item/25ee611ee960c7426826bb1f 1.查询系统使用的是哪一组日志文件: sel ...
- Oracle控制文件
一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...
- oracle 控制文件的重建
目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好 ...
- Oracle 控制文件(CONTROLFILE)
一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...
- Oracle 控制文件损坏解决方案
Oracle 控制文件损坏解决方案 故障一:丢失(损坏)一个控制文件 前台报错:ORA-00205:error in identifying control file,check alert log ...
- Oracle控制文件多路复用以及Oracle备份重建控制文件
控制文件中记录了oracle数据库的物理结构,也就是记录了数据库数据文件和日志文件的位置,控制文件中还记录了多种SCN,用这些SCN来确定数据文件和日志文件是否是正确的.如果不正确那么数据库就需要恢复 ...
- oracle控制用户权限命令
ORACLE控制用户权限: 首先使用系统中的拥有DBA权限的账号(system)登录: 一.创建用户: 1.DBA使用creater user语句创建用户: --创建登录用户名为:user01,密码为 ...
随机推荐
- Memcached服务加固方案
配置访问控制.建议用户不要将服务发布到互联网上而被黑客利用,可以通过ECS安全组规则或IPtables配置访问控制规则.例如,在Linux环境中运行命令,在IPtables中添加此规则只允许192.1 ...
- mysql5.7配置文件优化
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/l ...
- 2017-2018-2 20155314《网络对抗技术》Exp2 后门原理与实践
2017-2018-2 20155314<网络对抗技术>Exp2 后门原理与实践 目录 实验要求 实验内容 实验环境 预备知识 1.后门概念 2.常用后门工具 实验步骤 1 用nc或net ...
- leetcode 206. Reverse Linked List(剑指offer16)、
206. Reverse Linked List 之前在牛客上的写法: 错误代码: class Solution { public: ListNode* ReverseList(ListNode* p ...
- SpringBoot实战(十四)之整合KafKa
本人今天上午参考了不少博文,发现不少博文不是特别好,不是因为依赖冲突问题就是因为版本问题. 于是我结合相关的博文和案例,自己改写了下并参考了下,于是就有了这篇文章.希望能够给大家帮助,少走一些弯路. ...
- QT中PRO文件写法的详细介绍
学习Qt时,发现有些知识看了不经常用就忘了,以下是书本上写的一些关于qmake的相关知识,自己看后,打算把一些经常用到的记下来,整理整理. Qt程序一般使用Qt提供的qmake工具来编译. qmake ...
- Nginx完美解决前后端分离端口号不同导致的跨域问题
笔者在做前后端分离系统时,出现了很多坑,比如前后端的url域名相同,但是端口号不同.例如前端页面为:http://127.0.0.1/ , 后端api根路径为 http://127.0.0.1:888 ...
- centos7搭建kibana
上一节elasticsearch搭建地址 https://www.cnblogs.com/mutong1228/p/10181544.html 学习了上一篇的搭建,理解了命令的含义之后,本节就非常方便 ...
- linux中断源码分析 - 初始化(二)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 本篇文章主要讲述源码中是如何对中断进行一系列的初始化的. 回顾 在上一篇概述中,介绍了几个对于中断来说非常重要的 ...
- MYSQL表情存储数据库报错
1.windows安装5.5.5.9的服务器 2.打开window服务找到mysql的服务,右键属性查看路径 3.打开路径,修改mysql配置文件my.ini 4.修改[client]中的defaul ...