服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 数据库技术 > Oracle技术 > Oracle开发 > 查看文档

oracle与data guard环境中重建控制文件 (1)

【赛迪网-it技术报道】环境:linux as 3+ora 9.2.4 +data guard

max logfiles ,resetlogs

问题描述:目前已经搭建好了基于归档日记传输的最大性能保护模式的dg,想把它改基于redo 日记传输模式。在备库新建standby redo 的时候报错,示例如下:

sql> alter database add standby logfile group 4 

('/server/ora9/oradata/ora9i/redo04.log') size 100m;

database altered.

sql> alter database add standby logfile group 5 

('/server/ora9/oradata/ora9i/redo05.log') size 100m;

database altered.

sql> alter database add standby logfile group 6 

('/server/ora9/oradata/ora9i/redo06.log') size 100m
*
error at line 1:

ora-01185: logfile group number 6 is invalid


sql> alter database add standby logfile group 7 

('/server/ora9/oradata/ora9i/redo07.log') size 100m
*
error at line 1:
ora-01185: logfile group number 7 is invalid

出现以上这个错误是因为控制文件中限制了max logfiles 最大日志组数量。

像这种情况只能重建控制文件。

但这是dg环境,处理控制文件要特别的小心,如果搞不好就会dg环境被破坏,需要重建环境。(那样工作量就大了)

1.导出重建脚本

sql> alter database backup controlfile to trace;

database altered.
在新产生的trace文件中可以看到下面的内容:

startup nomount pfile=$oracle_home/dbs/initora9i.ora-as_primary

create controlfile reuse database "ora9i" 

resetlogs force logging archivelog

-- set standby to maximize performance
maxlogfiles 10
maxlogmembers 3
maxdatafiles 100
maxinstances 1
maxloghistory 226
logfile
group 1 '/server/ora9/oradata/ora9i/redo01.log' size 100m,
group 2 '/server/ora9/oradata/ora9i/redo02.log' size 100m,
group 3 '/server/ora9/oradata/ora9i/redo03.log' size 100m
-- standby logfile
datafile
'/server/ora9/oradata/ora9i/system01.dbf',
'/server/ora9/oradata/ora9i/undotbs01.dbf',
'/server/ora9/oradata/ora9i/cwmlite01.dbf',
'/server/ora9/oradata/ora9i/drsys01.dbf',
'/server/ora9/oradata/ora9i/example01.dbf',
'/server/ora9/oradata/ora9i/indx01.dbf',
'/server/ora9/oradata/ora9i/odm01.dbf',
'/server/ora9/oradata/ora9i/tools01.dbf',
'/server/ora9/oradata/ora9i/user01.dbf',
'/server/ora9/oradata/ora9i/xdb01.dbf',
'/server/ora9/oradata/ora9i/data01.dbf',
'/server/ora9/oradata/ora9i/chxi.dbf'
character set zhs16gbk
;

注意:

(1)在create controlfile reuse database "ora9i" resetlogs force logging archivelog中间的resetlogs, 一定要改成noresetlogs,不然日志的序列就乱了。也备库的同步就会出现麻烦。

(2)更改maxlogfiles 10

2.在主库重建控制文件

sql> shutdown immediate;

sql> @recreatectl.sh

控制文件已创建.

sql> shutdown immediate;

sql> startup

数据库重起成功,并确认redo log的sequence有没有被reset:

sql> select group#,sequence#,status from v$log;

group# sequence# status
---------- ---------- ----------------
1 67 active
2 66 inactive
3 68 current

3.为备库重建控制文件

在主库上执行:

sql> alter database create standby controlfile as ‘控制文件名和路径’

并传送到备份机上。

关闭备库,并用新的控制文件覆盖原来的控制文件(注意备份旧的控制文件);

4.重起备库

sql> startup nomount;
sql> alter database mount standby database;
alter database mount standby database
*
error at line 1:
ora-01991: invalid password file 

'/server/ora9/product/9.2/dbs/orapwora9i'

提示密码文件也失效了。

解决:从主库再传一份过来,覆盖。

重启备库:

sql> startup nomount;
sql> alter database mount standby database;
sql> alter database recover managed standby 
database disconnect from session;

确认相关进程已经启动:

sql> select process,status from v$managed_standby;

process status
------- ------------
arch connected
arch connected
mrp0 wait_for_log
rfs receiving
rfs attached

5.验证备库工作正常:

在主库作日志切换。并看备库是否接收正常。

sql> alter system switch logfile;

查看备库是否接收到主库的日志并正确应用。

select sequence#, first_time, next_time, applied from v$archived_log order by sequence#;

6.继续加redo log group

这是因为控制文件被重建过了,之前在备库中建立成功的两个redo4,redo5也已经被用了。在os中删除。

[oracle@ora9-2 ora9i]$ rm redo04.log redo05.log

sql> alter database add standby logfile group 4 

('/server/ora9/oradata/ora9i/redo04.log') size 100m;

database altered.

sql> alter database add standby logfile group 5
('/server/ora9/oradata/ora9i/redo05.log') size 100m;

database altered.

sql> alter database add standby logfile group 6
('/server/ora9/oradata/ora9i/redo06.log') size 100m;

database altered.

sql> alter database add standby logfile group 7
('/server/ora9/oradata/ora9i/redo07.log') size 100m;

database altered.

7.特殊情况

假如不能正常传输切换之间产生的日志,需要手动传输并注册到备库来进行恢复:

sql> alter database register physical logfile 
'/server/ora9/primary-arc/ora9i_1_60.log'; 
sql> alter database recover managed standby database cancel;

8.完成

扫描关注微信公众号