压缩日志及数据库文件大小
+ w4 z/ N$ [/ ~5 u' t0 ]! u9 n# C/ Z
. @6 i' X4 R5 y( j W# K5 Q
3 P) s! Q7 N$ f8 q/ x --下面的所有库名都指你要处理的数据库的库名
) L. U( ^7 y+ n5 b1 x9 I6 v0 G E$ _* b! C
1.清空日志 8 x5 U- Q* f# p: M* M) v# R# g B
DUMP TRANSACTION 库名 WITH NO_LOG % x- ]- j* w: b, L) _# D3 p& A
* b3 Y1 K( ~5 b; R
2.截断事务日志:
- h+ S9 H4 B. [# l+ e BACKUP LOG 库名 WITH NO_LOG
, \) S- w3 C! \6 N' H g
, e4 B( n7 U' V( d' g6 P7 ]9 F 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
+ O; l" T/ C N6 b8 R 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
. B9 V* ], m8 }7 F# m1 k8 k --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 8 y# U+ M2 Y. M: j; C5 `" g; o
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
+ Q9 v" ?( Z! _2 M( m3 k2 n0 r+ C4 g% B: h W: q
也可以用SQL语句来完成 7 W: |7 ?$ h1 u5 P) }3 m
--收缩数据库
" W" C- i* C* N! \: U0 n4 z/ G7 [ DBCC SHRINKDATABASE(库名)
. V; [( `/ T) h% z
% r V4 G0 A; j0 X0 V, E --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles " Y$ P3 ^9 u9 S, O5 }' H: _
DBCC SHRINKFILE(1)
% p& U3 q+ ~. y+ A8 p# _% x& e: Q3 R! F
0 r# m) A0 G9 P# l5 m 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) - c8 D) l+ M5 {2 ]+ I8 P
a.分离数据库: % `, r: t- h9 E. q: D9 k
企业管理器--服务器--数据库--右键--分离数据库 & t* E5 b3 e: T7 w" f9 A% l
7 x5 \: ]0 w! c b.在我的电脑中删除LOG文件 , [0 l1 U! X: W" ]1 L% O. D M: O
. k" ?+ B2 ~' ~: z/ `% i, e% a
c.附加数据库:
$ ~" ]: ]8 h5 g" z3 A. I 企业管理器--服务器--数据库--右键--附加数据库 3 z! V q8 r @: @' B4 i
/ J1 X8 v' G8 x: ~* ]! L9 Q& y
此法将生成新的LOG,大小只有500多K
0 u4 }( E$ x: P$ [ B [- Z! w; L4 h% z- ?+ a0 p. u
或用代码:
! ?6 e' ~, r7 e$ N6 G9 J( M2 S! C 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 * z1 \* Z. l8 w1 e/ x- N* ?. W# m
0 M1 x* e# w7 M3 O0 r7 L4 H
a.分离 ; {# t9 r$ G I8 n4 }4 X5 ?
EXEC sp_detach_db @dbname = '库名' , R" N/ K1 n7 j$ s
$ Y9 R+ ^9 M) h% k8 y b.删除日志文件
8 r9 a6 J0 o1 k! \/ j2 f# f8 l$ {& U: m
c.再附加 % F7 {$ k: I( d& q( U' K
EXEC sp_attach_single_file_db @dbname = '库名',
$ w7 j$ u# U" X- p @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
7 K* x3 U' x/ y( S2 a. G; [
. c7 I) D6 B% d+ k" L8 A' ^# O 5.为了以后能自动收缩,做如下设置:
' @ d( R7 z M0 K4 s7 S 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 4 k% X, k+ h }7 @4 |
+ U" z! p# p* ~- A: I. z. u
--SQL语句设置方式: . e4 _5 T" L6 B1 P8 m
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
2 z: B! R( c0 l( x1 N4 @
6 `/ R6 o* \) f 6.如果想以后不让它日志增长得太大 5 E* |8 s# [6 E! Q% V
企业管理器--服务器--右键数据库--属性--事务日志 5 v" [, B0 X4 j7 v
--将文件增长限制为xM(x是你允许的最大数据文件大小)
0 m1 J5 w' l" x" m" c# q4 n
1 H! a8 S+ _4 m( k --SQL语句的设置方式: 9 h, S! @- ^: k( e
alter database 库名 modify file(name=逻辑文件名,maxsize=20) ' E8 m0 c4 [7 `* |7 h: z/ e
---------------------------------------------------------------------+ V+ ?6 b( P/ |) N0 R
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
" u5 J4 @- u! p/ K1 u5 N7 a0 e' f+ g& z: J3 Q1 _
*清理历史记录 9 n: J( V1 ?+ v, i r. L' Z# K
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
) u m9 {3 U* Z( j2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
5 X% D$ A. } u, E8 ?5 }0 b如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
! _0 z- i9 M0 }
9 q5 O3 H5 O& H2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
# z# c7 Y0 V" V5 A1 W& d% N& P点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 9 R* ?7 N' a3 g4 h1 `3 p6 @
直接将x改成其建议其最小值y按[确定]即可压缩.
, ^$ Q! R5 ]/ ~) q6 d2 E h+ ?先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. x* p$ k; v' g. G M2 {
. k8 A( N! k& T总结:其实也就是两个指令就可以完成了
2 h3 R, ?/ f- Y }) |/ `/ mBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
( a8 Z& m$ v/ c% n& e: I$ }DBCC ShrinkDatabase(DateBaseName)
& b( M& m, {0 f; J6 z5 ?8 v. F5 c. }& j2 }+ v5 c2 c% ^
*设定数据库自动缩小, 默认值为OFF
0 W K- L! U( F- w+ b, U2 I* u% X方法1. 3 k; @; T& u$ N4 l; A( C0 B: v
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
. {) W N& c& r如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON , h6 T% w' F. i9 j
方法2.
9 O3 b3 l9 h; J" D# R7 e在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
) I7 O& [; j% K" t; `! e6 }# y
) v$ d7 z# R) u' s0 C: y7 S$ G2 F, ?
SQL SERVER日志清除的两种方法 ) @" ^9 {/ p5 w0 Q+ E
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
; \. f. Y% B7 Y; X, u: C6 L- P; r( J* r' {& T5 E
方法一 7 N* O. v' _" d9 }0 z4 o
4 l# c1 S9 m+ W' }! H0 _; |, ^) O
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
! r, ~: p$ d3 K. A2 l# _+ ^: z+ I" l
S7 ~' B# U- R2 g% ]; F7 A 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 8 Q' E' `8 E: W) e
* A7 {" P: S& b& k0 y- V/ \3 B
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 ]& r6 X; Q; X3 p! b- q* @6 v
# J+ X9 L. z7 C7 L8 r3 h
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
# S; u$ c# M$ k( I
( z% t: j6 Y0 y$ @+ {" y
8 x# W# J# P5 g% q4 H; \8 `; J! \& l" ]$ D, l
; Y5 Y& k' o: J1 Y; \, u
SQLSERVER中讲:
! I0 R6 S* |4 R3 U8 G0 D! q. i5 c3 I. r% l
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
7 F% m! p% J" ^2 E% m* N# R4 d
( e* t. v# g3 }& G, k; U& a但我在数据库中进行上述操作后,事务日志还是没有改变。
' _1 c, y7 { O: [% h
- Q' r& B4 I& y o0 [9 B
, f2 S d a, T4 P+ c第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 & x$ ^7 ~8 g6 O8 Y4 y
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
/ \: K4 D- H: _3 I9 F3 W. Y% f1 z$ M6 `0 I! O, b1 i3 h
8 m& m S0 R+ E5 P+ k% ^
老马嗖嗖 2007-04-30 13:03
9 o8 K) z% N: o ESQL Server 2000中*.LDF文件是什么作用& W5 E1 ]" u+ Y g) i6 ^/ W
( L% h& k g0 d7 i9 | W2 y
*.mdf是数据文件 : _7 ?3 m; J4 n1 H3 z7 k) R
*.ldf是日志文件
, f" L0 L! T" K* `' i2 S当数据库出现问题时
/ V, h2 r8 e2 r, U. s3 l# c可用以下语句恢复
# Y, m9 Q: q$ u+ y9 s0 M数据恢复一 4 H) i4 N: R* C
1. 先分离数据库
% z1 m. n" \& F, V& \exec sp_detach_db dbname
3 e) x; A3 p P6 ?5 W* j: y. k2. 加上数据库
( `0 b5 G' o0 D4 L* A: z3 u) q1 a! t- x1 Iexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ 1 ]1 B7 G' {- h6 A) {
: q. _9 _. x8 N& b1 E/ Z; s
5 H& E* A- Z8 e
老马嗖嗖 2007-04-30 13:04 ' b3 c2 U) p6 _ e2 r
: A6 ^7 L6 R+ d; x
8 t: j! P1 U: ~1.清空日志
- r$ E! _/ v; cDUMP TRANSACTION 库名 WITH NO_LOG . D- Z% ~6 C9 h# b( m' x. d$ }- V6 e
9 x3 f* {3 l6 a2.截断事务日志:
+ L) Z# ~1 N- M8 c8 pBACKUP LOG 数据库名 WITH NO_LOG ' ]0 V+ \9 t# A' \1 L: f
5 ]4 P9 j# x& O& s
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 q+ k$ o& c/ _; Q
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
5 v4 Y; ^3 u H- x; K( N--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 4 o( P! }( v* Z
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
# \. Y- E1 Z) {) [, O, O) C$ t0 ?5 Z0 b: `4 _
也可以用SQL语句来完成
* ]1 Q1 y. [! M--收缩数据库 6 W/ Q0 s& l! {6 W! H
DBCC SHRINKDATABASE(客户资料) # }# E$ Q& k/ {& S h! s% s
3 f2 \( G1 K/ k g. a; J: ^--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
* _3 R! i1 c" |6 G7 ~ m' N JDBCC SHRINKFILE(1) / w, g2 k! E1 ^5 Y* d( Q/ W2 j& t
. G" n! C$ i/ r1 f* q
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
- G; b0 V! l1 fa.分离数据库:
& ?' M$ Q% ]* H- `* w企业管理器--服务器--数据库--右键--分离数据库
' K: h7 j3 h! s6 ? f8 f6 i( V( }6 j8 o* @) R$ K0 |, c/ n
b.在我的电脑中删除LOG文件 7 {# T' R0 b: c+ M9 ]9 t; @; E; v
5 v c& K$ W- d/ |& U+ e8 B9 Lc.附加数据库: ' I f1 k5 _! w( y1 k+ p6 l5 d4 c
企业管理器--服务器--数据库--右键--附加数据库
. I& V3 a+ B5 c8 o
, a( ]3 j f& {& A A; A* y# \此法将生成新的LOG,大小只有500多K : y6 s' Y, O/ k& S6 Q
( b* S. h: b( d/ I或用代码:
3 w5 E; ~ x s下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 " {0 r' b" C& l) \; _0 ?. t
6 y: X. P) h5 R+ @- E6 r: `; a/ O9 l8 g3 Y
a.分离
3 I; j5 i6 T0 M5 QEXEC sp_detach_db @dbname = 'pubs'
v: c& [1 L- }# k
* p; N2 i" A& Kb.删除日志文件 ' s- s+ R1 a+ b6 f+ A
( q# V/ z/ O) |: V' J
c.再附加 1 b+ h# |9 R2 O* D0 u& P% n
EXEC sp_attach_single_file_db @dbname = 'pubs', # T8 |8 t+ r. a H5 \
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 4 b8 ]/ P4 C- F7 m# n
7 l" E5 K; W$ q* x
5.为了以后能自动收缩,做如下设置: ( x( ?( r. x" j
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 5 s2 P4 U) A( m7 ?
6 F4 H9 N: Z, G b8 P
--SQL语句设置方式:
6 J) O* C6 D1 S: vEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
1 @8 U0 W2 M+ E; M+ p6 y" M/ c% D$ v& p; @" T" |' Z, j5 }$ ^% v" [
6.如果想以后不让它日志增长得太大
: }, ^' V$ Z$ W+ E/ u- V企业管理器--服务器--右键数据库--属性--事务日志
' T8 K) i+ U1 _) u--将文件增长限制为xM(x是你允许的最大数据文件大小) 1 |: Q# c7 p$ Y* m$ `$ o1 X
4 T1 C, L' m) a. F--SQL语句的设置方式: ~. Z4 t& Z; S$ R% x7 o* `
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 9 m5 H q* L; J& X0 S
' n, D, }7 ]+ l& h. W% j! C7 \. w" }9 G8 F g3 M
vxfire 2007-08-28 14:19 8 X* }7 i+ }/ f$ I
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 ! c X2 ~* i* L4 a' t
|