Ako opraviť problémy s priestorom spôsobené serverom SQL Server

Zdieľať teraz:

Niekoľko krát SQL Server môže byť dôvodom problému s priestorom na diskoch. V tomto článku sa dozvieme, aké sú hlavné príčiny tohto problému a ako ho môžeme vyriešiť.

váš SQL Server potrebuje priestor.

Problémy s priestorom spôsobené SQLVeľa krát SQL Server budete potrebovať miesto na disku. Môže to byť z dôvodu rastúcich údajov vo vašej databáze alebo nezmazaných súborov denníka alebo nevymazaných záložných súborov alebo nevymazaných nechcených databázových súborov. Nech už je dôvod akýkoľvek, na a SQL Server, miesto na disku je veľmi dôležité pre databázové transakcie.

Úloha čistenia nefunguje

Ak na zálohovanie používate natívne plány údržby SQL SQL server existuje pravdepodobnosť, že čistiaci modul v týchto plánoch údržby neplní svoju úlohu. Keď na disku dôjde miesto, uvedomíte si, že staré záložné súbory nie sú správne vyčistené. Modul vyčistenia by ste zahrnuli do plánu údržby. Napriek tomu všetkému sa pýtate, prečo to nefungovalo?

Skontrolujte, či ste uviedli správny priečinok na mazanie záložných súborov. Skontrolujte, či ste uviedli správnu príponu súboru na mazanie záložných súborov, skúste bodkou „.“ a bez bodky v prípone súboru.

Súbory denníka sú obrovské ako súbory databázy

SQL Server databázyNajčastejšia príčina problémov s priestorom SQL Server sú súbory denníka bez obsluhy a súbory dočasnej databázy (dočasná databáza). Hoci sa dočasná databáza (dočasná databáza) po reštarte služby SQL zmenší na pôvodnú veľkosť, je vhodné sledovať jej rast a zmenšiť ju, keď sa blíži k zaberaniu celého miesta na disku. Podobne ako dočasná databáza, aj súbory denníka by mali byť vždy kontrolované. Uistite sa, že máte zálohu denníka, aby ste vždy udržali súbory denníka na minimálnej veľkosti.

Nepoužité databázové súbory

Na vašom disku môže byť veľa nepoužívaných a nepripojených databázových súborov, ktoré strácajú miesto. Vykonajte skript na vašom počítači SQL Server napríklad na identifikáciu takýchto súborov spolu s ich cestou. Ak ste si po rýchlej analýze stále istí, že tieto súbory už nie sú potrebné, odstráňte ich a ušetrite miesto.

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 Poškodenie databázy

Okrem monitorovania a údržby miesta na disku sledujte aj jeho zdravie. Nezdravý disk môže poškodiť váš SQL Server databázy. Ak k tomu dôjde, použite nástroj na obnovenie databázy ako DataNumen SQL Recovery na opraviť poškodený SQL Server.

Úvod autora:

Neil Varley je odborníkom na obnovu dát v odbore DataNumen, Inc., ktorá je svetovým lídrom v oblasti technológií obnovy dát, vrátane opraviť poškodenie e-mailov Outlook a vynikajúce softvérové ​​produkty na obnovenie. Pre viac informácií navštívte www.datanumen. S

Zdieľať teraz:

Komentáre sú uzavreté.