gpt4 book ai didi

Oracle 生成大量 .dbf 文件

转载 作者:行者123 更新时间:2023-12-01 11:35:41 26 4
gpt4 key购买 nike

今天早上我到达办公室时,我们的 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的问题:

In which path does Oracle create those files?

/home/oracle/archive/
(也是log_archive_dest_1的值)

DB_CREATE_FILE_DEST (parameter for datafiles)

这似乎没有被设置(“show parameter DB_CREATE_FILE_DEST”显示没有值),但是数据库文件在/home/oracle/app/oracle/product/oradata/irs3

DB_RECOVERY_FILE_DEST (parameter for FRA) -- which sub directory?

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

I suspect that these are flashback logs. If so you should limit the flash recovery area (FRA) by setting the parameter DB_RECOVERY_FILE_DEST_SIZE to a smaller value. Oracle keeps writing flashback logs until the FRA is out of space... then it stats removing/overwriting old files.

嗯,之前的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

最佳答案

感谢您提供有助于确定问题的详细信息。

我认为你有两个问题。

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

第二个问题 FRA 中有很多可回收空间。

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

您的查询显示 100% 作为结果:(SPACE_USED - SPACE_RECLAIMABLE)/SPACE_LIMIT * 100这意味着 FRA 中的所有文件都是可回收的。它们甚至可能在物理上不存在,这意味着它们已经过期了。第二个选项是它们存在,但根据“RETENTION POLICY TO REDUNDANCY 1”规则,它们已过时。

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

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

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

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

c) 调整备份脚本:RMAN 应在每日备份作业中运行 a) 中提到的命令。使用此设置,您永远不会在 FRA 中拥有太多可回收空间(除非您启用了闪回功能——检查“select flashback_on from v$database;”)。

也许你需要调整以下一些命令,但这是一个默认的 rman 脚本,其中包括 self 清理:

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

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

要告诉 rman 不再需要哪些备份,请配置 RETENTION POLICY。我更喜欢恢复窗口而不是冗余:

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

关于Oracle 生成大量 .dbf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com