找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3793|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
: N0 _6 j% V( Y" q" J) a) Z: {  ]) f4 O5 U/ z

. D% M7 a; R8 r' d: B6 J) |  B; B9 n
  --下面的所有库名都指你要处理的数据库的库名   
- }; u' `+ w9 |/ R
$ _+ }& v' E* V' F  1.清空日志   
' u7 z4 K/ u. @, X  DUMP     TRANSACTION     库名     WITH     NO_LOG           
+ x, w, u" {+ o" ?
! \% `" ?$ j: e; U6 r' F. N  2.截断事务日志:   ) b$ }9 e. w# m  w
  BACKUP   LOG   库名   WITH   NO_LOG   . R2 W$ c; c0 l

! z- p9 I" X% q8 G# ]! G  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   
" |3 p3 Z- e2 g9 L5 u1 J# H  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   2 R' ]" r' @9 i0 b- E
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   2 B+ k1 m, K* n" }3 O
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   9 K1 L) L5 l8 J% {
: h- E- \5 u% C- p, `$ B! t- [9 P
  也可以用SQL语句来完成   3 U* D2 X) k4 y; z
  --收缩数据库   7 Q# f$ @9 @6 ?  a2 y' j. k
  DBCC   SHRINKDATABASE(库名)   
3 \1 t  j/ U; |9 n( J6 s
5 G4 v5 Y# X6 [  D  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
$ K+ g4 `6 S: ~; g  DBCC   SHRINKFILE(1)   
5 m- J4 E5 i3 C5 l4 `4 x% }
% |: ~7 T% S' d- X8 |7 `% `  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   ! _" C1 _: X; u) D% @! D5 O, E
  a.分离数据库:   
" Y. ?. d  _3 S# p- F) z2 ^; X  企业管理器--服务器--数据库--右键--分离数据库     n6 ?3 B3 r. Q0 u- _
# z5 n5 \) X2 e. l2 L! l+ I' L
  b.在我的电脑中删除LOG文件   
& ?; n9 r* f) S( y7 X) J2 k" i9 V2 O$ g8 y( v# _
  c.附加数据库:   
1 }, T# L, U4 A" S4 Y5 `8 O  企业管理器--服务器--数据库--右键--附加数据库   ! W  t3 D- ]  b/ i
9 N; k6 l$ L* f' G6 g
  此法将生成新的LOG,大小只有500多K   
8 i8 Z1 [3 _( g' U1 h  R& ?; _. a7 V+ g$ ?, T6 B1 }2 |' ~. u' G
  或用代码:     
2 l1 ?* j5 Q  v" i  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   
4 T/ a$ p) ^  i! f- a& B7 _. }( v$ s" d* F
  a.分离   
' G5 B7 t' H  e( |  EXEC   sp_detach_db   @dbname   =   '库名'   + }7 Z; C/ d# o8 d- e
( l3 G4 `- L3 `7 T4 Y' @; }
  b.删除日志文件   & {7 c6 Y( H+ f& A5 j
3 F' l! V7 ?$ Y% g( Y4 p
  c.再附加     u5 O- v8 i3 T# n" e0 _+ m# `
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     
+ Y$ U' K+ _4 r# T        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   6 s+ G9 r* V$ x; |8 `
' _; P5 H3 l( k/ b7 j# N. G
  5.为了以后能自动收缩,做如下设置:   
% R) Q) f: r; ~  s/ W' B7 W  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
9 G" R: k& }$ j6 k! N! r, A. \9 d* F  e( k5 `
  --SQL语句设置方式:   ) I3 g$ V( [% c/ f# T  a  ?1 Z
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   2 C, R! r" q! A2 i' V' y! _& ]
( u8 A; K9 `4 R
  6.如果想以后不让它日志增长得太大   
0 M( v% ]/ t0 O+ {  企业管理器--服务器--右键数据库--属性--事务日志   ; V5 r8 s+ e" l. Z! ]
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   4 |( J/ L- V( }, \" ]
% S9 S) |  _" Y7 j0 z. N
  --SQL语句的设置方式:   
9 C7 n7 j1 M, m: P4 }6 Q  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   3 H7 t" X7 C& W4 _0 j( m; d
  ---------------------------------------------------------------------
, ?8 K6 i* `: I4 w; S& DSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) 5 Z2 v  j  i. ]1 @! S/ T* C
* ?6 J" C* R. v7 l: m4 \; B8 ?5 h
*清理历史记录 5 g, G+ D  b; ?& R' b* a
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
$ o! f/ o) ~! w3 x' u2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
7 N! L: v. V1 R% Z. P; M4 c如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY $ ]6 ?6 N* z* {5 ?8 m( O

. b  y$ M; f  ^  d& E$ U2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
1 {" M& H# `# e& Y: h8 M7 Y, ~点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], . }" m  b4 m" v- o* \+ V
直接将x改成其建议其最小值y按[确定]即可压缩. ) j7 }. O, S1 Q; {" ~$ o0 D! Z
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
% u: R3 u( E2 ?9 o. m
7 l: `, U  r3 ]; C' X" P  X" D9 Y# A( f总结:其实也就是两个指令就可以完成了
4 G# I- m$ D4 e# XBACKUP LOG DateBaseName WITH TRUNCATE_ONLY ' e: g6 H7 N4 v( l' Y: t9 s
DBCC ShrinkDatabase(DateBaseName)
3 G, ^2 W' ]* s% u- h
  V$ t0 i9 W5 \! I+ l*设定数据库自动缩小, 默认值为OFF % v2 L( ^: p7 s# [
方法1.
1 q" q) h9 k1 M# C4 D4 ]ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON - B" ~% ~+ a1 N8 N+ h6 G& ], P6 v
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON * ]9 ^% e) `( g6 k9 K; i
方法2.
0 W2 J+ l( G( A8 I( ^9 W7 o+ \在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 2 L* a8 Z% V( t" Z

6 u4 l  @+ r% W, R% E
1 j2 n7 G5 j! k SQL SERVER日志清除的两种方法
& ]; b# u) u- `; ?7 x% ?% N9 }+ `  Y, o  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… , w& R" f& O3 c: n7 \" \
% W. B) E: F: x$ \& j
  方法一
( V0 U. ^) L- `# }" K7 v6 b/ T
; `2 {6 \4 m# H  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
1 p0 g1 n/ n& [. g; ]  h* y+ z' N
) ]( v, F& r7 C+ \3 b" y  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 # z8 W3 ~8 d/ v" V( n  n
% E; `% \( O. {% a+ c. a
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
7 D& m, o1 U& }0 i  m- \! u% @; `3 {9 F+ W' u
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
' v& M& h! X# e! q# R# Z0 s9 i; _% H: ^7 e/ g1 t6 O7 T

2 _+ r4 p" C' w" D& V; X/ L# c
( z5 K/ s% y! m0 I* Q( Z' ~, p& C1 M: F7 P
SQLSERVER中讲:
# \9 _* h7 F( N3 x6 p3 k! r8 [8 Y) w. G. c# M* J
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 % b9 P" r' B4 B! p1 E' K0 e: S

3 b# l) c8 G+ K8 }但我在数据库中进行上述操作后,事务日志还是没有改变。
% b8 J( G7 {' a; J' Z
2 B- q  C" [* i- f( g# X% Q7 v# o1 s) b3 M; a9 b) z
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
+ V. q+ \. F0 l& j在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 . i; H, K" C5 ~3 m2 Y' o' V% L# N

% q% f: w3 o8 n" X, q  }
4 W, J1 k6 {6 k! L0 C老马嗖嗖 2007-04-30 13:03   p6 ~) i6 R) Z, k
SQL Server 2000中*.LDF文件是什么作用0 V% J" Z5 F" ]# U3 t

( P* P' o& K! s1 `*.mdf是数据文件   
/ j6 y# U* k0 M7 ]7 ~& o*.ldf是日志文件   
7 y) B' U" Q/ F, ~/ o( c* v, T当数据库出现问题时   ; ^$ d9 h( f2 Q: v
可用以下语句恢复   
) m) I0 j0 [1 p8 e/ C, B, e数据恢复一   8 @& C' j+ W9 E7 I' |- W/ |0 h0 l0 K
1. 先分离数据库   ( Y8 x; P* G7 T9 ^8 _
exec   sp_detach_db   dbname   * M: ^' I$ w0 R. v" p. K
2. 加上数据库   
, A# h9 a  B- z' K  pexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
$ d6 r* ?. f$ N, B# d# t# v2 @& f1 W. d7 z" F/ F( C9 I

/ E+ e3 G8 {2 h( {6 P; `+ l老马嗖嗖 2007-04-30 13:04 6 D- P8 M/ g2 K9 K; A/ m$ S5 G

4 j  s3 U* w5 }' D3 A# d
: {# v7 W8 k( N. [1.清空日志
2 U7 }# C! U; P  m# U  n/ \DUMP TRANSACTION 库名 WITH NO_LOG
& u- S8 a8 K+ V$ B" T
0 ^4 }+ A  A( M+ _6 R8 y2.截断事务日志: 7 s4 ~1 ^9 y5 {' {+ {6 F3 V$ K( M
BACKUP LOG 数据库名 WITH NO_LOG
5 I8 S: C6 s6 c, X) r# ]6 E# c# v9 z4 c
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
0 n$ Y. F6 Q2 t企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
9 k. j3 q. y# m) J5 X; B--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
% f$ X' p3 O) W--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
& q, O% d# Y. X8 B* c- [8 J) @& f% j
( F. o* c0 T2 U5 X: _5 N也可以用SQL语句来完成 & e% \6 `5 b" ]/ S  `8 N* ^4 s6 M/ A9 {5 \
--收缩数据库 , s& v4 ~; C/ j2 O& F
DBCC SHRINKDATABASE(客户资料) / }# R# J( T# L! X' e
2 Y) P- B/ l2 ?" B) S" y0 `. o) }. I
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles - ?9 r' r" [, u+ \/ D$ {5 Q  t9 N
DBCC SHRINKFILE(1)
# P6 e( G, `$ j" }
$ J  j# j2 c, [9 V4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
( A3 V+ D" p! J  K  Y# s$ |5 C) c, @a.分离数据库: ' n6 t: I0 _8 M- z1 x4 t
企业管理器--服务器--数据库--右键--分离数据库 5 l0 j" M" Q( ~3 F

* V/ ]& O' t# n, F, O$ U9 cb.在我的电脑中删除LOG文件
5 _' Q. ]" x$ n' j, i" w3 [6 \$ b; \7 c+ V* R; M: R% N
c.附加数据库:
- s8 v* A& S: ]7 k! z/ d( ]/ [1 t企业管理器--服务器--数据库--右键--附加数据库
: }/ n& U: ]: T/ l+ K! w; d# v- ^
6 d8 e+ w5 d% `" I9 w此法将生成新的LOG,大小只有500多K 1 e4 C- x- W: d# M4 T2 r

0 J  k) _/ Y$ ?或用代码:
. Y+ ~1 |3 {9 B$ b3 C7 D7 a5 a下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 " n5 B; g# k4 a
: E" b8 R4 W0 P* E! q
a.分离
9 q2 k) x0 C# D+ p! _$ P7 YEXEC sp_detach_db @dbname = 'pubs' + u6 D0 O* c4 a0 [  @

$ @1 b8 \7 I# j6 _6 {b.删除日志文件 ! E* Q9 x2 R$ i

5 B* C" D' Z1 u, b9 mc.再附加
8 k' ]; Z; S; o  lEXEC sp_attach_single_file_db @dbname = 'pubs',
6 t% w$ A) C- v5 [2 T& h  _% Z! O1 D@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' , l* W* }4 {/ E- j

9 W0 f# j' E$ N9 d5.为了以后能自动收缩,做如下设置: 8 ?  ], s& r& N5 x
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
: g4 o' `  L! B4 x* k  L* |, x7 b' a. `( `
--SQL语句设置方式: 6 t9 ?4 [( P* z# F6 |% w
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' : R* I- g% L' w5 t
0 U8 y/ {; X- I/ a( R  I) q
6.如果想以后不让它日志增长得太大 , ^* e* ^5 E+ \$ o0 n9 `. O
企业管理器--服务器--右键数据库--属性--事务日志
! {* P' {& k) y$ Y9 `, h: _/ G9 p--将文件增长限制为xM(x是你允许的最大数据文件大小)
' k% p* o4 m4 t' I! Z5 p5 ~
  N' @! ^/ ]: |% W) a. u7 N4 j6 N--SQL语句的设置方式: # y" U3 l/ J- L+ \- [
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) ( b4 @$ _$ d2 O* ]" }9 X
9 A8 l& A4 f) Z+ u5 h7 h5 K
. D, T* k) w) m0 R1 B3 ]
vxfire 2007-08-28 14:19
" I9 m. Z( s1 v9 y4 [我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 / l4 a9 V: @( K
回复

使用道具 举报

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

本版积分规则

QQ|手机版|赛格电脑 华强北 电脑城 南山赛格 龙岗电子世界 龙华电脑城 沙井电脑城 松岗电脑城 pc4g.com ( 粤ICP备16039863号 )

GMT+8, 2025-8-14 18:05 , Processed in 0.032457 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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