Birkaç defa SQL Server disklerdeki yer sorununun nedeni bu olabilir. Bu yazıda, bu sorunun temel nedenlerinin ne olduğunu ve nasıl düzeltebileceğimizi göreceğiz.
Sizin SQL Server alana ihtiyaç duyar.
Bir cok zaman SQL Server disk alanına ihtiyaç duyacaktır. Bunun nedeni, veritabanınızdaki artan veriler veya küçültülmemiş günlük dosyaları veya silinmemiş yedekleme dosyaları veya silinmemiş, istenmeyen veritabanı dosyaları olabilir. Nedeni ne olursa olsun, bir SQL Server, veritabanı işlemleri için diskteki alan çok önemlidir.
Temizleme görevi çalışmıyor
Yedekleme için SQL'in yerel bakım planlarını kullanıyorsanız SQL server veritabanlarında, bu bakım planlarındaki temizleme modülünün görevini yapmama olasılığı olabilir. Diskte yer kalmadığında, eski yedekleme dosyalarının düzgün bir şekilde temizlenmediğini fark edeceksiniz. Temizleme modülünü bakım planına dahil etmiş olurdunuz. Tüm bunlara rağmen neden çalışmadığını merak ediyor musunuz?
Yedekleme dosyalarını silmek için doğru klasörden bahsedip bahsetmediğinizi kontrol edin, yedekleme dosyalarını silmek için doğru dosya uzantısından bahsedip bahsetmediğinizi kontrol edin, nokta “.” ile deneyin. ve dosya uzantısında bir nokta olmadan.
Günlük dosyaları, veritabanı dosyalarından çok daha büyüktür
En sık karşılaşılan yer sorunu nedeni SQL Server Otomatik olarak oluşturulan günlük dosyaları ve tempdb dosyaları da bu kapsamdadır. SQL Hizmeti yeniden başlatıldığında tempdb orijinal boyutuna küçülse de, tempdb'nin büyümesini izlemek ve tüm disk alanını tüketmeye başladığında küçültmek iyi bir uygulamadır. Tempdb'ye benzer şekilde, günlük dosyaları da her zaman kontrol altında tutulmalıdır. Günlük dosyalarının boyutunu her zaman minimumda tutmak için yedekleme yaptığınızdan emin olun.
Kullanılmayan veritabanı dosyaları
Diskinizde oturan ve yer israf eden birçok kullanılmayan ve eklenmemiş veritabanı dosyası olabilir. Komut dosyasını bilgisayarınızda yürütün SQL Server Bu tür dosyaları yollarıyla birlikte tanımlamak için örnek. Hızlı bir analizden sonra, bu dosyalara artık ihtiyaç olmadığından hala eminseniz, onları silin ve yer kazanın.
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 Veritabanı Bozulması
Disk alanınızı izlemenin ve korumanın yanı sıra, diskinizin sağlığını da izleyin. Sağlıksız disk, bilgisayarınızı bozabilir. SQL Server veritabanları. Bu olursa, lütfen aşağıdaki gibi veritabanı kurtarma aracını kullanın: DataNumen SQL Recovery için bozuk düzeltmek SQL Server.
Yazar Tanıtımı:
Neil Varley bir veri kurtarma uzmanıdır. DataNumendahil olmak üzere veri kurtarma teknolojilerinde dünya lideri olan , Inc. Outlook e-posta bozulmasını onarın ve excel kurtarma yazılımı ürünleri. Daha fazla bilgi için ziyaret edin www.datanumen.com