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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3039|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   0 G8 x% R) N& B
4 b0 P' I1 x& A* W

6 S' O, t; x; W* G( [, ?
( E$ Z7 Q) K* i9 h. U8 I0 F  --下面的所有库名都指你要处理的数据库的库名   4 P+ H- Z% K9 P( C- W6 U
4 w- E: }& v8 t! K
  1.清空日志   
  n& s# k4 B  z  DUMP     TRANSACTION     库名     WITH     NO_LOG           2 N; x- ]0 j$ K2 D0 s0 {
* Y: D+ S( ?/ t! G, w
  2.截断事务日志:   
6 o+ f4 a# t! O  BACKUP   LOG   库名   WITH   NO_LOG   8 W. g9 _3 P5 a$ s6 [6 Y
2 H" X2 w8 t, z0 z
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   
( y  a: H: D! L5 ~: I5 [  r- h  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
1 S6 }( ~/ Z4 n$ k6 C  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   8 c8 p" o7 t& V7 F) P3 z, b' |7 ^
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   " i& g( m7 U, Y& }
! O1 T+ S% w! Z" _  F+ O7 E+ u& l
  也可以用SQL语句来完成   
) z1 R; i$ v. a& O+ Q7 X2 b8 K  --收缩数据库   
3 j3 i3 J" s* Y0 z7 M  DBCC   SHRINKDATABASE(库名)   7 }5 j  G/ T) D# ?8 _* R; ?6 k
" \+ I: Y8 \1 J8 ]1 M' B
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
; ^: h+ p; L5 m- b1 H5 ^  DBCC   SHRINKFILE(1)   
+ I: e  w( I4 m# b4 g9 A# N2 e1 \0 F+ @) o* ~
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   ( l0 y/ N" O* }) y: R0 F. Z( q
  a.分离数据库:   4 I$ P8 S$ C" ^. `7 n1 t% W7 o
  企业管理器--服务器--数据库--右键--分离数据库   
" v" M; ~, z9 c4 M1 J" l  p; K+ b' ^0 c
  b.在我的电脑中删除LOG文件   3 F7 m2 h1 ~9 }$ p  M9 H
. o* [6 Q6 D* p
  c.附加数据库:   4 a; i* }- F) q' D. i
  企业管理器--服务器--数据库--右键--附加数据库   , |9 N5 V4 i" U: @& q3 @

( |* F4 O% U8 k4 r/ O7 J" t  此法将生成新的LOG,大小只有500多K   
# b# s. l& z6 o' t# j* Q: P& N; B0 i4 j6 I$ c9 T8 P! i( e4 z
  或用代码:     
4 M: f0 a4 L4 I( {0 C9 l  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   9 j: L: \* [  \0 r3 e& w

! x9 t5 r  b( Z) V: R- z4 L5 C  a.分离   4 ^* F+ P4 `4 [0 x- o$ G
  EXEC   sp_detach_db   @dbname   =   '库名'   8 E5 _- n: K; x& G) ^$ O) n- L; m
/ t. c+ B/ Q/ S3 T* h
  b.删除日志文件   
. U% A0 I  @4 H; i. f1 Q0 h( M
6 k; N* r1 n" Z/ q; J  c.再附加   $ r1 U+ b" _( i0 l% s- V+ v
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     ' e' y% a1 U0 T$ _( V
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   
" C( x  t, L' q' M! a" m# v0 t" u+ T
  5.为了以后能自动收缩,做如下设置:   $ K8 a. e4 L3 G
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
6 \' x" B+ `; |7 b! \3 v6 U1 a' ?
' z5 f4 N. `! }" @8 z, X( _  --SQL语句设置方式:   
# ]; \7 k; A- z$ F  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   , o. n& i* B4 ]/ R; A* H
. l$ q$ @+ p4 P8 N& h' S1 b
  6.如果想以后不让它日志增长得太大   
: h; S9 L) }: @  企业管理器--服务器--右键数据库--属性--事务日志   ; s! W, D0 D' U9 u3 Z
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
9 I% }/ e9 t; G2 A3 C
% |. j' _4 |2 Q2 M% v  --SQL语句的设置方式:   - I: ?6 q1 ]! b  s8 I
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   1 m; H' P' A$ Z, b/ ~
  ---------------------------------------------------------------------' a8 Y4 K$ f0 }2 a' N, o
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) - X& z: A7 }- {& O6 G! h
& _$ M; J9 M% \( J  Y% X
*清理历史记录
9 S# j; i( f" ]# y1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
- x8 C! w8 @0 x2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY % X" T/ i4 Q( s1 Z& a! V. ^
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY % D0 C# H" N4 T% |0 q
( M6 m; f4 ]5 ?" A: K) v
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
8 r2 ?& I+ i8 o" H, [点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
' F' w+ N* @" R/ y$ \; o& ^+ J1 L! D7 r直接将x改成其建议其最小值y按[确定]即可压缩.
5 p7 f: O% l: c, m2 y4 v" _' u先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.   J) G& e+ U; L2 M

! l  j; e2 @' T. I: I6 [7 J总结:其实也就是两个指令就可以完成了 ) b& ]7 |  m2 p0 k: F* ~* Q- }0 A
BACKUP LOG DateBaseName WITH TRUNCATE_ONLY * Z& p" ^3 n! s% c7 ?: D
DBCC ShrinkDatabase(DateBaseName)
3 L1 t5 }% X: r8 J9 X% l$ t4 F" Z) I- c* X1 q& A  V# C
*设定数据库自动缩小, 默认值为OFF
# v: d* T" G3 @' f0 @% i4 m方法1. : N% f5 U5 B! B/ _& Y) x
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
0 u% d3 n7 y% \$ |4 ^如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
4 R- @6 ?* V. @2 l方法2.
+ U' R9 [  r; G% g$ `在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
" i3 @) D& d: N: {2 p2 v2 u1 h# B
9 {5 W1 u2 _3 j: s$ f- H, ^9 b) y) T6 P8 o- A
 SQL SERVER日志清除的两种方法 * B: R" u. _. V$ _6 h
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
3 x! }% d5 Q$ P' q. v& F
( e( z1 n# N: \# x) J+ W+ P  方法一
: x" @. s$ y. O! A6 a9 p- Y3 _9 q: p' P
  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 6 L( D2 x7 D# m
$ {/ p) H) e0 g
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 , t8 o' d4 r0 `; i8 F# z. E0 x
, Y6 C9 c1 m- S( k) M4 F
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 . [6 `9 A* t" k
3 u" A, r, j# q* \: L7 h
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 7 ~  g" [7 |% s0 D0 }( D1 V
! [' }8 D3 D' d+ ^& G/ e  d

3 X. c' D* ^- S. h$ n6 m6 X6 k
3 J; S% q+ a2 [- _$ S0 _. S$ P
, |. \$ e) g- X6 q$ rSQLSERVER中讲:
( ^2 T$ b3 |3 u
$ r' C) F% I' Q7 W9 F9 VBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
1 I1 r: h: X. D0 x" b6 c2 Q5 T7 q$ T* Z" ?  o
但我在数据库中进行上述操作后,事务日志还是没有改变。 ! @9 c$ b+ t$ P. \
& o" [8 H5 Z6 R8 N- {  c5 Z$ h
1 A. {) x; M/ i
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 2 v7 B" o% b1 ]  a+ U5 s
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 - T! Q7 k0 v! \, x# a

& J. d" g! h& ^7 _/ P$ l" p5 Q* E! O5 N7 n) v
老马嗖嗖 2007-04-30 13:03
* {" _* P" v2 O0 YSQL Server 2000中*.LDF文件是什么作用$ S% r; u6 {* o8 W! @- i3 Q9 ]
6 u3 ?1 }" i  X- o
*.mdf是数据文件   
! ]) k3 k* G4 ^+ _8 A/ d*.ldf是日志文件   : H. Q3 o6 o; T$ J8 i& A
当数据库出现问题时   ) Z) e' W' j, O9 K0 G. V) k
可用以下语句恢复   ( j5 E+ b. K1 v2 F: p+ V0 x
数据恢复一   
  t- l$ z' E1 `9 }) b+ f1. 先分离数据库   
; z6 I- V4 W0 I7 S3 yexec   sp_detach_db   dbname   " r$ J. v; H# K
2. 加上数据库   
% P& {3 x/ H( {2 u  bexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
* [8 Q7 a. T: s( h& B2 S
3 _, ?' n3 Q0 {2 t8 d' M6 p  |! f, I" K$ A% H6 z8 o% v
老马嗖嗖 2007-04-30 13:04 ; K/ b+ L( |2 {$ z+ S4 H

+ H2 U3 g; G( m$ x1 c" W4 m7 E2 ?4 [8 }, x- L' R4 a$ Z( b
1.清空日志 2 Q9 e; l2 T5 m6 @
DUMP TRANSACTION 库名 WITH NO_LOG 4 |5 b5 d3 @. j: _( j# Y4 V$ F

, t; u, ~- D- j4 b+ j- u2.截断事务日志: * z& X: e# o* _1 [3 R1 s
BACKUP LOG 数据库名 WITH NO_LOG
0 V  _- S& Y" m* f3 P
3 Y" i2 s) d/ |  t3.收缩数据库文件(如果不压缩,数据库的文件不会减小 9 z0 R6 H9 N- r7 r# ^! y
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 8 Q8 W, u4 w3 V% }' C1 j/ q
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
1 q5 Q9 E6 k+ C( |! O2 h--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 * ]* E# W# ]( R7 `0 j
& C# O. ]1 M0 {8 B0 N+ b
也可以用SQL语句来完成
- ^7 r8 @7 A4 `--收缩数据库
, ?/ y7 R5 s  V8 T1 F/ U0 y  }  Z9 XDBCC SHRINKDATABASE(客户资料)
8 Y6 w+ @4 h6 l  e  ~- B
- w; j$ P* ~8 w( M: ^--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
: E) k) ?$ `+ K! \  ^8 @! F) \DBCC SHRINKFILE(1) 7 |. ?5 Q/ o; p

: K( q/ W6 L5 A* f3 d& q! V5 x4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
) l# q. [& T" Wa.分离数据库: 8 z* e" N7 p2 _: R# R6 c( W
企业管理器--服务器--数据库--右键--分离数据库 - M1 L. \, G4 b1 y9 n+ o

4 c0 Z3 _' G9 bb.在我的电脑中删除LOG文件 3 `3 E) }9 j$ m+ R

: p6 l# J8 W; d: K( Sc.附加数据库: ) x0 F: R1 x/ ?9 b" f. d' V+ \
企业管理器--服务器--数据库--右键--附加数据库
+ x8 x( _) F$ s" Y  o1 K# n0 n3 v# @1 Q/ y
此法将生成新的LOG,大小只有500多K 4 x7 L  D$ M/ G6 \5 R
7 u' H  d8 y% P' [* V3 u/ e
或用代码:
6 ~( i3 T& Z1 J9 p3 l; Z下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
/ @4 S* o8 a& U5 b9 ]& o; n2 X$ s
; N6 b/ @( L7 W3 J  f" g8 z: la.分离
8 m. P; U) `! H: S7 cEXEC sp_detach_db @dbname = 'pubs'
5 r9 n) p. V6 l3 t' d' W! {6 o' T
2 \1 ]- L* Y% s2 B# }; n1 Cb.删除日志文件 1 C4 w- I- J3 z0 j, w* A! A2 n

$ K0 Z& k  g7 X3 I' Q( Tc.再附加
9 u  \, N7 l) Y+ d7 ?EXEC sp_attach_single_file_db @dbname = 'pubs',
5 p5 p! \3 F, c3 a@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
' m/ @6 f9 e- d$ [8 m6 I# W. x: P/ I7 p8 _
5.为了以后能自动收缩,做如下设置:
, t+ L* H# W3 r- ^  T5 `. p企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
( J7 Z; K3 |7 I# w1 I2 |5 W7 u5 L8 @
--SQL语句设置方式: 9 a$ ?, n1 t" [# C, }: v7 \" }
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 3 b7 I: M8 x2 D, _& g3 w7 G$ Y# _
: @* o+ I; v  j3 Z( k/ L$ c$ J
6.如果想以后不让它日志增长得太大
0 q! Q( v5 G/ n  W  f2 p" d, S企业管理器--服务器--右键数据库--属性--事务日志
7 C9 ^8 `) {1 [4 z- O--将文件增长限制为xM(x是你允许的最大数据文件大小) + e. ?8 r) W8 t9 p- ]9 \& u3 p7 Z' V5 W
$ B  {+ ^, G* |
--SQL语句的设置方式:
9 j" G1 L. d3 Yalter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 8 [3 H& T; v! e% V9 l9 K
4 y$ a$ B" p5 U" w! I# f: W

6 c9 Z6 b$ R' O6 i  F) F1 x1 C3 ?vxfire 2007-08-28 14:19 6 s2 _% x+ w: n4 A' S7 N
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
1 Z+ {8 u# L* e) @9 L9 H# Q
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-9 18:45 , Processed in 0.172720 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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