Oracle会生成大量的.dbf文件

时间:2014-12-11 10:21:09

标签: oracle

今天早上到办公室时,我们的Oracle 10.2服务器磁盘空间不足。仔细观察后,我发现每分钟生成大约1到4个或更多.dbf文件(例如1_1278092_658232789.dbf,1_1278093_658232789.dbf等)。我创建了一些空间,但Oracle仍然创建这些文件而不删除旧文件。它似乎是在大约35个小时前开始的。如何将服务器恢复正常。请注意,我不是Oracle DBA,而且Oracle知识有限。

编辑1:

首先,我设法通过以下方式清除大约270GB的空间,这使得服务器能够继续运行:

RMAN> CROSSCHECK BACKUP;
RMAN> DELETE ARCHIVELOG ALL;

回答ora-600的问题:

  

Oracle在哪条路径中创建这些文件?

的/ home / ORACLE /存档/
(这也是log_archive_dest_1的值)

  

DB_CREATE_FILE_DEST(数据文件的参数)

似乎没有设置("显示参数DB_CREATE_FILE_DEST"没有显示值),但是数据库文件在 / home / oracle / app / oracle / product / oradata / irs3

  

DB_RECOVERY_FILE_DEST(FRA的参数) - 哪个子目录?

sys@iris > show parameter DB_RECOVERY_FILE_DEST
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /home/backup
db_recovery_file_dest_size           big integer 2500G
  

我怀疑这些是闪回日志。如果是这样,您应该通过将参数DB_RECOVERY_FILE_DEST_SIZE设置为较小的值来限制闪回恢复区(FRA)。 Oracle不断编写闪回日志,直到FRA空间不足......然后它会删除/覆盖旧文件。

Wel,之前的DBA确实将其设置为非常高的值,现在它已满。例如。看看:

sys@iris > SELECT NAME, (SPACE_LIMIT/1024/1024) || 'MB' AS SPACE_LIMIT,
                  ((SPACE_LIMIT - SPACE_USED + SPACE_RECLAIMABLE)/1024/1024) || 'MB' AS SPACE_AVAILABLE,
                  ROUND((SPACE_USED - SPACE_RECLAIMABLE)/SPACE_LIMIT * 100, 1)
           AS PERCENT_FULL
           FROM V$RECOVERY_FILE_DEST;
NAME             SPACE_LIMIT      SPACE_AVAILABLE       PERCENT_FULL
/home/backup       2560000MB                940MB                100

但是RMAN现在在其日志文件中吐出这样的错误:

....
input archive log thread=1 sequence=1278543 recid=1271197 stamp=866048159
input archive log thread=1 sequence=1278544 recid=1271198 stamp=866048232
channel ORA_DISK_1: starting piece 1 at 11-DEC-14
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 12/11/2014 22:07:20
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 2691888128 bytes disk space from 2684354560000 limit
continuing other job steps, job failed will not be re-run
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=1278907 recid=1271561 stamp=866062135
....

即使驱动器上有空间:

-bash-3.2$ df -h
Filesystem            Size  Used Avail Use% Mounted on
....
/dev/vg01/lvol1       684G  365G  317G  54% /home

为什么上面的查询会将空间设置为已满,即使驱动器上有可用空间?

如果需要,以下是更多信息。

感谢。
尼科

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/backup/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/home/oracle/app/oracle/product/10/dbs/snapcf_irs3.f'; # default

2 个答案:

答案 0 :(得分:3)

感谢有助于识别问题的详细信息。

我认为你有两个问题。

第一个问题是数据库不断创建theese小.dbf文件。这不是问题,但文件需要正确处理。这些文件称为" archivelogs"。当数据库处于存档日志模式(在线备份需要)时,它会在每次填充时创建一个redolog副本。在每日备份期间,您应该备份和删除存档日志。

第二个问题 FRA中的大量可回收空间。

FRA具有逻辑限制,由DB_RECOVERY_FILE_DEST_SIZE表示。当oracle在FRA中创建文件时,它也会在控制文件中注册。这意味着您必须始终使用rman从FRA中删除文件。我想你知道这个,因为你用rman删除了存档日志,而不是用" rm -f"。

您的查询显示100%的结果:(SPACE_USED - SPACE_RECLAIMABLE)/ SPACE_LIMIT * 100 这意味着FRA中的所有文件都可以回收。他们可能甚至不会在物理上存在什么意味着他们已经过期。第二种选择是它们存在但是它们已经过时了,根据"保留政策来减少资源1"规则。

<强>解决方案: 我认为你应该稍微调整一下备份概念。

a)首先运行以下rman命令:

crosscheck archivelog all;
crosscheck backup;
delete expired archivelog all;
delete noprompt expired archivelog all;
delete noprompt expired backup;
delete obsolete;

b)将参数DB_RECOVERY_FILE_DEST_SIZE配置为适当的值。这取决于您在服务器上拥有多少个数据库以及/ home目录中用于其他内容的空间。我想说选择300GB到600GB之间的值。

c)调整备份脚本: RMAN应该在每日备份作业中运行a)中提到的命令。 使用此设置,您在FRA中永远不会有太多可回收空间(除了您启用了闪回功能 - 请使用&#34;从v $ database中选择flashback_on;&#34;)。

也许您必须调整以下某些命令,但这是一个默认的rman脚本,其中包括自我清理:

crosscheck archivelog all;
backup database;
backup archivelog all delete input;
crosscheck backup;
delete expired archivelog all;
delete noprompt expired archivelog all;
delete noprompt expired backup;
delete obsolete;

此备份脚本清除控制文件中过期的条目,备份存档日志+删除它们并删除不再需要的旧备份。

告诉rman不再需要哪些备份配置保留策略。我更喜欢恢复窗口而不是冗余:

RMAN> CONFIGURE RETENTION POLICY TO recovery window of 2 days;

答案 1 :(得分:1)

Oracle在哪条路径中创建这些文件? - DB_CREATE_FILE_DEST(数据文件的参数) - DB_RECOVERY_FILE_DEST(FRA的参数) - 哪个子目录?

我怀疑这些是闪回日志。如果是这样,您应该通过将参数DB_RECOVERY_FILE_DEST_SIZE设置为较小的值来限制闪回恢复区(FRA)。 Oracle不断编写闪回日志,直到FRA空间不足......然后它会删除/覆盖旧文件。