一、问题

在数据库运行过程中,会产生很多的日志,进而使日志文件db2diag.log变大
而且这个日志文件一般位于/home/db2inst1目录中,占用系统目录,数据量达到10G
db2diag.log文件默认路径在:/home/db2inst1/sqllib/db2dump下
可以通过执行db2 get dbm cfg 来查看Diagnostic data directory path(DIAGPATH) 系统参数的设置

二、解决

1、重启删除方式

停止数据库,然后将文件db2diag.log移走,接着重新启动数据库,会在原路径下重新生成文件db2diag.log
业务数据库不允许随便停止,这种办法不建议

2、备份切割方式

1、首先将系统盘清理出一点额外空间,不需要很多,50M左右就行(必须做)
2、找一块额外的磁盘空间,可用空间要比db2diag.log大100M以上(比如/data)
mkdir /data/test
chown db2inst1 /data/test (db2用户需要能往这个文件中新建文件权限)
3、日志切割
su - db2inst1
db2diag -A /data/test
系统会自动将文件db2diag.log移走,并重新生成一个新的db2diag.log,并将备份的文件添加上当前的日期时间信息
执行这条命令的前提示:用户db2inst1必须对文件夹/data/test有写权限,备份可以删除
4、命令输出解释
"db2diag: File is on a remote system and the link to that system is not active.
Created local archive file /home/db2inst1/sqllib/db2dump/db2diag.log_2009-05-19-02.02.06.
Unable to copy the local archive to the target destination due to:
"no free space on the file system""
解释:
If you execute "db2diag -A xxx -readfile" when db2diag.log file size is multiple of 4096 byte, you will receive a
similar below unnecessary "End of File" messages.This is a cosmetic problem and it may not impact any DB2
functionality. You may ignore the messages.
个人理解如果db2diag.log比较大,且备份的目录不和db2diag.log在同一块磁盘,命令执行过程中会先在db2diag.log同级目录生成一个带
时间戳的备份db2diag.log_2009-05-19-02.02.06(所以需要提前给系统盘预留50M空间,防止新文件没空间生成,虽然新文件只有几十K)
,然后将备份拷贝到/data/test,后面报错是因为备份目录空间不够大,没法拷贝过去,这时候备份就会保留在db2diag.log同级目录,
可以cd过去删掉
5、再次切割
此时db2diag.log经过一次切割,只有几十K
db2diag -A /data/test
db2diag: Moving "/db2home/db2inst1/sqllib/db2dump/db2diag.log"
to "/data/test/db2diag.log_2022-01-17-11.55.34"
#不会先在db2diag.log同级目录生成带时间戳的备份
这种方式比较友好