Technical Blog Post
Abstract
DB2 LUW : Why load failed with SQL0958C even though the free space is enough
Body
I have a DPF server with partitions on multiple machines. I find load from one machine always failed, but not from other machines.
Checking db2diag.log, I see error saying disk full:
2017-01-19-12.06.00.653983+480 E709034575E1105 LEVEL: Error (OS)
PID : 8645 TID : 46955996636928 PROC : db2sysc 999
INSTANCE: db2inst1 NODE : 999 DB : SAMPLE
APPHDL : 999-66 APPID: xxx.xx.xx.xx.39597.170119040925
AUTHID : DB2INST1 HOSTNAME: myhost1
EDUID : 142 EDUNAME: db2agntp (SAMPLE) 999
FUNCTION: DB2 UDB, oper system services, sqloopenp, probe:80
MESSAGE : ZRC=0x850F000C=-2062614516=SQLO_DISK "Disk full."
DIA8312C Disk was full.
CALLED : OS, -, open OSERR: ENOSPC (28)
DATA #1 : Codepath, 8 bytes
5:11:18:26:40
DATA #2 : File name, 44 bytes
/db2loadtmp/DB200007.PID/DB201691.OID/999-66
DATA #3 : SQO Open File Options, PD_TYPE_SQO_FILE_OPEN_OPTIONS, 4 bytes
SQLO_CRTREV, SQLO_READWRITE, SQLO_SHAREWRITE
DATA #4 : Hex integer, 4 bytes
0x000001B6
DATA #5 : signed integer, 4 bytes
0
DATA #6 : Hex integer, 4 bytes
0x00000000
DATA #7 : String, 105 bytes
Search for ossError*Analysis probe point after this log entry for further
self-diagnosis of this problem.
However "df -lk" shows the disk should have enough space left:
Filesystem 1K-blocks Used Available Use% Mounted on
...
/dev/mapper/rootvg-lvdb2loadtmp 51606140 396704 48587996 1% /db2loadtmp
After investigating for a long time, I checked "df -li" output, I can seeinode is used up
Filesystem Inodes IUsed IFree IUse% Mounted on
...
/dev/mapper/rootvg-lvdb2loadtmp 3276800 3276800 0 100% /db2loadtmp
Looks like there are many small files in this path, I clean them up and try again, the load completes successfully!!
UID
ibm13286647