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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3576|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
6 S0 p6 |' Y+ `7 o( f3 R4 w8 ^, t6 ^+ V1 C$ H2 _

8 c7 T# E8 v  I; ~% p6 K* A  o. ^0 w: \% L$ W% @
  --下面的所有库名都指你要处理的数据库的库名   ) b1 x% S% |( _0 C/ w! p, h

$ y2 e3 J* i; A6 W+ v$ S3 P  1.清空日志   
$ a$ o4 K; G6 }+ j; t% w- U  DUMP     TRANSACTION     库名     WITH     NO_LOG           
9 d1 `- z# D" S! x: r0 b  l' @  z, J- ?( b6 @6 f
  2.截断事务日志:   0 v% L, E( U* G
  BACKUP   LOG   库名   WITH   NO_LOG   
4 M8 s# a' u$ T9 @0 f( k) c+ W
+ J$ B5 v4 Y9 d( t1 |  3.收缩数据库文件(如果不压缩,数据库的文件不会减小     o! m4 M. k8 I8 `' b4 x
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
( P' y6 Y, L  P. v7 y  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
) f6 F" e* T! |# Q. w- A  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   " H; z: `0 K1 s% S7 K0 l1 p+ d# D
; ~9 u& a; F5 ?% W# ~
  也可以用SQL语句来完成   
% w( N: t  @/ R& \5 A1 Z! b4 W  --收缩数据库   0 W$ A- `/ r5 s! k7 C: X+ }: N& Y
  DBCC   SHRINKDATABASE(库名)   
* _9 `& r  v8 B1 l+ w3 g# H4 B1 K: t1 o4 m' j
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles     T  s; l; a; W3 D$ Z, O
  DBCC   SHRINKFILE(1)   
3 r2 ]4 e' I+ I, |8 C2 ]* |& x4 ]" o6 b0 I2 Q6 A( O
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
0 O/ K7 s: ]! k0 J  a.分离数据库:   " R0 ~5 t! a. v) N
  企业管理器--服务器--数据库--右键--分离数据库   
5 w) X% [$ u* G# K1 @$ I# ]
( o) E2 Q, I  _  g4 v: q3 x  b.在我的电脑中删除LOG文件   
/ _& I1 ]9 m) W6 p
7 R- U+ j" n2 t) h  c.附加数据库:   
7 \: z7 Q1 N5 m5 ]; G& C$ q  企业管理器--服务器--数据库--右键--附加数据库   
0 R7 X$ S- U% e( U5 @5 M3 v7 u% T
  此法将生成新的LOG,大小只有500多K   2 a) t3 u# u: D) v1 I
0 }, v8 l7 }2 ]$ j) Y+ S1 z
  或用代码:     2 i( k* G. t7 R3 s& U
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   3 c% a9 c7 S: n, M# Q* W

. |: F) ~& `$ v5 A; z2 S3 Y6 @1 S  a.分离   : q% e! i4 U9 S# }
  EXEC   sp_detach_db   @dbname   =   '库名'   
& [1 n( s+ S3 w  b* E
. |5 _; P5 U1 w  Y2 t  b.删除日志文件   
8 h5 p7 d. a: ], u7 M; g% m/ k% p/ e  g+ X5 P& `
  c.再附加   % z8 }5 B3 ^6 k0 m( S! v4 W
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     ! [5 `, T$ o  w+ o4 }
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   
% Q4 V0 M3 G' B/ d3 C. N8 v2 P. ~! E3 |$ ?4 @  K5 t- N6 d
  5.为了以后能自动收缩,做如下设置:   5 q* S/ x: l2 a: w
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
( r$ Q) C1 ]. y& W3 I( O  y7 r) l# d; k6 ]" h& j0 C
  --SQL语句设置方式:   
; I0 I% U( e( `  w. z( i  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
! I6 Q3 B! D$ X4 S+ T2 f5 A, x# F/ J' ~7 V4 P; I( Z, O' ]; `  g4 ?
  6.如果想以后不让它日志增长得太大   
! [# e5 K% b% b& H% d: }% g  企业管理器--服务器--右键数据库--属性--事务日志   $ a2 n- f" c9 d: C3 Z6 E: o
  --将文件增长限制为xM(x是你允许的最大数据文件大小)     t4 U6 F$ }4 c4 e

5 q# @& Z0 M6 \0 }5 ?  --SQL语句的设置方式:   
4 `7 B3 J$ w$ v9 n9 G  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   , a- u5 u: A! O3 R$ l7 X" D
  ---------------------------------------------------------------------4 ^2 C- f7 R6 I* q* K6 a
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
. ]# X5 }) K1 t& J1 \1 k8 E
2 H  z% t* y% I- Y0 E) l! v) B% @*清理历史记录 9 [: f0 d& w1 Z- C
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) " K' ~: U) S5 E" D3 G; l9 `6 ~
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY 7 r- ^: F* d* w( _+ o
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
5 W! x( N, J3 `
5 x/ y' P" l- m4 P+ x3 o5 T) g2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], # Y  N$ T& f8 g7 K
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 6 {$ Q8 f. h6 Y# S) e: J: D$ M
直接将x改成其建议其最小值y按[确定]即可压缩. 7 S, q" h( Z  r4 B5 K! n2 y, ]7 m
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
4 k' I* P' Y' b' N0 T5 ~; x! a2 S# \
5 C6 ], U+ x, z. Z( M总结:其实也就是两个指令就可以完成了
, X" Y! p( Z: i; F  WBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
0 Z5 O! W# m( r1 B' v5 L- X  nDBCC ShrinkDatabase(DateBaseName) / f* Y& x: j1 Y

9 ?7 [% ?$ J8 l' C, _! L*设定数据库自动缩小, 默认值为OFF 5 d" ]- h0 y/ M9 H% r1 `# a
方法1. # c/ o( r& T" \. }+ q0 g
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
6 t. _; O+ j7 k( I% T如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
9 z- v" j* Q1 Q: A+ t0 s方法2. : @' [( z- f. h' e  b
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ! M; D1 q3 D$ ]7 R' V
2 r2 Z( j, b. E
/ Y! V+ I/ g+ N
 SQL SERVER日志清除的两种方法
/ T6 b" f% x+ ?. w$ s1 g  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… $ E3 I: [! t$ h( y8 M, P; r8 U% J( D
# P. d! Y8 C& z( {& X. \
  方法一
" u. C$ ?( x! d4 \8 C$ c8 N" o8 S& p6 y/ _$ h3 F
  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 & G) R& Y, s- h" y9 I
( n# K6 p  x9 ?( {
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
( ]7 ?$ \1 S& ?9 l. g7 j; N' r; S  A1 {: p) l0 g; I
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
& H3 c7 J/ j7 H8 m3 u9 U  H  w: x  Z, g# r9 G: j& o
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 3 H5 R  E  `. b7 L' a, Y
1 O* I! y! g2 k
. _* C! M) ^: c5 a# p' j1 ?
; _0 J' p1 @4 p/ I- s* m
* C! [; ]+ M+ R) A: e
SQLSERVER中讲:
: P: P/ s# |- I- D" \. @: D/ d
' |1 J7 }7 ^7 U" h" X' i$ `BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
0 a  ]% @/ w  A4 n  I( |4 i  B$ i) D* D, P9 b$ k' p/ n( w6 [
但我在数据库中进行上述操作后,事务日志还是没有改变。
( `7 Z% U$ i- t# j. W' N+ \7 _' N9 U1 n, J* O9 q
  N( ?; _5 T9 T! Z3 ?
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 1 L8 y# U1 X; U+ V! d) f/ y- z% n
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
7 U1 K1 `. J3 G5 N' G7 |
: u, x9 k( R  X3 i5 L0 G0 v3 `: K+ b9 I. i& o6 E( d7 y( ~+ O
老马嗖嗖 2007-04-30 13:03
# Z$ d0 m6 X% N8 P$ HSQL Server 2000中*.LDF文件是什么作用
+ ?4 k6 |' n9 m# p7 Y: m# }! ?2 U; c5 A' E
*.mdf是数据文件   
  s! W& j1 K# L3 n- r* ?*.ldf是日志文件   
& L" M( g& @0 R- {# }8 H1 K5 L当数据库出现问题时   7 H2 I3 ^* ^" S" o. ]. V
可用以下语句恢复   * R9 }" N% `9 o7 m4 ?  ?3 d
数据恢复一   7 w2 J2 O% ]/ k  S5 ]5 F1 d
1. 先分离数据库   
. l! o" P  k  C7 X. O4 M# iexec   sp_detach_db   dbname   
* h% ?6 U) s: @/ E! K1 U2. 加上数据库   
# A( P& K! p  Z# J5 W4 i$ ^7 Aexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   1 m1 @9 e( m% G9 x5 s

1 _  J/ ]/ l8 x0 J; T3 A. ~, p8 d/ {* V
老马嗖嗖 2007-04-30 13:04
8 i& d9 \; L6 W( h* R
. `# U- _* q7 {* {. ~2 ]! g3 v4 u% S7 l
1.清空日志
9 P# t" j) m: W' G  m/ o4 }DUMP TRANSACTION 库名 WITH NO_LOG
# Y  }+ F/ h7 R
% t, C" s1 |7 |, d' y/ ^2.截断事务日志: 1 [) e7 J; j! @3 n
BACKUP LOG 数据库名 WITH NO_LOG
* X1 f% w  b! D) _/ G" [
5 y, y& E; c( |3.收缩数据库文件(如果不压缩,数据库的文件不会减小
& |- k/ A. k- X9 \0 e) o' G7 F企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
6 ^: Z( e7 o; h8 l4 w7 D--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
/ ^; ?9 S7 G" L- c--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 , W: a9 C1 [# f

" }" E7 _4 l7 u7 V- P; K也可以用SQL语句来完成 ) p# A  Q' e, R- m4 x
--收缩数据库
$ T% y6 P" V. ~5 a( e0 p2 jDBCC SHRINKDATABASE(客户资料) 0 B3 e% B1 _" }; A6 n

$ p* y) ^7 @/ c! I3 ?--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
4 Q6 N' g+ t  y) B% ADBCC SHRINKFILE(1)
( R% p! q8 a  n  s8 ~' j( O  H2 b
- E8 q/ M- J$ v7 M4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ( A0 j9 j6 K( o6 a3 M. q
a.分离数据库: + B/ r7 A! Q7 S' K
企业管理器--服务器--数据库--右键--分离数据库 : G$ ?% G7 d- ~

6 w* z8 D" }' s: mb.在我的电脑中删除LOG文件
! C8 E5 [! Q) ?+ B( ~& h. k8 N1 C& B  }4 Q* d
c.附加数据库: + S- R. c8 p6 O( R% l0 `
企业管理器--服务器--数据库--右键--附加数据库
$ L' F7 O/ m6 y  X
1 D2 X6 Z' Y, P. L: c& ]# {2 Z此法将生成新的LOG,大小只有500多K
/ w# l& N7 R( S3 k4 ]3 v
4 V% G: m! b1 o+ f6 t) ]) l' S或用代码: 3 ]" s. e4 }% C9 \9 K! \. u
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 ' p3 H0 S% P0 S% ?+ `

2 \6 p. U; _4 D0 M2 K# T; Qa.分离
. ^% u9 F6 ?  d8 S( |8 WEXEC sp_detach_db @dbname = 'pubs' + Y6 Q9 ?( d% [' _  ^0 E# A

# u# j% a) a# Eb.删除日志文件
8 }8 K3 u5 y! U0 p7 M$ u; ?
$ b: Y. B8 s+ @/ f5 ^! A+ _. pc.再附加 ; M6 o8 R  a: j  t5 f
EXEC sp_attach_single_file_db @dbname = 'pubs',
, F' X! h  `& n4 p9 c" l@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 4 h/ _( E* s) a0 @
! c; U$ {8 P; _. z; P
5.为了以后能自动收缩,做如下设置:
3 q( q, E0 }* g+ R企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
" v% Z9 w3 C+ `5 A' H! Z
  d5 P& b/ U# N: f8 s$ x--SQL语句设置方式:
% i! M$ V! z! q6 XEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
9 g* b- ~) q& o  ?  J0 \" e. W5 j5 ~" y: J
6.如果想以后不让它日志增长得太大
# t) w" r; @7 n! Z企业管理器--服务器--右键数据库--属性--事务日志
6 B) m( o0 ]0 W& b  A% d* J0 @7 Z$ P--将文件增长限制为xM(x是你允许的最大数据文件大小) / `  \: O. n3 |1 U; s9 D" e
# |6 `6 E0 \. v
--SQL语句的设置方式:
' i3 U( E2 u0 o* Q* ralter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
+ c  P  V, v, E3 w0 c3 l, c# J$ I. X, q  j. _4 h" X; a9 D

$ i  O) u8 ]! H% g  g" ^1 i! N$ P1 @vxfire 2007-08-28 14:19
9 ~: F# Q# C2 o0 t我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 3 D6 Y( [6 _; Y' B' [; _2 h$ i
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 10:22 , Processed in 0.081414 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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