压缩日志及数据库文件大小
# H% c+ N# W0 D5 E' {+ B& K3 e# J' L( P* H2 S$ q1 g/ J, _4 I
5 M- w4 A: ^* R) T* j- |
; s l$ ], W; c --下面的所有库名都指你要处理的数据库的库名
+ c! G/ X( Q% V$ M) F5 V9 @0 i
3 J5 m: M6 L# G# @ 1.清空日志
6 U3 D5 i" [7 a* O5 G DUMP TRANSACTION 库名 WITH NO_LOG 5 Z) e1 j* q8 o- M: P& g3 S
5 L/ v# ?7 V, `: c1 ]+ r- l6 T 2.截断事务日志: & ?, A* ^) h1 \. `( \
BACKUP LOG 库名 WITH NO_LOG # v# o1 a" h6 I, P* {
) P7 R! F+ r/ k1 }
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
$ K) X+ Y% F! H; P% L 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
2 M& z" _; F% u" z+ V --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
4 b: D& L9 ?* J. P$ V5 R$ G& W --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ( P, A9 Y# w" {: Q4 O8 a
/ d$ D$ G2 L+ e# s 也可以用SQL语句来完成 ( \! w2 s+ N( a7 F% j, b9 Y# h% C
--收缩数据库
0 @9 z9 K* N, P1 X3 a% x DBCC SHRINKDATABASE(库名) : R) [+ f" Y4 O8 _
; [& t0 c8 u+ p0 \8 A. T
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles & r2 E4 E( w# W
DBCC SHRINKFILE(1) ` d+ b6 [ b3 S; L i ~$ {* Z% `+ k
- ?' N7 N. a$ }" S, s" I3 N! g+ S 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
# e9 u+ h" F! F. K8 _* S a.分离数据库:
1 T# ^5 f1 y- C) p/ W( T, ] 企业管理器--服务器--数据库--右键--分离数据库 * g. v& }: N d2 C! K9 ~
6 q8 l. o$ p1 F/ i8 |
b.在我的电脑中删除LOG文件 9 N4 r# f9 K* Y$ U! Z9 I: D* A1 R7 K
/ Y8 U3 D: m: }/ f- Z' q4 L c.附加数据库:
9 Y1 I, V+ y' `5 A9 P 企业管理器--服务器--数据库--右键--附加数据库 ' T& S: @; J& s3 d
1 k/ {; @8 I! u' z, t 此法将生成新的LOG,大小只有500多K
: v; ]3 c! O. E, |4 f+ L! M# y6 g5 a9 r- V/ y2 R& r
或用代码: 5 t3 p# [* D) W& b/ K5 m1 {
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 # g) |/ `, T! U# Y* ~4 X' P8 Z% V
% z) F9 O: {2 ~: z a.分离 - O' V3 I# u* O V
EXEC sp_detach_db @dbname = '库名'
3 k2 Q8 H4 I7 Q! a* e% L; O; o4 \4 ?; _
b.删除日志文件
5 U. C- ]9 q' ]" W! q& Y# b# R3 G" g4 \7 E+ h
c.再附加
* H: V8 _7 ]$ G x9 x EXEC sp_attach_single_file_db @dbname = '库名',
; \" r; K3 A6 t' A. l2 S @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' + Z! T' z/ L+ {) U$ j
& j4 s2 F# L1 ?# h 5.为了以后能自动收缩,做如下设置:
% E; ?- E9 Y/ M) D$ t1 h) | 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" $ d, Z& x* i- M
( N- N: m# ~2 p- E( Z5 F --SQL语句设置方式:
6 w5 K" |( Q$ h4 E( p/ o- L EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
3 ^) P( Z. z3 c8 z8 I6 {, v: o' W" b+ q6 ~- o+ `$ A) q5 }! |# ]
6.如果想以后不让它日志增长得太大 ( X% S5 k6 B& Y+ t, }& q
企业管理器--服务器--右键数据库--属性--事务日志 + Y g9 {' w& ?: W9 w4 Y
--将文件增长限制为xM(x是你允许的最大数据文件大小) $ S. T1 B& f, B% `
" m+ ^# I+ \) l
--SQL语句的设置方式:
+ o1 U0 n ~0 o8 V1 h4 @! F alter database 库名 modify file(name=逻辑文件名,maxsize=20)
- q& `: R0 K8 {8 l: q& { ---------------------------------------------------------------------7 C3 T) v- O, j+ F+ i# G$ ^
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
" j$ T- T, Q A2 ]2 f
' x7 ?" ]6 P. }2 D. i*清理历史记录
4 ?+ l7 S6 d6 ?1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
. K, W& }, J7 a2 M* V- g2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
5 v5 \5 a9 E" m. ~ K/ J' r8 W如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 2 _6 X; {! w% t5 X
' p/ H" S+ \8 }. {; f5 k* F8 h! q) g
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], ' f! `6 X& ?" s# z1 W8 u
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
4 K$ Y3 W4 A( O9 u9 G直接将x改成其建议其最小值y按[确定]即可压缩. . g: g6 A" S4 y
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
0 \* ? Q7 E3 G4 v: t. n% B) Q" l+ l" @& u
总结:其实也就是两个指令就可以完成了 ! [5 x+ O& Z& `% ^
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY / e6 d( ^; z9 ~& K" H
DBCC ShrinkDatabase(DateBaseName)
: M1 R6 i: V! r" p6 O
1 c- }2 R% T0 Z3 f$ W8 w7 F1 B6 z*设定数据库自动缩小, 默认值为OFF
/ a+ [2 n( e5 R$ y6 F( d5 e6 B; W% w方法1. ; o2 j1 ?9 i% a/ F7 j3 @
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
$ H6 I8 W* J. n5 X1 k/ {* m如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
7 e ]" u2 f% ?% h7 {8 g方法2. * M- j) ~9 q# E
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 4 T) ]6 }! t! D& s
0 z9 }5 W' X, g0 G
h9 X3 V+ ^: ]/ @: _ SQL SERVER日志清除的两种方法 * [3 [% E% s# u8 j! I+ _8 B0 M' i
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
& M, o2 j/ Z2 L) n/ d# T
$ b& O/ w5 d& g$ j; J( v 方法一 2 D/ T- B% K, Z a0 s
5 W5 P7 J3 ~2 D3 n! T& U
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
, n4 N6 l8 `2 a/ p& M
4 P2 W m8 M0 F' X7 O: t 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 ! `9 w V7 Z1 l5 E% \& f/ L- F; ]5 E
# m9 K5 o, p" X* T 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
7 B! ^3 e" R: G# O: k+ Q
7 |& I, a8 B' L( E4 i* o 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 7 w( x5 T& d' m; ~5 w6 _6 F8 F0 G
# O! Y' J! q# l, V+ {
6 H) M- Z& @8 m& b9 x2 F( e3 ^/ `+ Z# m Q7 u
! s& R3 R ^8 Y- A1 F* a( J" |
SQLSERVER中讲:
6 p* z. _7 p* I) }4 A$ a( y: k; v W+ x$ `/ E! ?
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 8 R; @' |* `* }
0 E) A9 U% ]# D5 v9 @4 G
但我在数据库中进行上述操作后,事务日志还是没有改变。 ) g. f0 Q& R$ W' m I* [% C6 R1 M
) n ~5 B+ |" [, c: ^' S
; T+ y7 U. }5 y- m# G, T( T第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 3 q$ u2 n9 Q" m$ O. u, |: E# S' K
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
" s0 x2 C& K0 S/ S6 {& `! V U! p4 L* i. ^9 f. i
3 h/ L! E- d# M+ e: {老马嗖嗖 2007-04-30 13:03 9 C& [, C; y+ t( `
SQL Server 2000中*.LDF文件是什么作用7 |$ k& y: F* d9 }
7 ^: Q+ e5 P# E7 [; L; o e*.mdf是数据文件
- ^# X# [0 f' _; ]; i*.ldf是日志文件 R1 o/ f6 j5 ^0 }, u8 G
当数据库出现问题时 ! A$ j6 Q0 l' E/ J2 H
可用以下语句恢复
% w$ ]9 G1 f2 W3 E" Q7 A- W- ^9 O& R数据恢复一
8 q9 C, \8 L7 m+ k) s- Y1. 先分离数据库 ! M6 o0 C8 Q& Z+ Z
exec sp_detach_db dbname
' O# `* B, H" ?! q/ \# I2. 加上数据库
/ H w5 `$ K R/ b5 L: dexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
" t' @# P+ @5 V/ p1 R. V( ^' d. { D% L6 S
. l6 K7 n% v2 g8 c; e$ ~
老马嗖嗖 2007-04-30 13:04
i. r& {: k% L8 R( X, }5 O4 Z6 U5 B
; H1 m: m+ n+ i* w$ K, K! t1.清空日志 $ K) v; m/ g1 T/ j+ h
DUMP TRANSACTION 库名 WITH NO_LOG
L" i2 \$ g4 J N3 {$ G, u: `- \4 j/ k5 e! Z- [
2.截断事务日志: , o$ O9 T: v0 Q
BACKUP LOG 数据库名 WITH NO_LOG 5 {" ^* `8 Q) r2 q8 ?4 v
. e4 X' _6 Z) K; v% [/ m+ s+ I3.收缩数据库文件(如果不压缩,数据库的文件不会减小 . N" ^+ f) N9 r; M
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
9 ?0 y6 e F& {2 {8 X. Y9 S$ F2 n* k--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
/ o5 q3 n" z$ l5 N--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 & O% k$ q2 d5 S# b; I! i
7 V" A& c% E/ ^1 W; u也可以用SQL语句来完成
; h3 y. p$ Z$ z# ]! E--收缩数据库 7 Z$ I2 D" j& h2 ~* e* } x
DBCC SHRINKDATABASE(客户资料)
! V2 O# t. p, M2 t3 S, y1 c& D: v! z& o0 L
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 5 s- N1 ~ R- h2 B- e
DBCC SHRINKFILE(1)
8 B, o u# Q0 M- e& ]9 L- c) {! p% [$ o* }
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
& }& w) E! t2 w9 ya.分离数据库: $ w0 C4 A* C- G
企业管理器--服务器--数据库--右键--分离数据库 & \; Y' y6 X& M8 D: I% |# w; n
" l# V# W! D+ z9 m! Ab.在我的电脑中删除LOG文件 ; Z$ s2 K1 T. w) h/ a. D8 w: p! s
" X/ m( G! k' L3 Qc.附加数据库: ! J* ^ Q8 q# d/ l
企业管理器--服务器--数据库--右键--附加数据库
5 r0 J6 b, x+ W( O! J: d+ Z# [5 v$ J, w4 I& ?
此法将生成新的LOG,大小只有500多K
" R. t; ~3 u; @( M! X7 e
m/ Y" J; X; d或用代码:
% c$ Z+ _, I; g1 \: w! Z( T下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 : X ?% E3 j. s2 i; b% r5 i6 V- ~5 a
+ a% S: |* B! \8 r% }! ]
a.分离
8 o( B& i% b* I4 J Y/ ]7 z+ c i+ sEXEC sp_detach_db @dbname = 'pubs' - j/ x8 q8 P- V: c7 e7 F j9 m
; C) [7 P% y/ t) q( ? ^. Bb.删除日志文件
, n! r" e% u5 ?7 b+ }* u' ~1 I* D& Y
c.再附加
7 Y8 x3 f9 Q# Q9 nEXEC sp_attach_single_file_db @dbname = 'pubs', 7 Y; M- _0 Y+ h9 g; a) n" a
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
5 Q- | }5 Z8 [/ ]# c+ \$ U7 H, j! u/ |
5.为了以后能自动收缩,做如下设置:
: D0 e* V$ E, K: c5 G企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
5 N. q0 H* h( F- {- q7 \2 @3 y* b5 [3 V: s# t( _/ l
--SQL语句设置方式:
3 Q1 F) K/ c# P# _- S. wEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
0 t, u0 w; H, W0 V% r5 y# }5 I; G& `: J5 }
6.如果想以后不让它日志增长得太大 ; ^5 B+ ~2 @1 x- @$ i7 ^
企业管理器--服务器--右键数据库--属性--事务日志 9 N* O/ P/ x3 K6 s
--将文件增长限制为xM(x是你允许的最大数据文件大小) , j$ l+ _1 s6 ]" M6 [
# o; h- }2 T/ {2 E) S, o! z--SQL语句的设置方式: 2 M- G9 z. v' K& J8 Q
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) + C3 V2 b% ~6 k j- n/ ~ E
/ Y2 K+ F8 a- ~& N% `' A" E5 }% I8 B# W! O4 G4 }8 e
vxfire 2007-08-28 14:19
9 s: n3 ], m3 B: n! X) n1 S我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 . m8 s( b# F2 A, `
|