หลายครั้ง SQL Server อาจเป็นสาเหตุของปัญหาพื้นที่บนดิสก์ ในบทความนี้เราจะดูว่าสาเหตุของปัญหานี้คืออะไรและเราจะแก้ไขได้อย่างไร
ของคุณ SQL Server ต้องการพื้นที่
หลายครั้ง SQL Server จะต้องมีพื้นที่ดิสก์ อาจเป็นเพราะการเติบโตของข้อมูลภายในฐานข้อมูลของคุณ หรือไฟล์บันทึกที่ไม่ย่อขนาด หรือไฟล์สำรองที่ไม่ถูกลบ หรือไฟล์ฐานข้อมูลที่ไม่ต้องการที่ไม่ถูกลบ ไม่ว่าด้วยเหตุผลใดก็ตามบนก SQL Serverพื้นที่บนดิสก์มีความสำคัญมากสำหรับธุรกรรมฐานข้อมูล
งานล้างข้อมูลไม่ทำงาน
หากคุณใช้แผนการบำรุงรักษาดั้งเดิมของ SQL เพื่อสำรองข้อมูลของคุณ SQL server ฐานข้อมูล อาจมีโอกาสที่โมดูลการล้างข้อมูลในแผนการบำรุงรักษาเหล่านั้นไม่ทำงาน เมื่อพื้นที่ว่างในดิสก์หมด คุณจะรู้ว่าไฟล์สำรองข้อมูลเก่าไม่ได้รับการทำความสะอาดอย่างเหมาะสม คุณจะต้องรวมโมดูลการล้างข้อมูลไว้ในแผนการบำรุงรักษา ทั้งๆที่ทั้งหมดนี้คุณสงสัยว่าทำไมมันไม่ทำงาน?
ตรวจสอบว่าคุณระบุโฟลเดอร์ที่ถูกต้องในการลบไฟล์สำรองหรือไม่ ตรวจสอบว่าคุณระบุนามสกุลไฟล์ที่ถูกต้องเพื่อลบไฟล์สำรองหรือไม่ ลองด้วยจุด “.” และไม่มีจุดในนามสกุลไฟล์
ไฟล์บันทึกมีขนาดใหญ่กว่าไฟล์ฐานข้อมูล
Most สาเหตุทั่วไปของปัญหาพื้นที่บน SQL Server เป็นไฟล์บันทึกที่ไม่ต้องใส่ข้อมูลและไฟล์ tempdb แม้ว่า tempdb จะลดขนาดลงเป็นขนาดดั้งเดิมเมื่อใดก็ตามที่ SQL Service restarts เป็นแนวทางปฏิบัติที่ดีในการตรวจสอบการเติบโตของ tempdb และลดขนาดเมื่อกำลังจะกินพื้นที่ดิสก์ทั้งหมด เช่นเดียวกับ tempdb ไฟล์บันทึกควรอยู่ภายใต้การตรวจสอบเสมอ ตรวจสอบให้แน่ใจว่าคุณมีการสำรองข้อมูลบันทึกเพื่อเก็บไฟล์บันทึกในขนาดที่เล็กที่สุดเสมอ
ไฟล์ฐานข้อมูลที่ไม่ได้ใช้
อาจมีไฟล์ฐานข้อมูลที่ไม่ได้ใช้และไม่ได้เชื่อมต่อจำนวนมากอยู่ในดิสก์ของคุณและทำให้เปลืองเนื้อที่ ดำเนินการสคริปต์ของคุณ SQL Server อินสแตนซ์เพื่อระบุไฟล์ดังกล่าวพร้อมกับเส้นทาง หลังจากการวิเคราะห์อย่างรวดเร็ว หากคุณยังแน่ใจว่าไฟล์เหล่านั้นไม่จำเป็นอีกต่อไป ให้ลบออกและประหยัดพื้นที่
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 ฐานข้อมูลเสียหาย
นอกจากการตรวจสอบและรักษาพื้นที่ดิสก์ของคุณแล้ว ยังตรวจสอบสภาพของดิสก์ของคุณด้วย ดิสก์ที่ไม่แข็งแรงอาจทำให้คุณเสียหายได้ SQL Server ฐานข้อมูล หากสิ่งนี้เกิดขึ้น โปรดใช้เครื่องมือกู้คืนฐานข้อมูล เช่น DataNumen SQL Recovery ไปยัง แก้ไขความเสียหาย SQL Server.
บทนำผู้เขียน:
Neil Varley เป็นผู้เชี่ยวชาญด้านการกู้คืนข้อมูลใน DataNumen, Inc. ซึ่งเป็นผู้นำระดับโลกด้านเทคโนโลยีการกู้คืนข้อมูล ได้แก่ ซ่อมแซมความเสียหายของอีเมล Outlook และผลิตภัณฑ์ซอฟต์แวร์กู้คืน excel ดูข้อมูลเพิ่มเติมได้ที่ wwwdatanumenด้วย.