Hvordan fikse plassproblemer forårsaket av SQL Server

Flere ganger SQL Server kan være årsaken til plassproblemet på disker. I denne artikkelen vil vi se hva som er årsakene til dette problemet og hvordan vi kan fikse det.

Din SQL Server trenger plass.

Plassproblemer forårsaket av SQLMange ganger SQL Server vil trenge diskplass. Dette kan være på grunn av voksende data inne i databasen eller ukrympede loggfiler eller uopprettede sikkerhetskopifiler eller uønskede databasefiler. Uansett hva grunnen er, på en SQL Server, er plass på disken veldig viktig for databasetransaksjoner.

Oppryddingsoppgaven fungerer ikke

Hvis du bruker SQLs opprinnelige vedlikeholdsplaner for å sikkerhetskopiere din SQL server databaser, kan det være sjanser for at oppryddingsmodulen i disse vedlikeholdsplanene ikke gjør oppgaven sin. Når disken går tom for plass vil du innse at gamle sikkerhetskopifiler ikke er ordentlig renset. Du ville ha inkludert oppryddingsmodulen i vedlikeholdsplanen. Til tross for alt dette lurer du på hvorfor det ikke fungerte?

Sjekk om du har nevnt riktig mappe for å slette sikkerhetskopifiler, sjekk om du har nevnt riktig filtype for å slette sikkerhetskopifiler, prøv med punktum "." og uten en prikk i filtypen.

Loggfiler er store enn databasefiler

SQL Server DatabaseMost vanlig årsak til plassproblemer på SQL Server er de uovervåkede loggfilene og tempdb-filene. Selv om tempdb vil bli krympet til den opprinnelige størrelsen når SQL Service restarts, det er en god praksis å overvåke tempdb-veksten og krympe den når den er i ferd med å spise opp hele diskplassen. I likhet med tempdb bør loggfilene alltid være under sjekk. Sørg for at du har sikkerhetskopiering av logg for alltid å holde loggfiler i minimal størrelse.

Ubrukte databasefiler

Det kan være mange ubrukte og ikke-tilknyttede databasefiler som sitter på disken din og kaster bort plass. Utfør skriptet på din SQL Server forekomst for å identifisere slike filer sammen med banen deres. Etter en rask analyse, hvis du fortsatt er sikker på at disse filene ikke er nødvendige lenger, slett dem og spar plass.

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 Databasekorrupsjon

I tillegg til å overvåke og vedlikeholde diskplassen din, overvåk også diskens helse. Usunn disk kan ødelegge din SQL Server databaser. Hvis dette skjer, vennligst bruk databasegjenopprettingsverktøy som DataNumen SQL Recovery til reparasjon ødelagt SQL Server.

Forfatterintroduksjon:

Neil Varley er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparere e-postkorrupsjon i Outlook og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket *