如何检查oracle的归档空间是不是满了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查oracle的归档空间是不是满了相关的知识,希望对你有一定的参考价值。

参考技术A 先查出当前数据库使用的归档目录是在哪,这个我昨天回答过一个问题。
http://zhidao.baidu.com/question/416031451
你可以参考一下。
然后,便可以到操作系统上,看归档目录所在的文件系统使用情况,如
一般的
unix
上,df
-g

GB
为单位看,linux
上,
df
-h,
为以
GB
为单位看。
如果文件系统空间使用率达
90%
了,那就是快满了。
可以通过备份至磁带,再删除的方式进行。
如果是设置了
db_recovery_file_dest

db_recovery_file_dest_size
参数启用了
flash
recovery
area
后,
可能会由于该区域满而导致无法归档.
由于对
flash
recovery
area
的信息是记录于
rman
repository
及控制文件中的,
因而,
仅是从磁盘删除旧的备份或是归档日志并不足够,
因为rman
repository
及控制文件中仍持有该空间被使用的信息.
因而,
可增大
db_recovery_file_dest_size
的值,
或是从rman
中执行crosscheck
archivelog
all;
来标记相关归档日志已被删除,
再执行rman
delete
expired
archivelog
all;
来删除其记录.
最好的方式为rman
backup
archivelog
until
logseq

delete
all
input;
这样一则进行了备份,
二则也删除了flash
recovery
area
中的空间,
并更新了控制文件.
同时,可使用
select
*
from
v$RECOVERY_FILE_DEST;
来了解
recovery
area
中允许的最大空间,已用的空间,可以被数据库自动回收的空间。
并进而使用
select
file_type,
PERCENT_SPACE_USED
,
PERCENT_SPACE_RECLAIMABLE,
NUMBER_OF_FILES
from
v$RECOVERY_AREA_USAGE;
来了解
recovery
area
中各类文件所占用的空间百分比。
如果
recovery
area
是放在
asm

diskgroup
中的,还需要注意
相应的
diskgroup
中是否仍有空间。

11g

asm,
可在操作系统命令行,执行
asmcmd
进入命令行后
lsdg
命令,来查看
diskgroup
的总空间及剩余空间量。

Oracle 关于归档日志文件的一点理解

今天数据群有人反应网站不能正常打开,经检查Oracle数据库远程连不上,提示信息:ORA-00257: archiver error. Connect internal only, until freed。可能是archivelog满了。以前学习SQL只关注CRUD,对日志了解甚少,此次宕机虽然对生成没有造成恶劣影响,但也是因为业务不熟悉所致,特花一天时间学习并记录Oracle日志归档功能。.

以下内容针对没有使用Oracle ASM磁盘组情况,使用了Oracle ASM磁盘组的情况以后分析。

  • Oracle日志操作模式分为两种:ARCHIVELOGNOARCHIVELOG

连接Oracle终端

  • windows系统:sqlplus

  • Linux系统:先登录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_DESTLOG_ARCHIVE_DEST:指定归档文件存放的路径,该路径只能是本地磁盘,默认为’’
show parameter LOG_ARCHIVE_DEST;

  • 3、LOG_ARCHIVE_DEST_n:指定归档文件存放的路径,Oracle最多支持把日志文件归档到31个地方,n131。归档地址可以为本地磁盘,或者网络设备。

     三个参数区别如下

    • 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 set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;
    • 2 如果设置了LOG_ARCHIVE_DEST,就不能设置LOG_ARCHIVE_DEST_nDB_RECOVERY_FILE_DEST。如果设置了LOG_ARCHIVE_DEST_n,就不能设置LOG_ARCHIVE_DEST。也就是说,LOG_ARCHIVE_DEST参数和DB_RECOVERY_FILE_DESTLOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DESTLOG_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);

完全正确,至此归档文件完全删除~!

以上是关于如何检查oracle的归档空间是不是满了的主要内容,如果未能解决你的问题,请参考以下文章

如何解决Oracle数据库归档日志占满磁盘空间

Oracle数据库的归档日志写满磁盘空间解决办法

oracle归档日志老满怎么办

怎么分析 oracle 归档日志

DB2数据库在线备份后,磁盘空间快要被写满了,怎么办

oracle 删除归档日志