Md Mominul Islam | Software and Data Enginnering | SQL Server, .NET, Power BI, Azure Blog

while(!(succeed=try()));

LinkedIn Portfolio Banner

Latest

Home Top Ad

Responsive Ads Here

Post Top Ad

Responsive Ads Here

Tuesday, September 2, 2025

Fix SQL Server OS Errors 665 & 1450: Resolve Disk or Storage Issues with Database Files

 

Introduction

SQL Server Error 665: The requested operation could not be completed due to a file system limitation and Error 1450: Insufficient system resources exist to complete the requested service occur when SQL Server encounters issues accessing database files (.mdf, .ldf, .ndf) due to disk or storage problems. Error 665 typically indicates file system limitations (e.g., fragmentation or sparse file issues), while Error 1450 points to insufficient system resources (e.g., memory or disk space). This guide provides code-oriented solutions to diagnose and resolve these errors, addressing disk, storage, and file system issues.


1. Verify Disk Space and File System

Check if the disk hosting the database files has sufficient space and is compatible with SQL Server.

Code-Oriented Solution

Check disk space using PowerShell:

# Check disk space
Get-Disk | Get-Partition | Get-Volume | Select-Object DriveLetter, SizeRemaining, Size

Verify file system type:

# Check file system
Get-Volume | Where-Object { $_.DriveLetter -eq 'C' } | Select-Object DriveLetter, FileSystemType

Check database file details:

-- View database file locations and sizes
SELECT 
    name AS FileName,
    physical_name AS FilePath,
    type_desc AS FileType,
    (size * 8.0 / 1024) AS SizeMB
FROM sys.database_files
WHERE database_id = DB_ID('YourDatabaseName');

Action:

  • Ensure the disk has sufficient free space (e.g., >10% of total capacity).

  • Verify the file system is NTFS (preferred for SQL Server) rather than FAT32 or exFAT, which have limitations causing Error 665.

  • If the disk is low on space, free up space by deleting unnecessary files or moving database files to a larger disk (see Step 4).

Why? Error 665 can occur due to file system limitations (e.g., NTFS fragmentation or sparse files), while Error 1450 may result from insufficient disk space.


2. Check for File System Fragmentation

For Error 665, check if the database files are fragmented or using sparse files.

Code-Oriented Solution

Check file fragmentation using PowerShell:

# Check fragmentation for a file
Get-WmiObject Win32_Volume -Filter "DriveLetter = 'C:'" | 
ForEach-Object { $_.DefragAnalysis() } | 
Select-Object DefragRecommended, AverageFileSize, TotalFragmentedFiles

Check if database files are sparse:

# Check if a file is sparse
$file = Get-Item "C:\SQLData\YourDatabase.mdf"
$file.Attributes -band [System.IO.FileAttributes]::SparseFile

Action:

  • If fragmentation is high, defragment the disk:

# Defragment the disk
Optimize-Volume -DriveLetter C -Defrag
  • If the file is sparse, convert it to a non-sparse file by copying it:

# Copy file to remove sparse attribute
Copy-Item -Path "C:\SQLData\YourDatabase.mdf" -Destination "C:\SQLData\YourDatabase_NonSparse.mdf"
  • Update the database to use the new file (see Step 4 for detaching/attaching).

Why? Error 665 is often caused by file system fragmentation or sparse files, which SQL Server does not handle well.


3. Check System Resources

For Error 1450, verify system resources like memory, CPU, and disk I/O.

Code-Oriented Solution

Check memory usage with PowerShell:

# Check memory usage
Get-CimInstance Win32_OperatingSystem | 
Select-Object TotalVisibleMemorySize, FreePhysicalMemory

Check SQL Server memory configuration:

-- View SQL Server memory settings
SELECT 
    name,
    value_in_use
FROM sys.configurations
WHERE name IN ('min server memory (MB)', 'max server memory (MB)');

Check disk I/O performance:

-- View I/O stalls
SELECT 
    DB_NAME(database_id) AS DatabaseName,
    file_id,
    io_stall_read_ms,
    io_stall_write_ms
FROM sys.dm_io_virtual_file_stats(DB_ID('YourDatabaseName'), NULL);

Action:

  • If memory is low, adjust SQL Server memory settings:

-- Set max server memory (e.g., leave 4GB for OS)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory', 12288; -- 12GB
RECONFIGURE;
  • If I/O stalls are high, check disk performance with tools like Windows Performance Monitor (perfmon) for disk queue length and latency.

  • Add more memory or upgrade disk hardware if needed.

Why? Error 1450 indicates insufficient system resources, such as memory or disk I/O capacity, affecting file access.


4. Move Database Files to a New Disk

If the current disk is full or problematic, move database files to a disk with more space or better performance.

Code-Oriented Solution

Detach and re-attach the database:

-- Detach database
EXEC sp_detach_db 'YourDatabaseName';

-- Move files to new disk (manually via file system)

-- Re-attach database
EXEC sp_attach_db 
    @dbname = 'YourDatabaseName',
    @filename1 = 'D:\NewSQLData\YourDatabase.mdf',
    @filename2 = 'D:\NewSQLData\YourDatabase.ldf';

Action:

  • Ensure the new disk uses NTFS and has sufficient free space.

  • Grant full control to the SQL Server service account on the new files:

# Grant permissions to SQL Server service account
$acl = Get-Acl -Path "D:\NewSQLData\YourDatabase.mdf"
$permission = "NT Service\MSSQLSERVER","FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
$acl.SetAccessRule($accessRule)
Set-Acl -Path "D:\NewSQLData\YourDatabase.mdf" -AclObject $acl
Set-Acl -Path "D:\NewSQLData\YourDatabase.ldf" -AclObject $acl

Why? Moving files to a reliable disk resolves disk space or hardware-related issues causing Errors 665 and 1450.


5. Check for File Corruption

Verify if database file corruption is contributing to the errors.

Code-Oriented Solution

Run DBCC CHECKDB to check for corruption:

-- Check database integrity
USE YourDatabaseName;
GO
DBCC CHECKDB WITH NO_INFOMSGS, ALL_ERRORMSGS;

Action:

  • If corruption is detected, repair it (use cautiously):

-- Set single-user mode
ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

-- Repair with potential data loss
DBCC CHECKDB ('YourDatabaseName', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;

-- Return to multi-user mode
ALTER DATABASE YourDatabaseName SET MULTI_USER;
  • Alternatively, restore from a backup:

-- Restore database
RESTORE DATABASE YourDatabaseName
FROM DISK = 'C:\SQLBackups\YourDatabaseName_Full.bak'
WITH REPLACE;

Why? File corruption can cause access issues, contributing to Errors 665 or 1450.


6. Verify SQL Server Service Account Permissions

Ensure the SQL Server service account has full access to the database files.

Code-Oriented Solution

Check the SQL Server service account:

-- View service account
SELECT servicename, service_account
FROM sys.dm_server_services
WHERE servicename LIKE '%SQL Server%';

Verify file permissions:

# Check permissions
Get-Acl -Path "C:\SQLData\YourDatabase.mdf" | Format-List

Grant permissions if needed:

# Grant full control
$acl = Get-Acl -Path "C:\SQLData\YourDatabase.mdf"
$permission = "NT Service\MSSQLSERVER","FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
$acl.SetAccessRule($accessRule)
Set-Acl -Path "C:\SQLData\YourDatabase.mdf" -AclObject $acl
Set-Acl -Path "C:\SQLData\YourDatabase.ldf" -AclObject $acl

Action:

  • Ensure the service account has Full control over all database files.

  • Restart the SQL Server service after applying permissions:

Restart-Service -Name "MSSQLSERVER"

Why? Insufficient permissions can prevent file access, triggering Errors 665 or 1450.


7. Monitor and Prevent Future Issues

Implement monitoring to detect disk and resource issues early.

Code-Oriented Solution

Set up a SQL Server Agent alert for Errors 665 and 1450:

-- Create alerts
EXEC msdb.dbo.sp_add_alert 
    @name = N'File System Error 665',
    @message_id = 665,
    @severity = 0,
    @enabled = 1,
    @notification_message = N'Error 665: File system limitation. Check fragmentation or disk issues.',
    @include_event_description_in = 1;

EXEC msdb.dbo.sp_add_notification 
    @alert_name = N'File System Error 665',
    @operator_name = N'YourOperatorName',
    @notification_method = 1; -- Email

EXEC msdb.dbo.sp_add_alert 
    @name = N'Resource Error 1450',
    @message_id = 1450,
    @severity = 0,
    @enabled = 1,
    @notification_message = N'Error 1450: Insufficient resources. Check memory or disk.',
    @include_event_description_in = 1;

EXEC msdb.dbo.sp_add_notification 
    @alert_name = N'Resource Error 1450',
    @operator_name = N'YourOperatorName',
    @notification_method = 1;

Monitor disk space and I/O:

-- Monitor file space usage
SELECT 
    DB_NAME(database_id) AS DatabaseName,
    file_id,
    io_stall_read_ms,
    io_stall_write_ms
FROM sys.dm_io_virtual_file_stats(NULL, NULL);

Action:

  • Schedule regular disk defragmentation and health checks.

  • Monitor system resources using Windows Performance Monitor (perfmon) for disk queue length and memory usage.

  • Schedule regular database backups:

-- Schedule full backup
BACKUP DATABASE YourDatabaseName
TO DISK = 'C:\SQLBackups\YourDatabaseName_Full.bak'
WITH INIT;

Why? Proactive monitoring prevents disk and resource issues from causing Errors 665 or 1450.


8. Test with SQLCMD or SSMS

Test database access to confirm resolution.

Code-Oriented Solution

Test with sqlcmd:

# Test database access
sqlcmd -S sqlserverhostname -U YourLoginName -P YourPassword -d YourDatabaseName -Q "SELECT TOP 1 * FROM YourTableName"

In SSMS, run a test query:

-- Test query
SELECT TOP 1 * FROM YourTableName;

Action:

  • If errors persist, recheck disk space, fragmentation, or file permissions.

  • Update application code to handle these errors:

using System.Data.SqlClient;

string connString = "Server=sqlserverhostname;Database=YourDatabaseName;Integrated Security=True;";
try {
    using (SqlConnection conn = new SqlConnection(connString)) {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT TOP 1 * FROM YourTableName", conn)) {
            using (SqlDataReader reader = cmd.ExecuteReader()) {
                while (reader.Read()) {
                    Console.WriteLine("Data retrieved successfully!");
                }
            }
        }
    }
} catch (SqlException ex) when (ex.Number == 665 || ex.Number == 1450) {
    Console.WriteLine($"Error {ex.Number}: Check disk space, fragmentation, or system resources.");
} catch (Exception ex) {
    Console.WriteLine($"Error: {ex.Message}");
}

Why? Testing confirms that database files are accessible and errors are resolved.


Conclusion

SQL Server OS Errors 665 (file system limitation) and 1450 (insufficient system resources) can be resolved by addressing disk space, file system fragmentation, system resources, and file permissions. Use the provided T-SQL, PowerShell, and C# examples to diagnose and fix these issues systematically. 


No comments:

Post a Comment

Thanks for your valuable comment...........
Md. Mominul Islam

Post Bottom Ad

Responsive Ads Here