Hoe u de ruimteproblemen kunt oplossen die worden veroorzaakt door SQL Server

Meerdere malen SQL Server kan de reden zijn voor het ruimteprobleem op schijven. In dit artikel zullen we zien wat de hoofdoorzaken van dit probleem zijn en hoe we dit kunnen oplossen.

Uw SQL Server heeft ruimte nodig.

Ruimteproblemen veroorzaakt door SQLVele keren SQL Server heeft schijfruimte nodig. Dit kan komen doordat er steeds meer gegevens in uw database aanwezig zijn, of door niet-gekrompen logbestanden, niet-verwijderde back-upbestanden of niet-verwijderde, ongewenste databasebestanden. Wat de reden ook is, op a SQL Server, is de ruimte op de schijf erg belangrijk voor databasetransacties.

Opruimtaak werkt niet

Als u de eigen onderhoudsplannen van SQL gebruikt om een ​​back-up te maken van uw SQL server databases bestaat de kans dat de opschoonmodule in die onderhoudsplannen zijn werk niet doet. Wanneer de schijf onvoldoende ruimte heeft, zult u zich realiseren dat oude back-upbestanden niet goed worden opgeschoond. U zou de opruimmodule in het onderhoudsplan hebben opgenomen. Vraag je je ondanks dit alles af waarom het niet werkte?

Controleer of je de juiste map hebt vermeld om back-upbestanden te verwijderen, controleer of je de juiste bestandsextensie hebt genoemd om back-upbestanden te verwijderen, probeer het met punt “.” en zonder punt in de bestandsextensie.

Logbestanden zijn groter dan databasebestanden

SQL Server DatabaseMost veelvoorkomende oorzaak van ruimteproblemen SQL Server zijn de onbeheerde logbestanden en tempdb-bestanden. Hoewel tempdb wordt verkleind tot de oorspronkelijke grootte wanneer de SQL-service opnieuw wordt gestarttarTS, het is een goede gewoonte om de groei van tempdb te controleren en deze te verkleinen wanneer deze op het punt staat volledige schijfruimte in beslag te nemen. Net als bij tempdb moeten de logbestanden altijd worden gecontroleerd. Zorg ervoor dat u over een logback-up beschikt om de logbestanden altijd zo klein mogelijk te houden.

Ongebruikte databasebestanden

Het kan zijn dat er veel ongebruikte en niet-bijgevoegde databasebestanden op uw schijf staan ​​en ruimte verspillen. Voer het script uit op uw SQL Server instance om dergelijke bestanden te identificeren, samen met hun pad. Als u na een snelle analyse nog steeds zeker weet dat deze bestanden niet meer nodig zijn, verwijdert u ze en bespaart u ruimte.

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 Database corruptie

Naast het bewaken en onderhouden van uw schijfruimte, moet u ook de gezondheid van uw schijf controleren. Een ongezonde schijf kan uw SQL Server databases. Als dit gebeurt, gebruik dan een databaseherstelprogramma zoals DataNumen SQL Recovery naar repareren beschadigd SQL Server.

Auteur Introductie:

Neil Varley is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder herstel Outlook-e-mailcorruptie en Excel-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.