您的位置:首页 > 其它

控制文件的管理(比较全面)

2012-06-17 22:34 225 查看
控制文件的管理

A、个数与位置管理

因为控制文件时在参数文件定义的,所以可以直接修改参数文件

SPfile修改的步骤:

a) 修改SPFILE参数control_files

b) 一致性关闭数据库

c) 增加或减少控制文件

d) 启动数据库使用SPFILE

e) 验证结果

实验:

减少控制文件:

a)SQL> show parameter control_f;

b)Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' scope=spfile;

c)Shutdown immediate

d)Startup 完成

增加控制文件:

a)sql>show parameter control_f; 确认控制文件的路径等相关信息。

b)Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' ,'/oracle/oradata/oracleto/control02.ctl','/oracle/oradata/oracleto/control03.ctl' scope=spfile;

c)Shutdown immediate;

d)Startup 此时会报版本号错误,那么需要从高版本的拷贝至低版本。

ORA-00214: control file '/oracle/oradata/oracleto/control01.ctl' version 771 inconsistent with file '/oracle/oradata/oracleto/control02.ctl' version 762

e)sql>show parameter control_f; 确认控制文件的路径等相关信息。

f)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control02.ctl

g)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control03.ctl

h)Alter database mount; 检查是否解决问题。

i)Startup 完成。

Pfile修改的步骤:

a) 一致性关闭数据库

b) 修改Pfile参数

c) 增加或减少控制文件

d) 启动数据库使用PFILE

e) 验证结果

A、状态管理

目的是看数据库使用的控制文件与参数定义控制文件是否吻合。

文件。每到数据库启动到mount都读控制文件并把数据库的结构对应到实际的文件上去才能启动。

存在状态:

a) 找位置和个数 show parameter control_f 查处的结果在通过操作系统来对比

Ho ll -h /路径

b) 需要查看磁盘空间使用情况 sql>ho df -H

c) 查看文件的大小 sql>ho ls -lh /oracle/oradata/ora<sid>.ctl

控制文件尽量控制在100M以内,如果超过了,那么需要尽快采取措施,一般情况下需要重建控制文件。

B、控制文件备份。

a) Sql>alter database backup controlfile to '/oracle/bakcup/control20120522.bak'; 归档模式下这样备份才有作用 ,当控制文件出现问题是,可以直接在操作系统下拷贝过去就行。

b) Sql>alter database backup controlfile to trace as '/oracle/....txt' 这样就得到一个重建控制文件的脚本。

c) 通过rman备份 也需要归档模式才能使用rman

Rman>backup current controlfile; 自动就在闪回目录下。

或者rman>backup database include current controlfile; 备份数据库的同时也备份控制文件

d)

C、重建控制文件 原则

恢复管理:

如果控制文件丢失和不一致了,需要DBA处理,首先确认控制文件交易号码那个比较新那个比较旧。复制新的给旧的或者直接更改参数文件control_file使用新的

几种丢失情况的解决:

确认数据库是否处于归档模式,不是归档,则先全备,然后建立新的控制文件即可。

解决办法:

a)、确认数据文件,默认的数据文件保存在$ORACLE_BASE/oradata/<sid>/xxxx.dbf 文件。

b)查看告警日志 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log

c)建立控制文件(有些相关的文件可以通过ALTER日志查询到相关的数据,数据文件,日志文件个数、路径、大小很重要,一定要搞清楚)

CREATE CONTROLFILE REUSE DATABASE "ORACLETO" NORESETLOGS NOARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

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 LOGFILE

DATAFILE

'/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

d)执行这个sql语句 控制文件就会建立

e)Sql>alter database open;

这里会提示数据库中有一个文件需要恢复

f)Sql>recover database; 一定要执行这条语句 ,如果需要恢复的内容能在日志文件能找到,那么就可以恢复,如果不能恢复,那么就需要你加隐藏参数让数据库不进行一致性认证。(下面的情况就用到了)

g)Sql>alter databas open;这样就可以打开数据了。

归档和日志都在;先全备,然后再使用备份的控制文件恢复即可

a) 在所有操作之前要做全备,很重要

b) 同样查看警告日志 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log,确认问题所在

c) 确认控制文件时候在,show parameter control_f 查路径,ls -l 查看

d) 确定不在之后,那么就可以从备份文件恢复

e)

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 database reset "_allow_resetlogs_corruption" scope=spfile sid='*';

归档模式下使用正常的方式来恢复。上面那种方法错误的未执行alter database open resetlogs, 而先执行 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>alter database recover database using backup controlfile;

执行之后会提示归档日志找不到,需要从日志文件中找,所以指定日志文件,那么你可以挨个将日志文件的路径输入进去,

$ORACLE_BASE/oradata/.....(需要绝对路径)

Sql> alter database resetlogs; 这样就可以恢复了。

ƒ第二种方法是用隐藏参数 (一般不用)

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>alter database 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='*';

完成。

归档但日志不全;先全备,然后建立新的控制文件。

参考重建控制文件部分。

新建控制文件语句:

可以在在数据库运行在OPEN和mount的时候,可以执行alter database backup controlfile to trace as '<dir路径>'得到建立语句;,但要注意[no]archivelog [no]resetlogs 2个参数的区别。

D、开启归档模式 (SQL> archive log list 数据库OPEN阶段可以查询)

首先数据库要处于mount阶段才能开启, SQL> alter database archivelog;

然后把数据打开 SQL> archive log list 查询确认。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐