压缩日志及数据库文件大小
! l8 E. Q( ~2 t2 D _# G# Q1 |0 ^1 H
/ m) b w" U9 ]( ^; M
2 ^, C! u* A) h: v* ]. X
--下面的所有库名都指你要处理的数据库的库名 . ?/ d. |5 z2 x3 u: m, j
5 S3 C" V# t& V9 W5 [% W
1.清空日志 ) Q, W6 |4 v" U+ @, x8 [
DUMP TRANSACTION 库名 WITH NO_LOG
8 \+ R* ~7 \ }+ X8 o D
/ g/ p+ }* i6 |7 l0 d$ o 2.截断事务日志: 0 s ~2 M: c0 T1 {4 A/ K
BACKUP LOG 库名 WITH NO_LOG
* c' f1 ^% ^7 c2 F( C
8 Y7 v) B d0 R6 a" q D6 B n 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
7 E: W* w9 K1 u3 j- h2 @1 ^ 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 * ] Q- L' a" G7 T- v6 o) a6 L
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
, k7 u8 ?4 S3 K: @1 J" y --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 + C3 h) U0 J- A0 ?2 G- ^* R% O" Z" [4 L
& S( ?- @- l( C9 g
也可以用SQL语句来完成 R3 i; }" W( p9 D8 V
--收缩数据库
9 z4 ~: I w5 V DBCC SHRINKDATABASE(库名)
8 I& Q# o2 @! I, a8 V( h8 D2 w, U3 z2 B
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
# i- e( v( }# c2 s) G& \. V" P DBCC SHRINKFILE(1) ; `7 J3 k. O( Z. X$ S: F0 `
/ x2 z" q, t% A) a( K; W |
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) * T. Q1 y d# a$ _9 f
a.分离数据库:
( w2 R8 u- L, F% K) b 企业管理器--服务器--数据库--右键--分离数据库 : p' e; z' H$ I# ?8 T6 `% y
( y8 y: k# q6 c- U1 Y
b.在我的电脑中删除LOG文件
; b. P5 i3 i2 p) X- S l
5 S `* N# H+ }" v c.附加数据库: 7 K L2 g+ t, X) M5 x
企业管理器--服务器--数据库--右键--附加数据库 2 [/ A4 g+ U" V$ t7 }! I" L
" g3 R |' s! j( f1 r0 L4 _5 z 此法将生成新的LOG,大小只有500多K / p7 r& b0 Q/ L9 C9 `4 J% v
! P8 g o6 X, v3 X3 p 或用代码: 4 i. V0 V) S) N8 k5 Z5 A
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
. M* J7 s$ D/ q) l7 j* E2 y; Q* B( ~
) G' }8 O& U2 e% q4 h9 H, A/ v- y a.分离
% M2 s8 d7 D% i N1 u EXEC sp_detach_db @dbname = '库名'
7 b& g; ?8 t3 @
0 k* S3 x$ T. v1 g. W9 m* X0 W9 D0 e b.删除日志文件 . k ^/ H0 R+ |1 t
/ c6 [* t- O% n% c; W c.再附加
$ @+ w4 I% k. H* u0 o+ ~ EXEC sp_attach_single_file_db @dbname = '库名',
8 U; ~5 [2 i# h9 k; I! x @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' + l; d9 K+ V1 j. k
2 B& o, @, e2 |! l
5.为了以后能自动收缩,做如下设置:
0 r! n" Z& B! [) R2 K! ~ 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
7 F7 o/ i# i( {: W% H3 T8 ^/ V2 Z& w$ [' z) h
--SQL语句设置方式: - n* M7 P) I! J+ t6 ?6 v& K
EXEC sp_dboption '库名', 'autoshrink', 'TRUE' / q) j7 n* ]5 K% | J' ?
( N5 A% r* F6 W: j: e9 Q* v4 m
6.如果想以后不让它日志增长得太大
1 G- ]- _. \" a# ` 企业管理器--服务器--右键数据库--属性--事务日志
, o$ i' D" O! X --将文件增长限制为xM(x是你允许的最大数据文件大小) , U- O* _9 i8 a9 T: Y; \ q
9 v# W/ ]4 a( k1 y& K' y, S% q4 e# C
--SQL语句的设置方式: / x) S# k* l. c4 G1 f6 d2 C. U
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
K/ X4 a+ h0 V' n) Y, m( m9 Z0 M2 B ---------------------------------------------------------------------/ _- _- Y, Y% W) C* ^
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
% ?: F3 G; ]- u# j# g# `8 e# w
" f0 `+ v% _% v8 V: R*清理历史记录 ' G7 n# k: B( i6 E& Q* i
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) 2 v8 q7 \) N b" C' r) ]/ M" k
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
) `) I8 A+ @3 _8 d6 `( ]% I. o如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 6 ~/ m# y1 L* ]0 v% l- M# M
- y- i8 M# p/ E2 ~- y3 l
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
7 `8 M3 `+ y2 e; ?9 Y点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 4 \! X8 i1 p# {# l7 c% b+ [
直接将x改成其建议其最小值y按[确定]即可压缩. 8 m- }- ^; B* F4 [6 v
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
* Z6 t. A$ x! a3 Q$ K
# F- I% P6 T m) d, P1 D- b总结:其实也就是两个指令就可以完成了
! s5 Y4 o# E ?6 a" MBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
/ l2 g, b7 Z& A; q8 WDBCC ShrinkDatabase(DateBaseName) . j2 r' Q2 l0 e$ ]% ^& l" l2 N
# ~4 O! |* w% S# c9 a" @ ^*设定数据库自动缩小, 默认值为OFF / r. o7 `. C3 S2 M
方法1.
# s; E- T# J2 K z2 x B2 EALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 3 m; Z% k* D, q
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON : n# K- Y& T$ [0 @9 `' [( u
方法2. 7 b, I3 f9 a; @& L1 [+ t/ j* @! L
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 , ^3 r0 S" y, i( o& J
: Y4 f2 `. `7 T( K. c2 f$ S, K6 `* i4 d- Z* N2 i7 H
SQL SERVER日志清除的两种方法 ' I+ v# q' A" h% h0 k% o( P
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
9 j3 n* \7 C3 X6 r! U1 X: A* g
! e2 H; r% G" ] _ 方法一
! D3 }; K9 R; H3 ~- l/ l
) p2 R0 L5 ?1 T Z, X& `- u/ r 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 * F( n9 _4 R" V+ ?
1 ?' J1 A2 ^/ ~3 x; Q3 |" P# }
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 ( M" _- u* U& \% V5 M2 A
$ h; k9 H9 I5 K$ F3 C+ ?! ?, I# F 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
X5 M3 J9 e2 }* _6 R* _4 s& k Y
' v" ?+ R5 u" J7 \0 a' K; J 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
' {/ l$ Q( j1 s/ Q+ R+ S/ I7 A+ B! [7 c7 }* A
8 x o! z: g' ?) h& Q1 f- q5 M @$ \" X7 V3 V: p
1 ]1 H) S2 z: d. J9 w! HSQLSERVER中讲: $ o/ q3 W' X- J. L
# Q9 \$ ?& O, D0 P: mBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 4 r3 N: q2 S) C* x3 g4 E5 H
! x& `# f; m/ O* d H" D2 g
但我在数据库中进行上述操作后,事务日志还是没有改变。 5 d8 [3 _" j5 q. b) q
% T1 z9 q$ N2 M9 k0 d6 Q
, j h5 H" Y" y, j, d3 [; |第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 " i9 V/ E% A8 r( Z7 s. @$ h# m& e
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 5 F! ?. b w3 E, n! q$ t
; n; E# ?2 ~ v4 }
$ y B7 M0 P9 M+ j; j老马嗖嗖 2007-04-30 13:03 * h* {6 P3 O7 T% L' V# W3 m
SQL Server 2000中*.LDF文件是什么作用) }# h3 m4 @9 U7 e/ ?% m
7 m8 X) q2 h" j6 x
*.mdf是数据文件 . J; H9 ?+ L" P; o
*.ldf是日志文件 / R8 X2 \& ~; t
当数据库出现问题时 - F$ o' _" k! o$ m& r- ?' y
可用以下语句恢复
1 a! [! ~& t# J数据恢复一 , u: r# p P% z, o- p
1. 先分离数据库
: p% T3 F0 }4 s; oexec sp_detach_db dbname 7 _8 y2 F2 |" a, F7 F( C
2. 加上数据库
) Y3 Y5 @1 H! [/ L" K) Sexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ 0 r8 K1 S: M0 U4 C
- E3 T/ Z' K1 ~; x3 V
/ T/ `' _3 w0 ^
老马嗖嗖 2007-04-30 13:04 ) O( T2 K% o* E* O9 d
8 m4 J5 E* q8 O3 t% }
- @+ _3 K8 G+ q% E- u1.清空日志 0 ?" g5 o+ b$ |3 \4 S: F
DUMP TRANSACTION 库名 WITH NO_LOG 0 d# [3 a: m0 P! D
" z0 S- s; O: M0 I/ q! \
2.截断事务日志: . m; Q7 p: @- @8 f- s$ y; o
BACKUP LOG 数据库名 WITH NO_LOG 2 E/ D& U' u5 E9 G8 B5 J& M
( ^3 q9 z$ b+ E( `! o& H9 X3 P3.收缩数据库文件(如果不压缩,数据库的文件不会减小 9 }- V* j# ` y2 H- E0 |
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 4 I: r6 p" g5 F' L2 r! q7 e2 j
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
# u& G/ c9 h- q- d--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 / H- W; W% E- p4 z) ^" {
A: M* m9 O& g) a也可以用SQL语句来完成 # ~% S6 L/ a* k, w; C5 ]5 @2 J j, X
--收缩数据库
! k' K& N2 x& I) tDBCC SHRINKDATABASE(客户资料)
0 }+ b7 j' J0 ^; d
1 c9 @9 {- ]9 J--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
% Z( Y8 |' m" R9 \ xDBCC SHRINKFILE(1) # G$ {) k. D, h$ G* u. j
( }; t# [* b# a1 Q0 h# o: L4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 4 K3 r4 ] A2 A$ c3 a7 Q1 z6 o
a.分离数据库: 6 f* y" X3 a+ V0 X
企业管理器--服务器--数据库--右键--分离数据库
% y. Y4 r& h& _2 b5 {( v: a+ d5 E' t& k$ D
b.在我的电脑中删除LOG文件 * M( L' w( G7 A* Y
0 S% {7 j2 E1 \, u6 {" @! E8 w0 m- ]
c.附加数据库: & g$ j8 r1 A0 ~* Z: I& v; s2 c
企业管理器--服务器--数据库--右键--附加数据库 $ a- r& l, W" \+ [
: K& N- l$ Q8 h此法将生成新的LOG,大小只有500多K 4 T; a% {+ U% O! [
% I. f p' q( G' F) |5 @; i: B
或用代码: 8 I. v3 X; u. Z* z- H5 j5 e
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 3 Q) m% R ]8 X2 ?9 [
8 I2 t& A ?. E2 Ra.分离
! z% _6 S" q2 x" C- A' @. X9 G/ bEXEC sp_detach_db @dbname = 'pubs' $ y6 y6 i4 ~9 j4 H+ K5 d
# z( ~7 ~5 @& i: Ib.删除日志文件
) p) R( A! w% L: a- N/ ^3 ]
, E3 f: V# `* T& M: jc.再附加
/ K5 k% m7 @: l! g2 [EXEC sp_attach_single_file_db @dbname = 'pubs',
9 b/ R! L; t1 N@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
/ P4 x( I8 z- q& _5 L
& A8 R# y6 {* Z5.为了以后能自动收缩,做如下设置:
0 F& Y% }2 F+ {. [4 ^企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
: U0 U" F/ |6 r/ @! s/ P) y, g
! a; C- L5 N+ n9 H3 ?# [- ]--SQL语句设置方式:
! g$ j2 E/ i& d' S( ~3 _EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
" l9 |: _0 \9 k9 X, Q$ |/ w( Y1 z1 s
) s/ Q- L2 f+ y7 a0 `6.如果想以后不让它日志增长得太大
; [+ Y4 {: {$ Z# A4 n' k4 Z4 q, [企业管理器--服务器--右键数据库--属性--事务日志
+ W+ U3 u' j- z! o. S. H--将文件增长限制为xM(x是你允许的最大数据文件大小) 2 ]8 ^8 D8 H8 _6 K/ N
7 G# Q/ j- a6 E0 {--SQL语句的设置方式:
! u- J* \+ M, g# U3 @& B) [alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
; g6 ^- w8 e0 D8 I7 ?: O. j, u: j0 e8 j* p
y: P$ H j; X$ @" [- b- K9 P' evxfire 2007-08-28 14:19
3 a- R' G4 [3 m) f. d- h& Z. r我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
8 N1 @" I4 E2 F |