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,密码为 ...
随机推荐
- 转://使用showplan.sql分析sql Performance
在HelloDBA网站找到一个分析sql性能的工具—showplan,记录一下 showplan.sql下载路径:http://www.HelloDBA.com/Download/showplan.z ...
- EXCEL这样根据某单元格的内容来改变整行颜色
1.选择你需要改变颜色的单元格列数,然后打开“格式”--“条件格式”: 2.选择“公式”一项,在后面输入=$L1=2050,然后点开下面的“格式”按钮设置好格式. 3.基本上就OK了,注意在输入公式的 ...
- esp8266(3) Arduino通过ESP8266连接和获取网站源代码
http://www.plclive.com/a/tongxinjiekou/2016/0422/374.html 在上一篇8266的基础上,这一篇做个具体的连接网站的例子,供大家参考.上一篇基础篇请 ...
- Qt+QGIS二次开发:QGIS里的编程模型
项目(QgsProject) 用于读写项目状态 图层分组(QgsLayerTreeGroup) 项目树的分组节点,用来存放图层节点. 图层节点(QgsLayerTreeLayer) 项目树的图层节点. ...
- Ubuntu无法连接WiFi
lspci | grep Network1.查看自己的无线网卡驱动2.下载驱动https://www.intel.cn/content/www/cn/zh/support/articles/00000 ...
- ESP32 I2S
I2S支持DMA; I2S可以直接利用DAC来输出模拟信号 (GPIO 25 & GPIO 26): 高精度时钟使能参数: .use_apll = true ESP32配置外设一般都是配置 ...
- C++STL二维vector指定位置排序
自己一直用vector 二维的存储变量 有时候需要进行排序 在此 为记录一下方法 废话少说直接上代码 #include <QCoreApplication> #include <io ...
- Omi框架学习之旅 - 插件机制之omi-touch 及原理说明
这个插件也能做好多好多的事,比如上拉下拉加载数据,轮播,等一切和运动有关的特效. 具体看我的allowTouch这篇博客,掌握了其用法,在来看它是怎么和omi结合的.就会很简单. 当然使用起来也比较方 ...
- supervisor 结合 Dockerfile ENTRYPOINT
通过docker run -d 方式启动容器报“Unlinking stale socket /tmp/supervisor.sock”错误,而通过docker run -it 启动后手动执行 /u ...
- virtualbox - 2台虚拟机之间通过ssh互访
virtualbox 5.2.12 一台虚拟机是Debian 9,另一台是Ubuntu 18.04. 注意: 2台虚拟机系统里要安装ssh ! sudo apt install ssh 然后在virt ...