压缩日志及数据库文件大小
, K- ^, _$ |" S
3 S9 x# V% n1 \$ E I6 @. {3 C; o6 L0 s7 b$ w- X% E8 F3 ]' ]
3 F3 ?+ i7 p7 l3 I9 a* O
--下面的所有库名都指你要处理的数据库的库名 6 E7 l% J5 c4 b8 r# ?# ^6 r
- ]1 g% N3 Z3 V. n3 I
1.清空日志
$ ?% ?5 u! I! | DUMP TRANSACTION 库名 WITH NO_LOG
( a1 F" J2 v0 J: |7 m% O o0 R, o7 h+ \: X; B+ `( n
2.截断事务日志:
) @5 L5 l* i7 ]! t1 f: ^ BACKUP LOG 库名 WITH NO_LOG
9 [" f4 ]/ N, {& T8 h, s/ [+ O5 ^5 A% c9 L
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
- e" O/ f! X# N% m7 A( \+ W* O' Z 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
9 Y( o% T7 M5 ^2 \4 P: H --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
( y, E( Z$ {" G& b1 b/ P! I% G --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 + ?! X7 P6 |* `0 h8 k
9 c+ h! b9 Y# u( ?
也可以用SQL语句来完成
5 T7 [* a P. J; q- b% U' Z --收缩数据库
; n; h) h# P6 x" H- P DBCC SHRINKDATABASE(库名) $ F2 A5 @) h0 ]$ X% t
8 P2 M/ z/ B( J# g, Z4 L ^* G0 i
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles & ~/ F! Q$ w* P1 p7 }' d
DBCC SHRINKFILE(1)
6 n2 \' l0 Y S' `3 W2 ?; I
/ g. V, @6 h: R/ E 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
/ @. I2 C0 ]/ m- q8 ] a.分离数据库: ! N8 h) e' C4 ]
企业管理器--服务器--数据库--右键--分离数据库 5 ~- g* N# K, h
' `2 J5 M2 i3 Z$ R. t3 s) T7 a3 M" b b.在我的电脑中删除LOG文件
. A7 o2 Q, O; L
8 V2 j( x) h% H2 o: X6 a c.附加数据库:
, R% t7 D7 j4 }1 K" C 企业管理器--服务器--数据库--右键--附加数据库
4 c1 d! U" U, i4 H
$ l5 `6 P M2 h1 V+ y- l9 V 此法将生成新的LOG,大小只有500多K
* U( `2 ~8 x9 O8 Q2 ^) r& V6 e+ ^/ ^. _3 E% S+ U" G4 K6 |. p
或用代码: 7 n/ j6 ?/ ^- L# B0 j5 l1 s5 c6 ^
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
# C% P* W; [' R- Y
( D4 X7 O5 t! u( @ a.分离
& B+ H, b5 l: t6 K6 S6 } EXEC sp_detach_db @dbname = '库名'
. @# q4 n* X) k- j# G4 N. f8 Y9 L
b.删除日志文件
6 M* Y! p. }- r. [1 |- ?
2 S2 L( t5 G. h/ k, @7 W c.再附加
0 s. J, B) c9 T EXEC sp_attach_single_file_db @dbname = '库名', ) j1 @* W* B, ?1 F9 c2 U* y
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
; N: P9 k2 A/ {+ Z) x. T7 g- a. l- Q
5.为了以后能自动收缩,做如下设置: y4 q4 ]0 M% ?) a! K
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
+ r, B% Q+ N" _ D/ G) M. O) z" b% N: n. G
--SQL语句设置方式:
* \) g3 B- N: U }# t. J) m EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
3 i9 w9 N2 U/ K# j6 y6 Y
0 {! x# }, ]3 q9 j4 a* J w 6.如果想以后不让它日志增长得太大
0 y% \1 [* |1 [8 E! K9 i 企业管理器--服务器--右键数据库--属性--事务日志 V0 @1 c7 z5 Z A( Y
--将文件增长限制为xM(x是你允许的最大数据文件大小)
4 }- d" S' @3 W8 y! w( f9 T" @# K& |5 E9 u
--SQL语句的设置方式:
) i8 j/ B! t4 ]6 P3 l+ g alter database 库名 modify file(name=逻辑文件名,maxsize=20) 2 q% L3 s: _2 Y: L. K) d
---------------------------------------------------------------------
% T2 t* m3 H2 w, f5 ]SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) ! o3 ?% d% t- a7 V! h8 N
: P) Y, N( n6 ~( U" S" e5 R! }1 m*清理历史记录
1 b1 k5 `% E+ V7 |( V* o8 }% V6 F1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
3 |0 { w" J f" Q2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
# ]/ ^* e% ~ {' D. c' `4 ?如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY , A& y0 g, V4 Y2 G* d5 B0 r2 \
w( ?5 f- Q' j$ B1 {
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], 1 c0 S& v4 ^# E# O) @
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], + K6 Z. l1 i" f/ A& }
直接将x改成其建议其最小值y按[确定]即可压缩.
7 Y* ?- ~8 [, w8 c9 }1 P/ K, Z先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
) n* g, B; i, d7 C
2 X! C2 y2 H2 S2 h* A7 e3 @总结:其实也就是两个指令就可以完成了
0 Q- A$ [' r; P7 A' DBACKUP LOG DateBaseName WITH TRUNCATE_ONLY ! a+ J# O& S' Z, z
DBCC ShrinkDatabase(DateBaseName) 7 g! p9 e3 ^: a) v) L
6 o5 g+ T3 F" T8 `& H$ ]- U" \*设定数据库自动缩小, 默认值为OFF
% Q$ p7 _8 @3 V* {方法1. ! i Q% k* A! v$ i" j( ` f0 H8 y
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON ( k9 p& R' q8 T; Z) r$ N. n
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
/ @! t8 }- f9 E8 w" i方法2.
% N* i1 U/ y' X+ S# }& p在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
! I; n+ P* q B$ K
/ B6 x6 M" A1 q& q0 Y2 B$ r* `& k/ ^8 O: w6 x0 S1 y G
SQL SERVER日志清除的两种方法 * {; z4 x1 Z- l
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
8 R' C% S& H4 I
8 h. e) w, ^3 M 方法一
: @6 Z$ G- ^) t+ c& o. B
5 p7 Z0 e1 S [( N" ^ 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 ) v0 n" Y1 y' \ a
# s' ]% U: c2 F 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
0 {7 e& V/ Z/ ^* c8 X
9 _% O1 z: F% H" } 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 + ]3 d" \9 P+ q
( d, L! z0 W" \: T: u$ w
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 " G+ F3 } B6 W. A4 Q* X% }0 i
0 [+ }- n1 I5 B. z# N k6 T; F Q( u- x* ~2 X" J9 W
8 {. V* H! o* M- ^, r
8 F7 d* T4 \2 w* S) SSQLSERVER中讲: 5 w" B6 J0 N( T4 x/ F
8 f) R& w$ |8 U3 QBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 , `0 F- h7 `6 k5 `' c1 l
6 N: x# P- g& Q. s( F/ @2 n! o但我在数据库中进行上述操作后,事务日志还是没有改变。 8 e) _) n0 t9 @5 s& t: c
3 k. B9 r$ T$ Z x7 V3 F5 g5 @. ?) a2 X& S
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
# N% k6 u c. ]在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 ! T( a; Q" ]/ X+ Z5 _
+ K; r2 J) U3 f7 e9 N6 h: w( F5 t. W0 K6 C
老马嗖嗖 2007-04-30 13:03
: n6 x p' T. C+ [) n4 Y6 ^" a" v# dSQL Server 2000中*.LDF文件是什么作用* M/ Y D F5 H% e# M
6 X! B9 L- B9 z" h1 f& v0 _8 x
*.mdf是数据文件
0 q1 R# T( z0 W) l% g. k*.ldf是日志文件 ; J8 H1 n7 O! I- U3 m
当数据库出现问题时
) ]6 l8 G j7 P' F" L5 @/ G# H可用以下语句恢复 5 n6 l) A7 U1 D( h0 d' P/ [
数据恢复一
& R! n- z' M5 {6 i) g1. 先分离数据库 5 O0 n, n8 B/ ?- x H
exec sp_detach_db dbname 2 B9 N9 {9 f$ E; `' C/ g
2. 加上数据库
( t& W- R8 |( o) sexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
: e& a9 z) d2 X9 v1 Q9 v5 Y
! t+ F; D2 D9 Z8 p
6 h$ j# `6 @9 w4 W& N( J" P老马嗖嗖 2007-04-30 13:04 ! Q2 c, ~. x3 _ l. `
) e9 k. L7 P a$ Z1 K7 }
+ I) D: J2 h0 n1.清空日志
- j ^6 {8 s( ^/ h/ H4 ^8 bDUMP TRANSACTION 库名 WITH NO_LOG
% M" ?- i3 J% U2 Y5 L: [$ z3 R1 R! E/ P# K+ V
2.截断事务日志: : p- n5 R" {: X. E4 _# o/ E2 l
BACKUP LOG 数据库名 WITH NO_LOG
1 |9 P, l t: T7 E2 s5 B5 B/ h
' |+ T4 H' o# {, _! R& \) b% `, M3.收缩数据库文件(如果不压缩,数据库的文件不会减小 & e+ [ i" T5 w0 _' x! K, v
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
& V; A, _7 C3 H! [7 @" N( W" V--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ) Z. x( Y5 [6 g h
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 % d$ a8 p2 o$ L* l9 f& ?! p" R
2 k9 r n- ^7 G+ Z$ e5 |0 Q也可以用SQL语句来完成
, T1 S5 \+ l6 p6 |( k--收缩数据库 / Y" c/ Y8 Q8 X9 N: H( Z
DBCC SHRINKDATABASE(客户资料)
) M0 E) H# I) h) {0 B7 L) T
8 k U4 l. y* m4 |--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
+ w( J6 k* f1 N" O( M( aDBCC SHRINKFILE(1)
* Z. M7 E# S1 u% E9 i0 V ~: H: p" O* m* C- r6 n6 J
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
+ l: |# X/ `' j& m* P# x ~3 I/ va.分离数据库: 6 c2 c# U5 }2 L
企业管理器--服务器--数据库--右键--分离数据库
; s9 U' c+ W) r+ P! @
% p& B0 m* ?* v3 T3 A' db.在我的电脑中删除LOG文件 - x1 V! `- \1 E+ k( T
: B) n2 o) C1 ]$ n0 l4 y2 e
c.附加数据库:
1 R& L% b/ @% x企业管理器--服务器--数据库--右键--附加数据库 8 u0 T6 S' g' h/ Y8 @# w' S. d* l7 ]
7 |0 }7 R% M5 {3 B7 B" B8 f7 }此法将生成新的LOG,大小只有500多K
/ f: S$ K( n& o6 s% j& ]
8 l2 H6 O1 Q0 D% @% J7 K或用代码:
' s7 r7 A9 b: ~& r1 l1 V下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
4 `* ?* A5 z) ]* U: x a% p7 |9 N+ _ Q& X$ d( o/ ^; C
a.分离
" F( v9 x4 B1 qEXEC sp_detach_db @dbname = 'pubs' : G& R1 j% W& N$ u* m* M
6 D4 _' s- M% G: {% [, D- i7 }8 `9 B6 b
b.删除日志文件 2 Q# |! A r# v9 e
. R8 z/ |+ ?5 S
c.再附加 ' _, t% m+ S4 _4 ~1 r R7 |4 x# i
EXEC sp_attach_single_file_db @dbname = 'pubs', & b$ f( T% E9 L- P
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
$ X. u/ a/ n* N7 _+ f) Y0 i# m! x. m- @
5.为了以后能自动收缩,做如下设置:
' j* o7 Y" z! c9 c# u; x企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" / v; x% Y% d3 F, J( N0 E- U
# x: b% ?9 z9 T: r$ w* w
--SQL语句设置方式: 1 V) G2 H; t! c# W
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
1 Q; Z3 U! M: c( G% b% {5 |( a( [5 I4 v# p: ^0 p
6.如果想以后不让它日志增长得太大 ; w' }" K8 A: @$ c
企业管理器--服务器--右键数据库--属性--事务日志 - n- Q' C K: ?) O6 z: {
--将文件增长限制为xM(x是你允许的最大数据文件大小)
2 a+ c& w s4 B! X8 B0 U( c" z' n8 X4 @
--SQL语句的设置方式:
5 H9 [, o: J; u6 e7 }alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 1 e6 M1 j- g, ?2 O1 I
- X) C& l$ i& B& R/ Y4 k& |2 ]
vxfire 2007-08-28 14:19
* N u1 r4 B6 R4 Y我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
0 ]/ [9 E. h1 _$ b% N6 x+ c |