ORA-00257:ORACLE歸檔日誌已滿,再未有新空間開闢的情況下,不允許對數據庫進行操作。
--查看ORACLE歸檔是否開啓 和 使用路徑使用參數
Sqlplus / as sysdba
SQL > archive log list;
如圖,ORACLE已經開啓了歸檔模式,歸檔文件存放在ORACLE內置參數DB_RECOVERY_FILE_DEST路徑下
當前歸檔日誌的序列號是173.
--查看參數DB_RECOVERY_FILE_DEST設置的值
show parameter db_recovery_file_dest;
--在操作系統中找到最新歸檔日誌文件
--查看序列號格式
show parameter log_archive_format;
%s: 日誌序列號:
%S: 日誌序列號(帶有前導)
%t: 重做線程編號.
%T: 重做線程編號(帶有前導)
%a: 活動ID號
%d: 數據庫ID號
%r 聯機重做日誌(resetlogs)的id值
是不是感覺看不懂,咋數據庫設置的文件格式與實際文件不匹配呀,這是因爲ORACLE數據庫log_archive_format參數不對DB_RECOVERY_FILE_DEST參數生效,要想使用log_archive_format參數設置歸檔文件格式,得使用DB_RECOVERY_FILE_DEST_N參數。
注意:DB_RECOVERY_FILE_DEST與DB_RECOVERY_FILE_DEST_N不能共存,屬於見面死關係。
--將db_recovery_file_dest參數置空
alter system set db_recovery_file_dest = '' scope=spfile;
--配置log_archive_dest_1參數
alter system set log_archive_dest_1='location=D:\app\Administrator\flash_recovery_area_My' scope=spfile;
--修改歸檔文件命名格式
alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
--重新啓動數據庫,使上述所有修改的參數生效。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
Total System Global Area 1720328192 bytes
Fixed Size 2176448 bytes
Variable Size 1023412800 bytes
Database Buffers 687865856 bytes
Redo Buffers 6873088 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> archive log list;
數據庫日誌模式 存檔模式
自動存檔 啓用
存檔終點 D:\app\Administrator\flash_recovery_area_My
最早的聯機日誌序列 296
下一個存檔日誌序列 298
當前日誌序列 298
SQL> alter system switch logfile;
這麼一看是不是就很清楚了?1_298_1018868058.ARCH,線程號是1,序列號是298,重做日誌ID是1018868058
這3個參數在視圖V$archived_log都可以查到。
select * from v$archived_log where archived='YES' and deleted='NO' ;
歸檔日誌空間滿了,我不是找到文件夾把歸檔日誌刪除了就可以了呢?
當然不行,注意我們查詢視圖V$archived_log的時候,加了條件deleted = 'NO'
你自己跑去目錄把文件刪除了,Oracle是不知道的,所以我們得使用Oracle的命令來刪,這樣Oracle纔會更新相應的視圖.
----刪除ORACLE歸檔日誌
rman target / --操作系統認證進入rman
crosscheck archivelog all; --檢測所有歸檔
list expired archivelog all; --列出所有無效的歸檔
delete noprompt expired archivelog all; --刪除過期的歸檔
但大多數時候都沒有過期歸檔
delete archivelog until time 'sysdate - 7'; --刪除7天前歸檔
至此,已經解決ORA-00257問題了。
如果歸檔空間過小的默認(4999M),還可以擴展歸檔文件存放空間
alter system set db_recovery_file_dest_size=100G; --設置使用空間大小
在刪除歸檔日誌的時候,我們刪除過期的無效歸檔,很多的時候是毛都刪不掉的,這就很疑惑了,歸檔多得ORACLE都報錯了,怎麼會還沒過期日誌呢?這就得講講rman 策略的問題了。
rman target / -- 操作系統認證進入rman
RMAN> show all;
--保持可以恢復的最新的1份數據庫備份,任何超過最新1份的備份都將被標記爲redundancy。默認值是1份
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
--是否對備份的數據文件及歸檔等文件開啓優化的算法,默認關閉
CONFIGURE BACKUP OPTIMIZATION OFF; # default
--指定所有I/O操作的設備類型是硬盤或者磁帶,默認值是硬盤
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
--強制數據庫在備份文件或者執行改變數據庫結構的命令之後將控制文件自動備份,默認值爲關閉
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
--配置控制文件的備份路徑和備份格式
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
--配置數據庫設備類型的並行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
--數據庫的每次備份的copy數量,oracle的每一次備份都可以有多份完全相同的拷貝
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
--數據庫的歸檔日誌的存放設備類型
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
--刪除策略
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
--配置控制文件的快照文件的存放路徑和文件名,這個快照文件是在備份期間產生的,用於控制文件的讀一致性
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SNCFYLJ.ORA'; # default
RMAN>
歸檔日誌的過期策略是RETENTION(保留)策略主導,還是 DELETION(刪除)策略主導,目前我也還未分清。
以後清楚了會更新文章.
另外RETENTION(保留)策略一共有3個選項:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE RETENTION POLICY TO REDUNDANCY 5;
CONFIGURE RETENTION POLICY TO NONE;
第一種recover window是保持所有足夠的備份,可以將數據庫系統恢復到最近七天內的任意時刻。任何超過最近七天的數據庫備份將被標記爲obsolete。
第二種redundancy 是爲了保持可以恢復的最新的5份數據庫備份,任何超過最新5份的備份都將被標記爲redundancy。它的默認值是1份。
第三種不需要保持策略。