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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3666|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   : y: N; R' z0 i( ]" o- F0 \  ]; P( J
; ~% `2 K9 k/ _5 n, k
" i  ~" ]' u6 a5 ^7 u0 i

; n! U$ n, P5 s, P. M  --下面的所有库名都指你要处理的数据库的库名   
" L0 P% E2 u9 q# V* z: Z5 \
- [- j1 B) {# z( |* P/ J( u# u  1.清空日志   $ A) k4 J3 r6 }, X8 B% W1 d3 T
  DUMP     TRANSACTION     库名     WITH     NO_LOG           
  V9 \! A" z/ M% t. ~  X; s# Y; Y* c# X
  2.截断事务日志:   2 i3 W8 \3 d% _1 g% d" c# U7 L" G
  BACKUP   LOG   库名   WITH   NO_LOG   
& ^! P, ^2 Q3 }6 l. z# }8 c
/ L7 b$ I% J$ n( m5 e' t8 w  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   7 D/ j7 k# `* `1 A5 E" O& D' o) I
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   0 R0 [! m! C& m1 C$ m6 }
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   5 q8 ?' u- ?- y  [$ O
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   , S  |( c" O. ?0 X. u8 W  V

. `1 y  W, L9 A8 _, w  也可以用SQL语句来完成   
9 H$ E% e) k1 Q  --收缩数据库   
, o6 u/ t# d& i7 k  DBCC   SHRINKDATABASE(库名)   3 s" p, e0 b; Z8 c+ B
) B3 M4 u9 h& J$ }: S
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   0 L0 b2 w) u# B
  DBCC   SHRINKFILE(1)   
: s8 b! o  _3 C( P
1 j% ^$ T5 V6 N; f+ n  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
3 k! t( P' T5 B0 T- g  X( F  a.分离数据库:   4 k( k' y" Q) T: b% [. D; [
  企业管理器--服务器--数据库--右键--分离数据库   8 M: m- i: i+ G( ]" n7 N
. c6 E! f+ M; H6 ~3 N0 G: D9 h
  b.在我的电脑中删除LOG文件   
) p! I$ ?4 p0 N7 ?! A! Z0 I1 v
+ C5 T8 m4 s6 K% C' }  c.附加数据库:     I3 A" F! `: ]0 T: n3 H0 T
  企业管理器--服务器--数据库--右键--附加数据库   , g+ X6 D2 ^: {( L; q0 b

8 L5 M1 S, ^/ ]1 a# B: U  此法将生成新的LOG,大小只有500多K   
3 q) K* f, q  x2 r( R  F/ G8 y- r& i; Q' l
  或用代码:     - v2 `7 w7 F1 X
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   % P7 D6 w* f/ j! Y3 r' R5 _
& K8 ?# E3 W) M7 O0 B
  a.分离   
2 v! |; k0 ?/ G5 G. h$ n; y  EXEC   sp_detach_db   @dbname   =   '库名'   7 k* s! x; @9 E. Z6 B! q/ X; o: U% q
; J/ l. h7 m7 G' i/ j
  b.删除日志文件   $ J! k1 p* V( Z$ _% B0 h

/ F, {0 w4 H  O  c.再附加   
9 p0 Y4 v. ~' f9 `5 A& N; S9 d  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     8 @' l7 Y7 y; Q& y; H6 Z
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   " K2 x3 ~' _! X* b( j1 H

6 Z" ~& q: L/ n. t: z  5.为了以后能自动收缩,做如下设置:   
8 q, h( |( D- D$ \2 l, N( Q  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   * \6 u0 h) x# e8 c* n
9 |9 D& A+ g: @$ A, ?# _/ {
  --SQL语句设置方式:   ( _" F# d, J6 n
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   ( ]" U  V" h" M* M# k3 B
0 L, t7 M8 Z, u" l
  6.如果想以后不让它日志增长得太大   
( r1 A, N; F0 x( v. _: X( d" Y  企业管理器--服务器--右键数据库--属性--事务日志   , y8 E2 i. c2 z0 V3 [8 L- d2 p
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
. g* w2 R/ V4 V( U( s7 T9 y  z9 ?5 u
  --SQL语句的设置方式:   ) W% X# u+ a7 y! O8 Y$ {+ N
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   , u$ D2 t" H" z6 g
  ---------------------------------------------------------------------
; P7 f( d1 N4 I8 D& E) |SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) # Q5 ^, f+ ]3 I' Z& \. {: ]
3 q* O9 I. C  L: b$ a
*清理历史记录 * B  s) ~4 ?; _' S& e; Q$ S
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
+ I# a8 h( |4 \' r3 ^6 ^- x% u2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
$ C; g8 T6 ]& Y, t( f5 A如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
/ A- D8 \! f2 f  P% w: P" u3 h3 y- J" S* {2 X+ z
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
' \2 B9 f$ [* y' ?0 G点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
- ]* M! `- J/ |+ t' L( C直接将x改成其建议其最小值y按[确定]即可压缩.
7 v. g. d' [/ q5 a5 A( Z. E# X先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 6 o, ?/ N6 D+ A5 u1 D% t
$ a' `/ U2 [2 @1 E7 K; j5 m$ b
总结:其实也就是两个指令就可以完成了 . s3 [, D' H7 g" f4 M
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY
2 _+ _. ?. R' ]DBCC ShrinkDatabase(DateBaseName)
8 T$ d2 b0 ~, h# G# [4 i; @
* y7 F3 c7 ]1 n  b( d5 e/ t*设定数据库自动缩小, 默认值为OFF 3 k5 d( D; H) H/ V0 s4 X3 b7 Y; V2 ?
方法1.
1 o9 p1 u% Z: r( m; ^' gALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
( I( ?" ]) V5 i- D: i! b如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON " o2 f0 Z& U. j5 U& \" n
方法2.
8 |9 F+ e! e9 v: c在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
' j& y) W2 c. C$ D2 t6 q& E  x" g/ f
! V* A7 H' f" e' Z, t. A6 P( @
& N9 u" a* b/ |' W3 F% b8 K SQL SERVER日志清除的两种方法 7 B2 a! K7 _! ?4 }$ p. {( V
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 9 |4 v7 B! U) _

$ C1 H7 L1 f7 l; e& x! b  方法一
) I3 v; j% {  m/ Y9 M' E" S$ M: r9 M' z' S* t, r; I( J
  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
* _! k4 o. Y3 Q/ D
) p* H& Q& w3 ]  ~+ [3 Z  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 ' [5 i) q8 o6 S2 Z* s
5 ~6 j' n# Z' {% m, L0 I% Y
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 . l( l, x& p  p; p! B" |$ N
& o# f! f; r* m* H0 _, @
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
$ U" H" n* t6 w- M! T! p6 Q
, D0 p5 i' Q8 r$ M& U; L- \
, n9 ]% i% T& b0 ~( y- j! [
/ V8 U( D/ @) R: ~5 l; G+ Z" ^8 Z5 k* o2 _
SQLSERVER中讲: 4 V1 @5 X% V2 H, x& |! n4 F
' o8 S5 p; |6 W+ }: x; A
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 ) p) P; ~% ]0 s6 d( G7 h# n

$ s; M' F2 b  j. H- U7 ^8 h但我在数据库中进行上述操作后,事务日志还是没有改变。 3 i6 q4 N' O; [6 `, v
1 D: z+ K8 R9 \' n/ S9 z
# T2 J: R/ r5 a3 L
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 0 i/ Q" ^  X* j& z9 Y" I
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
7 X+ d* [' a% L) T* g' H$ G$ c
' s2 y9 d$ x0 [$ a5 ^/ N+ Q
! ]' G- h  Y' A8 o老马嗖嗖 2007-04-30 13:03
4 k4 |* D, V) \SQL Server 2000中*.LDF文件是什么作用" Q  p. d5 y* v% t6 z
  |' L) k9 t: m- ?8 {& l
*.mdf是数据文件   % B9 T5 w$ `) n$ S
*.ldf是日志文件   7 V' p& ]/ T) M" G) \
当数据库出现问题时   
) m; e6 S5 D) J; Q( q可用以下语句恢复   7 t$ c: h* O0 G
数据恢复一   " X5 p/ H) _* D& o6 Y; X9 O4 o
1. 先分离数据库   8 R- L4 e3 W* K+ `" i
exec   sp_detach_db   dbname   
  h% V, T5 w, |. c  A9 l4 a2. 加上数据库   
9 m1 M. {' m$ \* m$ U; H2 Oexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   % d  a* P2 w0 H
0 N( }+ V: G. w4 T& C$ M$ d* g7 h
5 ~3 M- D5 D, K
老马嗖嗖 2007-04-30 13:04
  B$ \% g" d1 u) c/ P3 V! x
8 d3 |& P* d7 `- ^. @
$ P6 z( g6 _1 B0 }! }1.清空日志 2 q8 Y+ {2 f8 }8 d+ P9 M9 @" \, h
DUMP TRANSACTION 库名 WITH NO_LOG
1 t5 W  |9 Y; n) F% b+ o& g% |: J+ H2 ?/ N" v6 |; ^1 \: L' R) w: h
2.截断事务日志:
' k( V+ O$ z( L2 J) A4 A' u+ YBACKUP LOG 数据库名 WITH NO_LOG 7 V$ P( B8 [3 ~3 ^$ O

% y5 z" ?7 m# J3.收缩数据库文件(如果不压缩,数据库的文件不会减小
/ ]9 J( B& i+ j. i8 L: h1 l企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 3 x' y- _- S9 Z- ^
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 & b4 @9 d& C) s$ A9 a! j8 l( M
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ! o/ v2 }. R/ `: v, q. }( ~3 k6 ?

& ]7 g2 p$ S4 S8 t( n0 c) k2 q也可以用SQL语句来完成
. X# ^, ]2 K) D$ g/ M! `, [) s2 R; P--收缩数据库
( |' J2 k4 T1 F$ }DBCC SHRINKDATABASE(客户资料) , V6 E* }! p; }+ G  }! J- E

6 k; b0 I# M6 u--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
+ d$ B* A+ v$ [( w5 A% DDBCC SHRINKFILE(1)
' J; M. W/ R1 G* o# G- Y" A" K6 }; R
+ V5 Z; x4 N1 q. ]+ i" G9 _% u! o$ z4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 8 b7 s' o/ R; e: W& i
a.分离数据库: 4 R. a3 {, y; n1 B: f
企业管理器--服务器--数据库--右键--分离数据库 ' h( M$ E( E0 E( `5 C: G2 h1 V

/ g. s( s& ]! V- Xb.在我的电脑中删除LOG文件   v  s, n% Y- N! X

# T5 R" @! [: @+ w/ Y4 j' T, `) |& D9 Uc.附加数据库:
8 Y  e9 M! l6 r/ w2 ]: d5 z企业管理器--服务器--数据库--右键--附加数据库 . A5 U) a; ^9 O4 P. i
% l$ h: K6 q* q  L8 g
此法将生成新的LOG,大小只有500多K
0 g& d. S6 B6 y, U$ U  j9 w' P) W1 v( V: R" H
或用代码:
6 p1 I2 P  u. j" C; `5 ~4 o3 m下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
2 e* B4 M& y0 U9 H  w; H8 a) ^- ]! |( V' D2 E
a.分离 % _2 X6 a/ U4 w( V1 J
EXEC sp_detach_db @dbname = 'pubs'
3 I$ ?; O4 f* g, k4 S8 g8 L8 u1 c0 Y4 E: [' K1 e/ V$ i2 k. W- i
b.删除日志文件
8 Z8 U( E* a  P5 v
) `/ l. X: A0 T/ U0 u2 xc.再附加
0 w$ F+ `7 H% M! hEXEC sp_attach_single_file_db @dbname = 'pubs', ' B2 I4 k& P0 N, s0 K8 q7 {$ N
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 8 Z. ]# Z8 v% S# c  {3 s/ _/ R

' r" z. F& }, R' y! W0 V5.为了以后能自动收缩,做如下设置:
  s7 O) o7 g/ I0 u0 W) ]企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" / K% O* D7 O9 I
8 K# j5 P) _5 F2 y# }* D
--SQL语句设置方式:
' I3 n6 Y, ]- h8 HEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
2 d2 C6 Z" O2 ^$ L+ Q- }" f7 X8 H& Z3 O
6.如果想以后不让它日志增长得太大 $ ]4 @& E  X3 Q6 V$ Y( ]: w6 c: Z
企业管理器--服务器--右键数据库--属性--事务日志 . M2 A  S* i+ a8 O
--将文件增长限制为xM(x是你允许的最大数据文件大小)
' [2 L, Y7 Q7 k( f$ b  i& j  [( s. L: U/ X* q# n7 [
--SQL语句的设置方式:
7 {+ d: Q) x! _. o, p7 J! t: ~alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) + K( a1 m  v5 C' B1 u2 N

! C; W( |% P3 C$ O* j; I
  t9 G( }8 c4 P$ G: nvxfire 2007-08-28 14:19 / u* n6 r7 s; P
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 " \3 x9 K& X# f+ l
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 04:36 , Processed in 0.098390 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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