Kā novērst kosmosa problēmas, ko izraisījis SQL Server

Kopīgot tūlīt:

Vairākas reizes SQL Server var būt iemesls kosmosa problēmai diskos. Šajā rakstā mēs redzēsim, kādi ir šī jautājuma cēloņi un kā mēs to varam novērst.

Jūsu SQL Server nepieciešama telpa.

Ar kosmosu saistītas problēmas, ko izraisa SQLDaudzas reizes SQL Server būs nepieciešama vieta diskā. Tas varētu būt saistīts ar datu pieaugumu jūsu datu bāzē vai nesagrautajiem žurnālfailiem, neatjaunotajiem dublējuma failiem vai neatdzēstajiem, nevēlamajiem datu bāzes failiem. Lai kāds būtu iemesls, a SQL Server, vieta diskā ir ļoti svarīga datu bāzes darījumiem.

Tīrīšanas uzdevums nedarbojas

Ja izmantojat SQL vietējos uzturēšanas plānus, lai dublētu SQL server datubāzēs, iespējams, ka šo apkopes plānu tīrīšanas modulis nepilda savu uzdevumu. Kad diskā beigsies vieta, jūs sapratīsit, ka vecie dublējuma faili nav pareizi iztīrīti. Apkopes moduli jūs būtu iekļāvis apkopes plānā. Neskatoties uz to visu, jūs domājat, kāpēc tas nedarbojās?

Pārbaudiet, vai esat pieminējis pareizo mapi, lai izdzēstu dublējuma failus, pārbaudiet, vai esat pieminējis pareizo faila paplašinājumu, lai izdzēstu dublējuma failus, mēģiniet ar punktu “.” un bez punkta faila paplašinājumā.

Žurnāla faili ir milzīgi nekā datubāzes faili

SQL Server DatubāzeVisbiežākais vietas problēmu cēlonis SQL Server ir neuzraudzīti žurnālfaili un tempdb faili. Lai gan tempdb tiks samazināts līdz sākotnējam izmēram ikreiz, kad SQL pakalpojums tiks restartēts, ieteicams uzraudzīt tempdb pieaugumu un samazināt to, kad tas gatavojas aizņemt visu diska vietu. Līdzīgi kā tempdb, žurnālfaili ir vienmēr jāpārbauda. Pārliecinieties, vai jums ir žurnāla dublējums, lai žurnālfailu izmērs vienmēr būtu minimāls.

Neizmantoti datu bāzes faili

Diskā var būt daudz neizmantotu un nepievienotu datu bāzes failu, kas tērē vietu. Izpildiet skriptu savā SQL Server piemēram, lai identificētu šādus failus kopā ar to ceļu. Pēc ātras analīzes, ja joprojām esat pārliecināts, ka šie faili vairs nav vajadzīgi, izdzēsiet tos un ietaupiet vietu.

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 Datu bāzes korupcija

Papildus diska vietas uzraudzībai un uzturēšanai uzrauga arī diska veselību. Neveselīgs disks var sabojāt jūsu SQL Server datu bāzes. Ja tas notiks, lūdzu, izmantojiet datu bāzes atkopšanas rīku, piemēram, DataNumen SQL Recovery uz labot bojātu SQL Server.

Autora ievads:

Nils Varlijs ir datu atkopšanas eksperts DataNumen, Inc., kas ir pasaules līderis datu atkopšanas tehnoloģiju, tostarp labot Outlook e-pasta korupciju un Excel atkopšanas programmatūras produkti. Lai iegūtu vairāk informācijas, apmeklējiet vietni www.datanumen. Ar

Kopīgot tūlīt:

Komentāri ir slēgti.