今天检查数据库文件,发现redo文件的名称前面都有一个问号(?),其他文件都正常,数据库运行也是正常的,确认不是客户端的编码问题。由于不知道此文件是否会对以后的数据库产生影响,所以我做了个更换redo文件的操作如下:
oracle@P-RQMES-D1: /oracle/product/11.2/dbs> ls -all
总计 1049348
drwxr-xr-x 2 oracle dba 4096 11-12 21:13 .
drwxr-xr-x 74 oracle dba 4096 2014-03-19 ..
-rw-rw---- 1 oracle dba 1544 10-01 13:46 hc_PRQMESDB.dat
-rw-r--r-- 1 oracle dba 2851 2009-05-15 init.ora
-rw-r--r-- 1 oracle dba 998 2014-11-05 initPRQMESDB.ora
-rw-r----- 1 oracle dba 24 2014-03-19 lkPRQMESDB
-rw-r----- 1 oracle dba 1536 2014-10-11 orapwPRQMESDB
-rw-r----- 1 oracle dba 104858112 11-12 21:14 ?redo01_1.log-rw-r----- 1 oracle dba 104858112 11-12 21:14 ?redo01_2.log-rw-r----- 1 oracle dba 104858112 11-12 20:42 ?redo02_1.log-rw-r----- 1 oracle dba 104858112 11-12 20:42 ?redo02_2.log-rw-r----- 1 oracle dba 104858112 11-12 20:55 ?redo03_1.log-rw-r----- 1 oracle dba 104858112 11-12 20:55 ?redo03_2.log所有的redo文件都有?-rw-r----- 1 oracle dba 104858112 11-12 21:06 ?redo04_1.log-rw-r----- 1 oracle dba 104858112 11-12 21:06 ?redo04_2.log
解决方法:
查看redo的状态
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;,
先删除 ARCHIVED=YES, STATUS=INACTIVE的,
ALTER DATABASE DROP LOGFILE GROUP 2; --这种删除是不会从物理上把文件从磁盘删除的,需要手动去删除,这个时候删除的时候一定要当心哦!!!!
然后同时增加删除的组信息
alter database add logfile group 2
('/oracle/product/11.2/dbs/redo02_1.log',
'/oracle/product/11.2/dbs/redo02_2.log') size 100M;
切换日志文件
alter system switch logfile
SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
GROUP# ARC STATUS
---------- --- ----------------
1 YES ACTIVE
2 YES ACTIVE
3 NO CURRENT
4 YES ACTIVE
5 YES ACTIVE
SQL> alter system checkpoint; --可以让活动的日志文件立马变成不活动的,不活动就可以做drop logfile group动作了
System altered.
SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
GROUP# ARC STATUS
---------- --- ----------------
1 YES INACTIVE
2 YES INACTIVE
3 NO CURRENT
4 YES INACTIVE
5 YES INACTIVE
checkpoint由ckpt进程触发oracle进行checkpoint动作,将data buffer中的脏块(已经写在
redo里记录但是没有写到datafile里的)的内容写入到data file里并释放站用的空间,由
dbw后台进程完成,并修改controlfile和datafile的scn.
一般手工执行是由于要删除某个日志但是该日志里还有没有同步到data file里的内容,就
需要手工check point来同步数据,然后就可以drop logfile group n.