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

 

posted @   阿锋888  阅读(1737)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示