De cateva ori SQL Server ar putea fi motivul problemei de spațiu pe discuri. În acest articol, vom vedea care sunt cauzele principale ale acestei probleme și cum o putem remedia.
Ta SQL Server are nevoie de spatiu.
Multe ori SQL Server va avea nevoie de spațiu pe disc. Acest lucru se poate datora creșterii datelor în baza de date sau a fișierelor jurnal necomprimate sau a fișierelor de rezervă neșterse sau a fișierelor de bază de date neșterse nedorite. Oricare ar fi motivul, pe a SQL Server, spațiul de pe disc este foarte important pentru tranzacțiile cu bazele de date.
Sarcina de curățare nu funcționează
Dacă utilizați planurile de întreținere native ale SQL pentru a face backup SQL server baze de date, ar putea exista șanse ca modulul de curățare din acele planuri de întreținere să nu-și îndeplinească sarcina. Când discul rămâne fără spațiu, veți realiza că fișierele vechi de rezervă nu sunt curățate corespunzător. Ați fi inclus modulul de curățare în planul de întreținere. În ciuda tuturor acestor lucruri, vă întrebați de ce nu a funcționat?
Verificați dacă ați menționat folderul corect pentru a șterge fișierele de rezervă, verificați dacă ați menționat extensia de fișier corectă pentru a șterge fișierele de rezervă, încercați cu punctul „.” și fără un punct în extensia fișierului.
Fișierele jurnal sunt uriașe decât fișierele de bază de date
Most cauza comună pentru probleme de spațiu pe SQL Server sunt fișierele jurnal nesupravegheate și fișierele tempdb. Deși tempdb se va micșora la dimensiunea originală ori de câte ori serviciul SQL restarEste o practică bună să monitorizați creșterea tempdb și să o micșorați atunci când este pe cale să consume întreg spațiu pe disc. Similar cu tempdb, fișierele jurnal ar trebui să fie întotdeauna verificate. Asigurați-vă că aveți un backup pentru jurnal pentru a păstra întotdeauna fișierele jurnal la dimensiunea minimă.
Fișiere de baze de date neutilizate
S-ar putea să existe multe fișiere de bază de date neutilizate și neatașate pe disc și să piardă spațiu. Executați scriptul pe dvs SQL Server instanță pentru a identifica astfel de fișiere împreună cu calea lor. După o analiză rapidă, dacă încă ești sigur că acele fișiere nu mai sunt necesare, șterge-le și economisește spațiu.
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 Corupția bazei de date
Pe lângă monitorizarea și menținerea spațiului pe disc, monitorizați și starea discului. Discul nesănătos vă poate deteriora SQL Server baze de date. Dacă se întâmplă acest lucru, vă rugăm să utilizați instrumentul de recuperare a bazei de date, cum ar fi DataNumen SQL Recovery la repara corupt SQL Server.
Introducerea autorului:
Neil Varley este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv reparați corupția e-mailului Outlook și produse software de recuperare Excel. Pentru mai multe informații vizitați www.datanumen.com