**************************************************************************************
歸檔日誌空間不足現的問題的現象
軟件正在操作,突然點擊任何菜單無反應;
重啓軟後,長時間沒反應或直接報數據庫連接錯誤;
以下系統管理員操作
oracle用戶登錄操作系統,輸入以下命令:
[oracle@OASERVER ~]$sqlplus
sql>connect cawy_cas/密碼 //回車後出現報錯
打開EM時(IE中輸入http://10.31.1.200:1158/em),報ORA-00257、ORA-01033等錯誤;
oracle客戶端工具(如:PLSQL Developer等)連接數據庫時報ORA-00257、ORA-01033等錯誤;
**************************************************************************************
說明:因oracle歸檔日誌還在開啓,需定期檢測歸檔日誌佔用空間大小,歸歸檔日誌達到一定比例時要及時清理,以防止歸檔日誌
問題導致的oracle服務停止現象,從而影響系統。
1、檢測oracle是否可以正常歸檔
oracle用戶登錄系統
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>select * from v$log
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 YES INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 YES INACTIVE
5899219 13-DEC-10
說明:上面列表可看出ARC列可正常歸檔,如果全部爲NO,oracle將無法進行歸檔,此時oracle實例會自動關閉。
2、查看FLASH_RECOVERY_AREA空間中各部分使用情況:
oracle用戶登錄系統
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql> select * from v$recovery_file_dest; //查看FLASH_RECOVERY_AREA空間大小
sql>select * from v$flash_recovery_area_usage; //查看FLASH_RECOVERY_AREA空間使用情況,下面可以看出已使用5.57%
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 5.57 0 14
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected.
注意:當使用比例達到90%以上,就必須及時清理日誌,否則oracle服務會隨時停止。
**************************************************************************************
恢復oracle歸檔日誌正常歸檔的方法
1、重構歸檔日誌文件
此操作在oracle用戶下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql> startup mount;
sql>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
1 1 263 52428800 1 NO CURRENT
5924771 13-DEC-10
2 1 261 52428800 1 NO INACTIVE
5878129 12-DEC-10
3 1 262 52428800 1 NO INACTIVE
5899219 13-DEC-10
sql>alter database clear unarchived logfile group 1; //執行此行時可能出錯,如有報錯直接把 1 修改成 2 或 3 之後
再執行1。
sql>alter database clear unarchived logfile group 2;
sql>alter database clear unarchived logfile group 3;
sql>shutdown immediate;
sql>startup;
說明:此操作之後需用root用戶登錄系統重啓resin服務
增加一日誌組
alter database add logfile group 4 ('+data','+fra','/u01/app/oracle/redo403.log') size 50M;
添加日誌文件最後一步 要切換日誌 使用一次
切換:
1* select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
SQL> /
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M CURRENT NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 0 50M UNUSED YES
alter system switch logfile ;
SQL> select GROUP# ,SEQUENCE#,BYTES/1024/1024 ||'M' "log_size" ,STATUS ,ARCHIVED from v$log
2 ;
GROUP# SEQUENCE# log_size STATUS ARC
---------- ---------- --------------- ---------------- ---
1 7 50M ACTIVE NO
2 5 50M INACTIVE NO
3 6 50M INACTIVE NO
4 8 50M CURRENT NO
檢查一下日誌文件的狀態
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
2 +FRA/orcl/onlinelog/group_2.258.822001559
2 /u01/app/oracle/redo203.log
2 +DATA/orcl/onlinelog/group_2.262.822001551
3 +DATA/orcl/onlinelog/group_3.263.822001563
3 /u01/app/oracle/redo303.log
3 +FRA/orcl/onlinelog/group_3.259.822001571
4 +FRA/orcl/onlinelog/group_4.260.822010503
4 /u01/app/oracle/redo403.log
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
4 +DATA/orcl/onlinelog/group_4.267.822010497
12 rows selected.
模擬:一個日誌組有3個文件,損壞一個
select GROUP# ,MEMBER,STATUS from v$logfile order by 1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
1 +DATA/orcl/onlinelog/group_1.261.822001539
刪除一個: rm -rf /u01/app/oracle/redo103.log
startup force ---->可以成功!!!----》看警告日誌文件
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
vim alert_orcl.log
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_1450.trc:
ORA-00321: log 1 of thread 1, cannot update log file header
ORA-00312: online log 1 thread 1: '/u01/app/oracle/redo103.log'
Checker run found 1 new persistent data failures
修復一下:
刪除壞的,添加好的
alter database drop logfile member '/u01/app/oracle/redo103.log';
alter database add logfile member '/u01/app/oracle/redo103.log' to group 1;
切換一下
alter system switch logfile ;
alter system switch logfile ;
alter system switch logfile ;
1* select GROUP# ,MEMBER,STATUS from v$logfile where group#=1
SQL> /
GROUP# MEMBER STATUS
---------- --------------------------------------------- -------
1 +DATA/orcl/onlinelog/group_1.261.822001539
1 +FRA/orcl/onlinelog/group_1.257.822001547
1 /u01/app/oracle/redo103.log
2、增大閃存空間FLASH_RECOVERY_AREA大小
此操作在oracle用戶下完成
[oracle@OASERVER ~]$sqlplus
sql>connect / as sysdba
sql>shutdown immediate;
sql>startup mount;
sql>show parameter db_recovery_file_dest; //查看回閃恢復區的大小和存放目標
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +FRA
db_recovery_file_dest_size big integer 3882M
alter system set db_recovery_file_dest_size =5G ;
alter system set db_recovery_file_dest='+FRA'; (磁盤組 文件目錄)
sql>alter system set db_recovery_file_dest_size = 10G(缺省是2G,可以根據實際情況調整大小,最大不能超過分區可用空
間大小,否則重啓後自動恢復2G)
sql>alter database open;
說明:此操作之後需用root用戶登錄系統重啓resin服務
[root@OASERVER /]cd /app/weaver/resin/bin/
[root@OASERVER bin]./stopresin.sh
[root@OASERVER bin]./startresin.sh
===================================================================
*****ORACLE 歸檔日誌打開關閉方法***********
===================================================================
一 設置爲歸檔方式
------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是不是歸檔方式
sql> alter system set log_archive_start=true scope=spfile; #啓用主動歸檔
sql> alter system set log_archive_dest='location=/oracle/ora9/oradata/arch' scope=spfile;
#設置歸檔路徑
sql> alter system set log_archive_dest_1='location=/oracle/ora9/oradata/arch1' scope=spfile;
sql> alter system set log_archive_dest_2='location=/oracle/ora9/oradata/arch2' scope=spfile;
#如果歸檔到兩個位置,則可以通過上邊方法實現
sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log' #設置歸檔日記款式
sql> shutdown immediate;
sql> startup mount; #打開控制文件,不打開數據文件
sql> alter database archivelog; #將數據庫切換爲歸檔模式
sql> alter database open; #將數據文件打開
sql> archive log list; #查看此時是否處於歸檔模式
查詢以確定數據庫位於archivelog模式中且歸檔過程正在運行
sql> select log_mode from v$database;
sql> select archiver from v$instance;
日誌切換
sql> alter system switch logfile;
這次日誌切換將歸檔寫到兩個目標地,
即第二步的/oracle/ora9/oradata/arch1和/oracle/ora9/oradata/arch1,要是要對目錄確認
在oracle情況中運行如下查詢:
sql> select name from v$archived_log;
而後在操作系統中確認查詢所列出的文件
二 設置非歸檔方式
------------------------------------------
view plaincopy to clipboardprint?
sql> archive log list; #查看是否是歸檔方式
sql> alter system set log_archive_start=false scope=spfile; #禁用自動歸檔
sql> shutdown immediate;
sql> startup mount; #打開控制文件,不打開數據文件
sql> alter database noarchivelog; #將數據庫切換爲非歸檔模式
sql> alter database open; #將數據文件打開
sql> archive log list; #查看此時便處於非歸檔模式
三 歸檔相關命令
---------------------------------------
view plaincopy to clipboardprint?
archive log stop;
archive log start;
archive log list;
show parameters;
show parameters log_archive_start;
show parameters log_archive_max_process; #歸檔進程數
alter system set log_archive_max_process=5; #將歸檔進程數改爲5
select * from v$bgprocess; #檢查後臺進程
Oracle歸檔日誌空間不足引發的問題及解決方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.