數據庫膨脹處理方法
一、收縮處理
1.備份數據庫。無疑安全保障總是第一位
2.用sa登錄查詢分析器,dbcc checkdb (‘數據庫名’)。檢查是否存在錯誤,存在錯誤則先修復數據庫
①--設置為單一用戶
sp_dboption '數據庫名','single', 'true'
②--修復數據庫
dbcc checkdb(‘數據庫名’, REPAIR_ALLOW_DATA_LOSS)
再次檢查錯誤dbcc checkdb (‘數據庫名’),若仍存在錯誤,則再次修復dbcc checkdb(‘數據庫名’, REPAIR_ALLOW_DATA_LOSS),反復修復幾次。若仍有無法修復的錯誤,轉用下面的單表修復
③--設置回多用戶
sp_dboption ‘數據庫名’,’single’, ‘false’
④--單表修復
Dbcc checktable(‘表名’) 或 dbcc checktable(表ID號碼)
若仍存在錯誤,再進行有損表修復
Dbcc checktable(‘表名’, REPAIR_ALLOW_DATA_LOSS)
或 dbcc checktable(表ID號碼, REPAIR_ALLOW_DATA_LOSS)
3.收縮數據庫
①清空日志
DUMP TRANSACTION 數據庫名 WITH NO_LOG
②截斷日志
BACKUP LOG 數據庫名 WITH NO_LOG
③收縮數據庫
DBCC shrinkdatabase(‘數據庫名’)
4.sa登錄指定數據庫,創(chuàng)建兩存儲過程
dbo.sp_SOS --檢索各表占用空間大小
dbo.sp_defragment_indexes --重建索引
5.執(zhí)行sp_SOS,檢查各表大小,截圖如下:
6.仔細查看未使用空間Unused(MB)和索引占用空間Index(MB)較大的表。對這些表做如下分析操作:
①是否有主鍵。若無主鍵,則增加一列ID(int型),設置為標識列自動增長,并設置該列為主鍵
②是否存在20字節(jié)以上的char類型字段。若存在,則改成varchar類型
③檢查索引列是否有允許NULL的列。若存在,則改成不允許NULL
④檢查索引列是否在不同的混合索引中存在共同的列。若存在,則修改索引將公用的列單獨建成一個索引,或多個字段合在一起建一個大混合索引
|
|