Sådan løses de pladsproblemer, der er forårsaget af SQL Server

Flere gange SQL Server kan være årsagen til pladsproblemet på diske. I denne artikel vil vi se, hvad årsagen til dette problem er, og hvordan vi kan løse det.

Din SQL Server har brug for plads.

Rumproblemer forårsaget af SQLMange gange SQL Server har brug for diskplads. Dette kan skyldes voksende data inde i din database eller ikke-skrumpte logfiler eller ikke-slettede backupfiler eller ikke-slettede, uønskede databasefiler. Uanset årsagen er, på en SQL Server, er plads på disken meget vigtig for databasetransaktioner.

Oprydningsopgave fungerer ikke

Hvis du bruger SQL's oprindelige vedligeholdelsesplaner til at sikkerhedskopiere din SQL server databaser, kan der være chancer for, at oprydningsmodulet i disse vedligeholdelsesplaner ikke udfører deres opgave. Når disken løber tør for plads, vil du indse, at gamle sikkerhedskopifiler ikke renses ordentligt. Du ville have inkluderet oprydningsmodulet i vedligeholdelsesplanen. På trods af alt dette undrer du dig over, hvorfor det ikke fungerede?

Kontroller, om du har nævnt den korrekte mappe til at slette sikkerhedskopifiler, kontroller, om du har nævnt den korrekte filtypenavn for at slette sikkerhedskopifiler, prøv med punkt “.” og uden en prik i filtypen.

Logfiler er enorme end databasefiler

SQL Server DatabaseDen mest almindelige årsag til pladsproblemer SQL Server er de uovervågede logfiler og tempdb-filer. Selvom tempdb krymper til den oprindelige størrelse, når SQL-tjenesten genstarter, er det god praksis at overvåge tempdb-væksten og krympe den, når den er ved at bruge al diskpladsen. Ligesom tempdb bør logfilerne altid kontrolleres. Sørg for, at du har en sikkerhedskopi af logfilerne for altid at holde logfilerne på en minimal størrelse.

Ubrugte databasefiler

Der kan være mange ubrugte og ikke-vedhæftede databasefiler, der sidder på din disk og spilder plads. Udfør scriptet på din SQL Server eksempel for at identificere sådanne filer sammen med deres sti. Efter en hurtig analyse, hvis du stadig er sikker på, at disse filer ikke længere er nødvendige, skal du slette dem og spare plads.

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 Databasekorruption

Ud over at overvåge og vedligeholde din diskplads skal du også overvåge din disks helbred. Usund disk kan ødelægge din SQL Server databaser. Hvis dette sker, skal du bruge databasegendannelsesværktøj som f.eks DataNumen SQL Recovery til fix beskadiget SQL Server.

Forfatter Introduktion:

Neil Varley er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere Outlook-e-mail-korruption og excel-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com

Kommentarer er lukket.