【赛迪网-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.完成