Mitu korda SQL Server võib olla kettaruumi probleemi põhjus. Selles artiklis näeme, mis on selle probleemi algpõhjused ja kuidas seda parandada.
Sinu SQL Server vajab ruumi.
Palju kordi SQL Server vajab kettaruumi. Selle põhjuseks võivad olla teie andmebaasis kasvavad andmed või kahanemata logifailid või kustutamata varukoopiafailid või kustutamata soovimatud andmebaasifailid. Ükskõik, mis põhjus on, a SQL Server, kettaruum on andmebaasi tehingute jaoks väga oluline.
Puhastusülesanne ei tööta
Kui kasutate oma varundamiseks SQL-i natiivseid hooldusplaane SQL server andmebaasid, võib olla tõenäoline, et nende hoolduskavade puhastusmoodul ei täida oma ülesannet. Kui kettaruum saab otsa, saate aru, et vanu varukoopiaid ei puhastata korralikult. Oleksite puhastusmooduli hooldusplaani lisanud. Kas te sellest kõigest hoolimata imestate, miks see ei töötanud?
Kontrollige, kas mainisite varukoopiafailide kustutamiseks õiget kausta, kontrollige, kas olete varundamisfailide kustutamiseks maininud õiget faililaiendit, proovige punktiga ". ja ilma punktita faililaiendis.
Logifailid on tohutud kui andmebaasifailid
Kõige levinum ruumiprobleemi põhjus SQL Server on järelevalveta logifailid ja tempdb-failid. Kuigi tempdb kahaneb SQL-teenuse taaskäivitamisel algsele suurusele, on hea tava jälgida tempdb kasvu ja seda vähendada, kui see hakkab kogu kettaruumi hõivama. Sarnaselt tempdb-ga tuleks logifaile pidevalt kontrollida. Veenduge, et teil oleks logide varukoopia, et logifailid oleksid alati minimaalse suurusega.
Kasutamata andmebaasifailid
Teie kettal võib olla palju kasutamata ja manustamata andmebaasifaile, mis raiskavad ruumi. Käivitage oma skript SQL Server et tuvastada sellised failid koos nende teega. Kui olete pärast kiiret analüüsi endiselt kindel, et neid faile pole enam vaja, kustutage need ja säästke ruumi.
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 Andmebaasi korruptsioon
Lisaks kettaruumi jälgimisele ja hooldamisele jälgige ka ketta tervist. Ebatervislik ketas võib teie SQL Server andmebaasid. Kui see juhtub, kasutage andmebaasi taastamise tööriista nagu DataNumen SQL Recovery et parandada rikutud SQL Server.
Autori sissejuhatus:
Neil Varley on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas Outlooki e-posti korruptsiooni parandamine ja Exceli taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom