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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2916|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   / a1 Q9 K& `* i/ f3 H
4 a' n+ e# ]" [7 I3 f* c
+ C0 ]+ h( e3 B9 R" O
/ x6 {) d) C9 z
  --下面的所有库名都指你要处理的数据库的库名   
6 k6 p, X% ~( A% V+ }# q
& D9 L0 T% w; c; Q/ \, H  1.清空日志   
" L: R! Y! F! G8 b& g  DUMP     TRANSACTION     库名     WITH     NO_LOG           
, F, Z" i( \) i7 J5 A, ~  G! G/ C( `, l( t. A' P
  2.截断事务日志:   
* }' M+ C4 @. c" m4 t5 y0 ^) R3 I  BACKUP   LOG   库名   WITH   NO_LOG   
( j) ?: W& C. Q7 B; S: z. \3 X- p  h- a
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   
6 d. Q. e2 X- x  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
! R* c3 ]0 p, P5 ?/ O  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   - c3 K* \8 A0 q" L8 k  [% y
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
$ |0 e! G/ V2 Y6 N% c- v; [3 b+ g5 r% U* Y, K, _3 [: R
  也可以用SQL语句来完成   ) Q: c% r9 i! G2 o$ C# O! V$ z8 L
  --收缩数据库   $ K& a1 @$ Y; ]& t# j7 Y6 P8 b
  DBCC   SHRINKDATABASE(库名)     j5 A! l4 t5 ]8 U, \- E
$ H2 D: g, @- ?8 K; w
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
' Y1 o& I$ n# v4 k  m; d  DBCC   SHRINKFILE(1)   
: g' I) b9 n6 i: T) R: z6 H2 c0 r3 X" T. C: @! G0 y% y
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   * F  M' g0 W9 W& ?; e
  a.分离数据库:   
" o4 D! M3 f. Y  i+ L( s  企业管理器--服务器--数据库--右键--分离数据库   2 {! [7 ], h1 k7 i5 W7 [! p3 S

- \4 o3 `1 c& R$ Q  b.在我的电脑中删除LOG文件   
) O) Y% W# k# q& h1 }8 c: l0 L, q. q% T
  c.附加数据库:   
/ ?% s" _$ N4 a, d$ q  企业管理器--服务器--数据库--右键--附加数据库   
# e# b% ^3 D9 N2 }& I
8 N/ j/ a: j( e  此法将生成新的LOG,大小只有500多K   0 P) P6 n, |8 e; G- G+ @* S* J9 Q( h
8 }) K' E2 [0 @3 d
  或用代码:     3 W9 z4 A9 s5 z$ M4 s" M
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   * a" ^6 Y6 \% ?% }1 h+ \* n5 `1 x

( _7 G, T# H6 i7 g/ ?) J  a.分离   % i* V! d/ I5 g) ^" ]' y9 Q* D
  EXEC   sp_detach_db   @dbname   =   '库名'   2 r% A' ~& j5 ]* G0 @! O1 E7 }

& k& V' [+ ?4 ?  n; ?! S) C4 _: _$ D  b.删除日志文件   1 i3 k2 F5 k, ?# ~& t! `
  \) K" s3 ?/ S! e1 X
  c.再附加   
* p; x& F% V. w' j2 P  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     $ B- `8 X* R7 S; Y9 q
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   : Y$ m& I! I+ l# |9 r

/ B8 o- ]6 F$ r$ A& i  5.为了以后能自动收缩,做如下设置:   
5 w% K, `' M3 `0 @* S9 _+ Y3 w% }  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
+ a/ @9 x9 @1 y, Q# g7 V' x+ j" G& x  w! I! J# f2 J' f0 R
  --SQL语句设置方式:   
- I7 g& ~2 T0 s3 x0 N# k  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
) W. @1 ]: C1 `5 t: Q4 a4 ]
  Y# T- U( C2 p3 \9 k* v# E. b  6.如果想以后不让它日志增长得太大   
) E- q7 r9 I( G# a8 e% L3 e1 a% Q  企业管理器--服务器--右键数据库--属性--事务日志   1 F; r/ f$ K9 v: T7 K: J9 Z
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
" J9 S9 H8 u6 F7 N+ u9 @9 u& z) h' M
7 e0 u; k: T: Y3 D! B  --SQL语句的设置方式:   9 E/ [2 _" I. O% n* j2 G
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   4 {2 h2 t4 Y. M: Z3 a4 W% v" R
  ---------------------------------------------------------------------
( \, Y7 H( q9 |0 ?SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
# @8 Q* _$ E: z, N' o1 }  f7 F. T% I
*清理历史记录
4 T, o7 b6 Y9 b7 Z1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
5 E3 K0 c. }6 y6 @* Z2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY   u+ w( T0 S, _  I# G# j7 p( l
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY % s& V' o* s# ?, B# ]; T
% v% w) x0 B/ B) w* r: R: Z0 B: e
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], % e4 Y, I* N9 i6 t+ q5 N+ H
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
) E9 `( _6 n3 ]直接将x改成其建议其最小值y按[确定]即可压缩.
2 ~8 @+ b0 a! @9 @& D先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 5 [) Q6 g5 C. b, ^
8 ?1 A/ z8 t8 Y7 _2 }( Z
总结:其实也就是两个指令就可以完成了
5 [) ?& }" e+ l3 J+ o+ i  HBACKUP LOG DateBaseName WITH TRUNCATE_ONLY ; W! d  s( _$ ?9 E( }. Y/ q- A
DBCC ShrinkDatabase(DateBaseName) " |1 p* r% l6 d: w7 S

. ]+ I" i  b5 N' `*设定数据库自动缩小, 默认值为OFF / G: y, ^) }1 k/ E
方法1. 1 R3 w! V  D# u. [! B
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
# f1 d% V! i/ z  h+ x) J如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON : Z4 I& w$ d7 `4 v
方法2.
: f. X( U6 X5 d( W在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
1 k) q" _9 U# S' k, L) y' u4 H
$ ~/ E2 P% n8 m; b9 r, X: n5 m; y: r6 b$ j. S) M
 SQL SERVER日志清除的两种方法
, @# X1 v# I* I2 Z4 g' x  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… ( B: M8 D* G* ?- x7 N5 q" i

, }) x& C/ l# @7 }$ ?8 z$ y  方法一
. \' s. q5 Z- n2 s5 ]$ j$ A
2 f$ L/ A3 g/ `: v  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
, F) |/ U0 B& x# {
7 x6 o5 P% I: L: k8 h/ d. J  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 B; U) g; H" T* @

, L5 M. T5 v  q0 r7 m! j  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
1 q4 ?" R1 |4 a; Y. z4 v) A8 s- J0 m
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 $ p3 O" e6 F- q% Y4 ^! p
0 y' F0 f' I' K  \, Y* Q" q
9 s/ Y4 b. E: T1 B
( a0 y) e( @+ f: t
0 I- k5 J; a2 ]; x; Z! d
SQLSERVER中讲:
5 z/ c/ T* o4 y, T
# \" O- v, B, OBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 ) m3 U) J0 `  p: E% \

4 S$ p2 g; q$ K8 O; E$ O但我在数据库中进行上述操作后,事务日志还是没有改变。 ) y1 l! {$ z- S  u

' d/ c$ G( u( J6 E( U" r* {; g9 H
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 ' G% T0 _) ^. j/ o
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
  Q: R, a8 d% D2 X
' k, X1 S* e) |# ?2 l& }' @$ I6 n( x. O! N) F0 j$ ~+ e/ {
老马嗖嗖 2007-04-30 13:03
" V) x8 S' _; H! E9 C7 w9 rSQL Server 2000中*.LDF文件是什么作用- `* B5 x# h* n. {

# D: V  o% h" ]1 y*.mdf是数据文件   3 K" |0 U, ?7 g9 y) N
*.ldf是日志文件   
3 m! m1 M) l) a0 w+ R: I9 E当数据库出现问题时   
% i. {2 r" P( c可用以下语句恢复   ( E5 u( u) o* a, D. R
数据恢复一   
) m# c1 B: i  s* u1. 先分离数据库   
. ?0 d) w: \5 ^, g; Texec   sp_detach_db   dbname   
9 r. Y8 z7 ~+ A2. 加上数据库   
( @6 \" g5 n! V3 Vexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
# A" E3 y4 Q2 I3 ]0 M' m
9 ]% W9 s) i8 r  F( c/ E/ p* G
+ R0 y; d3 }! i老马嗖嗖 2007-04-30 13:04
; I* ]7 X# x: I# |6 b+ H0 k& A3 P8 |& r

* b' d8 N( v" }( n1.清空日志   e9 `6 e( r6 _8 F
DUMP TRANSACTION 库名 WITH NO_LOG
' S& b% O  }6 L9 c) w8 e) r! }# I' {  F+ y% v
2.截断事务日志: 5 Y( z  a  {6 T( t) a
BACKUP LOG 数据库名 WITH NO_LOG & x5 d0 P+ N# {  A. W
# g! @! x5 t- F; L
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
3 `+ N2 d8 c1 U+ i1 P) t企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
1 Z  _! W, `$ u# a% ?1 R--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
$ l1 S. k4 l7 h) ]--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 , k! ]$ E, U, C; {% ?4 p

* R$ R* Z; {& f) |也可以用SQL语句来完成 0 n* _4 x& @. ^% |* h
--收缩数据库
; C! [& s7 n8 r: F: F! [! n& F# ADBCC SHRINKDATABASE(客户资料) 7 _. [( {0 p+ A* D$ G5 r+ S2 C& E" O

7 j2 k: O8 p- Q3 ~$ g--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles , u. M% N2 w7 d) d; L
DBCC SHRINKFILE(1) 5 i: H" n, q- y0 Q. x# P. J. }8 u

+ h$ g+ k! b! A2 v4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) % n/ b4 K1 U6 L/ O- b
a.分离数据库: 3 u& @' h/ M/ g6 W7 s
企业管理器--服务器--数据库--右键--分离数据库 3 \2 H) J& n/ b( e# A

1 W$ E, p& t; e  r" I3 gb.在我的电脑中删除LOG文件 , T8 r# n; m& h

& I) v' o' |0 i1 Vc.附加数据库: / a! W1 `7 c: j% R  p9 ]
企业管理器--服务器--数据库--右键--附加数据库
  t/ n: D+ M, f, L4 j: b
) C' l' J* _, e* W9 x* I此法将生成新的LOG,大小只有500多K
( D, C2 x6 o0 ?0 o& d8 F5 w7 U
) X# {* A7 z# A或用代码: 8 \8 Q, W. e" D8 {: Z
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
$ {  j& d- h. G- x  m5 S" s( f, x0 Q" d
a.分离
1 K6 ?% y* T8 x) v- L, DEXEC sp_detach_db @dbname = 'pubs'
6 k% E) z: O* c8 e
" U, ^( U- W( |b.删除日志文件
1 \9 h: Y+ K- _* r
! x& U2 U9 P) y" \, c9 g/ _c.再附加
# K! f' R7 c; g/ i, o3 M! OEXEC sp_attach_single_file_db @dbname = 'pubs',
* K6 t. x% @/ a" D; m, K9 j" R@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
. K9 P1 Q$ _4 I/ g$ g3 ]& i9 t# y+ T+ P7 {
5.为了以后能自动收缩,做如下设置: 2 l5 ]+ t( f8 L# {9 S# W( B' _$ A7 j
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 4 l4 K6 R; r( Q' |

& Y$ G8 W; y2 G9 E# f6 C--SQL语句设置方式: / |7 @$ F; J" u0 w# T: ?7 {
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
' _: ~+ P5 _: E7 F' i; b
; i" {( J2 R& w# c9 w8 c6.如果想以后不让它日志增长得太大 0 a* q" Z. r2 i5 z# d! @# t
企业管理器--服务器--右键数据库--属性--事务日志   o( }" B" s- N/ Y
--将文件增长限制为xM(x是你允许的最大数据文件大小) 2 q  _9 U& }' ^; h7 B

( g) j# A7 c, v- a2 R. e4 d* [; N' H--SQL语句的设置方式:
) S  a' c. U% U2 salter database 数据库名 modify file(name=逻辑文件名,maxsize=20) $ C0 R& R+ R6 w1 O

' e! m7 U' u& f: ?$ |- M1 d6 \7 f( D( V, x; `
vxfire 2007-08-28 14:19 ( s2 y2 u1 W2 _
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 * h5 x; f/ B2 N  ]1 r+ y/ e
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 03:49 , Processed in 0.154078 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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