压缩日志及数据库文件大小 ) ^! E" K, U& R( J0 h- m
% c, G( H: o. w) j1 J! u: e" G0 n9 z- G0 i5 M( L
, x4 }6 }+ u+ |: H0 K& i
--下面的所有库名都指你要处理的数据库的库名
] p4 p( l' d3 {# L
$ f) e' W1 ?0 [! J( w* _! i+ i# N 1.清空日志 ) t) ]0 K( o! \( y, m) x
DUMP TRANSACTION 库名 WITH NO_LOG . y* ~# X6 h% {
( M9 b- T4 J; \* C( E 2.截断事务日志: 7 N7 s! v/ M6 g( A* R5 o
BACKUP LOG 库名 WITH NO_LOG 4 ]: L3 I( |" E. G! w% w( V
* @, ~5 ~" c) z- d% _4 U, c( L 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
4 [$ |8 _7 x+ W' t$ n; ~ 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
1 L6 n2 T- D* t+ a& P& _5 f --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 8 J! E7 r$ a7 _; A7 S; w2 o ^
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 0 I1 |( k2 J" X: S
8 c- j; j8 k' W5 k4 o9 P9 \
也可以用SQL语句来完成 ' x" r0 m) V- k
--收缩数据库 ) Q' o) A/ ^3 h: W2 d; ~
DBCC SHRINKDATABASE(库名)
5 O: j; W1 N* i! c' |( p: m2 m3 {4 g, M7 n: s8 J3 p, R
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
8 Z% j# z) X' t+ R) W DBCC SHRINKFILE(1)
( e2 ?2 N3 W5 g2 ~8 Y s9 W9 B; e' Y& r5 n
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 5 u4 r# x- w5 M0 z0 Q3 z. c
a.分离数据库:
4 ^, ^/ T& G2 ^- h; [ 企业管理器--服务器--数据库--右键--分离数据库 $ h5 F1 W! c% E2 h+ w G
. y( ?1 {* k% ]- ?( \ b.在我的电脑中删除LOG文件 1 F# D) W m. n3 l
$ M- y& k- P( }) f
c.附加数据库: 6 S: w+ l1 k+ J- H0 b
企业管理器--服务器--数据库--右键--附加数据库 ! g2 L( F1 o3 @* u/ q1 q$ G
6 k1 `5 G2 @' [; D- [9 h 此法将生成新的LOG,大小只有500多K , \( t( [, S* @% w' D
/ w9 t. ^; c7 Z5 W, l, N, ?0 ~
或用代码: 4 t# M5 y# Y- u. v% l* _( v! F! ?% w
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
: O6 `: q; C9 g; ]- z5 o3 D. z) v- R6 i
6 S' Y0 I# X& n* z) C a.分离 * _( A$ c8 U! U
EXEC sp_detach_db @dbname = '库名' 6 F# K! c8 [/ T! a* P# a7 E# x
5 [, M8 C$ h5 P' k b.删除日志文件 " } _ E% d" ]' z9 z% V ]& u
+ V! Q4 ?8 H" F8 g9 ?& h7 G c.再附加 1 v+ d+ J7 n- U3 @9 Z* n
EXEC sp_attach_single_file_db @dbname = '库名',
8 J. h6 u& U) M @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' 6 I" i& T5 p* O9 [# _
9 O+ ~" l0 B* Z
5.为了以后能自动收缩,做如下设置:
3 b, c; }4 O& o 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 8 H& I3 Y( c$ c/ \# N7 q, d( R' ^6 ~
" q1 W& [0 K$ i' | a$ t$ n
--SQL语句设置方式:
& v- Z2 d* h& X; f9 ]) C EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6 x0 c/ L) U: p$ h3 t* b, o) d* Z0 [) Z# I0 n+ Y$ e
6.如果想以后不让它日志增长得太大 ; ?+ B+ {& {* y+ F8 g9 u2 u$ ]
企业管理器--服务器--右键数据库--属性--事务日志
2 [3 w% V% a4 i+ x7 ~6 A! M$ A j --将文件增长限制为xM(x是你允许的最大数据文件大小) 7 l1 S: Y. K& M5 Z+ ?
* `! V0 ]) V$ L; A g --SQL语句的设置方式: 2 y+ E; P( ]; p% ?& y- Q6 F; Z- F
alter database 库名 modify file(name=逻辑文件名,maxsize=20) 0 p4 c' S# ]6 U: K8 a
---------------------------------------------------------------------6 g. i, C- T- Z+ v' x
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
/ n. u* J/ {+ y+ H' Z, ^: a0 M& S: @- D3 u# ~3 F, R
*清理历史记录 . s" a9 o2 R9 T }+ x7 o _2 t/ K
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
* y2 N" p- p$ A8 S; }& T4 y6 O2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY $ Q4 @5 S. Y( P, R7 f
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 2 _4 W" \3 z: ^6 I" w) t
6 f& a+ }) r/ j' X
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
/ x4 | {. |4 U C# ^, t+ h点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
7 ?. b3 h' [+ I# `( K直接将x改成其建议其最小值y按[确定]即可压缩.
0 {9 ^; i; J- D1 H4 a/ ], S先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
6 E" T: v: j9 A- O7 b5 g% S* N0 ?0 T+ S
总结:其实也就是两个指令就可以完成了 : s: P* Z/ ?3 _% t" C; D d: ~
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
0 @7 K8 Y- p$ b- }) LDBCC ShrinkDatabase(DateBaseName) , s& I5 V: A1 F
0 b9 \* D$ Q$ N& O% L
*设定数据库自动缩小, 默认值为OFF
% x* M7 m0 D$ O m3 M1 j方法1. " P/ D+ h$ G; E: [6 B
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 2 a! U' e! T3 K$ b6 I
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON ) o5 l* _9 v: I! P
方法2.
! ^+ V& f& c& `0 u |8 E$ Q1 k& J' y在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 7 A6 `$ S) g# e3 y! l( s" }
4 O4 t1 m9 P; E* p7 g/ J
: l3 S. H7 c7 @8 _) A9 |% v SQL SERVER日志清除的两种方法 3 y) K0 c3 e6 Q7 u. I0 A! d) u
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
5 M( p- o* b8 _
* `! k- J! w1 t* q n 方法一 2 g; p5 o3 d* S* S
* W3 e' ^$ {1 L1 V4 s8 F9 O2 _ t
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
% e( i8 U. P, L L9 u/ K, U
O6 {: V+ Z+ q' R1 x0 v/ r9 l 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 6 C, p8 h( a4 t: ~; t* d: T
/ C( @1 g& T. h! H! S! n 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
. R z1 j6 [$ Y. g5 r Y% H" J! f% R6 m3 @& U S1 u
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
" f9 m, K% o' `
% f$ [2 P# m+ \5 Q# A# L& s/ q J* q& N' F' Z
" l) X2 Q3 l% y* d8 h1 R. Y2 m: ^, o. A3 m- O
SQLSERVER中讲: & i; j: N+ Q+ ^4 M
6 C7 y4 ^5 S& f8 gBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 6 \$ E1 A% _- J% f
5 }9 s6 {- o9 V+ K1 C0 i- ]
但我在数据库中进行上述操作后,事务日志还是没有改变。 * n' h1 D9 w* r4 r, N
7 ?1 I) }( T' P' f5 j
0 U" j- ~8 x- t, a, y/ x
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
0 S, b. O ~$ v0 H4 U在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
* B! ~2 C+ s# P$ ]8 r6 K) D$ q
6 {: W2 z7 o) R' n) b! h: j1 F老马嗖嗖 2007-04-30 13:03
+ Y) |' s/ |8 Y& T0 ~! ?( U- _SQL Server 2000中*.LDF文件是什么作用
9 Q. |3 `3 |& f6 p* K& D, A
) i3 P& p$ G6 \8 N2 N$ U8 o*.mdf是数据文件
9 {$ r9 A* X7 l+ }*.ldf是日志文件 + b) o4 [$ U/ G% W8 x' y
当数据库出现问题时
0 Q+ e7 r7 g0 q5 N7 s可用以下语句恢复 6 z+ I3 b9 H" B. K) j# T+ Q
数据恢复一
9 z) X; e8 h- |* S: S1. 先分离数据库
4 \4 g" D `% p" K+ |; Uexec sp_detach_db dbname 3 F* T1 o& I9 e
2. 加上数据库
, b9 @: f" m5 ]7 P3 Nexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ + r7 I5 F. s9 n9 ]: L( ]; B3 [
G6 Q0 ^% X6 Z5 |
& C% f( `- }% d! F6 F# ~& w老马嗖嗖 2007-04-30 13:04 1 H, E$ @. s6 h7 P8 [/ x
% q) E5 f' a/ j9 [
, k# |1 w+ A- p1.清空日志 2 i* g! S3 i2 ~0 P. g
DUMP TRANSACTION 库名 WITH NO_LOG
" t1 C; _) j2 R2 b- P: S" z; [" I4 n
2.截断事务日志:
* {1 x1 s0 j& {! ]BACKUP LOG 数据库名 WITH NO_LOG . J2 P$ |7 \$ g0 H
6 D$ ], O! G, o ^$ G0 Q3.收缩数据库文件(如果不压缩,数据库的文件不会减小
. {% C: s+ m K W9 A3 }( k6 X企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 ( {# ?! }. K7 u2 r$ @ w% Z
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
! _/ s* z/ T6 u b6 j) X--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
4 ?; c* W1 C3 @, R
) a" \9 P1 E! W9 i也可以用SQL语句来完成 - B, e. h' Q7 {6 i
--收缩数据库 : X) j- ~% f# D4 Q
DBCC SHRINKDATABASE(客户资料)
. x" ]; } D) n) Z" t* M; f! ` q6 \3 L$ R$ a* E
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles ( _/ y: Q$ }, e5 `% I# E5 `# t; u) a4 |
DBCC SHRINKFILE(1) ; l8 Q4 l4 k" {6 z& ?0 B, J
^* _- ?4 S) Q9 s: l0 |& z( I1 Z
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
7 d) W& T$ I! Ja.分离数据库: / u' l- l# D3 ~% K/ @: s
企业管理器--服务器--数据库--右键--分离数据库
" @3 l5 o4 O1 R4 @4 V( S! Y
' H3 h5 N) ?' _4 ]1 Gb.在我的电脑中删除LOG文件
; d* k8 x/ t6 Y4 ]0 \# @" |, x9 V4 t+ `" P4 E
c.附加数据库: ! s7 \: T- t, x
企业管理器--服务器--数据库--右键--附加数据库 & B' m' C! a& s3 d1 H5 X
( M- }- M# p# A( o: H
此法将生成新的LOG,大小只有500多K ; Z) d' ]! v( R& \; Y& L! S& t
# c- I8 B1 j) y8 Z或用代码: - l8 V% @ x" [4 x; S3 I
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
5 p- N8 x, H2 P8 K
) t4 U# @* [$ y8 }- }! Ka.分离 0 J# Q6 |: L( R( {$ S# J
EXEC sp_detach_db @dbname = 'pubs'
$ l$ Y, q8 ?6 M& m9 Y( }" z- |$ ?
b.删除日志文件
6 O# M: {: A `+ u' m) H, S1 n& q( _" x$ N
c.再附加 & V/ z& y4 L7 g+ F
EXEC sp_attach_single_file_db @dbname = 'pubs', & X' a7 m% L% D# G, r) u y0 F
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' / Q. t4 P; E3 y4 l' @$ o P- p
. d4 u3 ?/ J- u5.为了以后能自动收缩,做如下设置: ) d1 J! d* |! a" o$ r
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" * P; |3 L1 f: v. |" Z
! L" K# Q& p. Q T
--SQL语句设置方式: : a* F5 D* D) t" a
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' + W3 ~. P* J# Q+ Z
0 k1 o0 F8 |0 K% T3 N( c6 q9 C
6.如果想以后不让它日志增长得太大 4 n% S$ T+ L6 B1 c: P, ^+ M- @, C* T, ?
企业管理器--服务器--右键数据库--属性--事务日志 ! `) q; a" z, C/ g# _0 T
--将文件增长限制为xM(x是你允许的最大数据文件大小)
' f ]/ g! U g N: n* ?/ f: P& d o. g8 K6 s n* ~ g
--SQL语句的设置方式:
- z' ]9 t$ e& C/ l' o1 balter database 数据库名 modify file(name=逻辑文件名,maxsize=20) . \% e$ `& m7 g3 ?6 E: b% x) g: S& F
3 L2 U& h# X0 \* Y/ |, B; ]
+ B |& E3 v: Z' c* X" k& {
vxfire 2007-08-28 14:19
9 B N5 z* p6 }; a我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 & w7 m4 J% g* i! [5 e
|