標籤:ima .com 技術分享 網路裝置 通過 微軟雅黑 set mod 利用
今天資料群有人反應網站不能正常開啟,經檢查Oracle資料庫遠程連不上,提示資訊:ORA-00257: archiver error. Connect internal only, until freed。可能是archivelog滿了。以前學習SQL只關注CRUD,對日誌瞭解甚少,此次宕機雖然對產生沒有造成惡劣影響,但也是因為業務不熟悉所致,特花一天時間學習並記錄Oracle日誌歸檔功能。.
- Oracle日誌操作模式分為兩種:ARCHIVELOG、NOARCHIVELOG
串連Oracle終端
- Linux系統:先登入ssh,切換到oracle使用者,再啟動sqlplus登入oracle
查看當前日誌操作模式
- 通用方法:SELECT log_mode from v$database;
開啟
日誌
歸檔
shutdown immediate;
startup mount;
alter database archivelog;
alter database noarchivelog;
alter database open;
archive log list;
show parameter db_recovery_file_dest;
Oracle11g版本,ORACLE預設的日誌歸檔路徑為閃回恢複區($ORACLE_BASE/fast_recovery_area)。對於這個路徑,Oracle有一個限制,就是預設只有4G的空間,而且不只是歸檔日誌的預設路徑,也是備份檔案和閃回日誌的預設地址,這樣的話歸檔日誌鎖使用的空間就達不到4G。
測試入庫100w資料,產生歸檔檔案
select * from V$FLASH_RECOVERY_AREA_USAGE;
select * from v$recovery_file_dest;
當出現ORA-00257: archiver error. Connect internal only, until freed錯誤連不上資料的時候,如果資料庫歸檔目標為USE_DB_RECOVERY_FILE_DEST且DB_RECOVERY_FILE_DEST目錄為預設閃回空間目錄時
alter system set db_recovery_file_dest_size=8G scope=both;
alter system set db_recovery_file_dest=‘location=C:\app\Administrator\oracle_log‘ scope=both;
- 方法三修改歸檔日誌的路徑,將歸檔日誌放到其他不受限制的路徑下來解決這個問題,可通過下面的SQL來修改歸檔日誌的存放路徑
alter system set log_archive_dest_1=’location=C:\app\Administrator\oracle_log’;
查看archiv log所在位置
show parameter log_archive_dest;
archive log list;
通過切換日誌,查看歸檔路徑下是否有歸檔日誌產生來驗證歸檔路徑設定是否正確,切換日誌命令如下
alter system switch logfile;
方法二和方法三都是修改歸檔檔案儲存體路徑,具體區別是什麼呢,要想理解具體區別就要先理解歸檔日誌路徑三個參數
- 1、DB_RECOVERY_FILE_DEST:閃回恢複區路徑
show parameter db_recovery_file_dest;
- 2、LOG_ARCHIVE_DEST:LOG_ARCHIVE_DEST:指定歸檔檔案存放的路徑,該路徑只能是本地磁碟,預設為’’。
show parameter LOG_ARCHIVE_DEST;
- 3、LOG_ARCHIVE_DEST_n:指定歸檔檔案存放的路徑,Oracle最多支援把記錄檔歸檔到31個地方,n從1到31。歸檔地址可以為本地磁碟,或者網路裝置。
三個參數區別如下
-
- 1、 如果設定了DB_RECOVERY_FILE_DEST,就不能設定LOG_ARCHIVE_DEST,預設的歸檔日誌存放於DB_RECOVERY_FILE_DEST指定的閃回恢複區中。可以設定LOG_ARCHIVE_DEST_n,如果這樣,那麼歸檔日誌不再存放於DB_RECOVERY_FILE_DEST中,而是存放於LOG_ARCHIVE_DEST_n設定的目錄中。如果想要歸檔日誌繼續存放在DB_RECOVERY_FILE_DEST中,可以通過如下命令:alter system set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;
- 2、 如果設定了LOG_ARCHIVE_DEST,就不能設定LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST。如果設定了LOG_ARCHIVE_DEST_n,就不能設定LOG_ARCHIVE_DEST。也就是說,LOG_ARCHIVE_DEST參數和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n可以共存。
- 3、 LOG_ARCHIVE_DEST只能與LOG_ARCHIVE_DUPLEX_DEST共存。這樣可以設定兩個歸檔路徑。LOG_ARCHIVE_DEST設定一個主歸檔路徑,LOG_ARCHIVE_DUPLEX_DEST設定一個從歸檔路徑。所有歸檔路徑必須是本地的。
- 4、 如果LOG_ARCHIVE_DEST_n設定的路徑不正確,那麼Oracle會在設定的上一級目錄歸檔。比如設定LOG_ARCHIVE_DEST_1=’location=C:\archive1’,而OS中並沒有archive1這個目錄,那麼Oracle會在C盤歸檔。
刪除歸檔檔案
- 首先刪除歸檔檔案在物理主機磁碟中的檔案
- 物理檔案刪除後ORACLE的controlfile中仍然記錄著這些archivelog的資訊,在oracle的OEM管理器中有可視化的日誌展現出,接下來要做的就是從controlfile中清除掉多餘歸檔記錄檔記錄
利用RMAN進行刪除操作,操作步驟如下:
window用戶端系統為例
list archivelog all;
crosscheck archivelog all;
delete expired archivelog all;
List archivelog all;
select substr(t.NAME,1) NAME,ROUND(sum(t.BLOCKS*t.BLOCK_SIZE)/1024/1024) TOTAL_MB from v$archived_log t where t.DELETED=‘NO‘ group by substr(t.NAME,1);
完全正確,至此歸檔檔案完全刪除~!
Oracle 關于歸檔記錄檔的一點理解