Oracle归档日志文件
- 格式:pdf
- 大小:114.51 KB
- 文档页数:3
Oracle归档⽇志⽂件
今天数据群有⼈反应⽹站不能正常打开,经检查Oracle数据库远程连不上,提⽰信息:ORA-00257: archiver error. Connect internal only, untilfreed。可能是archivelog满了。以前学习SQL只关注CRUD,对⽇志了解甚少,此次宕机虽然对⽣成没有造成恶劣影响,但也是因为业务不熟悉所致,特花⼀天时间学习并记录Oracle⽇志归档功能。.以下内容针对没有使⽤Oracle ASM磁盘组情况,使⽤了Oracle ASM磁盘组的情况以后分析。Oracle⽇志操作模式分为两种:ARCHIVELOG、NOARCHIVELOG连接Oracle终端windows系统:sqlplusLinux系统:先登录ssh,切换到oracle⽤户,再启动sqlplus登录oracle查看当前⽇志操作模式通⽤⽅法:SELECT log_mode from v$database;sys⽤户:开启⽇志归档启⽤归档⽇志前要先停⽌数据库shutdown immediate;数据库以mount⽅式启动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。测试⼊库100w数据,⽣成归档⽂件
查看闪回空间已经占⽤情况select * from V$FLASH_RECOVERY_AREA_USAGE;查看归档⽇志⽂件数量select * from v$recovery_file_dest; 当出现ORA-00257: archiver error. Connect internal only, until freed错误连不上数据的时候,如果数据库归档⽬标为USE_DB_RECOVERY_FILE_DEST且DB_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;⽅法三修改归档⽇志的路径,将归档⽇志放到其他不受限制的路径下来解决这个问题,可通过下⾯的SQL来修改归档⽇志的存放路径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;⽅法⼆和⽅法三都是修改归档⽂件存储路径,具体区别是什么呢,要想理解具体区别就要先理解归档⽇志路径三个参数1、DB_RECOVERY_FILE_DEST:闪回恢复区路径show parameter db_recovery_file_dest;
2、LOG_ARCHIVE_DEST:LOG_ARCHIVE_DEST:指定归档⽂件存放的路径,该路径只能是本地磁盘,默认为’’。show parameter LOG_ARCHIVE_DEST;3、LOG_ARCHIVE_DEST_n:指定归档⽂件存放的路径,Oracle最多⽀持把⽇志⽂件归档到31个地⽅,n从1到31。归档地址可以为本地磁盘,或者⽹络设备。 三个参数区别如下
1、 如果设置了DB_RECOVERY_FILE_DEST,就不能设置LOG_ARCHIVE_DEST,默认的归档⽇志存放于DB_RECOVERY_FILE_DEST指定的闪回恢复区中。可以设置LOG_ARCHIVE_DEST_n,如果这样,那么归档⽇志不再存放于DB_RECOVERY_FILE_DEST中,⽽是存放于LOG_ARCHIVE_DEST_n设置的⽬录中。如果想要归档⽇志继续存放在DB_RECOVERY_FILE_DEST中,可以通过如下命令:alter system setlog_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;2、 如果设置了LOG_ARCHIVE_DEST,就不能设置LOG_ARCHIVE_DEST_n和DB_RECOVERY_FILE_DEST。如果设置了LOG_ARCHIVE_DEST_n,就不能设置LOG_ARCHIVE_DEST。也就是说,LOG_ARCHIVE_DEST参数和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。⽽DB_RECOVERY_FILE_DEST和LOG_ARCHIVE_DEST_n可以共存。3、 LOG_ARCHIVE_DEST只能与LOG_ARCHIVE_DUPLEX_DEST共存。这样可以设置两个归档路径。LOG_ARCHIVE_DEST设置⼀个主归档路径,LOG_ARCHIVE_DUPLEX_DEST设置⼀个从归档路径。所有归档路径必须是本地的。4、 如果LOG_ARCHIVE_DEST_n设置的路径不正确,那么Oracle会在设置的上⼀级⽬录归档。⽐如设置LOG_ARCHIVE_DEST_1=’location=C:\archive1’,⽽OS中并没有archive1这个⽬录,那么Oracle会在C盘归档。删除归档⽂件⾸先删除归档⽂件在物理主机磁盘中的⽂件物理⽂件删除后ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的⽇志展现出,接下来要做的就是从controlfile中清除掉多余归档⽇志⽂件记录利⽤RMAN进⾏删除操作,操作步骤如下:window客户端系统为例打开Rman连接数据库查看归档⽇志的状态list archivelog all;执⾏archivelog校验命令crosscheck archivelog all;删除校验失败的记录delete expired archivelog all; 选择yes 查看归档⽇志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);完全正确,⾄此归档⽂件完全删除~!