Nekoliko puta SQL Server može biti razlog za problem sa prostorom na diskovima. U ovom članku ćemo vidjeti koji su osnovni uzroci ovog problema i kako ga možemo riješiti.
Tvoj SQL Server potreban prostor.
Mnogo puta SQL Server trebaće prostor na disku. To može biti zbog rastućih podataka unutar vaše baze podataka ili nesmanjenih datoteka evidencije ili neizbrisanih datoteka sigurnosne kopije ili neobrisanih, neželjenih datoteka baze podataka. Šta god da je razlog, na a SQL Server, prostor na disku je veoma važan za transakcije baze podataka.
Zadatak čišćenja ne radi
Ako koristite SQL-ove izvorne planove održavanja za sigurnosno kopiranje SQL server baze podataka, mogu postojati šanse da modul čišćenja u tim planovima održavanja ne radi svoj zadatak. Kada na disku ponestane prostora, shvatit ćete da stare sigurnosne kopije nisu pravilno očišćene. Modul za čišćenje biste uključili u plan održavanja. I pored svega toga, pitate se zašto ne radi?
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 tačkom “.” i bez tačke u ekstenziji datoteke.
Dnevnici su ogromni od datoteka baze podataka
Najčešći uzrok problema s prostorom na SQL Server su nepraćene datoteke dnevnika i privremene baze podataka (privremena baza podataka). Iako će se privremena baza podataka (privremena baza podataka) smanjiti na originalnu veličinu svaki put kada se SQL servis ponovo pokrene, dobra je praksa pratiti rast privremene baze podataka i smanjiti je kada je pred zauzimanjem cijelog prostora na disku. Slično kao i privremena baza podataka (privremena baza podataka), datoteke dnevnika treba uvijek provjeravati. Osigurajte da imate sigurnosnu kopiju dnevnika kako biste uvijek održavali minimalnu veličinu datoteka dnevnika.
Nekorištene datoteke baze podataka
Možda postoji mnogo neiskorištenih i nepriloženih datoteka baze podataka koje se nalaze na vašem disku i troše prostor. Izvršite skriptu na svom SQL Server instance za identifikaciju takvih datoteka zajedno sa njihovom putanjom. Nakon brze analize, ako ste i dalje sigurni da ti fajlovi više nisu potrebni, obriš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 Korupcija u bazi podataka
Osim praćenja i održavanja vašeg prostora na disku, također pratite zdravlje 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 to popraviti oštećen SQL Server.
Uvod za autora:
Neil Varley je stručnjak za oporavak podataka 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