压缩日志及数据库文件大小
; ?" n% [- |! j* S: e" E6 w
3 Y, t, \4 v) c6 `- t( n/ Z" q/ ]4 t- @4 P; U! x) u
' P" m) M, Y7 Q2 P9 U( V) t* q, X5 Z
--下面的所有库名都指你要处理的数据库的库名 4 n: o2 H0 P/ u3 Y5 N
) @" n0 b x( T: m! _7 U 1.清空日志 % K5 C0 k7 B& I2 f2 b
DUMP TRANSACTION 库名 WITH NO_LOG
0 ]; y, Y. ^; N2 v! \
; C6 d/ E) i; F 2.截断事务日志:
6 s% E0 v! o/ X, M+ f1 b8 N# m BACKUP LOG 库名 WITH NO_LOG
& P$ U l) e; p& k: K
+ w# w, t D7 g1 T 3.收缩数据库文件(如果不压缩,数据库的文件不会减小
1 S; S4 a& M, i3 N! s 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 T; L3 E" i& n V+ U$ S7 Z
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 & s9 e) N( n* Z2 o7 a9 ^
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
( v7 H7 A/ q; o5 Q4 |
9 Q' z. P% m2 x# j+ I. x; ~ 也可以用SQL语句来完成
$ ?1 _% P: I# l# x2 Q+ t --收缩数据库 . ~+ F' k; O3 R2 q6 T
DBCC SHRINKDATABASE(库名)
\5 p. i5 C/ I' i) D. X9 e p5 s+ d
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
5 T4 P2 o8 u0 @# X: \' i6 v DBCC SHRINKFILE(1)
6 {. j4 x& a; L! `2 N Q
" V/ `& T `" f+ j6 D5 O! M( { 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
! k8 M, u2 B4 f& [! w: U2 X a.分离数据库: . b6 U( d* C5 p- I- U
企业管理器--服务器--数据库--右键--分离数据库
+ S+ K" x+ R! _/ d; ^* S. a% _+ N: \! m! b& N
b.在我的电脑中删除LOG文件 7 a( R" c1 l6 J! M* b
8 t6 T: k& d8 C. t% Z0 h c.附加数据库:
- w. D( _! m. `$ J) h! M 企业管理器--服务器--数据库--右键--附加数据库 " h4 A# {6 P& K" v. `
* p {1 N/ c! m% l 此法将生成新的LOG,大小只有500多K
* p2 a& M3 b8 N: k+ q- T; [" Q/ M. ^* Q ]. j/ z9 K
或用代码:
" }' g6 f3 Y( p% a& C( C- F1 n 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 3 M- F1 t' l! [
- M9 R; D2 u% m0 q
a.分离
" p& w+ f( a7 h$ | EXEC sp_detach_db @dbname = '库名' 8 h* b3 F( Q0 `& C( G
$ W. g. C. c( F- D
b.删除日志文件 , ]# f% ? N6 u- \) @
# ?5 v7 y; D+ ?0 v/ i l
c.再附加
0 M6 b% q$ P- g/ K; z EXEC sp_attach_single_file_db @dbname = '库名', * N6 s8 a) g# H' l6 a" L3 E4 a% g7 k
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' 4 G* [* p: d: [0 k2 G
; C! \- t k# M0 p3 p* a! L- H9 f 5.为了以后能自动收缩,做如下设置:
. M; @3 L, m% P' q. `& p 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
& D+ @7 ^2 G+ b" ?. j# y$ P
2 c. j1 u E. Z4 O* R --SQL语句设置方式: # G0 a* q# y) d. e3 r; Z
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
$ C$ t+ Y# i% Z4 J" \
! r! F+ r' J$ n2 C; m# z5 E8 u; O1 S 6.如果想以后不让它日志增长得太大
2 \1 G6 D6 G; c& e 企业管理器--服务器--右键数据库--属性--事务日志 ; c: W4 ^6 h$ ~& ]/ g! E
--将文件增长限制为xM(x是你允许的最大数据文件大小)
& l! P9 t5 O A( E5 q+ V; V& J2 R# w& c, l& Q1 u v% B
--SQL语句的设置方式:
9 J7 n, d) W0 u( T4 C alter database 库名 modify file(name=逻辑文件名,maxsize=20) 8 X' _! e$ ]2 O* H w) q
---------------------------------------------------------------------: N% M2 E* F6 L3 ?
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) " T" x" h1 t% |3 }
5 J e) x5 a" I! Q9 {*清理历史记录 ) f% c7 q8 U& O5 G& L T( W
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
/ ?: x2 x: I3 V2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY 9 V4 ]$ u- t9 |. k" H% V) ~
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 0 q0 I) Y+ B. A) n
% I% s' F# g( y$ s% G* f T% o
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
2 V+ s6 a* c% `点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], % d0 N6 l2 s$ L I2 M: `0 s
直接将x改成其建议其最小值y按[确定]即可压缩.
* L9 g2 `5 k$ i. m+ e2 ^先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 6 m/ E3 Z/ J. d$ ?& U
! Y2 ^1 j" S0 i
总结:其实也就是两个指令就可以完成了
8 l: a5 j. a) _ Z$ Y6 K* fBACKUP LOG DateBaseName WITH TRUNCATE_ONLY % K9 u; s5 d, D; V ~
DBCC ShrinkDatabase(DateBaseName)
6 k$ s7 p0 v) l7 W! m* V3 M* U5 t8 Z) @) z& ^
*设定数据库自动缩小, 默认值为OFF 7 U4 @2 F I3 O+ B! X# b
方法1.
. }; P8 s4 t. N3 H8 n; w; ?" q6 }( PALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
7 T1 K1 E+ Y. G4 _0 m T如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
# J+ O0 x( I; e! h. Q方法2. + @7 \; a/ S. b6 b# h! h- ~ l
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ; X% y/ w3 s& X3 j8 X/ r
+ t& {, b3 _+ `$ G! D
, u r0 \ P. { SQL SERVER日志清除的两种方法 : V& Z7 I5 Z& K) z2 u, W6 ?: ^
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… + H" I1 u) O9 A k
; u0 B1 |* _. c/ j& J6 R 方法一
7 T# w/ l+ }/ M
/ r9 m! T$ V# l7 _/ _8 {5 d; C 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
0 V6 f4 J' }4 K: s- K4 L) F3 D
5 ^. m# [8 V/ x( N+ `; S 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 _# Y+ T% Q; u6 |
, r" `" F {0 E7 u3 K$ U 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 & e9 u6 h" y+ G& b
( Z7 t+ t6 Q3 _! W4 N& x+ Q; S; D 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
0 `8 g4 j! s9 d- l8 W! C) N1 O9 s' P0 E) G
3 G# \9 Z; g9 H0 N4 y
9 r) W4 B5 ^* M+ W* }" c
; z: ^1 ]3 k7 b; j7 _0 X4 _# bSQLSERVER中讲:
$ d1 d3 X# C: k6 U' ]
1 n' q) q3 k+ |% e& g5 j/ DBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 , M4 h8 |, y0 R& M% {( m& m
) F/ ^8 r( m+ t# _0 H$ B0 j7 H
但我在数据库中进行上述操作后,事务日志还是没有改变。 % a3 [1 y' q5 F3 ?1 ?
]" q: \/ Q9 S! w4 G/ k% }3 v" ~' {! X* r S! C
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
- }1 |. m4 L, E( S2 Y在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 ! v6 h: V0 t' W+ R5 E: P
7 ]. G+ T1 n# J1 }; c: u0 o; i
3 J( m# L( {: a6 b1 u& C
老马嗖嗖 2007-04-30 13:03
$ Y' \/ n# p1 v; T; p7 \7 | qSQL Server 2000中*.LDF文件是什么作用9 ]! O& G& y2 v" ?1 ^
0 m+ R1 h+ A2 F8 p9 G3 q, V: a; z2 F! F*.mdf是数据文件 * K9 O/ }6 h4 y/ E9 d
*.ldf是日志文件
8 f4 I, a0 F- v! u: E当数据库出现问题时 , j0 x, q+ k6 x" H% N0 @. o( ~, T
可用以下语句恢复
1 _ o# N0 o+ x4 f5 x3 @ L数据恢复一
4 K% k: W+ s! M- Y. T3 m1. 先分离数据库
% z0 M0 Z4 D- J% z) f& J' z' s+ `exec sp_detach_db dbname ( u5 T. M1 R, v# v
2. 加上数据库 5 E) |2 Z, n l$ A6 o/ L3 J
exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
6 k4 }+ I; j3 ]. L$ Z$ Q- U" i) J# ^% k0 v8 {7 U; O: y6 N( j
/ s5 D6 c8 a+ \1 l老马嗖嗖 2007-04-30 13:04 3 E' a! e/ e! D: H% _
" K& N- _, _0 K% s
$ Z- ]* i3 J9 F2 e4 r$ F% N1.清空日志 . \8 i/ R! @5 G9 }
DUMP TRANSACTION 库名 WITH NO_LOG 9 B6 T+ Z: K" u
* S5 ]0 M8 n, s5 `: D( L
2.截断事务日志:
" O5 Z8 u* B! u9 j& V) }/ q% }BACKUP LOG 数据库名 WITH NO_LOG
' g4 G) i( ]) t. \/ r( \3 W
$ a; M5 S% t( o( R! B1 C" O3.收缩数据库文件(如果不压缩,数据库的文件不会减小
e' Y5 u5 G( h$ g企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
& c& o( c2 j4 _! z% }$ z, @9 H& M--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
7 }/ d& u! u" r, Q2 v--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ! Z( k3 _8 z( C& m8 ]6 a
! ^. b( ^. G% |3 t7 j. J" Z
也可以用SQL语句来完成 ' |9 Q" L( m7 q9 A: j+ Q) Y) g
--收缩数据库 9 N( s9 V' S5 Q; J" ]. M
DBCC SHRINKDATABASE(客户资料)
5 Y$ V' E6 N+ H) m$ m& l9 ]+ K, ]# w/ C
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
- `- S8 p2 ^# `& ?1 m# mDBCC SHRINKFILE(1)
: w8 E9 O/ N% J6 E% Q3 G1 Z' n( y3 u& u
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 0 o& j& D9 \' M2 C+ {
a.分离数据库:
, t! z% f9 _: G& N9 h- S企业管理器--服务器--数据库--右键--分离数据库 . B) U" G- a: U: b* q. u% t
}! Q4 ]0 i7 g' |* Q! S% Rb.在我的电脑中删除LOG文件 ( F' C& W4 S3 {9 }2 k1 k
+ i9 C+ D7 T1 ~# [! H) cc.附加数据库: 1 z9 e# _5 v3 H3 H6 ], q5 ~7 W/ t, P
企业管理器--服务器--数据库--右键--附加数据库
) Q/ ]" {+ ]: d. ^$ i
+ ?; K7 E" z5 Z5 P; P8 a, K! K此法将生成新的LOG,大小只有500多K
5 n, b: Y+ R. l, {: J1 {/ ^' j I9 h" C @2 G$ \7 N4 b& Y$ |2 X: f+ h# T
或用代码:
% l2 {! d* F: c! {2 B3 Z2 K2 [4 S下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 . u8 Q8 F- R+ @' Q9 M. r6 ^
6 w6 T) o9 D3 g( P7 O3 ^a.分离
5 W- K1 i' d% _( D( U. p; F5 PEXEC sp_detach_db @dbname = 'pubs'
5 K/ h0 `1 Z; b; X' w: t0 J1 B. Z, g7 K, F0 c+ J; D1 G; r
b.删除日志文件
2 y, D8 { i; m* A
: p& W- e" b( F. J( U- T0 V6 ^c.再附加 . L( v- l- L9 t0 i/ ]* k
EXEC sp_attach_single_file_db @dbname = 'pubs', 7 G- {2 ^, o" {- G# G; K( G
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
9 r+ u8 B& Q( t, v p$ O& M r' T& I- Z
5.为了以后能自动收缩,做如下设置:
& [8 ^9 X" C+ h! f企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
7 ?+ v3 b4 L, V2 h+ u* n R
; N4 C& X+ m" N--SQL语句设置方式:
0 O K8 Y& ?2 m! n* ]EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
- P% J9 L& B6 Q+ j+ j
( s: H. ]( N) g C$ L: k6.如果想以后不让它日志增长得太大
+ O! H+ f' |2 R0 c3 U1 J2 \8 C企业管理器--服务器--右键数据库--属性--事务日志 * Z' I$ u, ?7 c/ s1 }
--将文件增长限制为xM(x是你允许的最大数据文件大小)
4 ?/ d& D. H; E5 L( B' D; v/ w# g# n' z9 Y
--SQL语句的设置方式: # ?% O6 e0 a c) Y* t0 y
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) : L5 v; F$ e8 ~
7 C$ r' E% x4 n5 c) s6 u- O8 O
+ I8 k M- d+ f0 {: i
vxfire 2007-08-28 14:19
) \) E6 l+ W \我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
- x9 l- e. g9 {2 u0 Y7 p |