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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2914|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
7 u/ J1 c& u1 N5 X& J5 |5 G. o* H6 o1 p  K. k
5 ?* F- {+ o! B2 Z
7 A/ \  [- o  \. n, o0 J6 z
  --下面的所有库名都指你要处理的数据库的库名   
8 j: u5 M1 L  H# [" f3 N7 H; y/ @; ~4 s
0 q6 r0 P' E& I' Q0 k. N3 b* e3 `6 G  1.清空日志   
6 z6 o3 N+ h8 P. }  DUMP     TRANSACTION     库名     WITH     NO_LOG           
$ {2 E1 \6 O7 ]3 V; O
" D2 a' c* H/ O$ E% I8 _; m# I  2.截断事务日志:   
4 j6 u, u! F# P0 Z  BACKUP   LOG   库名   WITH   NO_LOG   : O% j5 j2 o, ?

3 [6 T( {2 b4 ]: `9 c5 U' ~  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   ; f/ b2 P* ?: H$ k
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   # }1 U! ^% i: |: L
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   ) U8 y6 E* [/ e) z) s5 D6 d
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
4 p5 \' t$ p6 a3 o2 Z7 p1 ]+ G% z" G5 K- c6 d! d1 |
  也可以用SQL语句来完成   $ h3 v1 @* z4 S' [: F5 Y$ d& o4 Q
  --收缩数据库   
' @2 \$ X# \/ G. |+ q( ~  DBCC   SHRINKDATABASE(库名)   
+ \' ]  P0 p8 r& z
. v9 a, o9 g# D0 r  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
, G1 K9 }/ M' A6 O( F  DBCC   SHRINKFILE(1)   + Q- j9 J$ v0 M" p' q
2 O( o6 v: f5 O1 Q3 c/ A# b
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
! U0 W0 K- ^5 m$ P, z  a.分离数据库:   & i: h9 f: V# ~$ m3 V# x8 C
  企业管理器--服务器--数据库--右键--分离数据库   & A/ L' H0 n9 L* T

0 N9 [1 k* |1 R: [$ Q  b.在我的电脑中删除LOG文件   
$ j* a2 r/ f' P5 R$ w. M# n& J
$ r5 S1 Z' R2 L& T8 [; p  G  c.附加数据库:   4 B2 W, [7 u, W( j. [9 e  C, u7 h
  企业管理器--服务器--数据库--右键--附加数据库   
5 z7 P' A! N2 G9 i$ k# S" _. N
1 b; e$ x- Q: o3 F3 T$ p  此法将生成新的LOG,大小只有500多K   ; }) e2 Y! C- W% D

7 x; {$ {7 m+ v8 A, \0 D+ Y  或用代码:     7 n$ ^9 x8 F6 t; R
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   
% `# A  Y) c7 F/ \" w
$ R1 j  Z* m2 J& V  a.分离   
; Y, T5 N8 R, r9 N7 @" f  EXEC   sp_detach_db   @dbname   =   '库名'   
' E' e3 C: ]& n% F) J9 J7 ~. u: I. Y* p' W& x. A
  b.删除日志文件   
' X9 Q& D2 q0 o8 W2 ]7 o
1 k' z6 F9 `6 k# z" }6 E9 U* t. l  c.再附加   ! g/ v) Q. [8 L6 t
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     & A( W& Y  A$ H$ w) A' b5 B  K
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   
4 o0 z" |1 F% h8 I* |- F* e& d" z/ @1 o
  5.为了以后能自动收缩,做如下设置:   : M$ X; y% t1 P" q+ J7 q. l* g
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   ! I/ d* s+ l9 Q
* r7 b8 N3 L$ G' J! `) g
  --SQL语句设置方式:   
, I5 [2 P+ s/ F. w) g4 M7 r$ n7 m  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
) s* }! F/ Y6 _7 D7 @7 \
. K7 @- N/ |- B: ^4 m/ c* ]7 H! v  6.如果想以后不让它日志增长得太大   
$ z; z0 Y" _& C3 [$ u  企业管理器--服务器--右键数据库--属性--事务日志   5 f/ m- G0 P* ]6 p
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
0 p1 s; d$ Y4 M# e% K+ h) N3 Q; b  {% Q
  --SQL语句的设置方式:   3 \6 i$ `  q8 E+ r! H" i5 M- q
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   ; Y" q: ^4 Z/ ?/ a4 h+ e, e* f
  ---------------------------------------------------------------------
6 D4 R, V0 m! C, A+ d0 SSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) 6 d" S  d, k1 s" [' i4 K
) u/ h6 _4 Y" G2 J/ j2 |
*清理历史记录 ; W* I4 z" k1 g1 r5 O  R' X
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) 2 t& W( f! E; A0 @! @
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
( o! E% o" n+ [* C! @如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 7 w) O# f  X. n7 |" i
& ^# h7 D, ]' b! Q0 s
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], $ k4 W8 s6 c" K  R5 q1 Z) H/ f9 I
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], * u  t  D) f9 A: A, O
直接将x改成其建议其最小值y按[确定]即可压缩. ' g& M2 E8 p. X. Z  Z5 b
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 6 A1 {/ V# U7 ^* O& u# Z& R
2 ~, n4 r+ j( R" h  b
总结:其实也就是两个指令就可以完成了
) Y2 J' [* p! c* bBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
) N% l$ k0 o% }4 |DBCC ShrinkDatabase(DateBaseName)
: z0 z. M+ ]; {, N- U5 e% V
/ {, w6 _6 o7 J4 S. c8 q*设定数据库自动缩小, 默认值为OFF
& Q7 S" a2 _8 U7 e3 t4 T6 a方法1.
0 e3 g6 R& f* oALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON : C/ e6 _  D1 J' T1 c# x( w
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
% x- \$ {8 Y! V, p方法2.
' g+ P; S" j; x/ y' u在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
" l2 R% |, X+ w5 O" O' A! w0 j& E' P$ ~: _: H$ V$ w7 |

: F9 c" i, [2 V: w* g# p& z, C SQL SERVER日志清除的两种方法 ( ^7 A5 M4 \% Z! R
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
- Q& m* G" X- Q
# \3 L# A# N6 M. K& _$ f  方法一 % P4 z; o* A8 Z' l- i

( f7 V/ s, A  _$ w$ ]# w, k  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
; T# U. {. k0 l: I8 d# A) ?4 P" f6 Q! `: G# X" F, l, L
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 Y1 O& A8 O) p0 Q5 F/ Q# Z
+ d1 h5 m! X) R9 Z- |3 z7 E0 t4 _
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 " v9 h# S2 E: u! r) |0 J
! {5 J- {" ~( F1 O( B2 V( d
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
  u% L' y9 U$ A! E: d4 J
! R% ?* O6 k' u- |  P
1 t+ c) G% ~: h5 L8 l4 ^
* h$ ]5 I' j- ]9 @' o2 z
" ?" L9 i  r+ |7 D' {SQLSERVER中讲:
* ]8 t! v( J/ o2 A  m) f& ]9 h: m" M
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
+ o# d9 L" w3 d/ Q8 ]* U" ^) _7 {3 j! T! m
但我在数据库中进行上述操作后,事务日志还是没有改变。 3 d7 K) W2 B" b- C* i4 O# m/ g
5 ]1 j0 c  U3 L% H' I
( u% e2 F8 g3 v" e7 k6 }
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
$ o9 ?5 B: p/ k! ^7 t0 y7 ~! ]在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
! v. g% k+ j! Y! R/ v7 G& X  x5 Z. A3 z) N( {% @

9 Y4 Q: X' C2 X6 w' z老马嗖嗖 2007-04-30 13:03 9 F1 }7 I# c4 |, r. ~
SQL Server 2000中*.LDF文件是什么作用2 n* a8 N, [8 p* l, g; m

, N& s% D2 F$ a2 |*.mdf是数据文件   
2 `3 `! W' ]  A8 T*.ldf是日志文件   
3 R& t0 a" l1 \0 O当数据库出现问题时   1 S0 y/ v& D7 G) B3 _
可用以下语句恢复   + G8 G" E8 f/ G
数据恢复一   + ]% b! j2 D+ y( h
1. 先分离数据库   
' B- i- [( l' a& x* F5 W" g( N. Gexec   sp_detach_db   dbname   
& H( g( D% p" d, j! [, a* \2. 加上数据库   
5 D! Q- J# m, l" qexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
# ?* w& r" i/ c. O
5 I7 W. ]1 r5 X" l* x& \- E  V9 n/ h7 A: [% j* F
老马嗖嗖 2007-04-30 13:04 % ~+ c8 h" n2 O9 n/ w

( y% l5 e# g) q9 h' h9 E
, C. C' `& {! F  Z6 U, n# X( j: m; S3 M1.清空日志
) m  [* E0 z" }+ l9 z" iDUMP TRANSACTION 库名 WITH NO_LOG   J5 ?6 ^' N5 h' q- G
( ^; a# l$ h4 i* ~3 k- n
2.截断事务日志:
5 K+ K) h# Z# ?, F9 @6 M7 z' D1 [1 d  CBACKUP LOG 数据库名 WITH NO_LOG
  o( K2 @3 {- G* I) C: \8 q9 }, u3 f* \# o3 W
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 6 ?2 e; r/ {% k4 y0 g
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 ! L  ~. ~  _2 V& r0 Q/ X1 l9 C
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 # i& n* ~% a- X# [( I
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
- V2 Q. \" }( [# M: s6 H. @7 v
, M6 f9 ?: g3 b. g" E也可以用SQL语句来完成 8 G* G# C" N" h! ?
--收缩数据库
% O1 J: x7 j: NDBCC SHRINKDATABASE(客户资料)
+ L6 s/ q* l/ @0 q3 r* Q" u7 @
) Q; \  x7 C5 f0 c. \--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles ' w3 [9 ?  B* K: Y* C6 {
DBCC SHRINKFILE(1) $ O( q) x2 Q5 g4 U6 e

5 F5 e/ L: c2 G0 |1 o' `4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) + M/ ~7 J  h( E& E( B4 s! c& P/ s
a.分离数据库:
; w, N) z& n% E* t4 F企业管理器--服务器--数据库--右键--分离数据库
% e: E$ G" F2 m% I$ }6 g( r( f. r8 L
b.在我的电脑中删除LOG文件 * J! l# m* B) p  R% m! G+ ]
& @  x. \; D% Z, ?3 z- t. R! C
c.附加数据库: " i" l7 @. `7 v* ~% S
企业管理器--服务器--数据库--右键--附加数据库
6 O5 A' p2 W/ f! c" N: {' C) U8 ^' P
此法将生成新的LOG,大小只有500多K
' W: a* s  n8 m7 v/ B8 f* P4 M. w5 a$ N3 R; \
或用代码: 7 b7 r# t2 ?( }% w/ g' w
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 . O0 M6 [: q, i7 f4 t. S
- T+ \+ _" }1 l
a.分离 / m' ]8 e0 v$ O' w0 [
EXEC sp_detach_db @dbname = 'pubs' * B0 q" j1 H& W4 R

0 A! L6 E, m% W4 ub.删除日志文件 # g" _3 R# T  C$ ]' c
' ]" e: j- @" j# J+ W! N
c.再附加 5 l9 u+ h0 |0 w8 W
EXEC sp_attach_single_file_db @dbname = 'pubs',
2 f; a* {0 P; o. m  p. T@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' & n) {; X) T6 ?5 b6 I( U

0 p: J+ j" _/ X/ _: b5.为了以后能自动收缩,做如下设置:
& L/ S) t9 J% \8 C  D- z' c企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" * r* y1 o1 X% y; p$ H! e  q
8 q3 f/ @9 Z. u3 p8 b8 C9 }
--SQL语句设置方式: - L( u7 \7 `+ j/ p+ P
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
  y% u5 h$ }5 O2 g, U1 y, ]7 z  M% t) `, U0 \. s" h  ?0 z
6.如果想以后不让它日志增长得太大
2 ?, w/ @) t# Z% R- [企业管理器--服务器--右键数据库--属性--事务日志 + \; e: U0 z3 C. h6 I
--将文件增长限制为xM(x是你允许的最大数据文件大小)
$ s. \" U; |3 `2 |$ p/ ~( M* D' E6 C; X! j% n3 ~) {, m- m  E
--SQL语句的设置方式: 3 _& k" e* Y: i) h1 W' `7 A
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
3 |+ a" I" v2 Q4 J* h9 |
0 @- D( `, U5 \5 E8 a1 N' ^  p
4 ]) W* Q, e, f2 Z& O) xvxfire 2007-08-28 14:19 - G% J" y1 D9 U3 B( y# l
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦   r; H( y* G/ c% e7 h
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-19 19:32 , Processed in 0.144294 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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