压缩日志及数据库文件大小
8 F( ]0 M6 O e4 O
! v) p' G, M7 _, d! m
9 E' [' |+ {! [/ O) `6 f
$ _, `& A. k! u% u --下面的所有库名都指你要处理的数据库的库名 5 ^& z. f+ i F6 [ y5 G! b/ E! t
4 w6 n/ Y, v+ p2 a6 y! J
1.清空日志 , P( A6 Y% d! _$ U) S7 ?# r
DUMP TRANSACTION 库名 WITH NO_LOG
4 A& U9 ]+ b4 R& j, A3 q
$ N# m) G9 S7 x4 D 2.截断事务日志:
! y; t& r P' V BACKUP LOG 库名 WITH NO_LOG 8 C. k# G' @4 h8 h3 D0 I' b
' [& C) I% p" L( t+ F: l
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 ( Y$ f2 y% y. E6 J0 d4 X4 T0 |
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
4 C/ N7 o5 J' U. Q4 K --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
. H0 D9 h) r3 { --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 : L5 k. `* u7 n* G
# t$ q: p' \6 I- O( O3 p3 m
也可以用SQL语句来完成
& g! Y; x, L6 ?! |' P --收缩数据库 ! i0 N' P2 [2 I3 N( R
DBCC SHRINKDATABASE(库名)
2 b: ]2 ~+ u/ p4 |: b! L9 U+ T
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles ! d% T! z0 k4 M/ \4 Q
DBCC SHRINKFILE(1)
" p( ~, `: `! p z% u, A' v* G0 A& c+ [1 t4 F" ^8 J5 U* V2 p
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ! G6 V2 _5 h1 }7 p& w& A. o4 v
a.分离数据库: * m& Q0 @. S7 w* V9 V9 u& U" l
企业管理器--服务器--数据库--右键--分离数据库 0 }2 j! o3 s% r- x4 w
* G# H8 t9 D E2 \ B! H6 i# m
b.在我的电脑中删除LOG文件 - E ^; _6 O C; p" Q" v
- O# A6 w& ^1 _6 ~9 @
c.附加数据库:
s) K1 ]. {9 [/ V 企业管理器--服务器--数据库--右键--附加数据库 3 ?% N5 _9 f; d `* H
3 p9 `" ?. E5 }# a6 K3 j F; m
此法将生成新的LOG,大小只有500多K . i/ g: i( T4 S! i3 Y8 q/ Q
+ j/ I4 {0 s# `. C- s
或用代码:
/ F& m9 I% Z5 m6 ~/ {2 D8 e 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 ' H9 Y- L; x0 @2 r0 Q8 n7 R0 i
% N3 A6 X+ B* h& E# R2 z! C a.分离 & ] {( W4 R1 T5 T# V0 z, D. e
EXEC sp_detach_db @dbname = '库名' Q. N' q+ S" E/ s) e! V
5 D1 |: M* G% T$ _$ \- j b.删除日志文件 8 [4 _+ [. s9 m1 `6 G2 f4 ]
! c: N' l+ m" E0 D
c.再附加
* c1 |7 O8 R; E7 _2 m EXEC sp_attach_single_file_db @dbname = '库名', , ]% ?2 S- }* `7 B5 D
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
, W2 V& E1 u! q) B* r9 n$ l
- V$ ?* p. P9 H3 c G" O 5.为了以后能自动收缩,做如下设置: 8 C5 ^% u; [" M8 H2 o2 f$ z
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" , z! Q* A9 Z6 q0 J1 P
+ Y8 k5 a8 g. B) l
--SQL语句设置方式: 3 H( |8 m6 u+ B/ h/ G
EXEC sp_dboption '库名', 'autoshrink', 'TRUE' " |, V& N% [9 \) V7 [
3 i0 u' Q& x: I- c) c7 U# ?; H
6.如果想以后不让它日志增长得太大
1 x2 K" k" B" K9 t+ T2 r! H 企业管理器--服务器--右键数据库--属性--事务日志 & \! O% O a; d, R0 {
--将文件增长限制为xM(x是你允许的最大数据文件大小) & ?4 r. D+ _: L2 E# g
; }( H+ z$ S% A( K, J
--SQL语句的设置方式:
9 K9 |& r% x/ n) G0 p" T alter database 库名 modify file(name=逻辑文件名,maxsize=20) ; q* |, V4 w, z" y+ k
---------------------------------------------------------------------; r @/ E) H8 c/ \& @7 ^, R( C
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
7 V. g8 E: ^3 c; L' q" t. V# {, q6 }. D& {4 C) y% }
*清理历史记录
# F* V/ H! ~& h" q4 h# [1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) ( t/ w. a' z: H- O, Q) c; k
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
& ?- b- h& L: q1 K如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY * E3 u# L9 L( f
" t9 Y( G; [: ?4 y2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
6 h! Z7 _! E7 y" `点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], / q9 o, {6 K7 `- z
直接将x改成其建议其最小值y按[确定]即可压缩. ) t v8 F& o; n; K
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. * }7 @/ J+ |$ k
9 d! f; j" M5 v
总结:其实也就是两个指令就可以完成了
$ Q, e: N9 s& a- ]2 ?( eBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
4 V; I3 e: j# n7 |; pDBCC ShrinkDatabase(DateBaseName)
( `- y, _" c% t4 \% m0 _ n3 @
" P5 F. m# z) O9 D/ [# \* \*设定数据库自动缩小, 默认值为OFF ) H4 `# p0 ^8 c% N9 d7 E
方法1.
- x) m! H2 s2 |) B c6 m5 `+ kALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON - m0 ~. _% k0 y; S
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
6 X. x. I+ [, t j6 S方法2.
7 ^ F8 j. J9 U# K/ D+ Z5 f: C. m在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
* ]: l/ v7 q! H+ g$ \! H0 L9 ^+ b; [5 J
0 ?. J$ p' @. |/ H* e2 @, c) A SQL SERVER日志清除的两种方法
, m3 o6 m* M7 ~8 T 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 1 U1 V4 V) \$ Y5 T' G' v5 h8 i7 D
+ k9 A( b7 |. Z5 ^ 方法一
Z& t( Q' z F( D0 n
* p: B1 \2 C1 T: W- S 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
; W% U+ {- P8 c. V: y- u, D( Z5 \5 ^& C
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 Z: e, E q# y' @3 f ~+ o
+ f; y" M2 C, `. Y
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
q2 x, o- J* A _' [1 M1 v( |% b h! w; u; |1 K6 f
3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
4 w6 S" [9 q2 d- p( D7 t$ }
' D: W' \6 G2 x4 g+ B$ t/ W$ }" h& C6 ?; o- Z" [; ?- _& |
, n$ L0 L/ I- T; j4 |2 ~; y3 s* S" s5 m
SQLSERVER中讲: 1 _& `$ q" D3 t9 W0 s
/ g$ L4 ^& I9 n% l, K+ d' A JBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 % P; `9 w5 a' G- a- j" }: T
: `- A8 p/ i; T7 b但我在数据库中进行上述操作后,事务日志还是没有改变。 ) `8 j/ B; h& K! Q
( V* l, g8 Q' C; {" v8 g4 z7 h' _4 L1 Z4 L
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
3 J& I" c) N' b在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
8 e# C& V- N8 E! j$ `# J) E3 g6 k u, a( Y) T/ O
+ ?4 m, E! G: j! R0 y/ F
老马嗖嗖 2007-04-30 13:03
; k6 a7 `- L) g6 U! ]# n/ @6 ]SQL Server 2000中*.LDF文件是什么作用
2 ~* P% l p- Z0 j
# D- [) H: k4 Y2 U*.mdf是数据文件
3 |8 r+ o6 O: z% X! \9 v$ V9 E2 p, T*.ldf是日志文件 L1 }! m' q4 _, T; ^3 M6 D- X6 e
当数据库出现问题时 $ ?- ~. F6 Z/ Y( a
可用以下语句恢复 ; a; }! E2 S4 B; J0 _# D
数据恢复一
- L; f+ P0 [; s8 j. ^+ z' a5 B1. 先分离数据库
- k5 W. s4 d0 S5 u8 ^) @0 K+ ~exec sp_detach_db dbname
2 G* V) N: z8 k5 L1 Q6 t0 h2. 加上数据库 4 X. L1 `4 u3 {. h+ [
exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
. r5 G" _3 e* p: \0 }
- d6 F; _/ M/ {% Y% R4 k0 Z
: Z) q& ?7 h/ s/ t) k老马嗖嗖 2007-04-30 13:04
% F2 ^5 P6 \8 a! ^2 J
_. m( K! i- [6 T [+ N4 j* f. i* C: z6 x. O8 ?3 P. s
1.清空日志
1 u3 }" R* M- ~$ i9 IDUMP TRANSACTION 库名 WITH NO_LOG
. z z" q) c/ G S1 w/ L+ m
/ I6 ?3 O8 O2 N2.截断事务日志:
0 G( m5 }$ Z9 mBACKUP LOG 数据库名 WITH NO_LOG ( S3 t! \7 k. ~9 U2 H' Q
# U0 S. p3 q/ s9 \2 `. _( U3.收缩数据库文件(如果不压缩,数据库的文件不会减小 : ~+ u1 m7 T: k( v
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
3 Y* m) \+ p7 P& j L--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
0 E3 e5 A U) y( v. J--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 9 [ Z7 B, `- h' c
$ u4 ~$ b9 v' I `6 j" M- ?4 t
也可以用SQL语句来完成 3 @ f' S8 k7 ?. @2 I* D
--收缩数据库
* i1 a& f. [3 F- }DBCC SHRINKDATABASE(客户资料)
+ c5 L' G, }9 D5 P' _
; }7 B, c# b9 |. N4 F# w, y9 f--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 9 G2 T6 W1 z K J
DBCC SHRINKFILE(1)
7 b! C1 L- N+ r6 B
, O3 E5 q7 c9 m: i% B9 |4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
5 `" }9 m6 q! g' Ca.分离数据库: * x+ ]' j- d) H5 s8 r
企业管理器--服务器--数据库--右键--分离数据库 * r1 @; c$ |; g% Z- ^1 Q" C3 S
; _ e+ ~: u( z" l; H- U4 M" A: \b.在我的电脑中删除LOG文件 2 }1 R0 G* p" i, {2 f R
9 B4 T7 N# s. f6 ]
c.附加数据库: , ^' G4 T8 ~/ V
企业管理器--服务器--数据库--右键--附加数据库
* Y3 w ~8 s, M- [4 v4 M# h2 p, k
此法将生成新的LOG,大小只有500多K & o3 M# C) z- Y- x! g
$ n1 |# g3 k# r* S9 c, B* g
或用代码: 5 K# Y# I( C$ S- a/ a
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
3 B( m m7 O3 p: z% ]: `( m0 R; o
7 F2 T: ^1 X6 V! t* m+ aa.分离 ( w% u F- y" ~$ h' N$ s
EXEC sp_detach_db @dbname = 'pubs'
3 H* ~2 Y( Y8 Y; e. f8 W5 ?5 q% @ Y2 s3 b, T- e
b.删除日志文件 : r& {8 l* Z- O( n
! e- u m% o0 b1 ?/ d1 N( y5 w
c.再附加 5 w7 E' k0 c/ o2 J
EXEC sp_attach_single_file_db @dbname = 'pubs',
& u1 r; Q* ]/ f% q* i@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
; \& P; Z% f4 G/ U/ u% D( ?$ h! I! n/ X, Q. |( M: N2 X
5.为了以后能自动收缩,做如下设置: 0 w% G- _# l P( C. l) q
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" ! L9 Y* Q/ _: |) g4 p
% Y D/ J* x0 v; C--SQL语句设置方式:
1 R7 f: z# p# LEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
9 y. U6 u* N. j/ @, ^, i4 ~& O. p" O. `; w+ `$ O
6.如果想以后不让它日志增长得太大 5 [/ {3 E" B b$ h
企业管理器--服务器--右键数据库--属性--事务日志
6 @- F, F5 ]5 E! d; x; p0 u, ~! @--将文件增长限制为xM(x是你允许的最大数据文件大小) ; N3 Z' X; B/ @0 j( ^' m
. g: m4 {$ j4 [. w% Y/ D--SQL语句的设置方式: . V+ x4 y. x5 Q* s7 N
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 3 t& x$ Y ]$ h' r- O8 S
/ T# y* y4 [" X% \- D/ H( `* S) ?( J2 G5 u9 i* a* N; T
vxfire 2007-08-28 14:19 1 a% \5 u& d9 {! B4 T7 @, F
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
( B& I. f$ G! M/ v5 ?7 M' A! u8 e7 y/ C |