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.
Puno 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
Najč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