oracle-归档日志
1.关闭/打开归档日志
1.1关闭归档日志
1 sql> archive log list; #查看是否关闭归档模式 2 sql> alter system set log_archive_start=false scope=spfile; #禁用自动归档 3 sql> shutdown immediate; #立即关闭数据库 4 sql> startup mount; #启动实例并加载数据库,但不打开 5 sql> alter database noarchivelog; #将数据库切换为非归档模式 6 sql> alter database open; #打开数据库 7 sql> archive log list; #查看此时便处于非归档模式
1.2开启归档日志
1 sql> archive log list; #查看是否开启归档模式 2 sql> alter system set log_archive_start=true scope=spfile; #启用主动归档(可设置归档路径,自行学习) 3 sql> shutdown immediate; #立即关闭数据库 4 sql> startup mount; #启动实例并加载数据库,但不打开 5 sql> alter database archivelog; #将数据库切换为归档模式 6 sql> alter database open; #打开数据库 7 sql> archive log list; #查看此时是否处于归档模式 8 查询以确定数据库位于archivelog模式中且归档过程正在运行 sql> select log_mode from v$database; sql> select archiver from v$instance;
1.3常用查询语句
select * from v$flash_recovery_area_usage; --查看空间占用率,如果 ARCHIVED LOG 超过90%,Oracle随时有宕机的危险 select * from v$recovery_file_dest; --查看归档日志大小及使用情况 select group#, bytes, status from v$log; --查看现有日志 select sequence#,first_time from v$loghist;--列出所有归档redo日志文件的顺序和产生的时间 select * from v$archived_log; --查看v$archive_log select count(*) from v$archived_log where archived='YES' and deleted='NO'; --查看所有归档,未删除的归档日志
2.自动清理归档日志
2.1 创建shell脚本
[root@orcldb4 arch_clean_log]$ su - oracle [oracle@orcldb4 arch_clean_log]$ mkdir /home/oracle/arch_clean_log
[oracle@orcldb4 arch_clean_log]$ vi clean_arch.sh #!/bin/bash source /home/oracle/.bash_profile --环境变量 deltime=`date +%Y%m%d` --日期格式 logdir="/home/oracle/arch_clean_log" ---脚本执行日志路径 find $logdir -type f -name " archClean*.log" -mtime +7 -exec rm -rf {} \; ---此处保留7天脚本执行日志 rman target / log=$logdir/archClean_$deltime.log <<EOF run{ crosscheck archivelog all; delete noprompt expired archivelog all; ---删除过期日志 delete noprompt ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; ---此处示例为保留7天的归档日志 } EOF echo "delete complete!"
[oracle@orcldb4 ORACLE]$ chmod +x clean_arch.sh
2.2设置定时任务
在oracle用户下,添加crontab
示例为每天凌晨3点开始执行定时清理脚本
[oracle@orcldb4 arch_clean_log]$ crontab -e 0 3 * * * /home/oracle/clean_arch.sh >/dev/null 2>&1
3.手动删除归档任务
3.1查看空间占有率
select * from v$flash_recovery_area_usage; --查看空间占用率,如果 ARCHIVED LOG 超过90%,Oracle随时有宕机的危险
3.2rman删除归档日志
[oracle@dbserver archivelog]$ rman target / --进入rman RMAN> crosscheck archivelog all; --检查控制文件和实际物理文件的差别 RMAN>delete noprompt expired archivelog all; --删除过期日志(如何确认归档日志是否过期,rman有一个保留策略,可以定义多少天之前的日志算为过期;) RMAN>delete archivelog all completed before 'sysdate'; --删除当前时间之前的所有归档日志 慎用!!! RMAN>delete noprompt archivelog all completed before 'sysdate-7'; --删除7天前的全部日志 delete expired archivelog all; --以上操作仍然会在RMAN里留下未管理的归档文件,可使用以下命令删除
RMAN>exit
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)