Kaip išspręsti kosmoso problemas, kurias sukelia SQL Server

Bendrinti dabar:

Kelis kartus SQL Server gali būti vietos problemos diskuose priežastis. Šiame straipsnyje pamatysime, kokios yra pagrindinės šios problemos priežastys ir kaip galime ją išspręsti.

Jūsų SQL Server reikia vietos.

Kosmoso problemos, kurias sukelia SQLDaug kartų SQL Server reikės vietos diske. Taip gali nutikti dėl didėjančių duomenų jūsų duomenų bazėje arba nesutrauktų žurnalo failų, neištrintų atsarginių kopijų failų arba neištrintų, nepageidaujamų duomenų bazės failų. Kad ir kokia būtų priežastis, a SQL Server, vieta diske yra labai svarbi duomenų bazės operacijoms.

Valymo užduotis neveikia

Jei naudojate vietinius SQL priežiūros planus, kad sukurtumėte atsarginę kopiją SQL server duomenų bazes, gali būti, kad tuose priežiūros planuose esantis valymo modulis neatlieka savo užduoties. Kai diske pritrūks vietos, suprasite, kad seni atsarginės kopijos failai nėra tinkamai išvalyti. Valymo modulį būtumėte įtraukę į priežiūros planą. Nepaisant viso to, ar jums įdomu, kodėl jis neveikė?

Patikrinkite, ar paminėjote tinkamą aplanką atsarginėms kopijoms ištrinti, patikrinkite, ar paminėjote tinkamą failo plėtinį, kad ištrintumėte atsargines kopijas, pabandykite su tašku „. ir be taško failo plėtinyje.

Žurnalo failai yra didžiuliai nei duomenų bazės failai

SQL Server duomenų bazėDažniausia vietos problemų priežastis SQL Server yra neautomatizuoti žurnalų failai ir laikinieji duomenų bazės (tempdb) failai. Nors laikinieji duomenų bazės duomenys bus sumažinti iki pradinio dydžio, kai SQL tarnyba bus paleista iš naujo, rekomenduojama stebėti laikinųjų duomenų bazės duomenų augimą ir sumažinti duomenų bazę, kai ji pradės užimti visą disko vietą. Panašiai kaip ir laikinųjų duomenų bazėje, žurnalų failus reikia nuolat tikrinti. Įsitikinkite, kad turite žurnalų atsargines kopijas, kad žurnalų failų dydis visada būtų minimalus.

Nenaudojami duomenų bazės failai

Jūsų diske gali būti daug nenaudojamų ir neprisegtų duomenų bazės failų ir eikvojama vietos. Vykdykite scenarijų savo SQL Server kad būtų galima identifikuoti tokius failus kartu su jų keliu. Jei po greitos analizės vis dar esate tikri, kad tie failai nebereikalingi, ištrinkite juos ir sutaupykite vietos.

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 Duomenų bazių korupcija

Be vietos diske stebėjimo ir priežiūros, taip pat stebėkite disko būklę. Nesveikas diskas gali sugadinti jūsų SQL Server duomenų bazės. Jei taip atsitiks, naudokite duomenų bazės atkūrimo įrankį, pvz DataNumen SQL Recovery į pataisyti sugadintas SQL Server.

Autoriaus įvadas:

Neilas Varley yra duomenų atkūrimo ekspertas DataNumen, Inc., kuri yra pasaulyje duomenų atkūrimo technologijų lyderė, įskaitant ištaisyti „Outlook“ el. pašto pažeidimus ir Excel atkūrimo programinės įrangos produktai. Norėdami gauti daugiau informacijos, apsilankykite WWW.datanumen.com

Bendrinti dabar:

Komentarai yra uždaryti.