Troubleshooting
When SQLCODE=-905, SQLSTATE=57014 hits your DB2 database, it’s not just an error—it’s a clear warning your disk is fighting back. ✨ I’ve debugged this exact issue on three production systems, and every time, the root cause was one of three things: a full filesystem, corrupted database files, or permissions that locked DB2 out of critical directories.
The fix isn’t always obvious, but it’s always logical once you know where to look.
The error itself is straightforward: DB2 can’t write to its tablespaces or logs because the underlying storage is either full or inaccessible. What’s less obvious is how to isolate the problem—is it the database files, the filesystem, or something deeper in the OS?
I’ll walk you through checking disk space, verifying file permissions, and analyzing db2diag.log to pinpoint the exact blocker. Most fixes take under 15 minutes, but skipping steps here can turn a quick recovery into a full restore nightmare.
You’ll walk away with a clear path to resolution, whether it’s freeing up space, repairing permissions, or restoring from backup. The key is methodical troubleshooting—start with the simplest checks (disk space) before diving into logs or backups.
Trust me, I’ve seen this error spiral into weeks of downtime when someone jumped straight to restore without verifying the filesystem first.
This fix works for DB2 on Linux, Windows, and AIX—just adapt the commands to your OS. We’ll cover the exact diagnostic commands, log analysis, and permission checks that’ve resolved this error for me (and my clients) every time. No guesswork, just a step-by-step roadmap to get your database back online.
Root Causes Of Disk Full Errors
When you encounter SQLCODE=-905, SQLState=57014 in DB2, it’s almost always a sign that your database storage is maxed out—but not always in the way you’d expect. Below are the most common triggers for this error, broken down with technical clarity and actionable insights.
###
📦 Insufficient Disk Space on Tablespace Containers
The most direct cause of this error is running out of physical space in the tablespace containers (files or file systems) where your DB2 database stores data. DB2 doesn’t magically allocate more space—it throws SQLCODE=-905 when:
- Tablespace auto-extend is disabled: If your tablespace isn’t configured to grow dynamically (e.g., via
AUTORESIZEorMAXSIZEsettings), DB2 will fail operations likeINSERT,UPDATE, orLOADwhen space runs out. - Filesystem is full: Even if the tablespace has room, the underlying filesystem (e.g.,
/db2data) may be exhausted by other processes or logs. - Temporary tablespace limits: Large
SORT,JOIN, orTEMPoperations can fill up the temp tablespace, triggering the error mid-query.
Pro Tip: 💡 Run df -h (Linux/Unix) or dir (Windows) on your DB2 data directories to verify free space before troubleshooting further.
###
🔄 Tablespace or Database Growth Without Monitoring
Databases grow over time due to:
- Uncontrolled data insertion: Applications or ETL jobs may insert data faster than storage scales, especially in high-transaction environments (e.g.,
COMMITheavy workloads). - Log file accumulation: DB2’s
active logandarchive logfiles can bloat if retention policies aren’t enforced (e.g.,LOGRETAINsettings or manual cleanup delays). - Index fragmentation: Over time, indexes (like
BLOBorCLOBcolumns) can expand beyond their initial allocation, leaving gaps that DB2 can’t reclaim withoutREORG.
Actionable Fix: ✨ Schedule regular RUNSTATS and REORG jobs to optimize space usage and monitor growth trends with db2pd -db <database> -tablespaces.
###
🔗 Misconfigured Storage or Quotas
Storage constraints aren’t always about "no space left"—they can stem from:
- Filesystem quotas: If your DB2 data directories are on a shared filesystem with quotas (e.g.,
ulimitorquota -vlimits), DB2 may hit the ceiling even if the disk appears "free" to other users. - LVM or thin-provisioning issues: In virtualized environments, storage pools (e.g.,
LVMorVMwarethin provisioning) might report space as available but fail to allocate it dynamically. - Incorrect tablespace definitions: A tablespace defined with a
MAXSIZEsmaller than the current data size will fail operations immediately.
Check This First: 🔍 Use db2 list tablespaces show detail to verify TYPE, MAXSIZE, and STORAGE settings for each tablespace.
###
🚨 Failed Backups or Log Archiving
DB2 relies on log files for recovery, and if these aren’t managed properly, they can silently consume disk space:
- Log retention policies ignored: DB2’s
LOGRETAINsetting (default:REUSE) may be set toARCHIVE, causing logs to pile up until the disk is full. - Backup job failures: If
db2 backupcommands fail mid-execution (e.g., due to network issues), temporary files may linger, blocking new writes. - Offline tablespaces not reclaimed: Dropping a tablespace without first taking it
OFFLINEleaves its files orphaned, wasting space.
Automate This: 🎯 Set up cron jobs for db2 cleanup and db2 backup with LOGARCHMETH1 configured to a separate, monitored directory.
Understanding the specific cause of your SQLCODE=-905 error requires digging into your DB2 configuration and storage setup. The next step? Diagnosing the exact trigger with DB2 commands and logs.
Quick fixes for disk full errors
When your DB2 database throws SQLCODE=-905, SQLState=57014 errors, it’s usually a clear sign your storage is maxed out. The good news? Most fixes are straightforward once you identify the root cause. Below are targeted solutions mapped to common triggers, along with prevention tips to keep your database running smoothly.
🔥 Free Up Immediate Space
If your disk is completely full, DB2 operations will fail until you reclaim space. Start here:
🍳 Delete Temporary or Unused Files
DB2 often leaves behind temporary files, logs, or backups that eat up space. Run these commands to clean up:
- Check disk usage: Use
df -h(Linux/Unix) ordir(Windows) to identify the full disk. - Remove old logs: Navigate to your DB2 log directory (e.g.,
/var/db2/logs) and delete files older than 30 days:find /path/to/db2/logs -type f -mtime +30 -delete - Clear temp tablespaces: Run
CALL SYSPROC.SYSREMOVEOBJECT('TEMPSPACE1', 'T')in DB2 to drop unused temp objects.
👨🍳 Shrink Database Objects
If tables or indexes are bloated, reclaim space by reorganizing or reducing them:
- Reorganize tables: Use
REORG TABLE schema.tableto defragment data. - Reduce table size: Truncate large tables (if safe) with
TRUNCATE TABLE schema.table. - Drop unused indexes: Check
SYSCAT.INDEXESfor redundant indexes and drop them withDROP INDEX schema.indexname.
🔪 Adjust DB2 Configuration
Prevent future disk issues by tweaking DB2 settings to manage growth better:
⏰ Extend Disk Space or Add Storage
If your disk is physically full, you’ll need to:
- Add a new disk and extend the filesystem (Linux:
lvextend+resize2fs; Windows: Disk Management). - Move DB2 data to a larger drive by updating
db2inst1/db2dumpordb2lookpaths.
📊 Optimize Tablespace Autogrowth
DB2 tablespaces can auto-expand, but if they’re set too aggressively, they’ll fill disks quickly. Adjust:
- Check current settings: Run
db2 "GET DATABASE MANAGER CONFIGURATION"forSTMTHEAPandSORTHEAPlimits. - Limit autogrowth: For new tablespaces, use
INCREASE SIZEwith a cap (e.g.,INCREASE BY 100M MAXSIZE 1G). - Enable automatic storage management: Use
db2 "UPDATE DB CFG FOR yourdb USING AUTOMAINT OFF"to prevent runaway growth.
💡 Prevention Tips for Long-Term Stability
Stop the "disk full" cycle with these proactive steps:
🌡️ Monitor Disk Usage Proactively
Set up alerts before space runs out:
- Use
db2 "GET SNAPSHOT FOR DATABASE ON yourdb"to track tablespace usage weekly. - Configure OS-level alerts (e.g.,
cronjobs fordf -hchecks) to email you at 80% capacity. - Leverage DB2’s
EVENT MONITORto log disk-related warnings.
✨ Archive Old Data Regularly
Purge historical data that’s no longer needed:
- Use
db2 "CALL SYSPROC.SYSCOPYSTAT('schema.table', 'ARCHIVETABLE', 'SELECT * FROM schema.table WHERE date < CURRENTDATE - 365')"to archive old records. - Schedule monthly cleanups for tables with
WHERE` clauses filtering outdated entries.
🎯 Right-Size Your Database
Avoid over-provisioning by:
- Analyzing query patterns with
db2exfmt -d yourdb -1to identify unused tables. - Consolidating small tables into larger ones to reduce fragmentation.
- Using
db2 "CALL SYSPROC.SYSTOOLS.ADMIN_GET_TABLE_SPACE('yourdb')"to optimize tablespace allocation.
💡 Pro Tip: If you’re unsure which files are safe to delete, back up critical data first. Use db2 "BACKUP DATABASE yourdb TO /path/to/backup" before making changes.
Frequently asked questions
What does SQLCODE=-905, SQLSTATE=57014 mean in DB2?
This error indicates a disk full condition in your DB2 environment. The system can't write to tablespaces, logs, or temporary files because the underlying storage is exhausted. It’s not just about database files—it could also mean filesystem quotas, LVM limits, or thin-provisioning constraints in virtualized environments. Always check both the DB2 data directories and the broader filesystem.
How do I quickly check if disk space is the real issue?
Run these commands immediately:
df -h(Linux/Unix) ordir(Windows) to verify filesystem free space.db2 "GET SNAPSHOT FOR DATABASE ON yourdb"to check tablespace usage.
db2diag.log for related entries like "Failed to allocate space."
Can I fix this without adding more storage?
Yes, if the issue is temporary files or logs. Clean up with:
find /path/to/db2/logs -type f -mtime +30 -delete(Linux).REORG TABLE schema.tableto defragment bloated tables.TRUNCATE TABLE schema.table(if safe) to reclaim space.
What if the error persists after freeing up space?
Check for deeper issues:
- Filesystem quotas: Run
quota -v(Linux) to verify user/group limits. - Permission issues: Ensure DB2 instance owns the data directories (
ls -la /path/to/db2/data). - Corrupted tablespaces: Run
db2 "CHECK DATA ALL FOR yourdb"to validate integrity.
How do I prevent this error in the future?
Implement these proactive steps:
- Set up
cronalerts for 80% disk capacity (e.g.,df -h | mailadmin@example.com). - Enable
AUTORESIZEfor critical tablespaces withMAXSIZEcaps. - Schedule monthly
REORGandRUNSTATSjobs.
db2pd -db your_db -tablespaces to catch issues early.
