最近伺服器的oracle經常宕掉,幾乎每天宕一次,察看日誌,發現出現「thread 1 cannot allocate new log」錯誤,也導致了乙個tablespace的空間不足。
對於這個錯誤資訊得解釋如下:
當系統要重新利用某個日誌檔案的時候,系統需要將該日誌檔案所包括的buffer cache 中的dirty block 寫到相應的資料檔案。由於對於乙個資料庫操作而言,它可能產生的redo 量僅僅是幾十位元組,但是對於buffer cache中確是乙個block (一般為8k)。所以,對於乙個僅僅是幾百m的日誌檔案,它所保護的buffer cache 可能是幾個g
一旦發生"thread 1 cannot allocate new log",表明系統的checkpoint 沒有來得及完成,也就是說 buffer cache 中的dirty data還沒有完全寫到資料檔案,就已經有大量的日誌需要寫入到系統。而系統只能通知應用:checkpoint 還沒有完成,你只能等待。這個時候,系統就基本處於hang 狀態了 when the database waits on checkpoints,redo generation is stopped until the
log switch is done
如果,我們在這個時候檢視系統資訊,就會發現:v$log中的日誌狀態大多處於active 狀態; v$session_wait 中會有很多log file switch 事件的發生
解決辦法: a. 新增更多的日誌檔案 b. 加大checkpoint 觸發的頻度 c. 減小redo log 的size d. 提高dbwr的效率 e. 為了更好的了解系統的執行,可以設定 log_checkpoint_interval = 0 log_checkpoint_timeout = 0 log_checkpoints_to_alert=true
我採用的辦法是增加日誌檔案,改變歸檔日誌的大小
該變歸檔日誌大小只有改變日誌組的大小!
方法:加入新的大的日誌檔案,然後刪掉舊的小的日誌檔案
假設現有三個日誌組,每個組內有乙個成員,每個成員的大小為1mb,現在想把此三個日誌組的成員大小都改為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;
當遇到刪除不了日誌檔案,需要歸檔時,,只需執行
alter database clear unarchived logfile group 1;
然後再執行刪除日誌檔案即可。
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> connect internal
sql> alter database backup controlfile to trace resetlogs
mysql宕掉的問題解決
mysql宕掉的問題解決 可能原因是資料過多導致。mysql 命令可以識別 但是進去後不能執行相關的mysql命令,需要 www.2cto.com 1,停掉mysql 2,在 etc my.cnf 檔案中新增innodb force recovery 6 如下示 innodb強制恢復 mysqld ...
oracle資料備份解決辦法
oracle資料備份解決辦法 實現資料備份辦法很多,這裡講我自己經常用到的一種 1 新增乙個記事本檔案,並儲存為批處理檔案 bat 你可以自己命名 比如back.bat 第一部分 首先進入自己要儲存備份檔案的目錄 比如如下,就是實現把檔案備份到 d databak d cd cd databak 重...
ORACLE 04082解決辦法
錯誤描述 oracle 04082 new 或old引用不允許在表級觸發器中 解決樣例 1 建立觸發器,出現問題 create or replace trigger trigger cname before delete on c declare v count number begin selec...