Come risolvere i problemi di spazio causati da SQL Server

Condividi ora:

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.

Problemi di spazio causati da SQLMolte 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

SQL Server Banca DatiLa 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

Condividi ora:

I commenti sono chiusi.