一、Windows环境下的配置
原理:通过系统的任务计划执行Oracle归档日志。
1、设置系统环境变量ORACLE_SID
,如实例名称:ORCL
2、创建删除归档日志命令的del_archivelog.txt
文件,写入内容:
connect target /
run{
crosscheck archivelog all;
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
delete expired archivelog all;
}
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
//删除七天前的归档日志
3、创建执行删除归档日志的del_archivelog.bat
脚本文件,写入内容为:
@echo off
set "filename=del_archivelog_task_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt"
(
echo.
echo ========================= 正在清除过期归档文件,请稍等...... %date% %time% =========================
echo.
rman cmdfile=D:\app\admin\del_archivelog.txt
echo.
echo ========================= 【结束清理 %date% %time%】 =========================
echo.
)>>D:\app\admin\%filename% 2>&1<nul
pause
* 注意修改文件路径
4、测试删除归档日志的脚本
下图是根据上面教程创建的两个文件
(1)、先查看归档日志路径,确认归档日志文件信息情况。
- 首先进入SQL Plus查看归档日志的位置
SQL > show parameter recover;
-
随便打开一个在清理范围内的日期文件夹
(2)、双击
del_archivelog.bat
脚本,然后将自动生成日志文件del_archivelog_task_log_20190202.txt
(3)、双击日志文件
del_archivelog_task_log_20190202.txt
,查看执行情况(4)、再回到前面打开的清理范围内的日期文件夹查看文件是否已被删除
5、添加系统任务计划,位置:开始 => 所有程序 => 附件 => 系统工具 => 任务计划
- 双击打开
任务计划程序
- 点击右侧新建任务
填写任务基本信息
新建触发器
选择操作 > 新建操作 - >浏览选择del_archivelog.bat
脚本文件
到此整个Windows下的配置已结束,注意定期观察任务的运行情况。
二、Linux环境下的配置
- 执行
sqlplus /nolog
进入SQLPlus, 执行conn / as sysdba
[oracle@custom04 data]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Sat Feb 2 16:37:55 2019
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL>
- 执行
show parameter recover;
查询归档日志的位置,注意:如果更改过归档日志路径,请执行archive log list;
查看
SQL> show parameter recover;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /data/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 70G
recovery_parallelism integer 0
SQL>
更改过归档日志路径的情况查看,执行archive log list;
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/oracle_fast_recovery_area
Oldest online log sequence 1622
Next log sequence to archive 1624
Current log sequence 1624
SQL>
- 进入归档日志目录,查看并记住文件个数。执行
ls -l |grep "^-"|wc -l
[root@custom04 oracle_fast_recovery_area]# ls -l |grep "^-"|wc -l
1215
- 建立
del_archivelog.sh
脚本,执行vi del_archivelog.sh
[oracle@custom04 oracle]$ vi del_archivelog.sh
输入内容,注意修改/data/oracle/del_archivelog/
路径
#!/bin/bash
echo "----------------------------------------`date`---------------------------------------"
source ~/.bash_profile
LOG_DIR=/data/oracle/del_archivelog/
DATEL=`date '+%Y-%m-%d'`
LOG_NAME=${LOG_DIR}${DATEL}".log"
rman log=$LOG_NAME target / <<EOF
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate-7';
EOF
echo -e "\n"
echo "------------------------------------- FINISHED -------------------------------------"
注意赋予文件的可执行权限,执行chmod 777 del_archivelog.sh
[oracle@custom04 oracle]$ chmod 777 del_archivelog.sh
- 测试脚本是否有效,执行
./del_archivelog.sh
[oracle@custom04 oracle]$ ./del_archivelog.sh
----------------------------------------Sun Feb 3 13:41:11 CST 2019---------------------------------------
RMAN> RMAN> RMAN> RMAN>
------------------------------------- FINISHED -------------------------------------
[oracle@custom04 oracle]$
- 再次查看归档日志目录文件个数。执行
ls -l |grep "^-"|wc -l
[root@custom04 oracle_fast_recovery_area]# ls -l |grep "^-"|wc -l
1189
- 创建 crontab定时任务,执行
crontab -e
[oracle@custom04 oracle]$ crontab -e
写入内容,每天凌晨4点执行脚本del_archivelog.sh
,并将执行结果输出到task.log
00 4 * * * sh /data/oracle/del_archivelog.sh >> /data/oracle/del_archivelog/task.log 2>&1 &
查看crontab所有定时任务,执行crontab -l
[oracle@custom04 oracle]$ crontab -l
00 4 * * * sh /data/oracle/del_archivelog.sh >> /data/oracle/del_archivelog/task.log 2>&1 &
到此整个Linux下的配置已结束,注意定期观察任务的运行情况。
Oracle ORA-03113: 通信通道的文件结尾 故障处理
-
使用 sqlplus 登陆数据库,提示连接到空闲例程,发现数据库没有启动,于是启动数据库:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1.3696E+10 bytes
Fixed Size 2294256 bytes
Variable Size 7985958416 bytes
Database Buffers 5670699008 bytes
Redo Buffers 36937728 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾
进程 ID: 3816
会话 ID: 2826 序列号: 3
- 重新登陆数据库,分步启动,查询alert日志所在位置
sqlplus / as sysdba
SQL> startup nomount;
SQL> select value from v$diag_info
从 v$diag_info 获取 alert 日志位置为E:\app\Administrator\diag\rdbms\neubi\neubi\trace\alert_neubi.log
查看 alert 日志,日志中报空间不足
检查Windows 磁盘空间发现数据盘已满。
确定问题后,开始清理空间。初步分析,发现FRA空间占用比较高,里面都是归档日志。
-
准备通过 rman 清理归档日志
rman 无法在 nomount 状态下清理日志,将数据库置为mount状态。
SQL> alter database mount;
重新连接 rman
RMAN> crosscheck archivelog all;
RMAN> delete archivelog all completed before 'sysdate-3';
清理后,空间腾出了100G
- 此时考虑将数据库打开
SQL> alert database open;
最后检查监听状态,监听已恢复