大家好,我是 WeiyiGeek,一名深耕安全運(yùn)維開發(fā)(SecOpsDev)領(lǐng)域的技術(shù)從業(yè)者,致力于探索DevOps與安全的融合(DevSecOps),自動化運(yùn)維工具開發(fā)與實(shí)踐,企業(yè)網(wǎng)絡(luò)安全防護(hù),歡迎各位道友一起學(xué)習(xí)交流、一起進(jìn)步 ,若此文對你有幫助,收藏學(xué)習(xí)不迷路??。
又有一段時間,沒有給大家更新文章,最近確實(shí)有些懈怠了,不過還好,通過這段時間的沉淀,又整理了一些實(shí)用技巧,我都放在了?全棧工程師修煉指南?知識星球,部分文章同步到公眾號,希望對各位正在學(xué)習(xí) Oracle 數(shù)據(jù)庫的童鞋有幫助。
Oracle 歸檔日志文件
什么是歸檔日志文件?
描述:歸檔日志文件(Archive Log Files)是Oracle數(shù)據(jù)庫重做日志文件的持久化備份,當(dāng)數(shù)據(jù)庫處于歸檔模式(ARCHIVELOG)時,LGWR進(jìn)程寫滿一個重做日志文件后,ARCn進(jìn)程會將其內(nèi)容復(fù)制到指定的歸檔位置,形成歸檔日志文件。
由上可知,歸檔日志文件在數(shù)據(jù)容災(zāi)備份非常重要,在生產(chǎn)環(huán)境中一定、一定要開啟;前面我們提到在線重做日志文件發(fā)生切換后,就需要被歸檔到磁盤中永久存放,歸檔在線重做日志文件后可用于數(shù)據(jù)備份、及數(shù)據(jù)恢復(fù),防止重做日志循環(huán)寫入導(dǎo)致的歷史數(shù)據(jù)丟失 ,支持?jǐn)?shù)據(jù)庫恢復(fù)到任意時間點(diǎn)。
歸檔日志文件命名格式
通常為:O1_MF_%t_%s_%r_.ARC
?,例如?O1_MF_1_6_MZDJQL71_.ARC
,其中:
文件名部分 | 說明 | 示例值 | 含義 |
---|---|---|---|
O1_MF_ |
固定前綴 | O1_MF_ | Oracle 12c的標(biāo)準(zhǔn)前綴 |
1 |
線程號(%t) | 1 | 產(chǎn)生該日志的線程編號(單實(shí)例通常為1) |
6 |
日志序列號(%s) | 6 | 日志序列號,唯一標(biāo)識歸檔文件 |
MZDJQL71 |
重做日志ID(%r) | MZDJQL71 | 重做日志的唯一標(biāo)識符 |
.ARC |
固定后綴 | .ARC | 歸檔日志的標(biāo)準(zhǔn)擴(kuò)展名 |
歸檔文件命名常用參數(shù),如下所示:
%t
:線程號(Thread number)
%s
:日志序列號(Log sequence number)
%r
:重做日志ID(Resetlogs ID)
%d
:數(shù)據(jù)庫ID(Database ID)
%a
:激活I(lǐng)D(Activation ID)
歸檔日志文件存放路徑
Windows:
C:apporaclefast_recovery_area<SID>ARCHIVELOG?# 缺省
C:apporaclerecovery_area<SID>ARCHIVELOG ? ? ?# 自定義
如何配置和修改歸檔設(shè)置
特別注意:Oracle 數(shù)據(jù)庫默認(rèn)未啟用歸檔,所以通常需要將數(shù)據(jù)庫置于MOUNT階段,然后我們手動開啟歸檔模式,若已上線的生產(chǎn)環(huán)境則需要在閑時停機(jī)維護(hù)。
1.檢查當(dāng)前歸檔狀態(tài)
-- # 使用SQL語句查看數(shù)據(jù)庫日志模式
SELECT?log_mode?FROM?v$database;
-- NOARCHIVELOG # 表示數(shù)據(jù)庫日志模式為非存檔模式
-- # 或者使用 arhive 命令查看數(shù)據(jù)庫日志模式,當(dāng)前為非存檔模式
SQL> archive log list;
-- 數(shù)據(jù)庫日志模式 ? ? ? 非存檔模式
-- 自動存檔 ? ? ? ? ? ? 禁用
-- 存檔終點(diǎn) ? ? ? ? ? ? USE_DB_RECOVERY_FILE_DEST
-- 最早的聯(lián)機(jī)日志序列 ? ? 2
-- 當(dāng)前日志序列 ? ? ? ? ? 6
-- # 查看歸檔進(jìn)程狀態(tài)
SELECT?process,?statusFROM?v$archive_processes;
-- PROCESS STATUS
-- 0 STOPPED
-- 1 STOPPED
-- # 查看歸檔日志文件信息
SELECTname,?sequence#, first_time, completion_time?
FROM?v$archived_log
ORDERBYsequence# DESC;
-- # 檢查歸檔目標(biāo)配置
SELECT?dest_name,?status, destination?FROM?v$archive_dest;
-- # 檢查歸檔空間使用
SELECTNAME,SPACE_LIMIT/1024/1024"SPACE_LIMIT", SPACE_USED ?FROM?v$recovery_file_dest;
-- NAME SPACE_LIMIT SPACE_USED
-- C:apprecovery_area 9546 0
2.啟用日志歸檔模式和手動切換日志文件生成歸檔文件
# 1.關(guān)閉數(shù)據(jù)庫實(shí)例,并將實(shí)例置于MOUNT階段
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;?
? ? 數(shù)據(jù)庫裝載完畢。
? ??
# 2.啟用數(shù)據(jù)庫日志模式
SQL> ALTER DATABASE ARCHIVELOG;
# 3.將數(shù)據(jù)庫實(shí)例置于OPEN狀態(tài)
SQL> ALTER DATABASE OPEN;
# 4.再次查看日志歸檔模式
SQL> archive?log?list;
# 數(shù)據(jù)庫日志模式 ? ? ? ? ? ?存檔模式
# 自動存檔 ? ? ? ? ? ? 啟用
# 存檔終點(diǎn) ? ? ? ? ? ?USE_DB_RECOVERY_FILE_DEST
# 最早的聯(lián)機(jī)日志序列 ? ? 2
# 下一個存檔日志序列 ? 6
# 當(dāng)前日志序列 ? ? ? ? ? 6
# 5.手動切換重做日志,自動生成歸檔文件
SQL> alter system switch logfile;
C:apporaclerecovery_areahistdbARCHIVELOG2025_04_09
# 7.之后,我們了解一下歸檔相關(guān)的 recover 參數(shù),查看到歸檔路徑、大小限制等信息。
SQL> show parameter recover;
# NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE ? ? ? ?VALUE
# ------------------------------------ ----------- ------------------------------
# db_recovery_file_dest ? ? ? ? ? ? ? ?string ? ? ?C:apporaclerecovery_area ?# 歸檔路徑 ?
# db_recovery_file_dest_size ? ? ? ? ? big integer 9546M ?# 歸檔快速恢復(fù)區(qū)目錄的總?cè)萘肯拗?
# db_unrecoverable_scn_tracking ? ? ? ?boolean ? ? TRUE
# recovery_parallelism ? ? ? ? ? ? ? ? integer ? ? 0
# remote_recovery_file_dest ? ? ? ? ? ?string
# 8.查詢確認(rèn)快速恢復(fù)區(qū)的使用情況
SQL>?set?linesize 140 pagesize 50;
SQL> col NAME?for?a30;
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
# NAME ? ? ? ? ? ? ? ? ? ? ? ? ? SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES ? ? CON_ID
# ------------------------------ ----------- ---------- ----------------- --------------- ----------
# C:apporaclerecovery_area ? ? 1.0010E+10 ? ?2248704 ? ? ? ? ? ? ? ? 0 ? ? ? ? ? ? ? 1 ? ? ? ? ?0
weiyigeek.top-啟用歸檔模式查看歸檔文件
3.若要關(guān)閉歸檔則同樣需要進(jìn)入到?MOUNT
?階段,然后執(zhí)行如下命令。
-- 1. 關(guān)閉數(shù)據(jù)庫
SQL> SHUTDOWN IMMEDIATE;
-- 2. 啟動到mount狀態(tài)
SQL> STARTUP MOUNT;?
-- 3.關(guān)閉歸檔模式
SQL>?ALTER?DATABASE?NOARCHIVELOG; ?
-- 4. 打開數(shù)據(jù)庫
ALTER?DATABASE?OPEN;?
4.配置歸檔目標(biāo)路徑及格式
-- 設(shè)置主歸檔目標(biāo)
ALTERSYSTEMSET?log_archive_dest_1='LOCATION=/oracle/data/arch/ORCL'SCOPE=BOTH;
-- 設(shè)置備用歸檔目標(biāo)(可選)
ALTERSYSTEMSET?log_archive_dest_2='LOCATION=/oracle/data/arch2/ORCL'SCOPE=BOTH;
-- 查看與設(shè)置歸檔文件格式
SHOW?PARAMETER log_archive_format;
ALTERSYSTEMSET?log_archive_format='ARCH_%t_%s_%r.arc'SCOPE=SPFILE;
5.修改歸檔進(jìn)程數(shù)量
-- 增加歸檔進(jìn)程(默認(rèn)4個,最大30個)
ALTER?SYSTEM?SET?log_archive_max_processes=5?SCOPE=BOTH;
6.歸檔日志管理
-- # 查看所有日志組及其歸檔狀態(tài)
SELECTgroup#, sequence#, bytes/1024/1024 "Size(MB)",?
? ? ? ?members,?status,?archived, first_time, next_time
FROM?v$log
ORDERBYgroup#;
-- GROUP# SEQUENCE# Size(MB) MEMBERS STATUS ARCHIVED FIRST_TIME NEXT_TIME
-- 1 4195 200 1 CURRENT NO 2025-05-23 08:13:38?
-- 2 4193 200 1 INACTIVE NO 2025-05-22 22:00:36 2025-05-23 00:18:15
-- 3 4194 200 1 INACTIVE NO 2025-05-23 00:18:15 2025-05-23 08:13:38
-- # 查看當(dāng)前正在使用的重做日志組(即將被歸檔的組)
SELECTgroup#, sequence#, bytes/1024/1024 "Size(MB)", members, status, archived
FROM?v$log
WHEREstatus?=?'CURRENT';
-- 3 查看日志組成員的具體信息
SELECTgroup#, member, type, is_recovery_dest_file
FROM?v$logfile
ORDERBYgroup#, member;
-- GROUP# MEMBER ? ? ? ? ? ? ? ? ? ? ? TYPE IS_RECOVERY_DEST_FILE
-- 1 C:APPORADATAORCLREDO01.LOG ONLINE NO
-- 2 C:APPORADATAORCLREDO02.LOG ONLINE NO
-- 3 C:APPORADATAORCLREDO03.LOG ONLINE NO
-- # 歸檔指定日志組
ALTERSYSTEMARCHIVELOGGROUP3;
-- # 手動歸檔當(dāng)前日志組
ALTERSYSTEMARCHIVELOGCURRENT;
最后提及一點(diǎn),歸檔日志文件是Oracle數(shù)據(jù)庫實(shí)現(xiàn)持續(xù)運(yùn)行和數(shù)據(jù)保護(hù)的關(guān)鍵組件,合理配置和管理歸檔模式對數(shù)據(jù)庫的可用性和可恢復(fù)性至關(guān)重要。
加入:作者【全棧工程師修煉指南】知識星球
獲?。鹤髡吖ぷ鲗W(xué)習(xí)全棧筆記
作者整理了10年的工作學(xué)習(xí)筆記(涉及網(wǎng)絡(luò)、安全、運(yùn)維、開發(fā)),需要學(xué)習(xí)實(shí)踐筆記的看友,可添加作者微信或者回復(fù)【工作學(xué)習(xí)實(shí)踐筆記】,當(dāng)前價格¥199,除了獲得從業(yè)筆記的同時還可進(jìn)行問題答疑以及每月遠(yuǎn)程技術(shù)支持,希望大家多多支持,收獲定大于付出!