压缩日志及数据库文件大小 : y: N; R' z0 i( ]" o- F0 \ ]; P( J
; ~% `2 K9 k/ _5 n, k
" i ~" ]' u6 a5 ^7 u0 i
; n! U$ n, P5 s, P. M --下面的所有库名都指你要处理的数据库的库名
" L0 P% E2 u9 q# V* z: Z5 \
- [- j1 B) {# z( |* P/ J( u# u 1.清空日志 $ A) k4 J3 r6 }, X8 B% W1 d3 T
DUMP TRANSACTION 库名 WITH NO_LOG
V9 \! A" z/ M% t. ~ X; s# Y; Y* c# X
2.截断事务日志: 2 i3 W8 \3 d% _1 g% d" c# U7 L" G
BACKUP LOG 库名 WITH NO_LOG
& ^! P, ^2 Q3 }6 l. z# }8 c
/ L7 b$ I% J$ n( m5 e' t8 w 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 7 D/ j7 k# `* `1 A5 E" O& D' o) I
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 0 R0 [! m! C& m1 C$ m6 }
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 5 q8 ?' u- ?- y [$ O
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 , S |( c" O. ?0 X. u8 W V
. `1 y W, L9 A8 _, w 也可以用SQL语句来完成
9 H$ E% e) k1 Q --收缩数据库
, o6 u/ t# d& i7 k DBCC SHRINKDATABASE(库名) 3 s" p, e0 b; Z8 c+ B
) B3 M4 u9 h& J$ }: S
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 0 L0 b2 w) u# B
DBCC SHRINKFILE(1)
: s8 b! o _3 C( P
1 j% ^$ T5 V6 N; f+ n 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
3 k! t( P' T5 B0 T- g X( F a.分离数据库: 4 k( k' y" Q) T: b% [. D; [
企业管理器--服务器--数据库--右键--分离数据库 8 M: m- i: i+ G( ]" n7 N
. c6 E! f+ M; H6 ~3 N0 G: D9 h
b.在我的电脑中删除LOG文件
) p! I$ ?4 p0 N7 ?! A! Z0 I1 v
+ C5 T8 m4 s6 K% C' } c.附加数据库: I3 A" F! `: ]0 T: n3 H0 T
企业管理器--服务器--数据库--右键--附加数据库 , g+ X6 D2 ^: {( L; q0 b
8 L5 M1 S, ^/ ]1 a# B: U 此法将生成新的LOG,大小只有500多K
3 q) K* f, q x2 r( R F/ G8 y- r& i; Q' l
或用代码: - v2 `7 w7 F1 X
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 % P7 D6 w* f/ j! Y3 r' R5 _
& K8 ?# E3 W) M7 O0 B
a.分离
2 v! |; k0 ?/ G5 G. h$ n; y EXEC sp_detach_db @dbname = '库名' 7 k* s! x; @9 E. Z6 B! q/ X; o: U% q
; J/ l. h7 m7 G' i/ j
b.删除日志文件 $ J! k1 p* V( Z$ _% B0 h
/ F, {0 w4 H O c.再附加
9 p0 Y4 v. ~' f9 `5 A& N; S9 d EXEC sp_attach_single_file_db @dbname = '库名', 8 @' l7 Y7 y; Q& y; H6 Z
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' " K2 x3 ~' _! X* b( j1 H
6 Z" ~& q: L/ n. t: z 5.为了以后能自动收缩,做如下设置:
8 q, h( |( D- D$ \2 l, N( Q 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" * \6 u0 h) x# e8 c* n
9 |9 D& A+ g: @$ A, ?# _/ {
--SQL语句设置方式: ( _" F# d, J6 n
EXEC sp_dboption '库名', 'autoshrink', 'TRUE' ( ]" U V" h" M* M# k3 B
0 L, t7 M8 Z, u" l
6.如果想以后不让它日志增长得太大
( r1 A, N; F0 x( v. _: X( d" Y 企业管理器--服务器--右键数据库--属性--事务日志 , y8 E2 i. c2 z0 V3 [8 L- d2 p
--将文件增长限制为xM(x是你允许的最大数据文件大小)
. g* w2 R/ V4 V( U( s7 T9 y z9 ?5 u
--SQL语句的设置方式: ) W% X# u+ a7 y! O8 Y$ {+ N
alter database 库名 modify file(name=逻辑文件名,maxsize=20) , u$ D2 t" H" z6 g
---------------------------------------------------------------------
; P7 f( d1 N4 I8 D& E) |SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) # Q5 ^, f+ ]3 I' Z& \. {: ]
3 q* O9 I. C L: b$ a
*清理历史记录 * B s) ~4 ?; _' S& e; Q$ S
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
+ I# a8 h( |4 \' r3 ^6 ^- x% u2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
$ C; g8 T6 ]& Y, t( f5 A如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
/ A- D8 \! f2 f P% w: P" u3 h3 y- J" S* {2 X+ z
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
' \2 B9 f$ [* y' ?0 G点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
- ]* M! `- J/ |+ t' L( C直接将x改成其建议其最小值y按[确定]即可压缩.
7 v. g. d' [/ q5 a5 A( Z. E# X先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 6 o, ?/ N6 D+ A5 u1 D% t
$ a' `/ U2 [2 @1 E7 K; j5 m$ b
总结:其实也就是两个指令就可以完成了 . s3 [, D' H7 g" f4 M
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
2 _+ _. ?. R' ]DBCC ShrinkDatabase(DateBaseName)
8 T$ d2 b0 ~, h# G# [4 i; @
* y7 F3 c7 ]1 n b( d5 e/ t*设定数据库自动缩小, 默认值为OFF 3 k5 d( D; H) H/ V0 s4 X3 b7 Y; V2 ?
方法1.
1 o9 p1 u% Z: r( m; ^' gALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
( I( ?" ]) V5 i- D: i! b如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON " o2 f0 Z& U. j5 U& \" n
方法2.
8 |9 F+ e! e9 v: c在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
' j& y) W2 c. C$ D2 t6 q& E x" g/ f
! V* A7 H' f" e' Z, t. A6 P( @
& N9 u" a* b/ |' W3 F% b8 K SQL SERVER日志清除的两种方法 7 B2 a! K7 _! ?4 }$ p. {( V
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 9 |4 v7 B! U) _
$ C1 H7 L1 f7 l; e& x! b 方法一
) I3 v; j% { m/ Y9 M' E" S$ M: r9 M' z' S* t, r; I( J
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
* _! k4 o. Y3 Q/ D
) p* H& Q& w3 ] ~+ [3 Z 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 ' [5 i) q8 o6 S2 Z* s
5 ~6 j' n# Z' {% m, L0 I% Y
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 . l( l, x& p p; p! B" |$ N
& o# f! f; r* m* H0 _, @
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
$ U" H" n* t6 w- M! T! p6 Q
, D0 p5 i' Q8 r$ M& U; L- \
, n9 ]% i% T& b0 ~( y- j! [
/ V8 U( D/ @) R: ~5 l; G+ Z" ^8 Z5 k* o2 _
SQLSERVER中讲: 4 V1 @5 X% V2 H, x& |! n4 F
' o8 S5 p; |6 W+ }: x; A
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 ) p) P; ~% ]0 s6 d( G7 h# n
$ s; M' F2 b j. H- U7 ^8 h但我在数据库中进行上述操作后,事务日志还是没有改变。 3 i6 q4 N' O; [6 `, v
1 D: z+ K8 R9 \' n/ S9 z
# T2 J: R/ r5 a3 L
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 0 i/ Q" ^ X* j& z9 Y" I
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
7 X+ d* [' a% L) T* g' H$ G$ c
' s2 y9 d$ x0 [$ a5 ^/ N+ Q
! ]' G- h Y' A8 o老马嗖嗖 2007-04-30 13:03
4 k4 |* D, V) \SQL Server 2000中*.LDF文件是什么作用" Q p. d5 y* v% t6 z
|' L) k9 t: m- ?8 {& l
*.mdf是数据文件 % B9 T5 w$ `) n$ S
*.ldf是日志文件 7 V' p& ]/ T) M" G) \
当数据库出现问题时
) m; e6 S5 D) J; Q( q可用以下语句恢复 7 t$ c: h* O0 G
数据恢复一 " X5 p/ H) _* D& o6 Y; X9 O4 o
1. 先分离数据库 8 R- L4 e3 W* K+ `" i
exec sp_detach_db dbname
h% V, T5 w, |. c A9 l4 a2. 加上数据库
9 m1 M. {' m$ \* m$ U; H2 Oexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ % d a* P2 w0 H
0 N( }+ V: G. w4 T& C$ M$ d* g7 h
5 ~3 M- D5 D, K
老马嗖嗖 2007-04-30 13:04
B$ \% g" d1 u) c/ P3 V! x
8 d3 |& P* d7 `- ^. @
$ P6 z( g6 _1 B0 }! }1.清空日志 2 q8 Y+ {2 f8 }8 d+ P9 M9 @" \, h
DUMP TRANSACTION 库名 WITH NO_LOG
1 t5 W |9 Y; n) F% b+ o& g% |: J+ H2 ?/ N" v6 |; ^1 \: L' R) w: h
2.截断事务日志:
' k( V+ O$ z( L2 J) A4 A' u+ YBACKUP LOG 数据库名 WITH NO_LOG 7 V$ P( B8 [3 ~3 ^$ O
% y5 z" ?7 m# J3.收缩数据库文件(如果不压缩,数据库的文件不会减小
/ ]9 J( B& i+ j. i8 L: h1 l企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 3 x' y- _- S9 Z- ^
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 & b4 @9 d& C) s$ A9 a! j8 l( M
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ! o/ v2 }. R/ `: v, q. }( ~3 k6 ?
& ]7 g2 p$ S4 S8 t( n0 c) k2 q也可以用SQL语句来完成
. X# ^, ]2 K) D$ g/ M! `, [) s2 R; P--收缩数据库
( |' J2 k4 T1 F$ }DBCC SHRINKDATABASE(客户资料) , V6 E* }! p; }+ G }! J- E
6 k; b0 I# M6 u--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
+ d$ B* A+ v$ [( w5 A% DDBCC SHRINKFILE(1)
' J; M. W/ R1 G* o# G- Y" A" K6 }; R
+ V5 Z; x4 N1 q. ]+ i" G9 _% u! o$ z4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 8 b7 s' o/ R; e: W& i
a.分离数据库: 4 R. a3 {, y; n1 B: f
企业管理器--服务器--数据库--右键--分离数据库 ' h( M$ E( E0 E( `5 C: G2 h1 V
/ g. s( s& ]! V- Xb.在我的电脑中删除LOG文件 v s, n% Y- N! X
# T5 R" @! [: @+ w/ Y4 j' T, `) |& D9 Uc.附加数据库:
8 Y e9 M! l6 r/ w2 ]: d5 z企业管理器--服务器--数据库--右键--附加数据库 . A5 U) a; ^9 O4 P. i
% l$ h: K6 q* q L8 g
此法将生成新的LOG,大小只有500多K
0 g& d. S6 B6 y, U$ U j9 w' P) W1 v( V: R" H
或用代码:
6 p1 I2 P u. j" C; `5 ~4 o3 m下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
2 e* B4 M& y0 U9 H w; H8 a) ^- ]! |( V' D2 E
a.分离 % _2 X6 a/ U4 w( V1 J
EXEC sp_detach_db @dbname = 'pubs'
3 I$ ?; O4 f* g, k4 S8 g8 L8 u1 c0 Y4 E: [' K1 e/ V$ i2 k. W- i
b.删除日志文件
8 Z8 U( E* a P5 v
) `/ l. X: A0 T/ U0 u2 xc.再附加
0 w$ F+ `7 H% M! hEXEC sp_attach_single_file_db @dbname = 'pubs', ' B2 I4 k& P0 N, s0 K8 q7 {$ N
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 8 Z. ]# Z8 v% S# c {3 s/ _/ R
' r" z. F& }, R' y! W0 V5.为了以后能自动收缩,做如下设置:
s7 O) o7 g/ I0 u0 W) ]企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" / K% O* D7 O9 I
8 K# j5 P) _5 F2 y# }* D
--SQL语句设置方式:
' I3 n6 Y, ]- h8 HEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
2 d2 C6 Z" O2 ^$ L+ Q- }" f7 X8 H& Z3 O
6.如果想以后不让它日志增长得太大 $ ]4 @& E X3 Q6 V$ Y( ]: w6 c: Z
企业管理器--服务器--右键数据库--属性--事务日志 . M2 A S* i+ a8 O
--将文件增长限制为xM(x是你允许的最大数据文件大小)
' [2 L, Y7 Q7 k( f$ b i& j [( s. L: U/ X* q# n7 [
--SQL语句的设置方式:
7 {+ d: Q) x! _. o, p7 J! t: ~alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) + K( a1 m v5 C' B1 u2 N
! C; W( |% P3 C$ O* j; I
t9 G( }8 c4 P$ G: nvxfire 2007-08-28 14:19 / u* n6 r7 s; P
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 " \3 x9 K& X# f+ l
|