Oracle Redo 日志操作手册
Oracle Redo 日志操作手册一、基本概念Oracle 联机重做日志Online Redo Log记录数据库所有变更操作是实例恢复的核心组件。日志组Log Group每个数据库至少 2 个组循环写入日志成员Log Member同一组内的多个成员互为镜像建议每组 2 个成员分布在不同磁盘日志线程ThreadRAC 环境中每个实例拥有独立的线程单实例为 Thread 1日志切换Log Switch当前组写满后切换到下一组触发 LGWR 进程二、查看 Redo 日志信息-- 查看日志组状态SELECTGROUP#, THREAD#, SEQUENCE#, BYTES/1024/1024 AS SIZE_MB,BLOCKSIZE,MEMBERS,ARCHIVED,STATUSFROMV$LOGORDERBYTHREAD#, GROUP#;-- 查看日志成员文件路径SELECTGROUP#, MEMBER, STATUS, TYPEFROMV$LOGFILEORDERBYGROUP#, MEMBER;-- 查看日志组与成员汇总SELECTl.GROUP#, l.THREAD#, l.SEQUENCE#,l.BYTES/1024/1024ASSIZE_MB,l.STATUSASGROUP_STATUS,lf.MEMBERASFILE_PATH,lf.STATUSASMEMBER_STATUSFROMV$LOG lJOINV$LOGFILE lfONl.GROUP# lf.GROUP#ORDERBYl.THREAD#, l.GROUP#;-- 查看当前正在使用的日志组SELECTGROUP#, SEQUENCE#, STATUS FROM V$LOG WHERE STATUS CURRENT;-- 查看日志切换历史最近24小时SELECTTHREAD#, SEQUENCE#, FIRST_TIME, NEXT_TIME,ROUND((NEXT_TIME-FIRST_TIME)*24*60,2)ASDURATION_MINFROMV$ARCHIVED_LOGWHEREFIRST_TIMESYSDATE-1ORDERBYTHREAD#, SEQUENCE# DESC;-- 统计每小时日志切换次数评估日志大小是否合理SELECTTO_CHAR(FIRST_TIME,YYYY-MM-DD HH24)ASHOUR,COUNT(*)ASSWITCH_COUNTFROMV$LOG_HISTORYWHEREFIRST_TIMESYSDATE-1GROUPBYTO_CHAR(FIRST_TIME,YYYY-MM-DD HH24)ORDERBY1DESC;三、添加日志组-- 添加一个日志组单成员ALTERDATABASEADDLOGFILEGROUP4(/data/oracle/redo/redo04.log)SIZE200M;-- 添加一个日志组双成员推荐ALTERDATABASEADDLOGFILEGROUP4(/data/oracle/redo/redo04a.log,/data/oracle/redo/redo04b.log)SIZE200M;-- 不指定组号自动分配ALTERDATABASEADDLOGFILE(/data/oracle/redo/redo05a.log,/data/oracle/redo/redo05b.log)SIZE200M;-- RAC 环境为指定线程添加日志组ALTERDATABASEADDLOGFILE THREAD2GROUP10(/data/oracle/redo/redo_t2_10a.log,/data/oracle/redo/redo_t2_10b.log)SIZE200M;四、添加日志成员-- 为已有日志组添加成员镜像ALTERDATABASEADDLOGFILE MEMBER/data/oracle/redo/redo01b.logTOGROUP1;-- 同时为多个组添加成员ALTERDATABASEADDLOGFILE MEMBER/data/oracle/redo/redo01b.logTOGROUP1,/data/oracle/redo/redo02b.logTOGROUP2,/data/oracle/redo/redo03b.logTOGROUP3;五、删除日志组注意不能删除 CURRENT 或 ACTIVE 状态的日志组至少保留 2 个组。-- 查看状态确认可以删除SELECTGROUP#, STATUS FROM V$LOG;-- STATUS: CURRENT当前/ ACTIVE活跃未归档完/ INACTIVE可删除/ UNUSED从未使用-- 若目标组为 ACTIVE先强制切换并等待归档完成ALTERSYSTEM SWITCH LOGFILE;ALTERSYSTEMCHECKPOINT;-- 删除日志组ALTERDATABASEDROPLOGFILEGROUP4;-- 注意以上命令只从控制文件中移除记录物理文件需手动删除-- OMFOracle Managed Files管理的文件会自动删除# 手动删除物理文件非 OMFrm-f/data/oracle/redo/redo04a.logrm-f/data/oracle/redo/redo04b.log六、删除日志成员-- 删除指定组的某个成员ALTERDATABASEDROPLOGFILE MEMBER/data/oracle/redo/redo01b.log;-- 注意-- 1. 不能删除组内最后一个成员需先删组-- 2. CURRENT 组的成员不能删除-- 3. 非 OMF 文件需手动删除物理文件# 手动删除物理文件rm-f/data/oracle/redo/redo01b.log七、修改日志文件大小Oracle 不支持直接修改日志文件大小需通过新增 删除方式替换。-- 步骤1查看当前日志组SELECTGROUP#, BYTES/1024/1024 AS SIZE_MB, STATUS FROM V$LOG;-- 步骤2新增目标大小的日志组ALTERDATABASEADDLOGFILEGROUP10(/data/oracle/redo/redo10a.log,/data/oracle/redo/redo10b.log)SIZE500M;-- 步骤3切换日志让旧组变为 INACTIVEALTERSYSTEM SWITCH LOGFILE;ALTERSYSTEMCHECKPOINT;-- 步骤4确认旧组状态为 INACTIVE 后删除SELECTGROUP#, STATUS FROM V$LOG;ALTERDATABASEDROPLOGFILEGROUP1;-- 步骤5删除物理文件-- rm -f /data/oracle/redo/redo01*.log-- 步骤6用新路径重建该组可选保持组号连续ALTERDATABASEADDLOGFILEGROUP1(/data/oracle/redo/redo01a.log,/data/oracle/redo/redo01b.log)SIZE500M;-- 重复以上步骤处理其余日志组八、日志线程Thread管理线程主要用于 RAC 环境每个实例对应一个线程。-- 查看线程信息SELECTTHREAD#, STATUS, ENABLED, GROUPS, OPEN_TIMEFROMV$THREAD;-- 查看各线程的日志组SELECTGROUP#, THREAD#, SEQUENCE#, STATUSFROMV$LOGORDERBYTHREAD#, GROUP#;-- 启用线程RAC 新增实例时ALTERDATABASEENABLEPUBLICTHREAD2;-- 禁用线程RAC 减少实例时ALTERDATABASEDISABLETHREAD2;-- 为线程2添加日志组ALTERDATABASEADDLOGFILE THREAD2GROUP11(/data/oracle/redo/redo_t2_11a.log,/data/oracle/redo/redo_t2_11b.log)SIZE200M;-- 查看线程与实例对应关系RACSELECTINST_ID,THREAD#, STATUS FROM GV$THREAD ORDER BY INST_ID;九、日志切换与检查点-- 手动切换日志ALTERSYSTEM SWITCH LOGFILE;-- RAC 环境切换指定线程的日志ALTERSYSTEM SWITCHALLLOGFILE;-- 强制检查点加速 ACTIVE 状态变为 INACTIVEALTERSYSTEMCHECKPOINT;-- 全局检查点RACALTERSYSTEMCHECKPOINTGLOBAL;十、日志损坏恢复10.1 非 CURRENT 组损坏INACTIVE 状态-- 清除损坏的日志组不影响数据ALTERDATABASECLEAR LOGFILEGROUP2;-- 若日志组未归档强制清除会导致该日志无法用于恢复ALTERDATABASECLEAR UNARCHIVED LOGFILEGROUP2;10.2 CURRENT 组损坏最严重# 需要不完全恢复步骤# 1. 尝试正常关库sqlplus / as sysdbaSHUTDOWNABORT;STARTUP MOUNT;-- 尝试强制打开可能丢失部分数据ALTERDATABASEOPENRESETLOGS;-- 若失败需要从备份恢复RECOVERDATABASEUNTIL CANCEL;ALTERDATABASEOPENRESETLOGS;10.3 日志成员损坏组内其他成员正常-- 删除损坏成员重新添加ALTERDATABASEDROPLOGFILE MEMBER/data/oracle/redo/redo01b.log;ALTERDATABASEADDLOGFILE MEMBER/data/oracle/redo/redo01b.logTOGROUP1;-- Oracle 会自动从同组其他成员同步内容十一、最佳实践项目建议日志组数量至少 3 组繁忙系统 4-6 组每组成员数2 个分布在不同磁盘/控制器日志文件大小目标每 15-30 分钟切换一次通常 200M-1G日志切换频率过于频繁5分钟需扩大日志过慢60分钟可适当缩小存放位置与数据文件、归档日志分开使用独立高速磁盘RAC 环境每个线程至少 3 组组间大小保持一致监控定期检查V$LOG中是否有长期 ACTIVE 状态的组十二、常见问题问题原因解决方法无法删除日志组组状态为 CURRENT 或 ACTIVE切换日志 执行检查点后再删日志组一直 ACTIVE归档进程卡住或归档目录满检查归档进程清理归档空间ORA-00350: 需要归档日志组未归档就要被覆盖检查归档进程增加日志组数量ORA-00312: 日志文件不可访问文件损坏或路径错误使用CLEAR LOGFILE重建日志切换过于频繁日志文件太小增大日志文件 SIZE添加成员报错 ORA-00301文件已存在删除旧文件或换路径
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2417810.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!