oracle控制文件
2015-12-02 13:49
225 查看
概念
控制文件是一个比较小的二进制文件,记录了物理数据库的当前状态;每一个控制文件只属于一个数据库,数据库可以有多个控制文件(处于安全考虑,一般多几个就相当于多了几个备份),但是一个控制文件不能对应多个数据库;数据库处于打开状态,服务器会随时修改控制文件的内容;任何用户都不能修改控制文件的数据。所存信息
数据库名字数据库标识符(创建数据库时自动产生)
数据库创建时间戳(创建数据库时产生)
联机重做日志文件的名字和准确位置
当前日志的序列号
校验点信息
日志的历史信息
归档日志文件的准确位置和状态
数据文件的名字和准确位置
表空间的信息
备份的准确位置和状态
使用和维护
获取控制文件信息的数据字典(动态视图)
v$archived #归档archived意思是:归档的。v$archived_log
v$backup
v$database
v$datafile
v$log
v$logfile
v$loghist
v$tablespace
v$tempfile
控制大小
由于oracle服务器会经常操纵控制文件,所以控制文件应该尽量小,但是oracle并没有提供可行方案去直接改变控制文件大小,所以我们只能通过间接的方式来调整,为此我们必需了解控制文件组成——可重用部分和不可重用部分。可重用部分
利用CONTROL_FILE_RECORD_KEEP_TIME参数来控制,这个参数默认为7天,意思是可重用部分的数据保留7天,之后可以被覆盖。可重用部分是供rman(恢复管理器使用的,这部分可以自动扩展)
不可重用部分
利用create database或者create controlfile语句中的下列关键字来间接影响
MAXDATAFILES
MAXINSTANCES
MAXLOGFILES
MAXLOGHISTORY
MAXLOGMEMBERS
注意,控制文件如果太小,那么在做扩展时,可能需要重建数据库,所以应该留有余地。
查看
怎么查看控制文件的配置呢?查看控制文件中部分记录的相关信息
SQL> select type,record_size,records_total,records_used 2 from v$controlfile_record_section 3 where type IN('DATAFILE','TABLESPACE','REDO LOG');
查看控制文件的位置和名字
SQL> select value 2 from v$parameter 3 where name = 'control_files';
SQL> col name for a20 #调整格式 SQL> select * from v$controlfile;
移动和增加
怎样添加和移动控制文件呢?其实这两种意图的操作是大同小异的,基本步骤一样,稍后介绍。那为什么要提那家和移动控制文件呢?这个是出于安全的考虑,oracle的文档建议我们,一个数据库要有多个控制文件,且应该放在不同的物理磁盘上,这样能防止磁盘的物理损坏。但是默认安装的情况下,控制文件会被放在同一个磁盘上。
由于启动时候初始化参数文件的不同,而初始化参数文件包含了控制文件的相关信息(详情可以看看 oracle实例管理),所以移动或增加控制文件,我们需要对初始化参数文件进行操作
基于正文初始化参数文件(pfile)添加或移动控制文件
利用数据字典v$controlfile来获取现有控制文件名字
正常关闭数据库,shutdown或者shutdown immediate
把新的控制文件名添加到初始化参数文件的CONTROL_FILES参数中
将现有的控制文件复制到指定位置
重新启动oracle数据库
利用数据字典v$controlfile来验证是否添加正确
基于二进制初始化参数文件(spfile)添加或移动控制文件
利用数据字典v$controlfile来获取现有控制文件名字
通过alter system set control_files命令来修改控制文件位置,例如:
alter system set control_files = '/home/oracle/control01.ctl', '/home/root/control02.ctl', '/home/user3/control03.ctl' scope=spfile;
*正常关闭数据库,shutdown或者shutdown immediate
备份控制文件
控制文件对于数据库极其重要,仅仅有添加或移动控制文件是不够的。这里我们还可以对控制文件进行备份。备份二进制文件
SQL> alter database backup controlfile to '/home/oracle/backup/control.bak';
注意,使用控制文件备份来对数据库进行恢复,是不完全的恢复。
备份正文文件
SQL> alter database backup controlfile to trace;
这条命令将创建控制文件的命令添加到追踪文件,这个追踪文件中包含了重建控制文件的SQL语句,用户在得到这个追踪文件的时候应该复制一份并且重命名,这样才不会丢失。
做一次操作~~(建议用虚拟机来做,且先拍快照)
首先我们要开监听,开数据库,然后sys登录,接着执行alter database backup controlfile to trace;
接着,我们总要知道trace跟踪文件的位置,所以可以查查参数
show parameter BACKGROUND_DUMP_DEST
找到trace文件,一般命名是:实例名_ora_序号.trc结尾,我们用ls -lrt找到最新的几个,vim找到一个如下的
复制一份到安全的地方并且重命名成我们容易理解(“噢,这就是那个控制文件的备份”)
然后我们来模拟一下事故,比如说误删了控制文件
先找到控制文件位置,记下来
关闭数据库
SQL> shutdown
删除其中一个控制文件
再次启动数据库看看报错
这时我们去查看一下刚刚做的备份跟踪文件(都是英文,大家要找到下面图片那一段Below are two sets of …….)
从文件中可以得到以下代码(加了注释,运行时自行删除)
STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512 DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf', '/u01/app/oracle/oradata/orcl/sysaux01.dbf', '/u01/app/oracle/oradata/orcl/undotbs01.dbf', '/u01/app/oracle/oradata/orcl/users01.dbf', '/u01/app/oracle/oradata/orcl/example01.dbf' CHARACTER SET AL32UTF8 ;
根据文件中的信息来运行就好
去看看控制文件是否恢复
启动数据库看看
到这里,一切都恢复正常了
发现的问题
在做恢复的模拟时,我去找追踪文件,发现太多trace了,我就删了所有的trace文件,而这个时候数据库还在运行状态,接着我以为再次alter database backup controlfile to trace;去查看trace目录时,竟然没有trace生成。接着我关闭数据库看看有没有——没有。重新开启数据库后,发现这时才有trace文件生成,但却不是备份想要的那个trace,这个时候再运行一次alter database backup controlfile to trace;才找到需要的哪个备份trace。这个故事告诉我们,如果想删除trace文件,请先关闭数据库(虽然说空间允许的情况下一般是不删除trace的)
最后给出思维导图
相关文章推荐
- oracle数据恢复----------之oracle各种闪回操作
- oracle----sqlldr用法
- 64位电脑上安装oracle和plsql
- oracle的删除步骤
- oracle用分隔符分割字段,并转为多行
- ORACLE删除当前用户下所有的表的方法
- SQLserver通过链接服务器连接oracle
- Linux环境下安装oracle
- oracle常用操作
- 2015-12-2oracle数据删除后,100万的数据只剩10条,查询速度反而变慢
- 问题:oracle 不等于;结果:Oracle中的不等于号
- oracle的TEMP空间作用及涉及的操作
- 修改Oracle数据库最大连接数
- ORACLE去掉字符串前面的数值
- oracle数据库表查询,空间查询
- oracle连接加号(+)的使用方法
- oracle 查看表空间的脚本
- Oracle 数据库中 十六进制转换为number类型的函数
- Oracle一些基本术语英汉对照
- 批处理bat文件调用oracle sql文件并传入参数