Oracle 關于歸檔記錄檔的一點理解

來源:互聯網
上載者:User

標籤:ima   .com   技術分享   網路裝置   通過   微軟雅黑   set   mod   利用   

今天資料群有人反應網站不能正常開啟,經檢查Oracle資料庫遠程連不上,提示資訊:ORA-00257: archiver error. Connect internal only, until freed。可能是archivelog滿了。以前學習SQL只關注CRUD,對日誌瞭解甚少,此次宕機雖然對產生沒有造成惡劣影響,但也是因為業務不熟悉所致,特花一天時間學習並記錄Oracle日誌歸檔功能。.

  • Oracle日誌操作模式分為兩種:ARCHIVELOG、NOARCHIVELOG
串連Oracle終端
  • windows系統:sqlplus

  • Linux系統:先登入ssh,切換到oracle使用者,再啟動sqlplus登入oracle

查看當前日誌操作模式
  • 通用方法:SELECT log_mode from v$database;

  • sys使用者:

開啟 日誌 歸檔
  • 啟用歸檔日誌前要先停止資料庫
shutdown immediate;

  • 資料庫以mount方式啟動
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用戶端系統為例

  • 開啟Rman串連資料庫

  • 查看歸檔日誌的狀態
list archivelog all;
  • 執行archivelog校正命令
crosscheck archivelog all;

  • 刪除校正失敗的記錄
delete expired archivelog all; 

  • 選擇yes

 

  • 查看歸檔日誌
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 關于歸檔記錄檔的一點理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.