压缩日志及数据库文件大小 " n& J& m5 x* \' p8 m+ S
% [) |) K; M9 [3 U8 {/ v
2 \ k4 |$ i- t; S B+ \1 i- u& p. i0 X; [3 S
--下面的所有库名都指你要处理的数据库的库名
8 R! B- h a8 S, v' g U- C$ v$ r7 ~$ x/ U6 ~ _, R2 V' D
1.清空日志
% U9 V% t' v2 B1 i DUMP TRANSACTION 库名 WITH NO_LOG
! a: w$ X( s" |# U! |# J# O( H' @- h0 e
2.截断事务日志: m, U) Y% k1 f( F4 P
BACKUP LOG 库名 WITH NO_LOG
" o& I: \" U( x! i
" _, [# a: a9 |2 P 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
. o$ d {& ?9 Q% C- S) { 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 * j. Q2 K4 {. A4 P
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
% _. N0 R! [* C7 F$ G --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 9 p) l) f3 c9 N/ D, Z" T1 v" y
+ G8 R9 ^# ~; ]9 Y9 e8 l+ `' r 也可以用SQL语句来完成 - e4 }5 c4 F9 l5 T/ v) `
--收缩数据库 ) A7 M7 h5 k6 g/ u( I2 [
DBCC SHRINKDATABASE(库名) ! }( O b2 O& X4 C5 ]. Q( U
$ d( ]" w% R2 B/ ^; E
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles + E" C' p! @" V5 g U
DBCC SHRINKFILE(1)
6 A- G' P; E) [' N2 w# k( c4 ?; W$ \$ X- F/ O
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
. x8 i; o- q5 C. t9 {1 ] a.分离数据库:
. g9 R* u1 C5 H% z# g* R 企业管理器--服务器--数据库--右键--分离数据库
) c5 a! _9 _. j. ?- j3 |" w
, i! a8 c4 I+ F, M! R! F b.在我的电脑中删除LOG文件 8 U5 G$ {( r; { _6 C, R$ ^
& h; o2 {3 u/ D( U) k
c.附加数据库: ) O; Z* J! R' c, S& l
企业管理器--服务器--数据库--右键--附加数据库 ' o3 J- V" b& q5 r1 x" G
. ^; E2 r( G$ V- `8 z& g
此法将生成新的LOG,大小只有500多K + |+ b4 v( g% H2 C; V6 y
8 V7 E2 C6 I- k$ g; z# {7 j 或用代码: : Q4 E, O" |" S# r- z
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 + c5 [8 S& F/ x$ m$ D9 l6 _: K
3 R v& S2 F# r' b; f
a.分离 : U+ \- D4 ^( \
EXEC sp_detach_db @dbname = '库名'
+ Z5 h6 S- j4 _0 r2 k: n
' v8 U. i r/ q9 ~6 T$ o b.删除日志文件 ; v3 J- }+ c( y
" y) V/ r; k; t. i% L c.再附加
5 `8 ?8 |7 M8 \" G6 ^2 r# |9 N8 N EXEC sp_attach_single_file_db @dbname = '库名',
* n% U9 V3 D* N' P9 C5 U @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' " m4 k8 d( B/ n6 K5 t: _
- C* r% V! ]4 m& C4 O* @
5.为了以后能自动收缩,做如下设置: - N9 [% ^& f) G1 M0 L
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" ! @$ h7 x% M; x) ?- w
* M7 n0 M7 ~0 V8 @8 a/ F --SQL语句设置方式: " Y- B- |0 Y+ A7 q$ L
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
$ l" n) ^; `& ~
% W/ F# t# [+ r) o0 O 6.如果想以后不让它日志增长得太大
% _. Z* U3 }% l' ]6 {5 e 企业管理器--服务器--右键数据库--属性--事务日志
2 T# s$ x$ H3 Y8 V --将文件增长限制为xM(x是你允许的最大数据文件大小)
* V; i3 t+ y/ W0 j
' ?" @. W6 q- S. s6 W --SQL语句的设置方式:
0 Z, M& r0 Y1 x( b7 L3 i alter database 库名 modify file(name=逻辑文件名,maxsize=20) # ~/ X, s! p7 D
---------------------------------------------------------------------1 ], S: Q" R* Z# G: l' N6 w
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
/ n% R/ T2 ?( B4 z. T! p7 [# a$ P/ }. H1 d& N2 I$ t# |$ {" @
*清理历史记录 1 l4 a6 Y* w' h+ A$ G4 W8 [
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) ) s; t, @( p0 g) o( M# n) c$ a
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
9 U$ T# }, x4 @& z6 w如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY . c5 [6 x' K$ Y$ p/ N3 h9 i# a
9 _' A* r* r8 G) b2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], 1 A- j( _2 p, d6 C& d! g
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
/ {/ Q- q t) c m直接将x改成其建议其最小值y按[确定]即可压缩. 2 n/ v6 F3 P& C# y
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
* w4 F& m1 x' T( X- O; r8 Z
" W T0 W8 b: ~3 L; w总结:其实也就是两个指令就可以完成了
- |1 z$ b5 b0 [# s8 Q0 yBACKUP LOG DateBaseName WITH TRUNCATE_ONLY : C$ P+ l4 i1 b6 B1 O5 j( m
DBCC ShrinkDatabase(DateBaseName)
1 c, Z8 j4 E* s' f7 H2 @% a9 ~6 F6 r5 G
*设定数据库自动缩小, 默认值为OFF + c6 ~9 j' n2 \! u+ H
方法1. / P& e5 h8 W7 T% ^1 g
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON / t( H! d, T- u0 B1 f7 V# P- R% l
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
G4 X+ o% n( `0 g+ Q方法2.
6 I/ V( Y9 F6 t$ ^1 _; y在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 . u6 J* @9 {2 e* F1 s3 f5 U. V
* q5 D5 ^- ^$ I: G4 B% D3 ~ z# v
2 z- ?. y! f5 z* {3 C: ^! C9 Q# J7 ?) r
SQL SERVER日志清除的两种方法
4 x" a1 ], w, m' }* M M 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
" p3 {& n) i& c3 P9 ~
/ ~5 G& ` e$ f; J5 M 方法一
, q. c9 Z; n6 o) B
! |; N6 m8 J" { 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
. g0 y$ o" T5 }4 e3 }
4 p9 n; {5 [" x4 f8 U+ @ 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
( _- c/ r9 K5 I& H& R. P2 R% g' A, w
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 0 I! o( R# Y! i8 e
' q* u! @) a) @& R$ c 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 % s. ?7 J+ d( c4 H* T
% R% m2 H( t$ }9 k1 M- k; |# ~6 H" E: K6 f- S- j
. r& \2 F+ N% V' x
9 H0 G( M8 H! n: X
SQLSERVER中讲: # W# q# E( j& b. K
& y4 q: C. ]; P6 |! d% \* s
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 # C" K7 m. d! ~: n5 H }9 R
; F5 w) C, @- f( r! ]但我在数据库中进行上述操作后,事务日志还是没有改变。 $ g# r! S+ V0 Q) I, R
4 G2 L8 U- N1 S8 y0 q
$ l5 ~( B, U! e, P
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 - \1 G+ z* j! B- e
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
5 o5 j2 T- G* S2 W
$ f5 x1 ~' M; J# m9 p& O2 S
0 \" H6 V8 o2 h" p3 S0 ]* c* h0 r2 j老马嗖嗖 2007-04-30 13:03
0 a$ w3 I4 C) O9 _SQL Server 2000中*.LDF文件是什么作用
1 T# T8 t) \, C& y. L( K m9 \0 i) r& M5 d6 P; k" Q
*.mdf是数据文件
) o7 n, c8 Y- N" G* N" l*.ldf是日志文件
- N) _& C4 o V; q) ?当数据库出现问题时 ) M p( Y' \. p! ]: V1 a
可用以下语句恢复 % C# R! \* E2 C5 |2 h D
数据恢复一
( u9 R8 U7 i. Y; l' j1 N, C8 b V2 \1. 先分离数据库
2 _* }& F2 N) |) j% m$ v7 g7 mexec sp_detach_db dbname
+ ^5 J- L. C3 ~6 ^' k# ?2. 加上数据库
& [0 t8 e2 q+ Z! Gexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
* B! Z2 ?- C8 M( O- e6 B3 j( u% V2 r. m0 a: l! i
9 U3 h* z# ?3 k( ?( P老马嗖嗖 2007-04-30 13:04 ) {5 A* A E9 ?0 K. p0 g
& ]! Q# o3 d, }% X$ C+ I+ J# V. z
3 E: u4 h3 B2 {( ^. l1.清空日志
3 V" H- o* S1 L" A; ]9 BDUMP TRANSACTION 库名 WITH NO_LOG 5 y3 T9 @$ V. h( S; K. g
3 U1 O% s! k; f% `1 j& d7 `
2.截断事务日志: 8 Z! a$ `- P f
BACKUP LOG 数据库名 WITH NO_LOG
% {9 G# {; M( c
2 z. Y& q9 j" y; f3.收缩数据库文件(如果不压缩,数据库的文件不会减小 7 O: \9 h& R. S* |2 a* e {/ f3 k5 n
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
7 b6 n$ `4 A t--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 7 r; ~/ X$ R: U! ?/ Y: g
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
, J5 Y! i$ q% W6 k5 R( e/ k. ]
1 Y. C7 G! u. _* R/ Q4 E6 ^+ N也可以用SQL语句来完成 ) g0 o% e+ m( {7 u$ R% W
--收缩数据库
1 E- U% c8 n+ U* Z" {$ ]DBCC SHRINKDATABASE(客户资料)
( W, d2 ?( G! K2 H J3 N5 n! j; _' e
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
2 ]0 ], u5 f8 V: Z9 KDBCC SHRINKFILE(1)
5 ]: L# U8 G/ f- d
2 q3 t3 H( n, U6 e4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
) t! ~0 d+ `! x! J6 Fa.分离数据库:
& [6 q* h, |/ l5 D4 _ L企业管理器--服务器--数据库--右键--分离数据库
8 P, c0 m, D1 |
8 c+ L H% V6 z# wb.在我的电脑中删除LOG文件
- j/ m) @! A9 v2 V/ t
' O* x, W, U' |! zc.附加数据库: ( i1 a- U% [3 n) U8 w6 u( M2 r
企业管理器--服务器--数据库--右键--附加数据库 8 K' H ]8 ~& f! ]2 R" b' o* U
0 V+ `( j' k/ i% `
此法将生成新的LOG,大小只有500多K
9 e/ l* s- G3 T$ W! ?5 Z+ n
* C7 V7 B2 @( Y6 r$ D$ t) d或用代码:
z& R; V& R5 F `1 G* |7 q下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
6 n; A. M3 @3 H2 @
& z- n# \6 q. u. [6 ]a.分离 $ q5 u2 {" l, {4 z3 n+ W
EXEC sp_detach_db @dbname = 'pubs'
$ c4 [" J8 `& w; r$ Z% `: c$ y: U- _
b.删除日志文件
% |( E+ x) V9 O6 j% W6 o
3 I+ o( o; r5 Z% V4 y1 Gc.再附加 5 h5 ? B+ N' T! p6 L2 ^9 v
EXEC sp_attach_single_file_db @dbname = 'pubs',
1 r% O [; I) Z$ K4 |+ t& `: K% i@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
0 f2 z5 x2 b% z3 F m2 X$ ~! f4 ~& K7 H6 @6 a
5.为了以后能自动收缩,做如下设置:
0 U \& d7 x7 F6 F企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
1 W1 f4 q% J# R9 L9 ~4 x$ Q, H+ ^6 t3 W7 I6 u4 w
--SQL语句设置方式: & O) H) h0 r& x- Z/ _6 F- S
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
( e* J8 L a) Z, \. }
5 o; i3 x+ R" g# p ~6.如果想以后不让它日志增长得太大
# w# ?0 F R. R$ h$ q" V9 q/ F企业管理器--服务器--右键数据库--属性--事务日志
1 ` Q0 _$ ~% m( a* r# \ K--将文件增长限制为xM(x是你允许的最大数据文件大小)
1 H: n: O, Q2 D; C) e3 \* x
& x' o: H2 ~0 {# J% O--SQL语句的设置方式: " v9 {& Q. v! a1 x! Q S
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) ; g* k8 h4 }+ l0 P ~' J
/ l' M3 v! p* P5 P( ^/ U+ s
0 U! q. A; d _2 C) tvxfire 2007-08-28 14:19
+ i0 D* ]; d; Y+ {/ ]5 c我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
; N9 m! O* y3 R& q6 h |