Parecchie volte SQL Server potrebbe essere la ragione del problema di spazio sui dischi. In questo articolo, vedremo quali sono le cause alla radice di questo problema e come possiamo risolverlo.
SQL Server ha bisogno di spazio.
Molte volte SQL Server avrà bisogno di spazio su disco. Ciò potrebbe essere dovuto alla crescita dei dati all'interno del database o ai file di registro non compressi o ai file di backup non eliminati o ai file di database indesiderati non eliminati. Qualunque sia la ragione, su a SQL Server, lo spazio sul disco è molto importante per le transazioni del database.
Attività di pulizia non funzionante
Se stai utilizzando i piani di manutenzione nativi di SQL per eseguire il backup del tuo SQL server database, potrebbero esserci possibilità che il modulo di pulizia in quei piani di manutenzione non stia svolgendo il proprio compito. Quando il disco esaurisce lo spazio, ti accorgerai che i vecchi file di backup non vengono puliti correttamente. Avresti incluso il modulo di pulizia nel piano di manutenzione. Nonostante tutto questo ti chiedi perché non funzionava?
Controlla se hai menzionato la cartella corretta per eliminare i file di backup, controlla se hai menzionato l'estensione del file corretta per eliminare i file di backup, prova con il punto "." e senza un punto nell'estensione del file.
I file di registro sono enormi rispetto ai file di database
La causa più comune di problemi di spazio su SQL Server Si tratta dei file di log non presidiati e dei file tempdb. Sebbene tempdb venga ridotto alle dimensioni originali ogni volta che il servizio SQL viene riavviato, è buona norma monitorarne la crescita e ridurla quando sta per occupare tutto lo spazio su disco. Analogamente a tempdb, anche i file di log devono essere sempre tenuti sotto controllo. Assicurarsi di disporre di un backup dei log per mantenerli sempre di dimensioni minime.
File di database inutilizzati
Potrebbero esserci molti file di database inutilizzati e non collegati sul disco che sprecano spazio. Esegui lo script sul tuo SQL Server instance per identificare tali file insieme al loro percorso. Dopo una rapida analisi, se sei ancora sicuro che quei file non siano più necessari, eliminali e risparmia spazio.
DECLARE @dpth NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'DefaultData'
,@dpth OUTPUT
DECLARE @lpth NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'DefaultLog'
,@lpth OUTPUT
DECLARE @bk NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'BackupDirectory'
,@bk OUTPUT
DECLARE @md NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters'
,N'SqlArg0'
,@md OUTPUT
SELECT @md = substring(@md, 3, 255)
SELECT @md = substring(@md, 1, len(@md) - charindex('\', reverse(@md)))
DECLARE @ml NVARCHAR(512)
EXEC master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters'
,N'SqlArg2'
,@ml OUTPUT
SELECT @ml = substring(@ml, 3, 255)
SELECT @ml = substring(@ml, 1, len(@ml) - charindex('\', reverse(@ml)))
SET @dpth = isnull(@dpth, @md)
SET @lpth = isnull(@lpth, @ml)
PRINT @dpth
PRINT @lpth
EXEC sp_configure 'show advanced'
,1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell'
,1
RECONFIGURE
IF object_id('tempdb.dbo.#table1') IS NOT NULL
DROP TABLE #table1
CREATE TABLE #table1 (
[filename] VARCHAR(2000)
,depth INT
,isFile INT
)
SET @dpth = 'DIR ' + @dpth + '\*.mdf /b /s'
SET @lpth = 'DIR ' + @lpth + '\*.ldf /b /s'
INSERT INTO #table1
EXEC xp_DirTree @dpth
,1
,1
INSERT INTO #table1
EXEC xp_DirTree @lpth
,1
,1
DELETE
FROM #table1
WHERE isFile <> 1
UPDATE #table1
SET filename = rtrim(filename)
CREATE TABLE t_list (
filepath VARCHAR(2000)
,sizeinmb DECIMAL(18, 2)
)
INSERT INTO t_list (filepath)
SELECT otable.filename AS orphaned_files
FROM #table1 otable
LEFT OUTER JOIN master.dbo.sysaltfiles db ON rtrim(db.filename) = otable.filename
WHERE db.dbid IS NULL
ORDER BY 1
DECLARE @sizeingb AS DECIMAL(18, 2)
DECLARE @filepath AS VARCHAR(2000)
DECLARE db_cursor CURSOR
FOR
SELECT filepath
FROM t_list
OPEN db_cursor
FETCH NEXT
FROM db_cursor
INTO @filepath
WHILE @@FETCH_STATUS = 0
BEGIN
CREATE TABLE t_temp (c1 VARCHAR(2000))
DECLARE @cmd AS VARCHAR(3000)
SET @cmd = 'dir ' + @filepath
PRINT @cmd
INSERT INTO t_temp
EXEC master.dbo.xp_cmdshell @cmd
DELETE
FROM t_temp
WHERE c1 NOT LIKE '%1 File(s)%bytes'
DECLARE @size AS DECIMAL(18, 2)
SET @size = (
SELECT TOP 1 replace(replace(replace(c1, ' 1 File(s) ', ''), ',', ''), ' bytes', '')
FROM t_temp
WHERE c1 IS NOT NULL
)
SET @size = cast((@size / (1024 * 1024)) AS DECIMAL(18, 2))
DROP TABLE t_temp
UPDATE t_list
SET sizeinmb = @size
WHERE filepath = @filepath
FETCH NEXT
FROM db_cursor
INTO @filepath
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT *
FROM t_list
DROP TABLE t_list
EXEC sp_configure 'show advanced'
,1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell'
,0
RECONFIGURE
SQL Server Danneggiamento del database
Oltre a monitorare e mantenere lo spazio su disco, monitora anche l'integrità del tuo disco. Un disco non integro può corrompere il tuo file SQL Server banche dati. In questo caso, utilizzare uno strumento di recupero del database come DataNumen SQL Recovery a correggere corrotto SQL Server.
Introduzione dell'autore:
Neil Varley è un esperto di recupero dati in DataNumen, Inc., che è il leader mondiale nelle tecnologie di recupero dati, tra cui riparare la corruzione della posta elettronica di Outlook ed eccellere prodotti software di recupero. Per maggiori informazioni visita www.datanumen.com