华强北电脑城 龙岗电子世界 龙华电脑城  凯尔电脑

用户名  找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3573|回复: 0

关于数据库的ldf和mdf文件变得超大解决办法

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
; ]  p  [; v5 G1 ^/ j" x1 U. G" O8 d2 o# O

2 K* O% ?0 u) J9 K4 _# F+ R
7 v$ n* \& U* U  --下面的所有库名都指你要处理的数据库的库名   
2 |6 Z. j% d6 W- ]. M" x
; w; f( S8 u; v4 u  u# v7 r  1.清空日志   
  n# U4 r7 _5 d$ l6 d2 p  A' v  |  DUMP     TRANSACTION     库名     WITH     NO_LOG           . A0 z7 p( s' G8 u$ H( s' J
- V% S' t; E6 Y, C# I& b& X4 A
  2.截断事务日志:   ' G! Z3 H$ ?7 ?$ \
  BACKUP   LOG   库名   WITH   NO_LOG   
9 K; r) S. c8 ~0 \; I0 j2 n5 B( S% E8 }/ Y/ Y
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   " G9 Y2 B  j8 e! a
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
! {$ Z8 i- w0 x; k) U# c. ~0 v  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   ' \9 D6 }. G$ N% R# @
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
5 z: {' Z) |8 E2 T+ S+ Y5 [! h* C4 @2 a* G8 W
  也可以用SQL语句来完成   
, x7 C8 _% E2 q* W- t  --收缩数据库   ' `% L2 T# O$ |% a1 ], R" t
  DBCC   SHRINKDATABASE(库名)   
" I: N5 U+ g1 _- W
& }9 y' x9 l& b  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
' ?  @4 t2 M# G# P# P. A# \& m# C, V  DBCC   SHRINKFILE(1)   / L/ R% K  J! D$ m1 w: z6 ^

1 R7 v4 `8 ?+ p; L! @+ }  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
" r2 b0 U/ }% h2 ]  v0 J  a.分离数据库:   
5 x1 x2 M8 H# m' {+ {- P% @  企业管理器--服务器--数据库--右键--分离数据库   # Q% Y( F( k/ Y" u# [

3 t. J& l6 A0 h; K  b.在我的电脑中删除LOG文件   8 ^1 K5 u/ e- j/ n
6 L6 M* f% f5 N; T" b) v
  c.附加数据库:   . o1 J' R; ]$ l. i* v  V* @& Z
  企业管理器--服务器--数据库--右键--附加数据库   , F  N9 c' L' w3 W- j  c% z: o
6 H! U6 K0 j  d/ t. s/ g5 p4 \
  此法将生成新的LOG,大小只有500多K   
  N( X6 }5 z2 n- y6 X5 B8 p# j5 L% \# j+ ?* u) k8 V
  或用代码:     & C5 ^6 t& m5 t5 n$ U$ G% ]1 z
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   ; u) R0 _2 z3 \/ A. Q! u: X; O
/ U4 C" [" R( ^
  a.分离   
& O, T% {  F$ P' @$ g& L0 z7 v( v  EXEC   sp_detach_db   @dbname   =   '库名'   - ]: @; G# L% S. o; ?
* ~/ n8 e( P* j' T
  b.删除日志文件   
5 ^$ \- H/ R4 f
( d! ~4 B) k8 u4 L- ~& V  c.再附加   1 G8 n4 B. q) Y* ?/ U9 b) b1 K: v9 H' M
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     
6 \* S1 b" ?/ [" v$ ], ?' e4 p        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   ; J6 T2 M, A- ^( w+ ?# k

; s1 S; p" |# n, d5 f" B6 [  5.为了以后能自动收缩,做如下设置:   ! {8 A1 k) D+ j; N
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   + M5 X. K8 ^$ q, S4 i3 n

5 p) s( V2 g/ n/ {; w2 r' x  --SQL语句设置方式:   6 x/ J+ ]% N% S. e: y) ^
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   7 z; c. j' u0 q# H# S( x. t; L0 U

1 P' [+ n, d2 h  6.如果想以后不让它日志增长得太大   " x2 J% l. `5 K6 U* W. A
  企业管理器--服务器--右键数据库--属性--事务日志   
; P  i5 ?, Z+ A$ ~  --将文件增长限制为xM(x是你允许的最大数据文件大小)   2 v8 {* {3 b7 q* D9 y! Z

, W) M2 U- n7 f# M  --SQL语句的设置方式:   4 d- G) @6 b7 ^! Y+ \
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   6 P2 D( r2 s3 c2 W/ ~6 b6 b( k
  ---------------------------------------------------------------------
: V8 w3 p1 |- S' f! fSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
& a( u6 ^9 L  j6 O/ q; C# v: p7 r% Y- t! Z1 r' x3 Y
*清理历史记录 7 C( U! {0 b; K# R" L7 W& X: w
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) " l: I: G4 ?) G% I& s
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
( b  f3 b3 B  e' A) {+ \如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY / z, t0 W0 {  @0 N' R

8 ~. o5 j/ M, G2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], 9 B$ i. v5 o4 j- Z3 k
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], * W) `1 ?5 Y, a7 f) R
直接将x改成其建议其最小值y按[确定]即可压缩. : z6 F. N/ U8 w0 ^/ n7 ~6 I) Z
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
7 H+ R6 |. k) G$ b& r
& U1 `: {$ W# U' k; H8 s总结:其实也就是两个指令就可以完成了
# s8 ?( v  k' M2 \5 t5 v2 }+ Q5 T% `, pBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
5 y2 }" M( s# W7 @DBCC ShrinkDatabase(DateBaseName)
8 G% m. s! K4 u- q2 [, }
" l; a0 _; u: _2 ?" q+ W*设定数据库自动缩小, 默认值为OFF , d1 u5 n! ]& \! d; e  ]1 D0 I8 H
方法1. 1 s  M% B0 J9 J
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
" R# P( q6 C+ ^1 `- R如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
6 _) `3 u/ P  B  ^方法2. 7 j/ a  i/ d2 G+ {, b
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ! [7 a- O" N  v7 x3 g
* }0 `" _  |4 Q0 s9 x% H( h- c
( |5 E" V" n; t, T( P& D$ e
 SQL SERVER日志清除的两种方法 . G- Y1 k0 D* p; q( L
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
+ B. a  s  A3 t" O5 s" N6 [% Y4 `# ~# F' c. N8 Y  }# E9 j
  方法一 8 h4 v1 f3 F. m8 D

0 C- O9 C6 B" C/ \  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 , {# }8 |% W1 @* h; J5 F1 W

& t4 b; \+ P5 g+ q5 P  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。   G# x+ O" ^7 e) A
, d* t0 }" }4 n
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 % K- i" V* \0 L/ D$ `$ M0 w2 L$ z

* f& _! S: E$ S8 ~. d% K4 Q' Z  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
) y, b; `) k0 H: h% O6 D, x" ~% q; `4 f/ H/ N$ c7 ?

! [4 j# t' H! r6 r; G' ~% ]" R! [) p) A! Q- r
6 G9 L/ Q% ^2 ?. \+ d' f  K, y: P
SQLSERVER中讲: ; U2 t7 ~7 L  y6 f0 h& w2 u0 \

) {+ @/ d+ W" H+ O& P: gBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 - v! u+ }, b0 _, r
, o/ F0 U& z( i, ]
但我在数据库中进行上述操作后,事务日志还是没有改变。
$ K: |6 M- n+ N' k- G5 @& P+ G- [6 I+ y  f* r/ Y- I' g) C$ `  Z

. R# F) k0 s1 G# X& K* \第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。   A4 \- p& G/ V; i
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 1 x1 e4 W+ P5 |& |" q
( J, t; n) k/ h# l' k

+ c6 l$ o4 V3 \' [& Z' j1 S( w老马嗖嗖 2007-04-30 13:03 4 p. h  |  N: Y3 Z, R
SQL Server 2000中*.LDF文件是什么作用
+ r4 W% q% U4 _. t1 E/ d* y. `* c7 T  A$ j
*.mdf是数据文件   7 w# u2 a& h4 m, i
*.ldf是日志文件   # V  v) j4 O6 B1 G
当数据库出现问题时   
! Q9 b/ G: k, y3 o" }# L可用以下语句恢复   
1 U7 Q1 H' ]2 g: J数据恢复一   
" o" U: P* \$ ]! _) F1 g$ h1. 先分离数据库   
+ z/ {/ ^# r: a6 }exec   sp_detach_db   dbname   
! j* D* D$ E5 b" F7 U( l8 B0 g2. 加上数据库   # s: p1 y0 P: K) t
exec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
8 k6 v, H' k) a- H/ z4 E+ }# ~* W7 ^' G+ H( Y! d6 ?6 n1 f* k6 K
$ k. S* n$ Y8 y% {
老马嗖嗖 2007-04-30 13:04 $ b; I; S  D2 t* g) j" ?
4 n% h( y4 S9 P

" s' q. w. B, C6 `3 O  R1.清空日志
) ?2 X" D" [* VDUMP TRANSACTION 库名 WITH NO_LOG
: f: q1 o) k$ s: }6 @$ ]# g1 O+ {. u, ^7 c; t6 g
2.截断事务日志: - j5 K. ?4 @7 |) T" r' Z
BACKUP LOG 数据库名 WITH NO_LOG
3 R+ @9 g! s2 g1 r' n
* w& M8 C7 q* ~8 m1 ^" o3.收缩数据库文件(如果不压缩,数据库的文件不会减小 5 G. D1 K# V" v" k. \
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 % t7 d+ Z: `) y1 L7 D: b
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
+ ^0 [. ?- m3 ^+ }--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 % }7 |( A: O; c4 h& P1 @# o
0 e/ v- ?- D9 j& |& a- R0 {+ N
也可以用SQL语句来完成
) g1 M" H* I( G) j' d2 h--收缩数据库
8 U# }! |$ A! a1 B, Q9 g$ g+ q$ @DBCC SHRINKDATABASE(客户资料)
* R+ t0 N* S/ k" n% I, o& H8 Q; M. R; W  C' i: @+ p
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
0 r8 z. A) d. q0 v; xDBCC SHRINKFILE(1) $ X$ l* Q; E1 Y; S; `/ _+ S
$ K' c) R4 K) [# `- h# r  x
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
5 Q; m  ?' v2 e8 \' s$ La.分离数据库:
/ I5 R6 y& ^' o& m, V' N企业管理器--服务器--数据库--右键--分离数据库
  L6 O  A. I  Y. u  e. S: Y5 b1 I2 L( T
b.在我的电脑中删除LOG文件 " h: y  q0 X8 d8 ~# e
" F! l: F- e2 d: k. y, t) K
c.附加数据库:
7 u- p6 n7 b0 y! N+ ]6 j: _企业管理器--服务器--数据库--右键--附加数据库
4 S* v1 z: q0 Z2 u; O  h7 @0 ~* f# s9 X, m* J# d  Y1 D& e9 x+ k
此法将生成新的LOG,大小只有500多K ) r+ j. g% E2 z; N" z
$ A6 s+ V* o. ^2 M5 ?
或用代码: 5 }- V& u+ t; M
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
# O, M. N$ W( I" W) ?. z$ s- S# P8 ^1 e% j7 G+ M0 I4 a
a.分离
& Y" j3 d4 C# W0 q/ pEXEC sp_detach_db @dbname = 'pubs'
6 k/ }/ w) N$ E% E3 Y% ?8 ~! E: b- T$ ~! r" g
b.删除日志文件 5 X9 [! u% H: C/ _$ e5 l
: c0 [2 p/ d; z% z/ X6 x$ ~% I0 e
c.再附加 , o. |2 c! G6 U) t0 o
EXEC sp_attach_single_file_db @dbname = 'pubs', 6 v- s3 {6 l4 q6 V/ S5 S6 l+ f
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
$ B7 }4 S9 |# `! {% ^: A5 i! }
, S" o! f1 U- |! `# v7 _" C5.为了以后能自动收缩,做如下设置:
" v9 w3 a9 ?9 I6 v9 I1 D  G4 R企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
! l) |6 z- z5 w  @" E6 S  Q4 p- b
--SQL语句设置方式: ! Y9 [9 Q# Y  N. b, ?( n$ m
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' , i$ f# C; t2 P2 u& V

! r# M+ D  }$ D* z6 |% E9 Y6.如果想以后不让它日志增长得太大
. V' n& I: V3 b企业管理器--服务器--右键数据库--属性--事务日志 ! I% s0 D" o3 D# g3 O& l3 U, ?' s
--将文件增长限制为xM(x是你允许的最大数据文件大小)
8 y. Y$ E' m- C6 G( X( U. k5 @, W- x/ }" v4 G
--SQL语句的设置方式: + p  I1 a: ?; S! S8 m7 \* @
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 2 f' W% W2 N& n$ M9 X9 y
/ c4 y% X; T$ f  h; u! r
# A2 v- e: s( u: _  R& C! n
vxfire 2007-08-28 14:19 # v/ i. y3 U5 g! v7 D- d' F- }6 N* @
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
, U& ^$ {. ]% X/ n% U, X
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|华强北 电脑城 龙岗电子世界 龙华电脑城 pc4g.com ( 粤ICP备16039863号 )

GMT+8, 2025-4-30 04:27 , Processed in 0.103930 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表