控制文件管理(重建、备份、恢复、增加,减少)
来源:互联网 发布:云数据库怎么用 编辑:程序博客网 时间:2024/06/06 00:25
1、控制文件的个数与位置管理
因为控制文件时在参数文件定义的,所以可以直接修改参数文件
SPfile修改的步骤:
修改SPFILE参数control_files
一致性关闭数据库
增加或减少控制文件
启动数据库使用SPFILE
验证结果
1)、减少控制文件:
SQL> show parameter control_f;Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' scope=spfile;Shutdown immediateStartup 完成
2)、增加控制文件:
sql>show parameter control_f; 确认控制文件的路径等相关信息。 Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' ,'/oracle/oradata/oracleto/control02.ctl','/oracle/oradata/oracleto/control03.ctl' scope=spfile; Shutdown immediate; Startup 此时会报版本号错误,那么需要从高版本的拷贝至低版本。ORA-00214: control file '/oracle/oradata/oracleto/control01.ctl' version 771 inconsistent with file '/oracle/oradata/oracleto/control02.ctl' version 762 sql>show parameter control_f; 确认控制文件的路径等相关信息。 SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control02.ctl SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control03.ctl Alter database mount; 检查是否解决问题。 Startup 完成。
Pfile修改的步骤:
一致性关闭数据库
修改Pfile参数
增加或减少控制文件
启动数据库使用PFILE
验证结果
3)状态管理:
目的是看数据库使用的控制文件与参数定义控制文件是否吻合。
文件。每到数据库启动到mount都读控制文件并把数据库的结构对应到实际的文件上去才能启动。
存在状态:
找位置和个数 show parameter control_f查处的结果在通过操作系统来对比
Ho ll -h /路径
需要查看磁盘空间使用情况 sql>ho df -H
查看文件的大小 sql>ho ls -lh /oracle/oradata/ora<sid>.ctl
控制文件尽量控制在100M以内,如果超过了,那么需要尽快采取措施,一般情况下需要重建控制文件。
4)控制文件备份。
Sql>alter database backup controlfile to '/oracle/bakcup/control20120522.bak'; 归档模式下这样备份才有作用 ,当控制文件出现问题是,可以直接在操作系统下拷贝过去就行。 Sql>alter database backup controlfile to trace as '/oracle/....txt' 这样就得到一个重建控制文件的脚本。 通过rman备份 也需要归档模式才能使用rman Rman>backup current controlfile; 自动就在闪回目录下。 或者rman>backup database include current controlfile; 备份数据库的同时也备份控制文件
2、重建控制文件原则
恢复管理:
如果控制文件丢失和不一致了,需要DBA处理,首先确认控制文件交易号码那个比较新那个比较旧。复制新的给旧的或者直接更改参数文件control_file使用新的
3、几种丢失情况的解决:
1)确认数据库是否处于归档模式,不是归档,则先全备,然后建立新的控制文件即可。
解决办法:
•确认数据文件,默认的数据文件保存在$ORACLE_BASE/oradata/<sid>/xxxx.dbf 文件。•查看告警日志 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log•建立控制文件(有些相关的文件可以通过ALTER日志查询到相关的数据,数据文件,日志文件个数、路径、大小很重要,一定要搞清楚)CREATE CONTROLFILE REUSE DATABASE "ORACLETO" NORESETLOGS NOARCHIVELOG ---不要把日志文件重置了,方便后面的recover MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292LOGFILE GROUP 1 '/oracle/oradata/oracleto/redo01.log' SIZE 50M, GROUP 2 '/oracle/oradata/oracleto/redo02.log' SIZE 50M, GROUP 3 '/oracle/oradata/oracleto/redo03.log' SIZE 50M-- STANDBY LOGFILEDATAFILE '/oracle/oradata/oracleto/system01.dbf', '/oracle/oradata/oracleto/undotbs01.dbf', '/oracle/oradata/oracleto/sysaux01.dbf', '/oracle/oradata/oracleto/users01.dbf', '/oracle/oradata/oracleto/example01.dbf'CHARACTER SET WE8ISO8859P1执行这个sql语句 控制文件就会建立•Sql>alter database open; 这里会提示数据库中有一个文件需要恢复•Sql>recover database; 一定要执行这条语句 ,如果需要恢复的内容能在日志文件能找到,那么就可以恢复,如果不能恢复,那么就需要你加隐藏参数让数据库不进行一致性认证。(下面的情况就用到了)•Sql>alter databas open;这样就可以打开数据了。
2)归档和日志都在;先全备,然后再使用备份的控制文件恢复即可
在所有操作之前要做全备,很重要
同样查看警告日志 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log,确认问题所在
确认控制文件时候在,show parameter control_f查路径,ls -l查看
确定不在之后,那么就可以从备份文件恢复
SQL> show parameter control_ NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ control_file_record_keep_time integer 7 control_files string /oracle/oradata/oracleto/contr ol01.ctl, /oracle/oradata/orac leto/control02.ctl, /oracle/or adata/oracleto/control03.ctl SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control01.ctl SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control02.ctl SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control03.ctl SQL> ho ls /oracle/oradata/oracleto/ SQL> alter database mount; Database altered. SQL> alter database open; ------------恢复失败 alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> alter database recover database using backup controlfile; 用备份的控制文件恢复 alter database recover database using backup controlfile * ERROR at line 1: ORA-00279: change 792378 generated at 05/24/2012 07:32:41 needed for thread 1 ORA-00289: suggestion : /oracle/flash_recovery_area/ORACLETONY/archivelog/2012_05_26/o1_mf_1_13_%u_.arc ORA-00280: change 792378 for thread 1 is in sequence #13 SQL> shutdwon immediate SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 130025716 bytes Database Buffers 33554432 bytes Redo Buffers 2973696 bytes Database mounted. -----------仍然不能恢复 ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> shutdonwn immediate 在重做上面一步: SQL> alter database recover database using backup controlfile; 不行 SQL> alter database recover database using backup controlfile until change 792378; ---------------也不行 alter database recover database using backup controlfile until change 792378 * ERROR at line 1: ORA-00275: media recovery has already been started SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01156: recovery in progress may need access to files SQL> shutdown immediate; SQL> startup SQL> alter database recover database using backup controlfile until change 792378; SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隐藏参数,不让数据库进行一致性验证。 SQL> startup force SQL> alter database open resetlogs; 可以启动了 Sql>startup 最后要干掉隐藏参数,不然以后系统会出现ORA-600的内部错误。 Sql>show parameter _allow Sql>alter system reset "_allow_resetlogs_corruption" scope=spfile sid='*';
3)归档模式下使用正常的方式来恢复。
上面那种方法错误的执行 alter database recover database using backup controlfile,最后还使用了不该用的隐藏参数。
第一种方法
SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 125831412 bytes Database Buffers 37748736 bytes Redo Buffers 2973696 bytes ORA-00205: error in identifying control file, check alert log for more info查看告警日志。Vi $ORACLE_BASE/admin/alter.....log SQL> shwo parameter control_f SQL> ho ls /oracle/oradata/oracleto SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl SQL> shutdown immediate SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 125831412 bytes Database Buffers 37748736 bytes Redo Buffers 2973696 bytes Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01092: ORACLE instance terminated. Disconnection forced 连接中断 SQL> startup 可以正常启动了 ORACLE instance started.
第一种方法出现第二种情况
SQL>alter database open resetlogs; 如果这里提示数据库一致性验证错误,那么需要做以下几步操作 Sql>recover database; 提示需要用老的控制文件。 Sql>alter database recover database using backup controlfile; 还是不行。提示错误 Sql>shutdown immediate Sql>startup Sql>alter database open resetlogs; Sql>recover database 同样提示需要老的控制文件 Sql>recover database using backup controlfile; 执行之后会提示归档日志找不到,需要从日志文件中找,所以指定日志文件,那么你可以挨个将日志文件的路径输入进去,在这里有可能出现归档日志过旧的问题,还需要将日志文件输入进去找到最近的SCN(当前REDO为归档) $ORACLE_BASE/oradata/.....(需要绝对路径)SQL> recover database using backup controlfile;ORA-00279: change 605460 generated at 07/20/2013 20:42:17 needed for thread 1ORA-00289: suggestion :/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2013_07_20/o1_mf_1_25_%u_.arcORA-00280: change 605460 for thread 1 is in sequence #25Specify log: {<RET>=suggested | filename | AUTO | CANCEL}/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2013_07_20/o1_mf_1_24_8yo1fb2g_.arcORA-00328: archived log ends at change 605166, need later change 605460ORA-00334: archived log:'/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2013_07_20/o1_mf_1_24_8yo1fb2g_.arc'SQL> recover database using backup controlfile;ORA-00279: change 605460 generated at 07/20/2013 20:42:17 needed for thread 1ORA-00289: suggestion :/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2013_07_20/o1_mf_1_25_%u_.arcORA-00280: change 605460 for thread 1 is in sequence #25Specify log: {<RET>=suggested | filename | AUTO | CANCEL}/oracle/app/oracle/oradata/orcl/redo03.logLog applied.Media recovery complete.SQL> alter database open resetlogs; ---这样就可以打开了。Database altered.第二种方法是用隐藏参数(尽量少用,用完要去掉隐含参数)
SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 125831412 bytes Database Buffers 37748736 bytes Redo Buffers 2973696 bytes ORA-00205: error in identifying control file, check alert log for more info 查看告警日志。Vi $ORACLE_BASE/admin/alter.....log SQL> shwo parameter control_f SQL> ho ls /oracle/oradata/oracleto SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl SQL> shutdown immediate SQL> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218316 bytes Variable Size 125831412 bytes Database Buffers 37748736 bytes Redo Buffers 2973696 bytes Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open Sql>recover database; 提示不能恢复,需要是用老的控制文件恢复 Sql>recover database using backup controlfile; 还是不行 SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隐藏参数,不让数据库进行一致性验证。 Sql>start force Sql>alter database open resetlog; 实例终端 Sql>重新连接,startup 最后去掉隐藏参数 Sql>show parameter _allow Sql>alter database reset "_allow_resetlogs_corruption" scope=spfile sid='*'; 完成。
4)归档但日志不全;先全备,然后建立新的控制文件。
参考重建控制文件部分。
4、新建控制文件语句:
可以在在数据库运行在OPEN和mount的时候,可以执行alter database backup controlfile to trace as '<dir路径>'得到建立语句;,但要注意[no]archivelog [no]resetlogs 2个参数的区别。
开启归档模式 (SQL> archive log list 数据库OPEN阶段可以查询) 首先数据库要处于mount阶段才能开启, SQL> alter database archivelog; 然后把数据打开 SQL> archive log list 查询确认。
- 控制文件管理(重建、备份、恢复、增加,减少)
- oracle冷备份恢复重建控制文件
- ARCHIVELOG模式下用户管理恢复控制文件(2)——使用trace文件重建控制文件!
- 控制文件丢失,无备份,通过重建控制文件恢复数据库
- ORA-01207故障恢复(重建控制文件恢复)
- Oracle备份重建控制文件
- ARCHIVELOG模式下用户管理恢复控制文件—使用trace文件重建控制文件
- 基于用户管理的备份与恢复-控制文件的备份与恢复
- 基于用户管理的备份与恢复-控制文件的备份与恢复
- 控制文件重建后的不完全恢复
- ora-16433 重建控制文件恢复
- RMAN的备份与恢复(3)-控制文件恢复
- Oracle 控制文件重建和多元备份
- 控制文件恢复与备份
- ARCHIVELOG模式下用户管理的不完全恢复(4)——基于备份控制文件的不完全恢复!
- ORACLE控制文件备份恢复 noresetlogs 恢复
- Oracle 重建控制文件(在丢失控制文件的情况下,如何恢复数据库)
- ARCHIVELOG模式下用户管理的不完全恢复—基于备份控制文件的不完全恢复
- Hibernate学习总结
- 判断链表是否带环
- naked 使用时的注意事项。
- Hibernate学习知识总结
- Python命令行自动补全和记录历史命令
- 控制文件管理(重建、备份、恢复、增加,减少)
- GridLayout布局XML
- 如何为virtual box虚拟机增加硬盘空间[客机为xp系统]
- 【如何在Win7的硬盘上安装Fedora17】
- SQL数据库面试题
- Hibernate 学习总结
- SQL Server存储结构 一个字节造成的巨大性能差异
- mysql中数据类型
- hdu1671之字典树