Kako riješiti probleme s prostorom uzrokovane SQL Server

Podijeli sada:

Nekoliko puta SQL Server može biti razlog problema s prostorom na disku. U ovom članku ćemo vidjeti koji su uzroci ovog problema i kako ga možemo riješiti.

Vaš SQL Server treba prostora.

Problemi s prostorom uzrokovani SQL-omPuno puta SQL Server trebat će prostor na disku. To može biti zbog rastućih podataka unutar vaše baze podataka ili nesmanjenih datoteka dnevnika ili neobrisanih datoteka sigurnosne kopije ili neobrisanih, neželjenih datoteka baze podataka. Koji god da je razlog, na a SQL Server, prostor na disku vrlo je važan za transakcije baze podataka.

Zadatak čišćenja ne radi

Ako koristite SQL izvorne planove održavanja za sigurnosno kopiranje vašeg SQL server baze podataka, možda postoje šanse da modul čišćenja u tim planovima održavanja ne obavlja svoju zadaću. Kada na disku ponestane prostora, shvatit ćete da stare datoteke sigurnosne kopije nisu ispravno očišćene. Uključili biste modul čišćenja u plan održavanja. Unatoč svemu ovome, pitate li se zašto nije išlo?

Provjerite jeste li spomenuli ispravnu mapu za brisanje datoteka sigurnosne kopije, provjerite jeste li spomenuli ispravnu ekstenziju datoteke za brisanje datoteka sigurnosne kopije, pokušajte s točkom “.” i bez točke u nastavku datoteke.

Log datoteke su velike od datoteka baze podataka

SQL Server Baza podatakaNajčešći uzrok problema s prostorom SQL Server su nepraćene datoteke zapisnika i privremene datoteke. Iako će se privremena baza podataka (privremena baza podataka) smanjiti na izvornu veličinu svaki put kada se SQL Service ponovno pokrene, dobra je praksa pratiti rast privremene baze podataka i smanjiti je kada je pred time da zauzme cijeli prostor na disku. Slično kao i privremena baza podataka, datoteke zapisnika treba uvijek provjeravati. Osigurajte da imate sigurnosnu kopiju zapisnika kako biste uvijek održavali minimalnu veličinu datoteka zapisnika.

Neiskorištene datoteke baze podataka

Na vašem disku može biti mnogo neiskorištenih i nepripojenih datoteka baze podataka koje troše prostor. Izvršite skriptu na svom SQL Server instanca za identifikaciju takvih datoteka zajedno s njihovim putem. Nakon brze analize, ako ste i dalje sigurni da te datoteke više nisu potrebne, izbrišite ih i uštedite prostor.

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 Oštećenje baze podataka

Osim praćenja i održavanja prostora na disku, također nadzirite ispravnost vašeg diska. Neispravan disk može oštetiti vaš SQL Server baze podataka. Ako se to dogodi, koristite alat za oporavak baze podataka kao što je DataNumen SQL Recovery do popraviti oštećeno SQL Server.

Uvod za autora:

Neil Varley je stručnjak za oporavak podataka u DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući popraviti oštećenje Outlook e-pošte i excel softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com

Podijeli sada:

Komentari su zatvoreni.