压缩日志及数据库文件大小 0 G8 x% R) N& B
4 b0 P' I1 x& A* W
6 S' O, t; x; W* G( [, ?
( E$ Z7 Q) K* i9 h. U8 I0 F --下面的所有库名都指你要处理的数据库的库名 4 P+ H- Z% K9 P( C- W6 U
4 w- E: }& v8 t! K
1.清空日志
n& s# k4 B z DUMP TRANSACTION 库名 WITH NO_LOG 2 N; x- ]0 j$ K2 D0 s0 {
* Y: D+ S( ?/ t! G, w
2.截断事务日志:
6 o+ f4 a# t! O BACKUP LOG 库名 WITH NO_LOG 8 W. g9 _3 P5 a$ s6 [6 Y
2 H" X2 w8 t, z0 z
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
( y a: H: D! L5 ~: I5 [ r- h 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
1 S6 }( ~/ Z4 n$ k6 C --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 8 c8 p" o7 t& V7 F) P3 z, b' |7 ^
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 " i& g( m7 U, Y& }
! O1 T+ S% w! Z" _ F+ O7 E+ u& l
也可以用SQL语句来完成
) z1 R; i$ v. a& O+ Q7 X2 b8 K --收缩数据库
3 j3 i3 J" s* Y0 z7 M DBCC SHRINKDATABASE(库名) 7 }5 j G/ T) D# ?8 _* R; ?6 k
" \+ I: Y8 \1 J8 ]1 M' B
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
; ^: h+ p; L5 m- b1 H5 ^ DBCC SHRINKFILE(1)
+ I: e w( I4 m# b4 g9 A# N2 e1 \0 F+ @) o* ~
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ( l0 y/ N" O* }) y: R0 F. Z( q
a.分离数据库: 4 I$ P8 S$ C" ^. `7 n1 t% W7 o
企业管理器--服务器--数据库--右键--分离数据库
" v" M; ~, z9 c4 M1 J" l p; K+ b' ^0 c
b.在我的电脑中删除LOG文件 3 F7 m2 h1 ~9 }$ p M9 H
. o* [6 Q6 D* p
c.附加数据库: 4 a; i* }- F) q' D. i
企业管理器--服务器--数据库--右键--附加数据库 , |9 N5 V4 i" U: @& q3 @
( |* F4 O% U8 k4 r/ O7 J" t 此法将生成新的LOG,大小只有500多K
# b# s. l& z6 o' t# j* Q: P& N; B0 i4 j6 I$ c9 T8 P! i( e4 z
或用代码:
4 M: f0 a4 L4 I( {0 C9 l 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 9 j: L: \* [ \0 r3 e& w
! x9 t5 r b( Z) V: R- z4 L5 C a.分离 4 ^* F+ P4 `4 [0 x- o$ G
EXEC sp_detach_db @dbname = '库名' 8 E5 _- n: K; x& G) ^$ O) n- L; m
/ t. c+ B/ Q/ S3 T* h
b.删除日志文件
. U% A0 I @4 H; i. f1 Q0 h( M
6 k; N* r1 n" Z/ q; J c.再附加 $ r1 U+ b" _( i0 l% s- V+ v
EXEC sp_attach_single_file_db @dbname = '库名', ' e' y% a1 U0 T$ _( V
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
" C( x t, L' q' M! a" m# v0 t" u+ T
5.为了以后能自动收缩,做如下设置: $ K8 a. e4 L3 G
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
6 \' x" B+ `; |7 b! \3 v6 U1 a' ?
' z5 f4 N. `! }" @8 z, X( _ --SQL语句设置方式:
# ]; \7 k; A- z$ F EXEC sp_dboption '库名', 'autoshrink', 'TRUE' , o. n& i* B4 ]/ R; A* H
. l$ q$ @+ p4 P8 N& h' S1 b
6.如果想以后不让它日志增长得太大
: h; S9 L) }: @ 企业管理器--服务器--右键数据库--属性--事务日志 ; s! W, D0 D' U9 u3 Z
--将文件增长限制为xM(x是你允许的最大数据文件大小)
9 I% }/ e9 t; G2 A3 C
% |. j' _4 |2 Q2 M% v --SQL语句的设置方式: - I: ?6 q1 ]! b s8 I
alter database 库名 modify file(name=逻辑文件名,maxsize=20) 1 m; H' P' A$ Z, b/ ~
---------------------------------------------------------------------' a8 Y4 K$ f0 }2 a' N, o
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) - X& z: A7 }- {& O6 G! h
& _$ M; J9 M% \( J Y% X
*清理历史记录
9 S# j; i( f" ]# y1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
- x8 C! w8 @0 x2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY % X" T/ i4 Q( s1 Z& a! V. ^
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY % D0 C# H" N4 T% |0 q
( M6 m; f4 ]5 ?" A: K) v
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
8 r2 ?& I+ i8 o" H, [点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
' F' w+ N* @" R/ y$ \; o& ^+ J1 L! D7 r直接将x改成其建议其最小值y按[确定]即可压缩.
5 p7 f: O% l: c, m2 y4 v" _' u先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. J) G& e+ U; L2 M
! l j; e2 @' T. I: I6 [7 J总结:其实也就是两个指令就可以完成了 ) b& ]7 | m2 p0 k: F* ~* Q- }0 A
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY * Z& p" ^3 n! s% c7 ?: D
DBCC ShrinkDatabase(DateBaseName)
3 L1 t5 }% X: r8 J9 X% l$ t4 F" Z) I- c* X1 q& A V# C
*设定数据库自动缩小, 默认值为OFF
# v: d* T" G3 @' f0 @% i4 m方法1. : N% f5 U5 B! B/ _& Y) x
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
0 u% d3 n7 y% \$ |4 ^如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
4 R- @6 ?* V. @2 l方法2.
+ U' R9 [ r; G% g$ `在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
" i3 @) D& d: N: {2 p2 v2 u1 h# B
9 {5 W1 u2 _3 j: s$ f- H, ^9 b) y) T6 P8 o- A
SQL SERVER日志清除的两种方法 * B: R" u. _. V$ _6 h
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
3 x! }% d5 Q$ P' q. v& F
( e( z1 n# N: \# x) J+ W+ P 方法一
: x" @. s$ y. O! A6 a9 p- Y3 _9 q: p' P
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 6 L( D2 x7 D# m
$ {/ p) H) e0 g
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 , t8 o' d4 r0 `; i8 F# z. E0 x
, Y6 C9 c1 m- S( k) M4 F
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 . [6 `9 A* t" k
3 u" A, r, j# q* \: L7 h
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 7 ~ g" [7 |% s0 D0 }( D1 V
! [' }8 D3 D' d+ ^& G/ e d
3 X. c' D* ^- S. h$ n6 m6 X6 k
3 J; S% q+ a2 [- _$ S0 _. S$ P
, |. \$ e) g- X6 q$ rSQLSERVER中讲:
( ^2 T$ b3 |3 u
$ r' C) F% I' Q7 W9 F9 VBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
1 I1 r: h: X. D0 x" b6 c2 Q5 T7 q$ T* Z" ? o
但我在数据库中进行上述操作后,事务日志还是没有改变。 ! @9 c$ b+ t$ P. \
& o" [8 H5 Z6 R8 N- { c5 Z$ h
1 A. {) x; M/ i
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 2 v7 B" o% b1 ] a+ U5 s
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 - T! Q7 k0 v! \, x# a
& J. d" g! h& ^7 _/ P$ l" p5 Q* E! O5 N7 n) v
老马嗖嗖 2007-04-30 13:03
* {" _* P" v2 O0 YSQL Server 2000中*.LDF文件是什么作用$ S% r; u6 {* o8 W! @- i3 Q9 ]
6 u3 ?1 }" i X- o
*.mdf是数据文件
! ]) k3 k* G4 ^+ _8 A/ d*.ldf是日志文件 : H. Q3 o6 o; T$ J8 i& A
当数据库出现问题时 ) Z) e' W' j, O9 K0 G. V) k
可用以下语句恢复 ( j5 E+ b. K1 v2 F: p+ V0 x
数据恢复一
t- l$ z' E1 `9 }) b+ f1. 先分离数据库
; z6 I- V4 W0 I7 S3 yexec sp_detach_db dbname " r$ J. v; H# K
2. 加上数据库
% P& {3 x/ H( {2 u bexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
* [8 Q7 a. T: s( h& B2 S
3 _, ?' n3 Q0 {2 t8 d' M6 p |! f, I" K$ A% H6 z8 o% v
老马嗖嗖 2007-04-30 13:04 ; K/ b+ L( |2 {$ z+ S4 H
+ H2 U3 g; G( m$ x1 c" W4 m7 E2 ?4 [8 }, x- L' R4 a$ Z( b
1.清空日志 2 Q9 e; l2 T5 m6 @
DUMP TRANSACTION 库名 WITH NO_LOG 4 |5 b5 d3 @. j: _( j# Y4 V$ F
, t; u, ~- D- j4 b+ j- u2.截断事务日志: * z& X: e# o* _1 [3 R1 s
BACKUP LOG 数据库名 WITH NO_LOG
0 V _- S& Y" m* f3 P
3 Y" i2 s) d/ | t3.收缩数据库文件(如果不压缩,数据库的文件不会减小 9 z0 R6 H9 N- r7 r# ^! y
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 8 Q8 W, u4 w3 V% }' C1 j/ q
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
1 q5 Q9 E6 k+ C( |! O2 h--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 * ]* E# W# ]( R7 `0 j
& C# O. ]1 M0 {8 B0 N+ b
也可以用SQL语句来完成
- ^7 r8 @7 A4 `--收缩数据库
, ?/ y7 R5 s V8 T1 F/ U0 y } Z9 XDBCC SHRINKDATABASE(客户资料)
8 Y6 w+ @4 h6 l e ~- B
- w; j$ P* ~8 w( M: ^--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
: E) k) ?$ `+ K! \ ^8 @! F) \DBCC SHRINKFILE(1) 7 |. ?5 Q/ o; p
: K( q/ W6 L5 A* f3 d& q! V5 x4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
) l# q. [& T" Wa.分离数据库: 8 z* e" N7 p2 _: R# R6 c( W
企业管理器--服务器--数据库--右键--分离数据库 - M1 L. \, G4 b1 y9 n+ o
4 c0 Z3 _' G9 bb.在我的电脑中删除LOG文件 3 `3 E) }9 j$ m+ R
: p6 l# J8 W; d: K( Sc.附加数据库: ) x0 F: R1 x/ ?9 b" f. d' V+ \
企业管理器--服务器--数据库--右键--附加数据库
+ x8 x( _) F$ s" Y o1 K# n0 n3 v# @1 Q/ y
此法将生成新的LOG,大小只有500多K 4 x7 L D$ M/ G6 \5 R
7 u' H d8 y% P' [* V3 u/ e
或用代码:
6 ~( i3 T& Z1 J9 p3 l; Z下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
/ @4 S* o8 a& U5 b9 ]& o; n2 X$ s
; N6 b/ @( L7 W3 J f" g8 z: la.分离
8 m. P; U) `! H: S7 cEXEC sp_detach_db @dbname = 'pubs'
5 r9 n) p. V6 l3 t' d' W! {6 o' T
2 \1 ]- L* Y% s2 B# }; n1 Cb.删除日志文件 1 C4 w- I- J3 z0 j, w* A! A2 n
$ K0 Z& k g7 X3 I' Q( Tc.再附加
9 u \, N7 l) Y+ d7 ?EXEC sp_attach_single_file_db @dbname = 'pubs',
5 p5 p! \3 F, c3 a@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
' m/ @6 f9 e- d$ [8 m6 I# W. x: P/ I7 p8 _
5.为了以后能自动收缩,做如下设置:
, t+ L* H# W3 r- ^ T5 `. p企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
( J7 Z; K3 |7 I# w1 I2 |5 W7 u5 L8 @
--SQL语句设置方式: 9 a$ ?, n1 t" [# C, }: v7 \" }
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 3 b7 I: M8 x2 D, _& g3 w7 G$ Y# _
: @* o+ I; v j3 Z( k/ L$ c$ J
6.如果想以后不让它日志增长得太大
0 q! Q( v5 G/ n W f2 p" d, S企业管理器--服务器--右键数据库--属性--事务日志
7 C9 ^8 `) {1 [4 z- O--将文件增长限制为xM(x是你允许的最大数据文件大小) + e. ?8 r) W8 t9 p- ]9 \& u3 p7 Z' V5 W
$ B {+ ^, G* |
--SQL语句的设置方式:
9 j" G1 L. d3 Yalter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 8 [3 H& T; v! e% V9 l9 K
4 y$ a$ B" p5 U" w! I# f: W
6 c9 Z6 b$ R' O6 i F) F1 x1 C3 ?vxfire 2007-08-28 14:19 6 s2 _% x+ w: n4 A' S7 N
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
1 Z+ {8 u# L* e) @9 L9 H# Q |