1 报错信息
数据库报如下错误:
ora-27101: shared memory realm does not exist
ora-01034: oracle not available 11g
ORA-24324: service handle not initialized
原因:由于数据库归档日志满了,不能继续往数据库里写数据。
2 查看归档日志大小
# su - oracle
$ sqlplus / as sysdba
SQL> show parameter recover
可查看到归档日志目录为:/u01/app/oracle/fast_recovery_area/******/archivelog
可以查看该目录的大小,对比数据库设置的日志空间,该目录大小不能大于数据库设置的空间。
3 扩大归档日志大小
SQL> alter system set db_recovery_file_dest_size=100G;
4 清理归档日志
扩大后还需设置定时计划清理归档日志,需要切换到oracle账号执行命令
rman target /
RMAN> crosscheck archivelog all; # 把无效的expired的archivelog标出来
RMAN> delete expired archivelog all; # 直接全部删除过期的归档日志
RMAN> delete archivelog until time 'sysdate-3' # 直接删除三天前所有的归档日志
5 设置自动脚本
5.1 编写脚本
# su - oracle # 切换到oracle用户下执行操作
# cd /u01/app # 脚本存放目录
$ vi del_arch.sh
#!/bin/bash
echo "----------------------------------------`date`---------------------------------------"
source ~/.bash_profile
rman target / >> delarchive.log <<EOF # 记录日志delarchive.log 可以后期检查是否执行成功
crosscheck archivelog all; # 把无效的expired的archivelog标出来
delete noprompt expired archivelog all; # 直接全部删除过期的归档日志
delete noprompt archivelog all completed before 'sysdate-7'; # 直接删除三天前所有的归档日志
exit
EOF
echo -e "\n"
echo "------------------------------------ FINISHED ------------------------------------"
chmod +x del_arch.sh # 授权这个脚本执行权限
2.添加定时任务
$ crontab -e
* 1 * * * sh /u01/app/del_arc.sh # 每日1点执行
# 绝对路径
service crond restart # 重启服务
注意,这个脚本要用oracle用户创建;然后chmod +x 脚本名,给脚本添加上可执行权限;crontab也要用oracle添加,不然rman连不上