压缩日志及数据库文件大小
0 {7 b2 j. Y- j# `2 T
9 j+ y r) u" T y* H1 d% @ x1 a; T5 }1 J
2 S N$ s: j& E5 b. n0 } --下面的所有库名都指你要处理的数据库的库名
- O7 A/ u, L3 X' `/ G: G s/ S$ Q3 @$ I' w2 ?
1.清空日志 0 R5 c1 n* ~) K+ q, e @) n, N/ w, x
DUMP TRANSACTION 库名 WITH NO_LOG 0 X0 S/ R6 _3 e6 H( N' E7 Z3 G
# }# }2 _* S# l/ F/ S( v2 i. l7 k 2.截断事务日志:
! m* [+ b* G5 L2 W BACKUP LOG 库名 WITH NO_LOG 7 t) Y$ e3 U8 O1 b" I: F/ r
' q; i/ v/ g7 p; b1 B 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 W& e* d6 A; Q3 g
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
! s h: b4 u0 p; b8 v' S$ M --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
1 u. M/ X" k9 Z! ? --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
9 b& X5 d0 B' v$ b I+ u4 ]3 x9 ~; J: K3 a8 ~# M7 S
也可以用SQL语句来完成
# I+ p0 r, Y) F' |' J i --收缩数据库 % O6 t$ r7 l5 X7 f0 P3 z5 ~
DBCC SHRINKDATABASE(库名)
8 G# k7 p& Q% Y. ^9 M% r: {& p$ u2 G+ R/ B( b) }2 G' U$ ^2 s/ ~* k6 X/ |
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles / R+ k2 U% c) _. F
DBCC SHRINKFILE(1) - d* R/ ?2 s( T* G1 B9 j; `4 R: j
. p" O+ o' v! ]
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) $ ^) W# g' {; |" T
a.分离数据库:
- v r1 {) i4 K) I; ? 企业管理器--服务器--数据库--右键--分离数据库
2 S) G2 ?$ d1 A" u/ n
9 ~, a8 W' O5 }( r/ C/ m) D. e b.在我的电脑中删除LOG文件
/ J j/ c, T7 f% S# @2 {% U
5 O( ]! z" n* m# M+ m+ Q t c.附加数据库: , `0 j" ^: h8 K( o: r* P
企业管理器--服务器--数据库--右键--附加数据库 ' J) U, o& i! x% ]
+ f, f2 ~# w" l7 N4 A 此法将生成新的LOG,大小只有500多K / W/ `* W S" W; u5 f( F
+ @" B0 ?( s( B: F7 o& x, s
或用代码: ) I( |) j5 U; E4 w/ `9 P
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 ! A+ K" P* Z! [
! B6 B1 I5 ]0 f1 \ a.分离
) T: I9 n( h- { EXEC sp_detach_db @dbname = '库名'
7 G. ^/ e- D# F8 E6 R$ g. y
2 M: {/ V% k2 R9 T4 b b.删除日志文件 * T) t: A( U9 Z& k" p' h k
" E4 ~+ B* x' a6 Q! _( `
c.再附加
6 M c3 N% p' {2 f0 l( H2 _: e EXEC sp_attach_single_file_db @dbname = '库名',
/ ^6 o8 k8 _# `9 [; N3 A @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' " p% ?! \, _. y0 }7 Y g
% U0 _7 \8 Y& V# H* P' b 5.为了以后能自动收缩,做如下设置:
; g- Y+ F9 |5 @/ { 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" ) y' e; L$ g# q
( `7 _9 U4 e9 ^- e) T --SQL语句设置方式:
_" W' |) M l. X" I5 ~" z" _2 G. | EXEC sp_dboption '库名', 'autoshrink', 'TRUE' 9 v+ v+ @& t0 U) t- J
) R% B, O% r7 W/ z1 x8 f) p 6.如果想以后不让它日志增长得太大 + w# B" D# b Z7 s0 w# T! d
企业管理器--服务器--右键数据库--属性--事务日志
. K! y/ ?3 r1 }- b5 t, N --将文件增长限制为xM(x是你允许的最大数据文件大小) r) ], q: c* M6 ]
% s( J- X3 _. q# X6 J4 P! b --SQL语句的设置方式:
% Y) W& A" n( f9 T( n! }4 Q alter database 库名 modify file(name=逻辑文件名,maxsize=20)
: f8 t, P7 `+ M8 }! z/ W ---------------------------------------------------------------------
; _+ u0 ~# b V# p6 \; VSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) ( g+ J! J1 }( T* d/ b& J
% S, Z Y9 m" c3 J5 Y0 R
*清理历史记录
% B8 R: G1 S6 c% H1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
# W! r2 g2 a9 j6 b6 H5 }2 n# q2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
' J2 ?, y3 F+ K, l; z如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 4 Y% v C4 p3 O/ b5 A
# O U% J- X I0 B3 s, I: T9 c2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
) a: `$ q6 }, w n4 A G点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 1 J& T z; T0 O, ^( W% J
直接将x改成其建议其最小值y按[确定]即可压缩.
, L( U: w* f ?* d" ^先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 8 s+ c$ N7 }- ?% j+ t3 A
9 p/ T/ C+ T% _3 _总结:其实也就是两个指令就可以完成了
5 {* \; q0 T- PBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
, _' I3 F! S: H; wDBCC ShrinkDatabase(DateBaseName)
# t9 g) w: u- F% Z) J( m+ |6 ~3 \4 K7 y+ f$ @7 c! ?) ?
*设定数据库自动缩小, 默认值为OFF % v2 e8 [! u8 ~0 c- z
方法1.
2 x2 i/ I2 U! H$ j( z+ r a) r3 p+ HALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
t* S8 l5 y( _ h; m如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON 0 Q& }4 Q0 M. q5 {( g* h' I
方法2. : ^1 b$ R( m- t& I* y
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ) p: A6 M% e: @) n
+ ^) C& i& Q' t) R# z( i8 C" m
5 u& E4 j3 d% x( ^) N SQL SERVER日志清除的两种方法
6 Q6 S: f3 a! I( k% n# ~& j 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 4 X* T/ k0 Q5 R; U& J- V0 `
- X8 f7 O8 Z) U 方法一 ; k0 `/ H% ]/ L' V+ q
! W% M& d/ l9 ?- z/ w Q1 n, n) M 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 ; Z8 R$ `# k" V# y5 X: Y
9 ?, G4 K6 ?$ {, J/ p! b9 [
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
' r. T& L. o& X( A9 q4 A- q. G! m V( M. s
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
7 r$ _2 o% w4 t+ I5 Y- B1 m) E1 X$ M3 g/ }
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
* J8 ~1 `: R6 p
. m8 R' y! m$ L/ j e
) Y( S0 v" ~* z; v4 M1 s2 ]3 m: H5 p2 y" E0 L$ w3 L. K, r
, y' \& N) W" W" x* s! J
SQLSERVER中讲:
3 V; Y2 f: h) O
) h6 U' @5 R% QBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
$ S, i: G1 H+ X$ t: F/ J4 t& |' t5 a9 u
但我在数据库中进行上述操作后,事务日志还是没有改变。
k$ [& }4 X) S9 t3 D% p; `2 j1 k& P4 b6 S7 f: u0 m
: o0 k- y. b$ n7 {0 q
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 8 c0 E. A7 D" j. { h; t
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
) g3 Z0 p- r+ Y) |3 i, Y1 P1 z% N: ~7 M2 h& n9 I* w0 O$ O" W
- T: i, _6 P- o) r+ g老马嗖嗖 2007-04-30 13:03 & }5 p7 `+ H, l! t
SQL Server 2000中*.LDF文件是什么作用
) U2 ^' s! H9 D/ g( D) T, H" C5 P8 ^4 V
*.mdf是数据文件 ! S/ M6 N6 C9 b# B/ e
*.ldf是日志文件
" H4 W7 q( y5 w8 E" g" J2 V当数据库出现问题时 ' k0 [, u& ~1 X* f, N& y8 ~9 f
可用以下语句恢复
( h* y( Q% a; B# w. c/ \数据恢复一
9 }) |0 p1 O) T4 R5 l0 q1 C1. 先分离数据库
9 D" }6 f, h2 B. d% Q; i: y% Q* Texec sp_detach_db dbname 8 p6 h8 h2 k$ |( A% [
2. 加上数据库
3 K8 E) F* F; M0 j- }5 k9 \+ wexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ w8 V. U& C, U Y
' f4 Z# j7 h! o9 ]# E I
0 |. Z$ L( A2 a- t) U5 l老马嗖嗖 2007-04-30 13:04
/ J4 h, w Q9 T% ]* X. \: } x8 t. g( `* B
0 P6 N1 E$ Q' i
1.清空日志
8 N" q3 J2 T: lDUMP TRANSACTION 库名 WITH NO_LOG
: X/ F, f3 @' i, \7 a0 Q9 ?; x; {
2.截断事务日志: & l. M8 \) R' n5 i3 b
BACKUP LOG 数据库名 WITH NO_LOG
) L/ P7 x& x x2 S
O5 Q" `) W1 s p5 H. N) e3.收缩数据库文件(如果不压缩,数据库的文件不会减小 $ @, }7 e5 Y* I1 @
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 6 u% N2 G1 ^8 F0 d6 S4 p7 f
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ) F! e$ x+ w, D9 Y9 [7 M+ I
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 # ^1 n" V7 }' F% |+ H; u( p4 T
1 L+ @1 k7 O% a X7 V
也可以用SQL语句来完成
) r4 F- `) ?1 X. U' Q--收缩数据库
7 q6 A3 m* B9 m- k" X, JDBCC SHRINKDATABASE(客户资料) 9 i7 @# N' V7 m" o
* _; O6 v# f3 H* ^( o--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
* X5 _5 ^- n9 B3 yDBCC SHRINKFILE(1)
/ g4 z+ j: A/ i) k! o
% I4 D: R8 e% w: R4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 6 T: @' M: X: i2 P) D
a.分离数据库:
2 E& C( K! D8 Z4 `) e企业管理器--服务器--数据库--右键--分离数据库
4 p, Y# z2 T& D; V& Z8 {
" ?/ G( D# @' c" _$ ib.在我的电脑中删除LOG文件 ) V6 d$ r! h/ |: l1 r! h
. O3 a/ z3 j1 kc.附加数据库: 9 z. }5 a \! K8 S& B
企业管理器--服务器--数据库--右键--附加数据库 6 p- x! L9 v4 M. B ]/ w8 O
4 ?, N/ k7 n7 d% N此法将生成新的LOG,大小只有500多K
6 k3 { _: x& ]" `: Q0 H7 K
@$ @* y3 g+ ^$ a8 n- R2 b或用代码:
$ R/ l* n4 P) d$ m6 k0 ?# y下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
$ O H% g) x$ t& L
. W# W" Y& w# h9 A7 `* P$ {a.分离
5 L; m" t7 x( t+ f3 s r& NEXEC sp_detach_db @dbname = 'pubs' : P) H j/ m1 x2 G s5 u' `2 K
+ a5 R0 p5 ~4 S6 h% mb.删除日志文件
# H8 @) Y3 a; p1 V3 u8 T6 _) U' C' L( ^7 R, z- l
c.再附加
- B9 H1 \* ~, \5 n. i/ wEXEC sp_attach_single_file_db @dbname = 'pubs',
+ H$ J1 `$ P6 b4 K, g& I9 Q@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
; k2 i+ J, x8 \/ q2 ~$ H7 p0 r0 ~& Y' K1 z4 q) ~+ O# L {
5.为了以后能自动收缩,做如下设置: ^' ^& L6 [ U' A7 p
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
" g) n$ L" v& ?* d+ h" j* H2 c# y: a2 c5 G. N
--SQL语句设置方式: \7 V; n7 i5 \5 n& a ] q' ^
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 0 M/ ~) C5 Q) Z0 _
8 F3 q8 M9 l, x, z" b, q7 G
6.如果想以后不让它日志增长得太大 * u7 P' N# j% N+ y G
企业管理器--服务器--右键数据库--属性--事务日志
3 K/ J/ P$ v# l: R: j. M' g$ M2 b% y--将文件增长限制为xM(x是你允许的最大数据文件大小) 1 [# c6 [/ M# A$ d- |- v) L
5 z5 b- ]+ k1 N, Y( Z--SQL语句的设置方式: 0 i$ U% o# x( g' T
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) : Q' q+ _% v3 ]7 j( @
U/ A' B: r" K4 T
2 F9 k3 w" w. h4 v: ]3 B/ ovxfire 2007-08-28 14:19 7 N9 u. R) R; I7 Q0 c& K
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
9 a5 P" N* D3 T1 @$ b |