在我們使用sql server數據庫或者服務(wù)器時(shí),有時(shí)會(huì )發(fā)現數據庫不到一段時(shí)間,占用磁盤(pán)空間好大,也有可能是數據的原因,也有可能是其他的原因,但如果說(shuō)占用絕大部分存儲空間,而且數據量又不怎么大,那么,這其中就有問(wèn)題了。
sql server
首先我們要清楚問(wèn)題的原因之處;
第一步:打開(kāi)sql server數據庫,數據庫右鍵——屬性——文件,在這個(gè)文件欄打開(kāi)之后,我們會(huì )看到主數據文件和日志文件的初始大小和增長(cháng)大小,如果日志文件太多,我們首先要考慮處理日志文件。
對數據庫事務(wù)日志已滿(mǎn)的處理方法:
USE [master]
GO
ALTER DATABASE 數據庫名稱(chēng) SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE 數據庫名稱(chēng) SET RECOVERY SIMPLE
GO
USE 數據庫名稱(chēng)
GO
DBCC SHRINKFILE (N'數據庫名稱(chēng)_log' , 11, TRUNCATEONLY)
GO
數據日志處理完之后,如果是日志的問(wèn)題的話(huà),這個(gè)時(shí)候磁盤(pán)的存儲空間會(huì )多出來(lái)很多,如果不是這個(gè)問(wèn)題的話(huà),我們還要去查看數據庫中每個(gè)表數據大小,看看是否是數據量很大這個(gè)原因導致的。
IF OBJECT_ID('tempdb..#TablesSizes') IS NOT NULL
DROP TABLE #TablesSizes
CREATE TABLE #TablesSizes
(
TableName sysname ,
Rows BIGINT ,
reserved VARCHAR(100) ,
data VARCHAR(100) ,
index_size VARCHAR(100) ,
unused VARCHAR(100)
)
DECLARE @sql VARCHAR(MAX)
SELECT @sql = COALESCE(@sql, '') + '
INSERT INTO #TablesSizes execute sp_spaceused ''' + QUOTENAME(TABLE_SCHEMA,
'[]') + '.'
+ QUOTENAME(Table_Name, '[]') + ''''
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
PRINT ( @SQL )
EXECUTE (@SQL)
SELECT *
FROM #TablesSizes
ORDER BY Rows DESC
當這些配置好了之后,我們發(fā)現確實(shí)是數據原因,這個(gè)時(shí)候,我們就要適當的去刪除數據量比較大的表格了,刪除完了之后,我們就要對表格進(jìn)行壓縮了。將磁盤(pán)的可用空間釋放出來(lái)。
數據庫右鍵——任務(wù)——壓縮——數據庫,來(lái)到上面的壓縮數據庫文件,這個(gè)時(shí)候我們要選擇壓縮的百分比了,設置好百分比之后,我們就開(kāi)始執行,這個(gè)過(guò)程可能比較漫長(cháng),畢竟是對磁盤(pán)的一次重新組合,所以敬請等待,最終你會(huì )看到磁盤(pán)會(huì )空出很多可用空間。
聯(lián)系客服