ORA-00257: archiver error. Connect internal only, until freed 錯誤的處理方法
方法一:
參考: http://blog.csdn.net/panys/article/details/3838846
archive log日誌已滿
ORA-00257: archiver error. Connect internal only, until freed錯誤的處理方法
1.用sys用戶登錄
sqlplus sys/pass@tt as sysdba
2.看看archiv log所在位置
SQL> show parameter log_archive_dest;
NAME TYPE VALUE
--------------------------------- --- ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
3.一般VALUE為空時,可以用archive log list;檢查一下歸檔目錄和log sequence
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 360
Next log sequence to archive 360
Current log sequence 362
4.檢查flash recovery area的使用情況,可以看見archivelog已經很大了,達到96.62
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ---------------- --------- ---------------
CONTROLFILE .13 0 1
ONLINELOG 2.93 0 3
ARCHIVELOG 96.62 0 141
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
5.計算flash recovery area已經佔用的空間
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.9904 6.找到recovery目錄, show parameter recover SQL> show parameter recover;NAME TYPE VALUE ------------------------------------ -------- --- ------------------------------ db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 5G recovery_parallelism integer 0
7上述結果告訴我們,歸檔位置用的是默認值,放在flash_recovery_area下(db_recovery_file_dest目錄=/u01/app/oracle/flash_recovery_area)
[root@sha3 10.2.0]# echo $ORACLE_BASE
/u01/app/oracle
[root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/tt/archivelog
轉移或清除對應的歸檔日誌,刪除一些不用的日期目錄的文件,注意保留最後幾個文件(比如360以後的)
-------------------------------------------------- -------------------------------------
注意:
在刪除歸檔日誌後,必須用RMAN維護控制文件,否則空間顯示仍然不釋放。
-------------------------------------------------- -------------------------------------
8. rman target sys/pass
[root@sha3 oracle]# rman target sys/pass
Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01:41:26 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: tt (DBID=4147983671)
9.檢查一些無用的archivelog
RMAN> crosscheck archivelog all;
10.刪除過期的歸檔
RMAN> delete expired archivelog all;
delete archivelog until time 'sysdate-1' ; 刪除截止到前一天的所有archivelog
11.再次查詢,發現使用率正常,已經降到23.03
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ---------------- --------- ---------------
CONTROLFILE .13 0 1
ONLINELOG 2.93 0 3
ARCHIVELOG 23.03 0 36
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
其它有用的Command:
----------------------------------
如果archive log模式下不能正常startup,則先恢復成noarchive log,startup成功後,再shutdown;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
shutdown immediate;
再次startup以archive log模式
shutdown immediate;
startup mount;
show parameter log_archive_dest;
alter database archivelog;
archive log list;
alter database open;
如果還不行,則刪除一些archlog log
SQL> select group#,sequence# from v$log;
GROUP# SEQUENCE#
---------- ----------
1 62
3 64
2 63
原來是日誌組一的一個日誌不能歸檔
SQL> alter database clear unarchived logfile group 1;
alter database open;
最後,也可以指定位置Arch Log,請按照如下配置
select name from v$datafile;
alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile
或者修改大小
SQL> alter system set db_recovery_file_dest_size=3G scope=both;
方法二:
1. 查詢 archive log 使用情況1
select * from v$recovery_file_dest;
archive log 預設 SPACE_LIMIT 是 2 G, SPACE_USED 為目前使用量, 通常會出現 ORA-00257 表示 SPACE_USED 數量已接近 SPACE_LIMIT 限制
2. 查詢 archive log 使用情況2
select * from v$flash_recovery_area_usage;
ARCHIVELOG 的 PERCENT_SPACE_USED 目前使用 0%, 通常會出現 ORA-00257 表示 PERCENT_SPACE_USED 使用率已達到接近 100 %
3. 查詢 archive log 設定
select log_mode, flashback_on from v$database;
LOG_MODE 為 ARCHIVELOG 表示使用 archive log, NOARCHIVELOG 表示不使用 archive log, FLASHBACK_ON 為 ON 表示啟動, OFF 則關閉, 而 FlashBack log 可以將資料庫退回到過去某個時間點去, 但這個檔預設最大為 2G. 但是在一段時間過後, 很快就達到了2G, 這個時候就會出現ORA-00257錯誤了.
P.S 不追求資料的可安全性, 可以關閉閃回日誌的功能
alter database flashback off
第3點的 FLASHBACK_ON 即會顯示 OFF
如果關閉閃回日誌可以解決 ORA-00257, 下列步驟即不需再設定, 但通常會使用步驟 4 解決 ORA-00257
4. 停止 ARCHIVE MODE, 將 LOG_MODE 設定為 NOARCHIVELOG
4.1 進入 Command mode
4.2 輸入 sqlplus "/ as sysdba"
4.3 關閉 DB :
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
P.S 若無法 shutdown DB, 那可能是因為 log 滿了的關係, 利用下列步驟清除今日以前的 log
1. 執行 command mode
2. rman target /
3. crosscheck archivelog all;
4. delete archivelog until time 'sysdate-1';
4.4 啟動 instance :
SQL> startup mount;
ORACLE instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
4.5 停用 ACHIVE MODE:
SQL> alter database noarchivelog;
Database altered.
4.6 啟動 DB:
SQL> alter database open;
Database altered.
4.7 查看是否為 No Archive Mode (也可以使用 PLSQL 查詢, 如步驟3)
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 149
Current log sequence 152