压缩日志及数据库文件大小 5 _2 r5 [% J8 K3 r* |% [4 N# u
1 [. b5 `& n* {/ K
+ d% ?( A% Y: w
& r6 s! D P- @1 Y
--下面的所有库名都指你要处理的数据库的库名 ' r; `. a! f$ c6 A% D
, o$ ]2 }2 D0 g6 S8 E5 ]; d9 C
1.清空日志 ) e Y/ L+ s; I6 ^
DUMP TRANSACTION 库名 WITH NO_LOG 2 ?2 R: g. m/ G0 C' k
) f5 p5 Q/ l3 B: h6 ^ 2.截断事务日志:
! n$ ~9 E: q0 h$ Z BACKUP LOG 库名 WITH NO_LOG # h/ q V {+ V$ G
' i) n! Y( m* M3 i/ `' o5 Y' u( p: H/ { 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
/ V/ f3 k6 e6 U& x. Z 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
0 E. w' `( N. }6 Q# e6 O' B7 B --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 6 u( D. s1 n3 O7 s4 U
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
9 y8 p2 U! C8 H- T
1 p4 \* c9 `3 e4 T( f+ j [ 也可以用SQL语句来完成 4 {( p2 Z) R' n+ T; C
--收缩数据库
7 U. s9 Z9 O5 D DBCC SHRINKDATABASE(库名) 5 [6 a) M- L" C0 {6 s
) O+ v ^, A7 e. z# i) t9 _ --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles - i: Q) f; l4 J1 i
DBCC SHRINKFILE(1)
o3 C2 K/ h. d( I; I3 @# w1 K
: w9 s; d5 ~( b; D 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) " h; s/ ` a" Y( Z1 z# A
a.分离数据库:
3 O2 l6 n5 O8 M 企业管理器--服务器--数据库--右键--分离数据库
+ t9 m/ |: c: m9 V% T2 |: Y0 }8 m
b.在我的电脑中删除LOG文件
4 [; L* u$ [* |0 U7 E
5 x( E& v' K& ?/ }: G$ J$ { i$ t c.附加数据库: . a# l4 K8 T2 S0 C: R" E
企业管理器--服务器--数据库--右键--附加数据库 5 ]* s& B; }; R6 W4 |* a0 K4 ]
! |& X' @3 ^ G. M: U9 n4 [ 此法将生成新的LOG,大小只有500多K
: W. S. g6 ?/ A+ N5 W) [
% S& {. N' d& s) g 或用代码: : I, p5 G0 A2 l* h( Y- B
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
+ {7 m) A: k; o1 _, R- q( b8 Z; e4 R8 s3 G2 h
a.分离
' p* S; T3 h) O; z7 a! _ EXEC sp_detach_db @dbname = '库名' " R8 S2 L v5 I/ g6 U0 K# Z3 z
$ B7 B0 k% H9 Z5 g0 H$ [3 q& _
b.删除日志文件 ) ^ c- ^; [2 S- ?
8 v" o; E' N) I! [
c.再附加 & P2 m. c( F: X% i' y( Y
EXEC sp_attach_single_file_db @dbname = '库名', 3 L- n( V! S) [+ {, S: z
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
+ E" X. r* r! x( S' Y0 L9 c
* e K$ g: N1 {& S& J, L4 e7 _ 5.为了以后能自动收缩,做如下设置: & w" U6 [0 [" I. K3 v3 j- |+ g
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 1 T: t& Z o- p& D: F# P
4 ^0 e0 W# h+ U' {: T G9 Y5 J# @ --SQL语句设置方式:
% ?+ v" b4 u' z) s( G0 }3 W- E/ d EXEC sp_dboption '库名', 'autoshrink', 'TRUE' 9 E# m1 z: R2 q6 ?! I
! E, V+ A7 q, i) p1 r/ H
6.如果想以后不让它日志增长得太大 0 J6 l* F" B' I0 w- H
企业管理器--服务器--右键数据库--属性--事务日志 ) I7 y2 l( K8 [$ f' a
--将文件增长限制为xM(x是你允许的最大数据文件大小) ) ^ ]! O; U: `. g+ E1 \- K. O% k' |
) V, ^" }3 `4 C @# r* y2 [ --SQL语句的设置方式: $ G6 v5 F8 S7 }+ A) t
alter database 库名 modify file(name=逻辑文件名,maxsize=20) 2 F( W( x- s q; l5 K% l" n" K
---------------------------------------------------------------------
" _1 D S7 ]) {SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
- u& J- h5 }3 _8 t
& D0 Q7 C. L0 f# j# ^$ f*清理历史记录
( i7 M7 I/ w, [+ P; f0 X$ A1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
3 n9 n3 E. F+ X: V6 n& s) q6 g: B2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
+ K* ] a7 H3 B0 c- W' f& {如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY ( ?8 G8 [+ i- M2 \" P
& N) S( Q5 h5 q" X7 }+ A
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], 2 h6 j3 K' ]; w9 E2 Y! M: `
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], / W" e9 D0 E. z2 r# o9 |& g9 j
直接将x改成其建议其最小值y按[确定]即可压缩. " g0 ~/ E9 W, y' O* T
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 7 E5 [% y# B' J3 F* g2 C
$ t% i6 u# w9 J) b2 T- T
总结:其实也就是两个指令就可以完成了
2 q3 k6 u: Q) {BACKUP LOG DateBaseName WITH TRUNCATE_ONLY " w" \1 m9 C: } k- ]
DBCC ShrinkDatabase(DateBaseName) ; a S2 d3 {3 N, F/ E( m
6 d, ]. t( q2 |; G9 C- l
*设定数据库自动缩小, 默认值为OFF R6 K: i5 B7 V% F% @6 p% T; u
方法1.
( D0 ^$ \$ v5 uALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
6 c( f" L$ ^+ ]* w7 d' t如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
K* A% w- H" T方法2. * m6 E7 V. N* K8 r7 \
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
' D* W3 [3 d z) w9 z6 u# u) E6 H) S3 P) Z* B( O7 F- n& Z* {2 Y
6 }6 A7 _# p3 |' P; x2 O* Z SQL SERVER日志清除的两种方法
! v% `& G; n/ v" f$ Y& C 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… ' f6 L; l: g6 y% [: n
& ?# F# T. F" D4 J 方法一 5 U- v0 h% _" r, i$ S7 v2 h, d. p
3 C: T2 k- \0 x. {, W
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
) K7 E6 G0 k3 F0 v0 _: h+ J7 ~! J+ b' ]
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
3 x/ S2 E- o, m" Z# o/ m5 B
! p/ K1 D0 u2 G/ Z K8 r3 j a 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
; o4 B* ~* x9 `& D, U; O- N9 I) s/ m3 Q& z# H" a o& c& e. d8 i
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 ( n* s4 P, J9 f" P
+ K l8 @! s0 E) Z2 T
9 u& e% E) b' o! \; M9 X( o0 c O/ m& K3 W) u
4 h: Q a4 s6 |* q" X: o6 {SQLSERVER中讲:
& i+ N% J3 N e; y ? I Q3 Y2 @2 Q6 f
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
# _7 W0 J% M# E' p8 j9 l* S) [+ x3 u# z) }
但我在数据库中进行上述操作后,事务日志还是没有改变。 4 Z# ^ g. T9 ?' U# p) V
" M5 P. M. E X( C9 Y( a6 Y
& F$ Q0 B- G8 l6 V第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 ' q4 O7 `1 [+ @0 D1 i- F: J3 ^
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 8 r& h- B/ H0 u$ f
- G, p$ r+ q; }! x C
/ K* s& F! ?9 M/ j. \3 |
老马嗖嗖 2007-04-30 13:03
8 ]9 Z& w5 l y3 ASQL Server 2000中*.LDF文件是什么作用
- ]8 U; x) j/ k0 f y* H
( ~4 H! ^3 N8 V4 I% V8 _*.mdf是数据文件
8 ], ]5 r/ T4 `1 t5 Y*.ldf是日志文件
4 R* x: r7 | X& k9 E' d) N当数据库出现问题时
) ]0 ~" m/ h; t! {8 {0 g0 m* J; R可用以下语句恢复
& @ }, z! X6 K2 s4 H/ N! I数据恢复一 1 D) r0 o' B& n/ L" h% j4 a
1. 先分离数据库 & _- |. I6 x* n, }) _; G
exec sp_detach_db dbname ; D; x1 r. c" {8 G
2. 加上数据库 2 J5 B5 D6 k! }( i: n' B" |
exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
# \, F. Z* L# q
8 ]1 B9 B; [. _# g4 V) e/ G" v1 p c) U6 i5 y) v1 l
老马嗖嗖 2007-04-30 13:04
' \1 P. [" N) k) Z/ b
6 r/ t9 Z( R8 L- c$ t8 y
; h- R6 g. l1 y' V! J4 f" f! X1 \. {1.清空日志 1 [8 \. P- t+ f* a4 g
DUMP TRANSACTION 库名 WITH NO_LOG 2 e d/ v$ u* |6 \! A. }
/ s: {/ o. O& P1 S3 P8 d+ f2 @2.截断事务日志:
) {% s' d7 I0 i( {4 y8 _, K3 mBACKUP LOG 数据库名 WITH NO_LOG
# u8 R! O: p+ z0 e9 y4 U2 u+ M' k( E0 R1 h K" \2 ^& n
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
# O+ k! f7 X$ [" Y( I; b* C1 Y! x3 K企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 * j' D6 X8 Q4 y/ h! c" G% i
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
* C$ H% F8 @) Q, I--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 8 n, n/ z* s4 U$ L
, R) W/ \" f2 N! K. W$ E
也可以用SQL语句来完成
9 B2 `: T5 z. W--收缩数据库 # `9 f, V( }; G1 w" G
DBCC SHRINKDATABASE(客户资料) C7 I6 X' y& i% l+ ?# O% u) S: M
( L: M& T8 T# C z2 ]
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
- s8 g: Q1 x: s" v" K1 L! tDBCC SHRINKFILE(1) . D7 S9 P! [9 F' z! l
# Y2 e9 i6 \+ m) t3 w$ f4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 4 A% E: e8 w# z7 u# y( N
a.分离数据库:
& \# z4 J8 H) K+ g% A企业管理器--服务器--数据库--右键--分离数据库
* I2 n" z# ^' x- J% v0 O0 g% U4 M# N0 E
b.在我的电脑中删除LOG文件
! S/ x( d% ~5 g$ @+ u: ^# a a) e
c.附加数据库: : @2 r! ]8 h4 g& A1 s; M+ {+ \2 I
企业管理器--服务器--数据库--右键--附加数据库 0 ^9 e- ?; y2 }' Z( d- b+ }
0 B& r4 `' u; P) e0 G
此法将生成新的LOG,大小只有500多K
% |- _' S" L* p5 a/ s" b2 R# v; T8 b, L$ n
或用代码:
+ D5 Y9 n z0 x( O下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
1 I, R/ \$ p, r( @; Y
7 F' M& W3 x+ E; K2 q {+ t, Ja.分离
, [6 _+ l0 E, c# l" PEXEC sp_detach_db @dbname = 'pubs'
! T. x x) H, c$ r& ^1 q o" z
b.删除日志文件 8 V- k+ p+ N* o6 K' D! ^% v
8 B- X+ U f$ k% [2 u8 N
c.再附加 3 F2 m; i' p% T: ^( Q1 z
EXEC sp_attach_single_file_db @dbname = 'pubs',
, A* A& z: L5 k7 U6 {/ E% ]@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 3 X6 M2 }8 E2 Z8 @4 S3 f
- u) n0 Y' U1 ?0 @" y2 i6 k
5.为了以后能自动收缩,做如下设置: 6 ?0 T5 T; t* p _) V" ^* E
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
1 G" T: C4 B. j5 Z: R
" n- m& z: g6 E; g) q" @2 a% ]--SQL语句设置方式: 3 f: }& Z# y; ] ^5 d# _) u5 F/ V
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' ' u/ m, d f2 j
5 z; {2 A0 w5 O0 Z+ }% h2 x3 p
6.如果想以后不让它日志增长得太大
( j. n) D: P+ I' w企业管理器--服务器--右键数据库--属性--事务日志
# B% F6 X( b$ ?--将文件增长限制为xM(x是你允许的最大数据文件大小) 3 k% S& `: G& a: }
7 w: V9 B+ z% Q
--SQL语句的设置方式: & [2 U9 E6 R; O, N
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) ; ?& H6 l! _9 N8 ~
2 v3 n1 ?. o0 W- b p! {2 C4 d/ G' g# Q% l2 d5 J* v; { p/ s. W( e
vxfire 2007-08-28 14:19 ! u# i( V, W- v5 q5 \4 R
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
! m( M L9 i' W' C, y |