今天数据群有人反应网站不能正常打开,经检查Oracle数据库远程连不上,提示信息:ORA-00257: archiver error. Connect internal only, until freed。可能是archivelog满了。以前学习SQL只关注CRUD,对日志了解甚少,此次宕机虽然对生成没有造成恶劣影响,但也是因为业务不熟悉所致,特花一天时间学习并记录Oracle日志归档功能。.
shutdown immediate;
startup mount;
alter database archivelog;
alter database noarchivelog;
alter database open;
archive log list;
show parameter db_recovery_file_dest;
Oracle11g版本,ORACLE默认的日志归档路径为闪回恢复区($ORACLE_BASE/fast_recovery_area)。对于这个路径,Oracle有一个限制,就是默认只有4G的空间,而且不只是归档日志的默认路径,也是备份文件和闪回日志的默认地址,这样的话归档日志锁使用的空间就达不到4G。
select * from V$FLASH_RECOVERY_AREA_USAGE;
select * from v$recovery_file_dest;
alter system set db_recovery_file_dest_size=8G scope=both;
alter system set db_recovery_file_dest=‘location=C:\app\Administrator\oracle_log‘ scope=both;
alter system set log_archive_dest_1=’location=C:\app\Administrator\oracle_log’;
查看archiv log所在位置
show parameter log_archive_dest;
archive log list;
通过切换日志,查看归档路径下是否有归档日志产生来验证归档路径设置是否正确,切换日志命令如下
alter system switch logfile;
方法二和方法三都是修改归档文件存储路径,具体区别是什么呢,要想理解具体区别就要先理解归档日志路径三个参数
show parameter db_recovery_file_dest;
show parameter LOG_ARCHIVE_DEST;
三个参数区别如下
利用RMAN进行删除操作,操作步骤如下:
window客户端系统为例
list archivelog all;
crosscheck archivelog all;
delete expired archivelog all;
List archivelog all;
select substr(t.NAME,1) NAME,ROUND(sum(t.BLOCKS*t.BLOCK_SIZE)/1024/1024) TOTAL_MB from v$archived_log t where t.DELETED=‘NO‘ group by substr(t.NAME,1);
完全正确,至此归档文件完全删除~!
原文:http://www.cnblogs.com/aaron911/p/7820272.html