實戰管理聯機日志
2024-07-21 02:34:04
供稿:網友
今天查看偶得可愛的dbora817,發現了一個問題:
select sid,event from v$session_wait;
發現了
7 buffer busy waits
8 log file switch (archiving needed)
這是咋個回事呢?
最近我做了什么事情呢?原來早上我本打算對數據庫進行壓力測試,所以往一個表里面insert了200萬的數據。
不想偶得pc根本受不了,sqlplus死掉了。我就直接把它Ctrl+C了。不過session還在,而且v$session_wait里和
v$locked_object里面還有這個session的信息。
于是我就把這個session給直接干掉了:
alter system kill session '12,441';
這個問題是解決了。
沒想為insert的數據太多,我得重做日志設的只有1M大小,而且只有三個。所以當重做日志三個都被填滿了,而且archive
還沒做完。所以就在v$session_wait里出現log file switch (archiving needed)的event.
試著Troubleshooting一下:
a.
SQL> alter system switch logfile;
不想這個操作也hung住了,根本沒反應。這個應該是本來logfile都已經滿了,肯定switch也是沒法子做得了。
b.增加第四組logfile,大小為10M.
SQL> alter database add logfile group 4 'C:OracleORADATASYMIELDREDO04.LOG' size 10m;
發現做完了之后,第一步里的alter system switch logfile也成功完成了。
c.刪掉第一組的logfile.
SQL> alter database drop logfile group 1;
alter database drop logfile group 1
*
ERROR 位于第 1 行:
ORA-00350: 日志 1 (線程 1) 中需要歸檔
ORA-00312: 聯機日志 1 線程 1: 'C:ORACLEORADATASYMIELDREDO01.LOG'
刪不掉,提示第一組聯機日志需要歸檔。
d.歸檔聯機日志
SQL> archive log start
已處理的語句
SQL> archive log NEXT
ORA-00271: 沒有需要存檔的日志
SQL> archive log all;
ORA-00271: 沒有需要存檔的日志
歸檔完成。
e.刪掉第一組的logfile.
SQL> alter database drop logfile group 1;
數據庫已更改。
f.增加第一組logfile,大小為10M.
SQL> alter database add logfile group 1 'C:ORACLEORADATASYMIELDREDO01.LOG' size 10m;
alter database add logfile group 1 'C:ORACLEORADATASYMIELDREDO01.LOG' size 10m
*
ERROR 位于第 1 行:
ORA-00301: 添加日志文件 'C:ORACLEORADATASYMIELDREDO01.LOG' 時出錯 -
無法創建文件
ORA-27038: skgfrcre: 文件存在
OSD-04010: <創建> 選項指定,文件已經存在
第一組logfile已經存在?因為drop掉的第一組日志的操作系統文件并沒有被刪除。
del C:ORACLEORADATASYMIELDREDO01.LOG
再try一次
SQL> alter database add logfile group 1 'C:ORACLEORADATASYMIELDREDO01.LOG' size 10m;
數據庫已更改。
g.再更改剩下的logfile。
注重的是:v$log中status為active和arc為No的日志文件不能被drop.
查看結果:
數據庫SQL> select sid,event from v$session_wait;
SID EVENT
---------- ----------------------------------------------------------------
ok,搞定。
已經沒有相關的event了。
added by 20050804:
昨晚上看《Oracle8 備份與恢復手冊》發現:
原來,假如Archivelog模式下的數據庫,假如歸檔的操作沒有被正常執行,那么整個數據庫將被掛起。
偶懷疑這次就是一個掛起的事件。