压缩日志及数据库文件大小 + @2 V k7 D' |: i5 R N- M# P
+ d; R# ~; d7 b: H- l N: J! q) l
' S1 N5 z7 G% I5 X/ a8 c t9 F' j0 P3 {
--下面的所有库名都指你要处理的数据库的库名
6 s4 x t0 k6 M/ I' w" A5 u( r: S+ \# c& _/ t# Z7 l
1.清空日志
( s3 K3 A; |9 _2 \% i- M- X DUMP TRANSACTION 库名 WITH NO_LOG ) n( ^8 I" D3 Y' F
: n+ w% k" d1 S2 d 2.截断事务日志:
3 y! j, t* v6 k' `) A( f5 H9 @ BACKUP LOG 库名 WITH NO_LOG . {6 B' E9 l2 M( Y& f2 Y
! `: S4 L2 |5 V" [0 P; N9 M! r+ h! H 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 c" `) r2 e* O: e0 u% z3 A9 P
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 [% S8 z# R# D) z( T6 d
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
0 ?0 @1 L) t: ]% I! G$ H --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
6 ^7 ^& v! d0 s, D
! b, \. a b3 f% w- m/ l2 A 也可以用SQL语句来完成 3 n6 R0 N8 _. i; J" q7 Y9 S3 a: b0 H
--收缩数据库
, V/ l. t; T8 j; Y; }9 x DBCC SHRINKDATABASE(库名)
8 o& [ H8 j! Q+ z2 \5 E4 X' P
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 8 D* c [, v$ p' T) O( y
DBCC SHRINKFILE(1)
9 N- O- q7 J9 G! q( }3 A6 d9 _) u9 S2 l& G" F
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 5 _) J3 I: B: b! Q. a+ g4 d+ Y
a.分离数据库:
/ q0 p5 q6 C5 M0 e 企业管理器--服务器--数据库--右键--分离数据库
0 K6 r# y+ c& ~! R5 z
/ { v1 L2 f% A- Y b.在我的电脑中删除LOG文件 / |- O2 J: @7 {6 L m# M" @' ?) ?
' q( y& D5 b+ e# i# J m4 @
c.附加数据库: - u9 |1 C& j) y4 u8 W9 B
企业管理器--服务器--数据库--右键--附加数据库
' S0 Q/ U9 K5 `5 X$ [) D% H9 L+ {" t6 N5 W$ o) d! j* G# Q, t0 i. S
此法将生成新的LOG,大小只有500多K 4 B; n6 U) @! r% C9 {
) I3 Y4 _5 p+ ^* ?; o
或用代码: 4 }, D/ v$ A z+ z- ~1 W7 s
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
4 f9 T1 z- D5 P- H6 Q. `$ l; i2 k* \; G3 A
a.分离 : V! D- v6 Y0 t D
EXEC sp_detach_db @dbname = '库名'
# Q# R* E, @7 h* S
! r Q4 S: K% ^- P b.删除日志文件
' E' ]8 R- V7 \
0 ^. [8 G6 V5 T* j2 g2 ] c.再附加 6 b; r- g0 } L/ ], O
EXEC sp_attach_single_file_db @dbname = '库名', 0 i( |5 p+ m$ V d' {5 D3 P! `
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
& Y7 Q9 ` _! \: r5 o& _% s* j1 ~' K* z( u; a. n
5.为了以后能自动收缩,做如下设置: 7 \$ i1 ^1 r& n& B
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
9 ~4 r3 c, F* L4 C5 S
+ `2 `2 J6 Z: x+ [1 V --SQL语句设置方式: 3 E6 d" b) V. @; z
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
/ y+ R) }! |1 Z
9 i% a9 K+ n/ O8 t" K0 D 6.如果想以后不让它日志增长得太大
* U3 `6 G; y! d# K% ? 企业管理器--服务器--右键数据库--属性--事务日志 1 r3 i: J' A$ i+ z
--将文件增长限制为xM(x是你允许的最大数据文件大小)
0 n# p$ z2 P! |" v) v) I* u3 ~7 M* r2 H: H& I8 o) H* n
--SQL语句的设置方式: ( D& Y# i$ f9 ]' }! e
alter database 库名 modify file(name=逻辑文件名,maxsize=20) 3 V( J9 z" N b- f4 t/ f
---------------------------------------------------------------------! S, L1 Y1 m: k/ W6 h0 f( |
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
( S4 r- v- M$ A, |& F! E: n Q- p4 A9 e* u* g1 A
*清理历史记录 ( b% F( y C* T6 R/ ^3 y
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
+ |" t: g( O8 D- M2 s2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
6 q- V3 Z; X7 ~4 q# }( N3 P+ s如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY ( |$ K: e! n2 C1 b) t' _" X
3 X: |! I* O! {( {2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], : {4 l5 K$ C: P
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
* w0 \0 H0 C0 _* i+ r直接将x改成其建议其最小值y按[确定]即可压缩.
2 q" z* \( i) k) C$ x' I- ^先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. % M, Q$ ?# R7 m' G5 T8 N
. ?9 O# _! A0 m总结:其实也就是两个指令就可以完成了 ) t7 a! v2 H: a7 i4 p9 m
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY ' z7 B; i; `/ l
DBCC ShrinkDatabase(DateBaseName) ( R! u8 k% Y$ a. i
, \( A& d4 P9 h& a* T*设定数据库自动缩小, 默认值为OFF # k4 ?# F. X# N0 L U! N6 X
方法1. 7 X4 R! [: d0 f. r3 Q5 ?
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON & s" N% J; |& o% O
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON ; p4 b6 l: H; ^
方法2. 3 ^3 v' |6 z# Y4 I: j
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 4 z: n9 ?) A% k. Q# B: r
3 a: \9 P* I6 a# @2 [" ?3 X$ u; ~7 ]3 ]
SQL SERVER日志清除的两种方法 . x9 a/ }' O6 x% H7 H5 T5 c
在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
, y" _2 u+ V* C8 p
- {* W- z, E% T0 s! H! p) W' b7 f 方法一
0 F* ~1 O B' m, ^; s& x6 O& h! Y, N3 P# ~1 T0 o
一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
. Z# {( |0 P b7 P
$ l' q4 @! Y- ^! L; R" j 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 # W2 R; _6 T5 p0 N
4 f, O, I9 c ~* r
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 . T3 I2 y& _$ L8 F
9 a# A- s3 Z- N- I 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 U/ }5 [0 G7 X% v/ }8 q
% k$ B# Y' } s, w- c& l8 d
( ]: k. g3 \) l1 R
$ D% T1 t2 E5 F
. F% Z+ x# T3 {( Z3 B4 `( KSQLSERVER中讲: 0 ?' Z/ l" r, x5 L1 K
, N4 H. {/ k7 X) Z8 M4 S1 n, a4 \BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
; O0 b) o# `: `' d1 [
" H8 w* _" U, o; k但我在数据库中进行上述操作后,事务日志还是没有改变。 - L* u; N) J3 X7 l) ]! c
' O( ^+ G$ r6 O' X3 n/ G
* O$ i1 W U" E2 @' |( d3 @+ F第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 % L4 d, I. A) W3 X6 H0 {
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
; u% U Q4 ~$ A6 B+ Q$ {
n3 t" ?% X# o) [# W- W7 Y$ r* y; Y2 {
老马嗖嗖 2007-04-30 13:03 ' I3 q; m2 `+ Z7 f# k$ X; ~
SQL Server 2000中*.LDF文件是什么作用0 L- c/ ~, Z8 N) [
8 a8 [5 Q+ o- r, H' y0 T
*.mdf是数据文件 ; r7 H* N& @( @2 w* d
*.ldf是日志文件 / N7 o" g; ], ?9 A
当数据库出现问题时
# d4 c0 m; P9 ~+ D' ^可用以下语句恢复
) ]" Z7 q# r( U% X) r5 ^& ~6 q数据恢复一 1 |4 E1 h6 g) K6 N7 R! c7 V X
1. 先分离数据库
) p9 N; B6 C, V( eexec sp_detach_db dbname
* Q0 M4 U+ C- n( a+ {! w2. 加上数据库
5 V( V/ M% Z* r, `) lexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ . O" k! U+ ?) q
3 ?! F ~: b9 `; `2 d e( u9 b) b5 F; P0 U9 f: {. A# }
老马嗖嗖 2007-04-30 13:04
3 N x* Y" X4 u+ ^" {. S- M6 D2 w# V& K2 z1 x% ]
2 _+ l; ~) R7 s9 p9 x" G
1.清空日志 4 P1 v# }/ k6 z0 [2 g: l( R
DUMP TRANSACTION 库名 WITH NO_LOG + Z& X r- B2 ?' ~( \! z
; r; `1 ?6 B5 F6 l0 f
2.截断事务日志:
6 ~3 E, N; n8 n. _" g9 pBACKUP LOG 数据库名 WITH NO_LOG
* [0 w; J" p6 f
6 n+ w/ W' {9 q% t. }9 p6 O3.收缩数据库文件(如果不压缩,数据库的文件不会减小 0 I2 F# m g# }& E
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
( x" t! |; k+ b; I7 h* F; _--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
, O+ C. s+ ~: D. [5 t--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
8 t* e% R8 e+ K/ C, ?/ _! R9 r @' |
也可以用SQL语句来完成
( f1 E/ X9 q, u' i" {--收缩数据库
6 X# r' [1 f8 a! o4 I D# rDBCC SHRINKDATABASE(客户资料)
4 {7 ^. ]' C7 B$ {, ^, L6 F3 L6 P3 S( w) `0 J" [2 u
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
3 T6 d3 l6 X2 \1 l7 d1 Q' p0 QDBCC SHRINKFILE(1)
0 F! N* p; q( S B/ S7 G. p0 e& [2 B( U% l" a6 _2 N9 Y5 M6 L
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) % a5 C6 J. s3 i6 j' C5 ^
a.分离数据库: / c' b$ r/ }1 F) J
企业管理器--服务器--数据库--右键--分离数据库 " t3 V; I3 R& ~/ T. ~
4 b @ O o5 a5 ob.在我的电脑中删除LOG文件
@3 g9 u3 y# L, n
9 C7 N/ B ]6 R7 c! jc.附加数据库: 2 N1 `/ p2 p2 P7 ?4 w
企业管理器--服务器--数据库--右键--附加数据库
9 `* A7 ~2 z, `, x# i0 I
3 A2 e" e3 e& } v( r* p5 S0 {此法将生成新的LOG,大小只有500多K
+ ]' k2 Y8 U6 Y- t
( w% }* ~8 j7 `2 W" i或用代码:
8 ^$ M3 ]& V; F9 e3 V6 ?( x2 @8 v; y下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
5 ?# H* m- \, L
* A0 ^* e5 r& Ma.分离
+ K5 {' n" N1 c- kEXEC sp_detach_db @dbname = 'pubs'
7 M; G% w5 n" S& N1 f9 `5 Z! W
9 k! ~$ h9 R9 a% ob.删除日志文件 " {5 ~ Z; d( Z2 E- e8 c
" J }$ g' ~& f% a* r8 ~
c.再附加 + ]+ W. P/ d$ a6 _8 w" G; j
EXEC sp_attach_single_file_db @dbname = 'pubs', ! c0 x& L. w) k9 w
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
9 x! s- `, V) U- O) E
- R4 e4 O& K0 }$ _5.为了以后能自动收缩,做如下设置: # O7 e3 I7 E% ^2 o1 a# r& C
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 4 W8 z7 w7 @- E, u" A: \# H( J
8 B6 L. [/ T3 S- m" e6 L
--SQL语句设置方式: 0 A* U$ y8 v1 N) T
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 6 S4 L K7 B- ]6 w* g
" ^8 {! \; v8 `( s) Q
6.如果想以后不让它日志增长得太大
% F( |% R( \: W1 V. X; c企业管理器--服务器--右键数据库--属性--事务日志 : N7 U" X5 U# b9 G# C! l
--将文件增长限制为xM(x是你允许的最大数据文件大小) 8 q$ ?0 ], P; `4 C% G
- c6 T( S: `2 J. t9 O4 {2 b# i
--SQL语句的设置方式:
( \+ b3 X/ N7 P5 jalter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
! Y) ~6 y& B: A. U# J5 \3 U* Z# [. v6 d6 e. L
3 I" b" ^9 I, ]$ q, J
vxfire 2007-08-28 14:19 9 ^& S) d/ a p1 F3 R
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 ( s7 B9 p5 p4 @/ M: ~- j! \" z% ^
|