压缩日志及数据库文件大小 ' I9 F! T+ w# a K0 V
; V, a0 F4 q- i; N# d0 H$ m; _
S5 w! T! Y8 S& a! A& O2 k
: I- @& X+ r! q# x" L$ k --下面的所有库名都指你要处理的数据库的库名
) |8 b' m. C9 r9 t: _+ D' e2 p9 X2 E- M% L( f( G: i% M! O
1.清空日志
, ?5 v/ u0 k6 N, d# |) \ DUMP TRANSACTION 库名 WITH NO_LOG , P- u9 u) ]9 c4 f% i, X
- f7 o B+ G+ m0 L. ]4 U. [ 2.截断事务日志: ' K6 C6 m2 E# b, A- y1 d
BACKUP LOG 库名 WITH NO_LOG
* \2 E: J, f- H/ Y4 O- ~0 m7 W
2 W j4 U0 p. g* s 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
4 Z* x- V7 B3 L$ |% Q6 D 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
) n+ J: D0 m: F' \/ d% g$ s @ --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 % E: S$ d: g$ y# e8 E9 F& ?
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
' b4 u0 U! E# v. F+ T) f) |: g% c, b1 e' A# ] O
也可以用SQL语句来完成 : y) B' n# e$ z
--收缩数据库
9 i2 j) [" j. H$ @) a* |6 G DBCC SHRINKDATABASE(库名) & ?$ s" c( U$ i, f3 `
2 s, \/ }* C& M3 M9 D
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles : N. v3 K: Q7 Y0 n
DBCC SHRINKFILE(1)
% S9 F& o/ Y, F4 O3 d- |" r O
6 ?- {' l6 L4 J- u/ L 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 6 Q+ d( c3 D; [1 b
a.分离数据库: " _7 K. m4 g9 q
企业管理器--服务器--数据库--右键--分离数据库 4 [: y7 G9 |* G- z; R; ?" t
' o9 O( n3 C. w
b.在我的电脑中删除LOG文件
/ _' ^1 E% w$ e: B* _) ~
3 a: h2 Z8 E. a5 z2 O c.附加数据库:
/ l* `" \" G0 h% T: K8 c' x 企业管理器--服务器--数据库--右键--附加数据库
! D9 P" r5 { M) f# V
5 S, _' _( }/ U; k+ s0 }) m+ r 此法将生成新的LOG,大小只有500多K
4 F* O! O M' |4 p3 ~' U
$ P9 L% M r t) B 或用代码:
5 M. |) A# ] J9 d% L. j 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 + E6 c, K @% z' P+ E
3 ?& @! Q. f4 K6 I1 E
a.分离 " j% L9 z3 X6 f% Z9 |
EXEC sp_detach_db @dbname = '库名'
. F7 {3 y7 E* b+ l4 f
9 L& ~$ E4 M A b.删除日志文件
* B4 D0 R3 U* @0 C0 U @( q( k7 V1 y! Z% c
c.再附加 ) y- [" z. ~( }- n4 k: h: O" T
EXEC sp_attach_single_file_db @dbname = '库名',
& Q% L/ ?2 P" r( _" o* z; y7 t @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
( R0 R. v/ Y4 R
: d% h9 f# S, q; [, s 5.为了以后能自动收缩,做如下设置:
( |( Y8 K( e4 r 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
: @' Z( S3 t' ]3 M5 A* v0 Y! \9 B7 N! U1 V
--SQL语句设置方式:
7 ^' r9 d( T7 e0 V& ^$ f EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
* M p0 S% q- b& o4 F' Q" w3 C* }$ _4 [$ G) Y' Z" R* x& l% S
6.如果想以后不让它日志增长得太大
# S: A5 n) \2 M6 Q; A6 F8 M; N 企业管理器--服务器--右键数据库--属性--事务日志 ) Q. n: e e( f; R9 D
--将文件增长限制为xM(x是你允许的最大数据文件大小)
+ I0 g5 X5 O( o, W7 y' M# A4 M3 C M* t& e3 }6 a" {
--SQL语句的设置方式:
1 P( C6 \0 B" l1 o1 \9 c alter database 库名 modify file(name=逻辑文件名,maxsize=20) 9 [3 O# {$ _! Z& ?9 e U
---------------------------------------------------------------------
: A6 v* A& ?" o! X4 o4 VSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
# u) y& V D( ~% E; o; A
7 V" J/ g8 @0 C+ D" f5 W- u*清理历史记录
{ a% J" w3 P) f+ ?1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) # p$ s6 z7 K/ v) n4 _0 _$ D
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
+ w$ w" l7 n5 w& h& R5 ?如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
5 Y. S% z& m9 ]3 _1 C/ H& W' f: H) x K6 C
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], 9 d( I. O. h+ y- S" r. U& y: M
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
1 T# ?' S' N0 K4 Y$ m# Z& J直接将x改成其建议其最小值y按[确定]即可压缩.
/ n0 m& F; j0 d# y2 M9 T先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
7 @( h. h% @5 `' F4 I: F' h8 X3 V! E# w1 V: d' j1 ^9 A( k6 v
总结:其实也就是两个指令就可以完成了 1 }! r8 F6 U# C
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY 4 @ P: O% U& v i2 Y
DBCC ShrinkDatabase(DateBaseName) 9 ^0 s/ H. F3 }* W
8 a5 T* s( S3 N* ^" s; H% }! w" r*设定数据库自动缩小, 默认值为OFF
7 H& ?1 i7 z6 b# n f2 O方法1. 2 v- @7 D) ~4 D9 T, @+ j5 B& y8 R# d
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 8 v4 d" }. Q/ }9 @; x
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
/ J& z+ ]- d( e, \% T5 m; E方法2.
( L" d4 w$ l* u1 {3 A% a a$ ]% t在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
# I% ?) Q4 h, t+ I4 s$ t5 n2 p& N7 I7 _! W* B
. ^* w8 M N( H( h' } SQL SERVER日志清除的两种方法 ' a# @, d* @' q/ }
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… , ]% }* n4 V3 @' W
$ |" V B, o$ T, z; C: b 方法一
) X0 u7 g# m8 B! j; w9 [- ^+ }' g9 C+ W0 Y' q
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 8 b+ ~+ U8 f( Z: {( `2 k& G d0 M
, U) C7 T) J$ X4 v5 U$ W1 K5 q5 B 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 ! T9 x' v8 G0 N# ]0 a7 o
( _3 S9 ^2 \! Y 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
1 x( Z }' F6 w9 G3 A( v
' [5 K$ U4 e7 H% @ 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 9 c: Y& X7 U y$ |" `
, s6 s) f7 h- Z, K7 ]# F! y1 ?
; ^/ V# z" b x6 ^; ?8 @8 _! j$ F y4 p
. {8 z' y1 c4 c; b9 ]$ u" D( G/ B1 v$ j, d5 \6 ~# f! u0 `9 B
SQLSERVER中讲:
* U6 m7 x% R/ g2 @0 i
3 Q# o' E) B; B" x$ o, c) _BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 # H+ V. g/ K2 @3 b2 u; n, v
( Y1 `) E! W d' B: ~, a* [: l3 q2 W
但我在数据库中进行上述操作后,事务日志还是没有改变。 2 g0 P2 K- T; O1 {% O N: Z/ V" R
6 t9 _2 h/ W `. D8 G. Z5 R c3 i V! M- b3 r
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
+ ?! R6 _) J+ Y/ D) C! m9 C在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
0 O/ S- S' x; ~# o$ r- l% v6 e1 l; p9 d N( v2 t3 `! B6 w' D
9 X6 P& U% O/ U( ]6 z4 P老马嗖嗖 2007-04-30 13:03 , t3 t4 C. Y/ ?: K) Q
SQL Server 2000中*.LDF文件是什么作用0 ?' P3 m1 V p- Z0 W1 L
6 f- I: ?' O$ D9 n" d9 D7 W" f. p
*.mdf是数据文件
/ ^8 R. C$ X- x( i, T( q*.ldf是日志文件 4 D5 C% O/ {4 D* y9 Q6 m: o# S: g0 H
当数据库出现问题时
3 W2 j" I" F- I' s可用以下语句恢复
, l" r: n8 o5 d5 ^1 ~3 K数据恢复一 4 W+ J* M0 f- b6 A' |, q" n
1. 先分离数据库 % ~3 @6 v; A, V6 ^2 l1 r# A5 G
exec sp_detach_db dbname 8 _7 c; |4 s# c( D) r
2. 加上数据库 r+ p* L$ S1 z; J$ g, C
exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
5 `/ u/ Z: c1 k) l- g
4 I2 L5 ], L+ @2 l" U0 E( U* O/ a ~5 v0 |' ^3 X, h9 K" ?
老马嗖嗖 2007-04-30 13:04 ( Q' D9 P8 Z1 @
4 n/ |$ ^0 o7 r' M( c0 \7 u9 |
# J9 l7 g+ v) y1.清空日志 / f7 l% b1 a1 L! w( b
DUMP TRANSACTION 库名 WITH NO_LOG
9 S |% n$ Z2 H L
" w# x/ e& k6 L& U2.截断事务日志:
' R! {, b# q& ]. zBACKUP LOG 数据库名 WITH NO_LOG T- r+ y: N8 A. t" c w( S
" g' G3 O9 O+ S7 L, x7 h7 T- ]3.收缩数据库文件(如果不压缩,数据库的文件不会减小 % {( J" K$ l/ |) e% g
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
) G8 T9 g- B S5 ]# v) F--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 5 F% Y5 c! M f* Y3 r2 Y( a
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 _# v* O0 ^0 m! s: a
b+ U* w* |, l8 r$ P, a6 G0 h也可以用SQL语句来完成 , x W' P7 @( ]
--收缩数据库
) S' A* x+ t+ o& g9 lDBCC SHRINKDATABASE(客户资料) + A/ }# E, m/ t9 p
0 R$ ~( H/ m0 K* F
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 7 D% c- e5 k6 f! f
DBCC SHRINKFILE(1) : M# q* T: W6 j; W/ O
3 g9 D P4 f% f: X" U$ A
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
! f6 m, Q: }+ L) ^a.分离数据库:
+ X2 q" z7 R. x+ B3 {9 ~/ Y9 o企业管理器--服务器--数据库--右键--分离数据库 $ f- b1 J) W9 n! j% n& E
1 [' o( r( \) w" G+ g! g% s
b.在我的电脑中删除LOG文件
4 ~9 Y2 g- ~& J
0 V* m4 l# R4 x: Q0 L' n0 Y0 \3 ~7 Fc.附加数据库:
" M4 k8 n: H* v" h企业管理器--服务器--数据库--右键--附加数据库 $ z6 {0 C( ~$ ^
, W' h& X; Y! E2 B; R, L
此法将生成新的LOG,大小只有500多K m0 S$ _* `8 U" W& u" H
& {; l4 v; c# N% [5 Z1 w或用代码: 0 a4 Q& n: Q8 O, C
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 ' x) |1 X% A6 A
$ d0 c: S7 G i F# T* v
a.分离 F! F& C" }* e- r9 r5 A# k2 @, S. T
EXEC sp_detach_db @dbname = 'pubs' ! Z4 H, J/ Q! y. T
' Q/ z5 ?9 A. ?; c8 j8 f( Qb.删除日志文件
) K U1 S6 N5 D- u! @8 C1 o0 z2 V6 w: q. B' k
c.再附加
+ c( c+ V; t. L# b8 f, lEXEC sp_attach_single_file_db @dbname = 'pubs',
- C, b+ }1 E( ?9 L: ]0 ?@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' * q" l. [ l3 u* J6 @
- [8 l- S& A9 P0 s- `4 p0 z5.为了以后能自动收缩,做如下设置:
5 }0 ^4 T/ X# R" S企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
- {8 ], I) m" e- F, y" Z' Y7 p, @0 k3 D. Z" i
--SQL语句设置方式:
. z5 A. Y& v( }* E n4 VEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
+ d: B6 G( I }
* O7 X$ y/ T2 G# p3 e6.如果想以后不让它日志增长得太大
- Q6 D$ ]1 q Y6 ]企业管理器--服务器--右键数据库--属性--事务日志 + ~+ N+ T1 w; l0 v
--将文件增长限制为xM(x是你允许的最大数据文件大小)
! M& ^8 `8 y5 a2 i: ~' z6 b) |% W- F" Y
--SQL语句的设置方式: 4 I! E! n) E# p4 O: S
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) * W4 l, x3 p' Z* m X
+ W5 [/ n$ u) |& t5 N/ [( k
0 H- Z- j3 h- X( `0 _8 V v: svxfire 2007-08-28 14:19 3 @5 Z6 e2 t: z7 e7 a1 B6 U( X
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 @. o/ P1 n8 p
|