解決Oracle archive log 日誌已滿問題

一、背景

今天接到開發電話,說Oracle遠程連不上了,可能是archivelog滿了。我登陸Oracle試了下,提示

ORA-00257: archiver error. Connect internal only, until freed。

考慮到前些天已經擴大了硬盤空間,應該是archive log大小已經達到Oracle中對archive log大小的限制。而DBA已經放假了。因此決定清除下無用的日誌同時修改下對日誌大小的限制。

由於我對Oracle並不熟悉,因此在完成後將整個過程記錄下來,便於以後查閱。

二、環境

RHEL 6.3 + Oracle 11gR2

三、過程

由於archive log空間滿導致了不能遠程登錄,因此ssh到服務器後,使用sqlplus sys/pass as sysdba登陸oracle。

首先看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

這時候如果value是空的,可以嘗試


SQL> archive log list;


然後我查看了下使用情況


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                99.72                       0              122
BACKUPPIECE                   0                         0               0
IMAGECOPY                      0                         0               0
FLASHBACKLOG                0                         0               0


顯然,已經使用了超過99%的日誌空間

這時候,我直接進入flash_recovery_are的目錄

cd /orace/app/oracle/flash_recovery_area/ORCL/archivelog

然後我決定先備份下相關文件

tar Jcvf arlog.20140125.tar.xz *

第一次操作時發現會提示文件在壓縮過程中變化了。纔想起來我沒有停止Oracle服務。因此回到sqlplus先將Oracle停下來

SQL> shutdown immediate;

這個過程等待了好久才完成。。

這時候重新打包。打包過程持續了差不多兩個多小時。。。

完成後,先把壓縮包備份到其他目錄並且scp到了一臺備份文件用的服務器。然後很暴力地刪除了這個文件夾下2013年的全部目錄

rm -rf 2013_*

完成了。將數據庫啓動起來


sqlplus sys/pass as sysdba


SQL> startup

我第一次startup失敗了,提示ORA-03113: end-of-file on communication channel。我又重新執行了下

SQL> startup mount

成功。用rman修複相關信息

rman target sys/pass
RMAN> delete expired archivelog all;

完成後,回到sqlplus修改archivelog大小

SQL> alter system set db_recovery_file_dest_size=5G scope=spfile;

修改完不會立即生效。需要重啓Oracle

SQL> shutdown immediate
SQL> startup

這時候查看大小

SQL> show parameter db_recover
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
...
db_recovery_file_dest_size           big integer 5G

整個過程就完成了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章