数据库瘦身
壓縮日志及數(shù)據(jù)庫文件大小 ??
? ??
? /*--特別注意 ??
? ??
? 請按步驟進(jìn)行,未進(jìn)行前面的步驟,請不要做后面的步驟 ??
? 否則可能損壞你的數(shù)據(jù)庫. ??
? ??
? ??
? 一般不建議做第4,6兩步 ??
? 第4步不安全,有可能損壞數(shù)據(jù)庫或丟失數(shù)據(jù) ??
? 第6步如果日志達(dá)到上限,則以后的數(shù)據(jù)庫處理會失敗,在清理日志后才能恢復(fù). ??
? --*/ ??
? ??
? --下面的所有庫名都指你要處理的數(shù)據(jù)庫的庫名 ??
? ??
? 1.清空日志 ??
? DUMP ? ? TRANSACTION ? ? 庫名 ? ? WITH ? ? NO_LOG ? ? ? ? ??
? ??
? 2.截斷事務(wù)日志: ??
? BACKUP ? LOG ? 庫名 ? WITH ? NO_LOG ??
? ??
? 3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會減小 ??
? 企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務(wù)--收縮數(shù)據(jù)庫--收縮文件 ??
? --選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了 ??
? --選擇數(shù)據(jù)文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了 ??
? ??
? 也可以用SQL語句來完成 ??
? --收縮數(shù)據(jù)庫 ??
? DBCC ? SHRINKDATABASE(庫名) ??
? ??
? --收縮指定數(shù)據(jù)文件,1是文件號,可以通過這個語句查詢到:select ? * ? from ? sysfiles ??
? DBCC ? SHRINKFILE(1) ??
? ??
? 4.為了最大化的縮小日志文件(如果是sql ? 7.0,這步只能在查詢分析器中進(jìn)行) ??
? a.分離數(shù)據(jù)庫: ??
? 企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--分離數(shù)據(jù)庫 ??
? ??
? b.在我的電腦中刪除LOG文件 ??
? ??
? c.附加數(shù)據(jù)庫: ??
? 企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--附加數(shù)據(jù)庫 ??
? ??
? 此法將生成新的LOG,大小只有500多K ??
? ??
? 或用代碼: ? ??
? 下面的示例分離 ? pubs,然后將 ? pubs ? 中的一個文件附加到當(dāng)前服務(wù)器。 ??
? ??
? a.分離 ??
? EXEC ? sp_detach_db ? @dbname ? = ? '庫名' ??
? ??
? b.刪除日志文件 ??
? ??
? c.再附加 ??
? EXEC ? sp_attach_single_file_db ? @dbname ? = ? '庫名', ? ??
? ? ? ? @physname ? = ? 'c:\Program ? Files\Microsoft ? SQL ? Server\MSSQL\Data\庫名.mdf' ??
? ??
? 5.為了以后能自動收縮,做如下設(shè)置: ??
? 企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--選項--選擇"自動收縮" ??
? ??
? --SQL語句設(shè)置方式: ??
? EXEC ? sp_dboption ? '庫名', ? 'autoshrink', ? 'TRUE' ??
? ??
? 6.如果想以后不讓它日志增長得太大 ??
? 企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--事務(wù)日志 ??
? --將文件增長限制為xM(x是你允許的最大數(shù)據(jù)文件大小) ??
? ??
? --SQL語句的設(shè)置方式: ??
? alter ? database ? 庫名 ? modify ? file(name=邏輯文件名,maxsize=20) ??
? ---------------------------------------------------------------------
SQL Server 控制Ldf文件的大小(清理歷史記錄 &設(shè)定自動縮小)?
?
*清理歷史記錄?
1. 在SQL Server Enterprice Manager(企業(yè)管理器)工具列---進(jìn)入 SQL Query Analyzer(SQL查詢分析器)?
2. 輸入BACKUP LOG <你的數(shù)據(jù)庫名稱> WITH TRUNCATE_ONLY?
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY?
?
2. 回SQL Server Enterprice Manager, 在該數(shù)據(jù)庫上按右鍵選[所有工作/壓縮數(shù)據(jù)庫],?
點(diǎn)[文件], 在數(shù)據(jù)庫文件選擇該 Log文件, 在[壓縮動作]選擇[將文件壓縮為X MB (最小值為Y MB)],?
直接將x改成其建議其最小值y按[確定]即可壓縮.?
先不要離開,再點(diǎn)一次[文件]看看壓了多少, 會發(fā)現(xiàn)還可以再壓, 還會變更小喲! 可以壓兩三次.?
?
總結(jié):其實也就是兩個指令就可以完成了?
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY?
DBCC ShrinkDatabase(DateBaseName)?
?
*設(shè)定數(shù)據(jù)庫自動縮小, 默認(rèn)值為OFF?
方法1.?
ALTER DATABASE <你的數(shù)據(jù)庫名稱> SET AUTO_SHRINK ON?
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON?
方法2.?
在數(shù)據(jù)庫上按右鍵選內(nèi)容(要等一下下), 點(diǎn)[選項]頁, 勾選[自動壓縮]后按確定?
?
?
SQL SERVER日志清除的兩種方法?
在使用過程中大家經(jīng)常碰到數(shù)據(jù)庫日志非常大的情況,在這里介紹了兩種處理方法……?
?
方法一?
?
一般情況下,SQL數(shù)據(jù)庫的收縮并不能很大程度上減小數(shù)據(jù)庫大小,其主要作用是收縮日志大小,應(yīng)當(dāng)定期進(jìn)行此操作以免數(shù)據(jù)庫日志過大?
?
1、設(shè)置數(shù)據(jù)庫模式為簡單模式:打開SQL企業(yè)管理器,在控制臺根目錄中依次點(diǎn)開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務(wù)器-->雙擊打開數(shù)據(jù)庫目錄-->選擇你的數(shù)據(jù)庫名稱(如論壇數(shù)據(jù)庫Forum)-->然后點(diǎn)擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇“簡單”,然后按確定保存。?
?
2、在當(dāng)前數(shù)據(jù)庫上點(diǎn)右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫,一般里面的默認(rèn)設(shè)置不用調(diào)整,直接點(diǎn)確定。?
?
3、收縮數(shù)據(jù)庫完成后,建議將您的數(shù)據(jù)庫屬性重新設(shè)置為標(biāo)準(zhǔn)模式,操作方法同第一點(diǎn),因為日志在一些異常情況下往往是恢復(fù)數(shù)據(jù)庫的重要依據(jù)?
?
?
?
?
SQLSERVER中講:?
?
BACKUP LOG 數(shù)據(jù)庫名 WITH NO_LOG|TRUNCATE_ONLY可以截斷事務(wù)日志。?
?
但我在數(shù)據(jù)庫中進(jìn)行上述操作后,事務(wù)日志還是沒有改變。?
?
?
第一步只是將非活動的事務(wù)日志截斷,并沒有收縮數(shù)據(jù)庫,只有進(jìn)行第二項操作后,數(shù)據(jù)庫才進(jìn)行事務(wù)日志的清理工作,將截斷的非活動事務(wù)刪除,并將事務(wù)日志文件收縮到適當(dāng)尺寸。?
在使用 SQL Server 時,數(shù)據(jù)庫里的日志文件會越來越大,需要把它刪除。 我先把這個數(shù)據(jù)庫分離,在數(shù)據(jù)庫上點(diǎn)右鍵 -> 所有任務(wù) -> 分離數(shù)據(jù)庫,分離之后,就可以把 Log 文件刪除,同時也可以把數(shù)據(jù)進(jìn)行備份。之后,就可以在所有任務(wù)里的附加數(shù)據(jù)庫再把那個數(shù)據(jù)庫添進(jìn)來,SQL Server 會提示 LOG 文件不存在,問你是不是要新建一個,選是就行了,這樣,LOG 文件就清空了。 這個方法只需幾分鐘的時間,但在這幾分鐘里,就不能訪問這個數(shù)據(jù)庫了,我覺得只適用于小型的應(yīng)用,對于大型的系統(tǒng)就要找其它方法了。?
?
?
老馬嗖嗖 2007-04-30 13:03?
SQL Server 2000中*.LDF文件是什么作用
?
*.mdf是數(shù)據(jù)文件 ??
*.ldf是日志文件 ??
當(dāng)數(shù)據(jù)庫出現(xiàn)問題時 ??
可用以下語句恢復(fù) ??
數(shù)據(jù)恢復(fù)一 ??
1. 先分離數(shù)據(jù)庫 ??
exec ? sp_detach_db ? dbname ??
2. 加上數(shù)據(jù)庫 ??
exec ? sp_attach_db ? @dbname=’dbname’,@filename1=’d:\sql ? server\...\dbname.mdf’,@filename2=’d;\sql ? server\...\dbname_log.ldf’ ??
?
?
老馬嗖嗖 2007-04-30 13:04?
/*--特別注意?
?
請按步驟進(jìn)行,未進(jìn)行前面的步驟,請不要做后面的步驟?
否則可能損壞你的數(shù)據(jù)庫.?
--*/?
?
1.清空日志?
DUMP TRANSACTION 庫名 WITH NO_LOG?
?
2.截斷事務(wù)日志:?
BACKUP LOG 數(shù)據(jù)庫名 WITH NO_LOG?
?
3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會減小?
企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務(wù)--收縮數(shù)據(jù)庫--收縮文件?
--選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了?
--選擇數(shù)據(jù)文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了?
?
也可以用SQL語句來完成?
--收縮數(shù)據(jù)庫?
DBCC SHRINKDATABASE(客戶資料)?
?
--收縮指定數(shù)據(jù)文件,1是文件號,可以通過這個語句查詢到:select * from sysfiles?
DBCC SHRINKFILE(1)?
?
4.為了最大化的縮小日志文件(如果是sql 7.0,這步只能在查詢分析器中進(jìn)行)?
a.分離數(shù)據(jù)庫:?
企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--分離數(shù)據(jù)庫?
?
b.在我的電腦中刪除LOG文件?
?
c.附加數(shù)據(jù)庫:?
企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--附加數(shù)據(jù)庫?
?
此法將生成新的LOG,大小只有500多K?
?
或用代碼:?
下面的示例分離 pubs,然后將 pubs 中的一個文件附加到當(dāng)前服務(wù)器。?
?
a.分離?
EXEC sp_detach_db @dbname = 'pubs'?
?
b.刪除日志文件?
?
c.再附加?
EXEC sp_attach_single_file_db @dbname = 'pubs',?
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'?
?
5.為了以后能自動收縮,做如下設(shè)置:?
企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--選項--選擇"自動收縮"?
?
--SQL語句設(shè)置方式:?
EXEC sp_dboption '數(shù)據(jù)庫名', 'autoshrink', 'TRUE'?
?
6.如果想以后不讓它日志增長得太大?
企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--事務(wù)日志?
--將文件增長限制為xM(x是你允許的最大數(shù)據(jù)文件大小)?
?
--SQL語句的設(shè)置方式:?
alter database 數(shù)據(jù)庫名 modify file(name=邏輯文件名,maxsize=20)?
?
總結(jié)
- 上一篇: maven jar包瘦身
- 下一篇: mysql 瘦身_Mysql瘦身方法_M