压缩日志及数据库文件大小
' d3 U2 g+ [! T! e/ ]9 ?0 O; ]7 q/ Y, Q- x! R$ `$ N3 A; h
: y. c( L4 `( z
2 s" [# M3 S' c0 q$ o+ q& a' ^+ A
--下面的所有库名都指你要处理的数据库的库名
0 d/ W- e% D8 _) |# M7 ~6 H1 p& Z% S+ g M
1.清空日志 5 o5 d7 ~% U6 z4 e( g2 @/ Z5 h. I0 E
DUMP TRANSACTION 库名 WITH NO_LOG
% Q _2 i, `" U9 D* A- X# H' x$ j: i2 a+ A" o( v3 J0 u# W" a, V8 {, h% y
2.截断事务日志: + j9 _: p, y( @* {4 ]( U& x
BACKUP LOG 库名 WITH NO_LOG / ~3 t% `6 T0 A+ _+ d1 g* ~* v
9 @! U ?9 ~- k) l. \ 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
6 K# H4 ?! M, D. ^, D, m 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 ' M. T) y @, O# C" u
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 0 s7 [3 y8 y2 D; n5 r2 G
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ' S' L9 ~* B: R2 `& L
1 L! _; k/ j9 g7 O# G) W 也可以用SQL语句来完成
T6 A, [; Z3 r6 ~& { --收缩数据库
; w0 D" z* o4 N6 | DBCC SHRINKDATABASE(库名) 5 Q( S# Z' J; x' H
, M* p& ~/ b& K( r --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 4 J& m% P w/ c1 Q" c5 w
DBCC SHRINKFILE(1)
/ `& B3 c4 X% q5 y6 k6 I/ u! r6 ]9 q, h# H
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
% E; L7 J9 I/ ]3 M; M a.分离数据库: + _+ }3 F% U/ [' e' b$ q' K
企业管理器--服务器--数据库--右键--分离数据库 2 } @. N R& F' R, ]
- ^3 c4 Q/ K3 G
b.在我的电脑中删除LOG文件
% S4 ]4 ?! X7 Y8 N* `& G# B9 W' V0 n( X7 }- n
c.附加数据库:
( K- T8 D5 f. S 企业管理器--服务器--数据库--右键--附加数据库
/ ?: a8 I& O: f- r
, @! x! G- E. }- W7 l- [ 此法将生成新的LOG,大小只有500多K ( q) x& W0 i# Z+ t) s! y( U
& b! k! X- R. B& o- a1 t
或用代码:
' Z& z X: n" j u 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 5 B4 {( z7 w3 D3 o
' S4 I5 C" J/ W# Q* h
a.分离
9 U# T, r5 l& d7 K EXEC sp_detach_db @dbname = '库名' / C0 V6 o- E2 ^; _' O" Y( n: Q' g4 G
6 O1 s0 [! k& V/ P K7 Q b.删除日志文件
9 D1 g& [$ \* C- J1 N8 D0 H. s/ O
0 f2 k& I3 X6 Q+ A3 U c.再附加
4 @9 P- J& c7 l1 U; F% ~4 m3 d EXEC sp_attach_single_file_db @dbname = '库名',
1 f* T" I$ w( R1 u# e `' L1 e6 i @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' ! u; y; \3 J$ B! l; c- f8 Z
" f2 V0 R5 U- W8 m 5.为了以后能自动收缩,做如下设置: ) z2 T' d: I# u/ k9 K/ ]/ w* o
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 9 D9 c3 k: L+ x5 }
/ u3 o6 p% R* I% h! D x4 f- E --SQL语句设置方式:
( E4 T" ^3 ?4 z+ z9 U EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
) Z& c" a! z# B
, c& A& _( z2 C. a: m& z3 h 6.如果想以后不让它日志增长得太大
( y0 S% L$ D. O- S# C 企业管理器--服务器--右键数据库--属性--事务日志 % G6 v, L k1 L! v4 p. J
--将文件增长限制为xM(x是你允许的最大数据文件大小) ' n/ A Z6 P4 P2 N3 Y' R, _
# \+ T8 V9 l2 P7 X
--SQL语句的设置方式: * @- I/ p6 x4 v
alter database 库名 modify file(name=逻辑文件名,maxsize=20) * I$ @( S1 Y E9 m2 z& }0 D
---------------------------------------------------------------------0 ^! F9 g( B; ]; V9 t; k" T# L
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
/ S1 w% i1 Y; h( W: V2 a# e! ?& v2 l- x& A5 E
*清理历史记录 7 B/ G% e0 @, A! V
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) $ m1 ^# }1 j9 e3 @4 q
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY " R+ \3 W% {- H* I' n- [$ a& ?
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
* v7 J' R' G3 \( P+ h" a- e! w7 H( a, m6 |2 ?& a2 O; z7 n
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
" x5 O3 B' K5 c9 d1 Z9 D* n点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
: ^/ b+ I5 F r2 c直接将x改成其建议其最小值y按[确定]即可压缩.
; |& K! x7 q7 {" E f3 S# j先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
2 R4 h/ i! D7 L0 y
6 [. R; a" T3 e/ _% O1 c! `% H总结:其实也就是两个指令就可以完成了 % T5 J- w/ P+ D! e6 _0 l! P
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
( t5 |- v% Q0 J$ jDBCC ShrinkDatabase(DateBaseName)
+ a1 h: S3 D6 j" n6 D
1 P7 a6 a; M, }, K*设定数据库自动缩小, 默认值为OFF 1 W N2 c3 j3 z/ _) E
方法1.
- I* ?) p, A/ _9 N0 T+ CALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 7 l; X v0 q9 _0 {
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
6 ^( E! W$ n6 ?; \方法2. & J3 D7 O, x8 B8 z3 y. ?
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ; |7 v! p- V% b# E1 _
& C4 B9 b% T# b6 {2 O& I* f- e/ y/ U; h' T. Z8 E/ u! d
SQL SERVER日志清除的两种方法 \+ w' e$ J3 r; y. P* V
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… * X: ^# S: a4 b+ Q' v; _+ k
, K/ \$ e9 y% H$ b% ~ 方法一 2 c, X2 d( y6 p9 Z5 j1 v' ^: {2 p
& h) R0 ]# C( A 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
6 G+ G: x" h4 [% l
; e* \- }# ` c 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 / E4 z- P8 F. A
. d! t/ I2 D/ u( |$ i. g2 M9 W 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
/ n$ ^* ?' ~4 a6 E+ Z/ `+ a+ T4 ]; A/ P
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 / L8 V4 `9 g; [2 e( Q1 p
# W6 h1 B% ^# I# i% { M' O% r0 H
, Q3 U8 B# e+ V; X- ]8 o6 r) p
* }8 U6 f% R% i
) c8 Y2 `7 |8 {! Q* ]! CSQLSERVER中讲:
- Y8 l) G7 q- F! ?# S$ q, J+ l8 e' w; l
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
+ ]0 N8 q( c* `5 d6 I& X7 T8 A7 e1 j: d; @) \# c4 M+ ]3 P0 n
但我在数据库中进行上述操作后,事务日志还是没有改变。 3 a9 l; c. d j f, U
0 ~3 ^* @* m% t) R. ?
; e6 Q) J3 F$ H- G6 d第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
5 W' ~/ Z, \+ c3 v v, L/ P9 D在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
$ I( n- P9 y+ F1 _3 E
+ G5 Q4 s& y) e8 p$ {! S- B+ \5 s5 Q; M& c" s
老马嗖嗖 2007-04-30 13:03 , G& r8 ]: F& h5 ^1 `; x5 D( e
SQL Server 2000中*.LDF文件是什么作用! Y! ]( h, H6 b; e, M2 t) h
6 w6 ~' l5 P! f3 x*.mdf是数据文件
. g$ x* N1 m+ K% @9 P: X9 ]*.ldf是日志文件 ' i5 k' z2 {' W, V
当数据库出现问题时 , d0 G" g4 W3 n8 C6 v% ^& n+ k
可用以下语句恢复 1 S& N- S: ^. U0 n) X1 E
数据恢复一
- p7 ?2 W/ L! E/ y1 l+ L1. 先分离数据库 ! `4 m+ u8 v8 u7 I
exec sp_detach_db dbname : c& C* \8 u; V+ P9 t
2. 加上数据库 & }. _2 n! ?1 B+ p
exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ 0 M# {" i, H0 ?! ?& u
* T% S5 ?" U5 d6 l3 l( E+ T t& f1 S8 O9 D
老马嗖嗖 2007-04-30 13:04 1 u F5 I8 x. F9 {* n/ C
' K G( |0 F2 H
]8 w: k$ _! C4 b% e, R1.清空日志
5 h- E, h( ?" u! e6 r' mDUMP TRANSACTION 库名 WITH NO_LOG d' n @( I0 O! f
( b+ x9 Y% C' ]( J2.截断事务日志: / V9 T9 r# N9 W' t: ?
BACKUP LOG 数据库名 WITH NO_LOG
1 k. f4 d( m$ S) j j- r! S) P' f/ o% ~) d* m; L$ v. D8 r! H
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 5 x+ [9 k8 P* Y* i
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 : z% K H8 @. b: k7 I" ^( I* x
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 " Y; F: Q- { ~* o: }
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ) u5 A% {1 n$ W" I3 E# x' O4 f1 ^$ y
, [' \- L# s" D也可以用SQL语句来完成 * H2 z6 J5 a, s) t" \
--收缩数据库 ' k' V8 V2 X& y E
DBCC SHRINKDATABASE(客户资料) / h" d! ~+ G, t. Y8 v
; X4 N. _/ s4 w# }6 F) j
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
6 U# `, B# q0 s2 _ VDBCC SHRINKFILE(1) 9 ]) V8 s- w$ O$ \+ i ?; [& [
/ Z% w& y2 m1 M1 R2 q( u0 l4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ! B6 S; N o3 w$ c# t
a.分离数据库: ' L% D8 @4 t q
企业管理器--服务器--数据库--右键--分离数据库
+ j( G- s" D/ ?* h( ]
* ^7 _9 ~$ }$ Z' E: X/ z# sb.在我的电脑中删除LOG文件
1 O! o/ y* |1 f# w, P6 t0 [! [
1 K+ P- g3 V" |9 cc.附加数据库:
* _ G+ s" `8 K, G" S# J企业管理器--服务器--数据库--右键--附加数据库
, g; @& ~ \5 S' N
% `4 k) W! Y2 {此法将生成新的LOG,大小只有500多K 8 }5 f$ N, M7 `& A& r: p
+ b: d( `0 [" [2 X( q: q7 |或用代码:
% M2 n) g# X/ Q下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
7 x( e1 ^. H# M4 A [, C6 ^) S6 Q1 f0 i& z3 S5 B$ g+ z
a.分离
. D0 A8 b& D! Y s4 lEXEC sp_detach_db @dbname = 'pubs'
V( G4 t1 ^3 N0 N& b' o Z7 E5 I4 v9 P
b.删除日志文件 ( e$ Q* F, ~ B; D Q8 E
! B }& N5 Z# W3 J* F+ i. k3 t
c.再附加 - e$ ?* M" y8 y: {4 Q/ Z
EXEC sp_attach_single_file_db @dbname = 'pubs', ! g# {" g3 F6 K* g0 F5 A7 O! M% H
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
/ l; e, H* d- ?5 w8 Z4 u8 D# K7 c3 f$ W/ @+ f* W7 D% E$ z9 r
5.为了以后能自动收缩,做如下设置: 2 i$ G* x6 H& Q. n% G# N
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
' _' i8 W$ M6 w2 ]8 K, ^5 N/ I
) {" D& B3 f6 V5 X4 }$ S--SQL语句设置方式:
' o, B2 A) G( K% |1 c& A! XEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' k' I+ p& g9 A Q0 t( J5 X2 d
" z" s5 h: X4 ]. P! Y6.如果想以后不让它日志增长得太大 ]; K1 O$ A; G
企业管理器--服务器--右键数据库--属性--事务日志 4 D' Z( q: e P V- E: G6 Q
--将文件增长限制为xM(x是你允许的最大数据文件大小) ) H t+ `' |5 s5 M
" v& L( b( v9 W% g3 |+ n
--SQL语句的设置方式:
|' ~. [; r" u% qalter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
9 }& u. x* a% n3 J! \
3 j: q1 G* F/ [. P- [: T% ]
( {+ ]1 Q' W3 F ]# Jvxfire 2007-08-28 14:19
7 [" J8 `, a* B* ] P3 s" e% S0 r我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
7 ?7 ?0 c; S3 a# t q0 ~# h |