最近在把DATABASE切换到ARCHIVELOG模式之后,发现Oracle默认的是非自动归档,即LOG_ARCHIVE_START = FALSE,
可能是
因为当前测试的数据库是手工创建的,所以有些启动参数和用DBCA创建的不太一致。
另外自己创建的重做日志文件也都比较小,只有3个2M的文件,直接执行一个脚本就把所有重做日志写满了,又没有设置自动归档,所以整个系统都hang住了,都在等待日志归档,clear了也不行,就只能增加logfile了。
alter.log日志信息:
Mon Dec 15 14:38:08 2008
Thread 1 advanced to log sequence 155
Current log# 2 seq# 155 mem# 0: D:\ORACLE\ORADATA\KAKA\REDO02.LOG
Thread 1 advanced to log sequence 156
Current log# 3 seq# 156 mem# 0: D:\ORACLE\ORADATA\KAKA\REDO03.LOG
Thread 1 cannot allocate new log, sequence 157
All online logs needed archiving
Current log# 3 seq# 156 mem# 0: D:\ORACLE\ORADATA\KAKA\REDO03.LOG
LogFile不能像DataFile那样直接通过alter database datafile ... resize 来重置大小,所以比较麻烦。
在网上查了一下,找到N多年前biti老大给的方法,步骤应该很清楚了,前提是要用ARCHIVELOG模式,否则删除旧日志后无备份信息。
方法:加入新的大的日志文件,然后删掉旧的小的日志文件
假设现有3个日志组,每个组内有1个成员,每个成员的大小为1MB,现在想把此3个日志组的成员大小都改为10MB
1、创建2个新的日志组
alter database add logfile group 4 ('D:\ORACLE\ORADATA\ORADB\REDO04_1.LOG') size 1024k;
alter database add logfile group 5 ('D:\ORACLE\ORADATA\ORADB\REDO05_1.LOG') size 1024k;
2、切换当前日志到新的日志组
alter system switch logfile;
alter system switch logfile;
3、删除旧的日志组
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
4、操作系统下删除原日志组1、2、3中的文件
5、重建日志组1、2、3
alter database add logfile group 1 ('D:\ORACLE\ORADATA\ORADB\REDO01_1.LOG') size 10M;
alter database add logfile group 2 ('D:\ORACLE\ORADATA\ORADB\REDO02_1.LOG') size 10M;
alter database add logfile group 3 ('D:\ORACLE\ORADATA\ORADB\REDO03_1.LOG') size 10M;
6、切换日志组
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
7、删除中间过渡用的日志组4、5
alter database drop logfile group 4;
alter database drop logfile group 5;
8、到操作系统下删除原日志组4、5中的文件
9、备份当前的最新的控制文件
SQL> alter database backup controlfile to trace resetlogs;
-The End-