压缩日志及数据库文件大小
# d6 }5 W9 g; L5 P# r( a2 t: }6 [6 w y" x: f
7 S& e6 T& D% D% |/ e5 |. J
# |# ~# ]9 f# r! b! m2 E --下面的所有库名都指你要处理的数据库的库名 5 @' h5 U; j. {7 C3 H
3 }7 T( I- K5 o6 U' ^2 \
1.清空日志 . `3 U& d9 _6 E: g; Y
DUMP TRANSACTION 库名 WITH NO_LOG 8 |6 M E- G$ N) p) M. X
3 C3 d: c! b p2 x 2.截断事务日志:
4 S! ?6 n, _% W, s3 Z, k0 u" C' D BACKUP LOG 库名 WITH NO_LOG % J) Z w! \8 Y! L
& \, f& _: f5 i" d+ H. D
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
: a1 h; F, I& o ^+ q9 U; {" e7 Z- Y 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
; w) S! a1 O8 ? V% E, s --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 * M* D$ Z) h2 {& B
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 . \9 w$ }! p" @8 j% A/ V# R+ G1 |
* b' B' Z4 l' { u 也可以用SQL语句来完成 " s& a' w' y, \/ k# {
--收缩数据库 % _3 c/ R2 V) I7 o
DBCC SHRINKDATABASE(库名) 6 g) W/ B) j+ p9 `' B
$ ~9 E! X6 ]9 `5 r& d --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
3 F& W& R1 |0 _" L3 [5 A DBCC SHRINKFILE(1) " U6 z1 g2 m3 M H3 H4 t* Y
! [$ }+ Y. q) G/ h; E$ t! d
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
6 m S- d% F& m* Q2 Y- g2 U a.分离数据库:
: \/ Q! l- K+ S1 F, n4 w 企业管理器--服务器--数据库--右键--分离数据库
% ?. ]* ^+ E ~& y( \
/ H4 L! }/ Y1 Y8 b% U9 J0 x% J b.在我的电脑中删除LOG文件
% ^! o- V+ U! k3 \. K' Q0 ^
/ {! K8 m, F' w7 T5 p2 h c.附加数据库:
) u' W2 W) b! ^6 X 企业管理器--服务器--数据库--右键--附加数据库 1 P5 W! n' { m; T7 P* g
% H/ ^: {8 A6 R* v8 S/ { 此法将生成新的LOG,大小只有500多K ( `2 _6 X8 b4 d+ h3 S' P0 B
% _ C) [6 q0 F3 C/ u9 p
或用代码:
( T/ ~- _" w7 ~! v 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
' q6 k9 L: V+ }6 v# H3 X# W
0 @! {- |8 ~* D a.分离
' v. S1 \+ R3 T# K$ V6 j EXEC sp_detach_db @dbname = '库名'
+ t1 b5 O3 P: D- Y1 m; ]9 F: S5 P2 v: c8 M
b.删除日志文件 8 A# E7 u, H1 R' s& A
; o! W" |' A; t c.再附加 9 M: x5 ~3 V$ N7 D
EXEC sp_attach_single_file_db @dbname = '库名', ! T0 A& F% S; _; W0 D- Q6 j: N
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' ( V H! r2 Q F' D
$ v; E' w& O8 J 5.为了以后能自动收缩,做如下设置: . \. Q% H- E/ f/ y& f$ t
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
/ g$ a" _) }7 d1 s$ V0 u
2 N4 _- \7 k: y% U5 c+ T --SQL语句设置方式: % \0 i. R: e0 D. D1 B
EXEC sp_dboption '库名', 'autoshrink', 'TRUE' + x7 a% j& D; Y
$ v' P+ N! |7 I! K; Y 6.如果想以后不让它日志增长得太大
) M. r7 D: e9 s+ \5 B2 q! ] 企业管理器--服务器--右键数据库--属性--事务日志 ) j- m% W. R4 h8 }
--将文件增长限制为xM(x是你允许的最大数据文件大小) 9 k; ]0 ?( [3 k
+ @7 w( K" `; m! n6 S" Y" P% y --SQL语句的设置方式: + D- A/ l4 ~9 z/ s( O- I' r
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
2 I0 ?" `+ _# f7 T ---------------------------------------------------------------------
+ D/ S' F0 U' aSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
0 y& H3 u' T% |1 s# F0 k, a0 |4 T# }# s }7 n; z6 n+ C3 x# O6 a
*清理历史记录
p0 m) r, ?6 i" F# I0 U% H1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) ( W" s0 ]; [7 K K/ R: a
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY : m1 s e& n( x! J, x: l
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
" t/ X8 p; H4 S4 s
( j4 W8 l, O0 f& r3 a2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], + b4 K% ]# u2 ^! D# q3 o. U
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
% w. {/ j& y1 \/ J- `6 ^直接将x改成其建议其最小值y按[确定]即可压缩. ( F; V5 Z& L7 e4 n
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. - b( {8 [% Z; F8 M+ D, v8 X
& I) {3 _# A1 B3 X! q; e: q总结:其实也就是两个指令就可以完成了 , G( Y6 n, y2 M' a/ q3 e1 k
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
/ p/ ?$ h# R" zDBCC ShrinkDatabase(DateBaseName)
; r+ C5 I b9 X; G4 X) n8 T4 `, \ g- l9 d# {4 F: h" ]
*设定数据库自动缩小, 默认值为OFF 7 q* \/ ?( z: Q/ u# ?: |2 o
方法1. 9 F+ I: J1 ~) g! j$ W, O3 k
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON - M1 v) [" M: s
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON " q4 p2 @- |: Z: B. ?, c1 a, `. N
方法2.
. p% {3 Y- E7 H+ F9 F8 V& z) A& K" g在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 , E c' E5 i$ R# C
+ c8 W% o0 c4 W5 W% M; F, U& }. _; J* C6 u( a$ }5 i8 T. @
SQL SERVER日志清除的两种方法 7 U9 |+ b0 @# \: Z( w
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
( K5 `1 V& ~9 J/ U7 ]* c/ O: Q C$ {: N9 t! V, D
方法一 & q2 H; J t* `! Q0 ?& }
* |# e) p% }* I0 h/ J) t& \ 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
& g; c% T7 _* x$ a. i# N" D; E' X: E4 B K
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 : w9 q1 T4 P5 C- N7 X
/ n# E9 Y) t7 S8 E/ I4 E1 D" U
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
" M" O1 q- e! \4 ]' m& e; ?2 [- K
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
- M, v- I; a. m, e# b) A) R+ D/ S( T! {' g
F0 `; J& ?" G3 j
- m" ?5 A" B% Z) f+ d& ~4 E& B- _& G) w! B' H- ]0 e
SQLSERVER中讲: ! }; `' I1 L9 }: r! h6 r
, h6 ?/ t# y/ B
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 5 j- O K4 R( S9 N& m9 k N% o
( Q- q% r, Y! k6 L1 S& l5 a
但我在数据库中进行上述操作后,事务日志还是没有改变。 8 c/ T+ j: {0 T% \4 p4 a9 v
' X' P4 S% M. j: \% Z; {
8 X2 [1 P# w, Y) @8 d g第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
: C2 N3 p5 n/ G# v. V在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
: [' b* T% t' Z% t
) p1 @9 j' a q5 g0 Z0 ?
. b. n. r Q# p: S老马嗖嗖 2007-04-30 13:03
7 v4 P% O1 \3 i& R! [' P* oSQL Server 2000中*.LDF文件是什么作用
4 H6 B8 [! f; h* [9 `9 S/ h @5 M- `1 r/ W8 N( G
*.mdf是数据文件 ! s! S) l6 C4 q) d
*.ldf是日志文件
' x5 s7 J( y: V& i! s. a1 d当数据库出现问题时
" G4 ]! t. k) `可用以下语句恢复 6 K& R2 J# ` i; n4 H
数据恢复一 : j5 s) N( d* K6 F |
1. 先分离数据库
" L9 c2 u0 t# h. jexec sp_detach_db dbname
% `& ^" N; G7 x# G: y2. 加上数据库
; v0 R7 O1 }. k5 h& z: x! Sexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
6 ?$ Q. I; x9 R7 n3 j: m6 I( f O$ v0 V/ _4 z1 P3 b: x
7 J$ k8 |3 }& \: U老马嗖嗖 2007-04-30 13:04
. o% s' a: S; j7 T3 l l- g
h5 n0 V1 n/ P- b1 ~+ e' ?
( A U7 X1 d8 H1.清空日志
5 ^7 ]8 O: m5 @9 C7 r- C$ L" m( bDUMP TRANSACTION 库名 WITH NO_LOG + Y! z d) x' X
) x! ?* R# i+ ^. e
2.截断事务日志:
( k9 o- }/ _3 ^6 ^9 S, WBACKUP LOG 数据库名 WITH NO_LOG
" ^, b! y& C) s ~5 r X0 X# d- P5 r7 p7 }, c, N
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
# z. o: ~0 x1 H. A$ ]# C6 y企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
1 Q4 |# n' V4 L$ A0 ?* t' `- P; d$ q--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
+ y, `6 |& o/ T, p% w--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 . H$ K5 P' t$ E- g3 k# T
" ?) m1 \- D, Y1 D& y% X4 B5 v也可以用SQL语句来完成
( K: [2 g) G/ M, v& U--收缩数据库
/ b/ M/ H# _/ F B! P) wDBCC SHRINKDATABASE(客户资料)
4 g& D1 g' k$ g( M. W1 Z, B1 n7 Y6 Y
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
# E' `/ r& Y/ x% e3 xDBCC SHRINKFILE(1)
* W4 O' B, S8 ^9 o v5 h" ^) v: [8 j
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ' a- q- x. ?: ?7 t/ S
a.分离数据库:
8 \' P+ ^7 p0 Q3 h5 D' U企业管理器--服务器--数据库--右键--分离数据库 6 a- e( a: y( D6 F" l
9 z' A1 P$ _5 |# db.在我的电脑中删除LOG文件
% m( v" h' B+ b1 S2 B! P. u" Q- g* y* a: [% ?
c.附加数据库: ; w9 B1 w: m. O) s0 h
企业管理器--服务器--数据库--右键--附加数据库 4 V- {/ v1 Z0 L
+ ]' V! n# t& d1 ]4 _此法将生成新的LOG,大小只有500多K
3 F6 q l- d3 u" b+ L7 {+ ?9 c. j Y
或用代码:
9 J2 ^! M; O4 |' Q1 J. m下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
/ p* S5 }6 ^/ T" K6 F( L5 d
3 \3 }; _ f8 [2 D. o" {a.分离
6 f: W+ ~: K, A/ G; CEXEC sp_detach_db @dbname = 'pubs' 0 C6 U4 [3 k. W7 W6 m
5 w2 K# m" C5 h2 qb.删除日志文件 + @7 E1 e0 J3 f# T+ v/ n' `6 ?
/ c3 n" r+ W( V
c.再附加 # ]7 `1 }: k# a! @( r! L" L2 _& w
EXEC sp_attach_single_file_db @dbname = 'pubs', + v' s& ^1 j1 B/ w
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
) _( R; |. c: v5 H7 d, @: n
! d* l5 |" l% X% Q& G- E' S; X' Z5.为了以后能自动收缩,做如下设置: ! p5 X" K, O% F
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
. [4 B$ |: {9 y9 l% P: l% o( E+ ]) C( H- E# z; T* v: Y Q9 V
--SQL语句设置方式: 0 i. E+ a3 d0 z) N# M& l2 h
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' * z% _3 C& h; ~
" Q x6 O: p& x) Z, f# A6 ^
6.如果想以后不让它日志增长得太大 # f2 w: y: e+ Y8 y+ L- U- i
企业管理器--服务器--右键数据库--属性--事务日志
9 N7 }* d1 S5 i5 O- ~- M( w2 C3 Z--将文件增长限制为xM(x是你允许的最大数据文件大小)
0 _8 H5 g$ C! W9 x6 X
' J6 ?3 s/ v! j% @) H; |+ V0 D--SQL语句的设置方式: % A+ k. N0 q& s( l1 u l
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) $ U8 `5 x& T; e; P4 Y
$ s( u" M% {6 V, a; U$ y
% x! d; T; p% k0 D) Qvxfire 2007-08-28 14:19
/ k, b+ F6 m9 u( x# g' U; Q- m我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 * y9 M) ~+ A* U
|