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