上一篇
凌晨3点,电商公司数据库突然宕机 😱,技术团队紧急排查发现磁盘空间爆满,导致交易数据无法写入,这时DBA小张淡定地说:"别慌,我们开了归档日志模式,数据丢不了!" 随后通过归档日志成功恢复了全部数据。
想知道这个"后悔药"是怎么工作的?今天我们就来揭秘Oracle的日志管理机制!
$ORACLE_BASE/oradata/<SID>/
目录 -- 查看重做日志组信息 SELECT group#, members, bytes/1024/1024 "Size(MB)", status FROM v$log;
特性 | 非归档模式 | 归档模式 |
---|---|---|
数据保护 | ❌ 只能恢复到最近备份 | ✅ 可恢复到任意时间点 |
空间占用 | 🟢 较低 | 🔴 较高(需定期清理) |
适用场景 | 开发/测试环境 | 生产环境 |
性能影响 | 几乎无影响 | 轻微I/O开销 |
-- 检查当前归档状态 ARCHIVE LOG LIST; -- 切换归档模式(需重启到mount状态) SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
-- 设置归档路径(建议使用ASM或专用磁盘) ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/archivelogs' SCOPE=BOTH; -- 控制归档文件命名格式 ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE;
# 手动切换日志(触发归档) sqlplus / as sysdba <<EOF ALTER SYSTEM SWITCH LOGFILE; EOF # 查看归档日志列表 SELECT name, sequence#, first_time FROM v$archived_log;
-- 保留最近7天的归档 CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3'; -- 删除3天前的归档
-- 1. 模拟事故 DROP TABLE important_data; -- 2. 找到误操作时间点 SELECT to_char(first_time,'YYYY-MM-DD HH24:MI:SS') FROM v$archived_log ORDER BY sequence# DESC; -- 3. 执行不完全恢复 RMAN> RUN { SET UNTIL TIME "TO_DATE('2025-08-20 14:30:00','YYYY-MM-DD HH24:MI:SS')"; RESTORE DATABASE; RECOVER DATABASE; }
📌 注:本文操作基于Oracle 19c版本,其他版本可能存在差异(信息参考日期:2025年8月)
下次遇到数据库故障时,你也可以像小张一样淡定地说:"有归档,稳得很!" 💪
本文由 鹿芷云 于2025-08-02发表在【云服务器提供商】,文中图片由(鹿芷云)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/515910.html
发表评论