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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3664|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
+ w4 z/ N$ [/ ~5 u' t0 ]! u9 n# C/ Z
. @6 i' X4 R5 y( j  W# K5 Q

3 P) s! Q7 N$ f8 q/ x  --下面的所有库名都指你要处理的数据库的库名   
) L. U( ^7 y+ n5 b1 x9 I6 v0 G  E$ _* b! C
  1.清空日志   8 x5 U- Q* f# p: M* M) v# R# g  B
  DUMP     TRANSACTION     库名     WITH     NO_LOG           % x- ]- j* w: b, L) _# D3 p& A
* b3 Y1 K( ~5 b; R
  2.截断事务日志:   
- h+ S9 H4 B. [# l+ e  BACKUP   LOG   库名   WITH   NO_LOG   
, \) S- w3 C! \6 N' H  g
, e4 B( n7 U' V( d' g6 P7 ]9 F  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   
+ O; l" T/ C  N6 b8 R  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
. B9 V* ], m8 }7 F# m1 k8 k  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   8 y# U+ M2 Y. M: j; C5 `" g; o
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
+ Q9 v" ?( Z! _2 M( m3 k2 n0 r+ C4 g% B: h  W: q
  也可以用SQL语句来完成   7 W: |7 ?$ h1 u5 P) }3 m
  --收缩数据库   
" W" C- i* C* N! \: U0 n4 z/ G7 [  DBCC   SHRINKDATABASE(库名)   
. V; [( `/ T) h% z
% r  V4 G0 A; j0 X0 V, E  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   " Y$ P3 ^9 u9 S, O5 }' H: _
  DBCC   SHRINKFILE(1)   
% p& U3 q+ ~. y+ A8 p# _% x& e: Q3 R! F
0 r# m) A0 G9 P# l5 m  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   - c8 D) l+ M5 {2 ]+ I8 P
  a.分离数据库:   % `, r: t- h9 E. q: D9 k
  企业管理器--服务器--数据库--右键--分离数据库   & t* E5 b3 e: T7 w" f9 A% l

7 x5 \: ]0 w! c  b.在我的电脑中删除LOG文件   , [0 l1 U! X: W" ]1 L% O. D  M: O
. k" ?+ B2 ~' ~: z/ `% i, e% a
  c.附加数据库:   
$ ~" ]: ]8 h5 g" z3 A. I  企业管理器--服务器--数据库--右键--附加数据库   3 z! V  q8 r  @: @' B4 i
/ J1 X8 v' G8 x: ~* ]! L9 Q& y
  此法将生成新的LOG,大小只有500多K   
0 u4 }( E$ x: P$ [  B  [- Z! w; L4 h% z- ?+ a0 p. u
  或用代码:     
! ?6 e' ~, r7 e$ N6 G9 J( M2 S! C  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   * z1 \* Z. l8 w1 e/ x- N* ?. W# m
0 M1 x* e# w7 M3 O0 r7 L4 H
  a.分离   ; {# t9 r$ G  I8 n4 }4 X5 ?
  EXEC   sp_detach_db   @dbname   =   '库名'   , R" N/ K1 n7 j$ s

$ Y9 R+ ^9 M) h% k8 y  b.删除日志文件   
8 r9 a6 J0 o1 k! \/ j2 f# f8 l$ {& U: m
  c.再附加   % F7 {$ k: I( d& q( U' K
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     
$ w7 j$ u# U" X- p        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   
7 K* x3 U' x/ y( S2 a. G; [
. c7 I) D6 B% d+ k" L8 A' ^# O  5.为了以后能自动收缩,做如下设置:   
' @  d( R7 z  M0 K4 s7 S  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   4 k% X, k+ h  }7 @4 |
+ U" z! p# p* ~- A: I. z. u
  --SQL语句设置方式:   . e4 _5 T" L6 B1 P8 m
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
2 z: B! R( c0 l( x1 N4 @
6 `/ R6 o* \) f  6.如果想以后不让它日志增长得太大   5 E* |8 s# [6 E! Q% V
  企业管理器--服务器--右键数据库--属性--事务日志   5 v" [, B0 X4 j7 v
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
0 m1 J5 w' l" x" m" c# q4 n
1 H! a8 S+ _4 m( k  --SQL语句的设置方式:   9 h, S! @- ^: k( e
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   ' E8 m0 c4 [7 `* |7 h: z/ e
  ---------------------------------------------------------------------+ V+ ?6 b( P/ |) N0 R
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
" u5 J4 @- u! p/ K1 u5 N7 a0 e' f+ g& z: J3 Q1 _
*清理历史记录 9 n: J( V1 ?+ v, i  r. L' Z# K
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
) u  m9 {3 U* Z( j2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
5 X% D$ A. }  u, E8 ?5 }0 b如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
! _0 z- i9 M0 }
9 q5 O3 H5 O& H2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
# z# c7 Y0 V" V5 A1 W& d% N& P点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 9 R* ?7 N' a3 g4 h1 `3 p6 @
直接将x改成其建议其最小值y按[确定]即可压缩.
, ^$ Q! R5 ]/ ~) q6 d2 E  h+ ?先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.   x* p$ k; v' g. G  M2 {

. k8 A( N! k& T总结:其实也就是两个指令就可以完成了
2 h3 R, ?/ f- Y  }) |/ `/ mBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
( a8 Z& m$ v/ c% n& e: I$ }DBCC ShrinkDatabase(DateBaseName)
& b( M& m, {0 f; J6 z5 ?8 v. F5 c. }& j2 }+ v5 c2 c% ^
*设定数据库自动缩小, 默认值为OFF
0 W  K- L! U( F- w+ b, U2 I* u% X方法1. 3 k; @; T& u$ N4 l; A( C0 B: v
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
. {) W  N& c& r如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON , h6 T% w' F. i9 j
方法2.
9 O3 b3 l9 h; J" D# R7 e在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
) I7 O& [; j% K" t; `! e6 }# y
) v$ d7 z# R) u' s0 C: y7 S$ G2 F, ?
 SQL SERVER日志清除的两种方法 ) @" ^9 {/ p5 w0 Q+ E
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
; \. f. Y% B7 Y; X, u: C6 L- P; r( J* r' {& T5 E
  方法一 7 N* O. v' _" d9 }0 z4 o
4 l# c1 S9 m+ W' }! H0 _; |, ^) O
  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
! r, ~: p$ d3 K. A2 l# _+ ^: z+ I" l
  S7 ~' B# U- R2 g% ]; F7 A  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 8 Q' E' `8 E: W) e
* A7 {" P: S& b& k0 y- V/ \3 B
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。   ]& r6 X; Q; X3 p! b- q* @6 v
# J+ X9 L. z7 C7 L8 r3 h
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
# S; u$ c# M$ k( I
( z% t: j6 Y0 y$ @+ {" y
8 x# W# J# P5 g% q4 H; \8 `; J! \& l" ]$ D, l
; Y5 Y& k' o: J1 Y; \, u
SQLSERVER中讲:
! I0 R6 S* |4 R3 U8 G0 D! q. i5 c3 I. r% l
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
7 F% m! p% J" ^2 E% m* N# R4 d
( e* t. v# g3 }& G, k; U& a但我在数据库中进行上述操作后,事务日志还是没有改变。
' _1 c, y7 {  O: [% h
- Q' r& B4 I& y  o0 [9 B
, f2 S  d  a, T4 P+ c第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 & x$ ^7 ~8 g6 O8 Y4 y
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
/ \: K4 D- H: _3 I9 F3 W. Y% f1 z$ M6 `0 I! O, b1 i3 h
8 m& m  S0 R+ E5 P+ k% ^
老马嗖嗖 2007-04-30 13:03
9 o8 K) z% N: o  ESQL Server 2000中*.LDF文件是什么作用& W5 E1 ]" u+ Y  g) i6 ^/ W
( L% h& k  g0 d7 i9 |  W2 y
*.mdf是数据文件   : _7 ?3 m; J4 n1 H3 z7 k) R
*.ldf是日志文件   
, f" L0 L! T" K* `' i2 S当数据库出现问题时   
/ V, h2 r8 e2 r, U. s3 l# c可用以下语句恢复   
# Y, m9 Q: q$ u+ y9 s0 M数据恢复一   4 H) i4 N: R* C
1. 先分离数据库   
% z1 m. n" \& F, V& \exec   sp_detach_db   dbname   
3 e) x; A3 p  P6 ?5 W* j: y. k2. 加上数据库   
( `0 b5 G' o0 D4 L* A: z3 u) q1 a! t- x1 Iexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   1 ]1 B7 G' {- h6 A) {
: q. _9 _. x8 N& b1 E/ Z; s
5 H& E* A- Z8 e
老马嗖嗖 2007-04-30 13:04 ' b3 c2 U) p6 _  e2 r

: A6 ^7 L6 R+ d; x
8 t: j! P1 U: ~1.清空日志
- r$ E! _/ v; cDUMP TRANSACTION 库名 WITH NO_LOG . D- Z% ~6 C9 h# b( m' x. d$ }- V6 e

9 x3 f* {3 l6 a2.截断事务日志:
+ L) Z# ~1 N- M8 c8 pBACKUP LOG 数据库名 WITH NO_LOG ' ]0 V+ \9 t# A' \1 L: f
5 ]4 P9 j# x& O& s
3.收缩数据库文件(如果不压缩,数据库的文件不会减小   q+ k$ o& c/ _; Q
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
5 v4 Y; ^3 u  H- x; K( N--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 4 o( P! }( v* Z
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
# \. Y- E1 Z) {) [, O, O) C$ t0 ?5 Z0 b: `4 _
也可以用SQL语句来完成
* ]1 Q1 y. [! M--收缩数据库 6 W/ Q0 s& l! {6 W! H
DBCC SHRINKDATABASE(客户资料) # }# E$ Q& k/ {& S  h! s% s

3 f2 \( G1 K/ k  g. a; J: ^--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
* _3 R! i1 c" |6 G7 ~  m' N  JDBCC SHRINKFILE(1) / w, g2 k! E1 ^5 Y* d( Q/ W2 j& t
. G" n! C$ i/ r1 f* q
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
- G; b0 V! l1 fa.分离数据库:
& ?' M$ Q% ]* H- `* w企业管理器--服务器--数据库--右键--分离数据库
' K: h7 j3 h! s6 ?  f8 f6 i( V( }6 j8 o* @) R$ K0 |, c/ n
b.在我的电脑中删除LOG文件 7 {# T' R0 b: c+ M9 ]9 t; @; E; v

5 v  c& K$ W- d/ |& U+ e8 B9 Lc.附加数据库: ' I  f1 k5 _! w( y1 k+ p6 l5 d4 c
企业管理器--服务器--数据库--右键--附加数据库
. I& V3 a+ B5 c8 o
, a( ]3 j  f& {& A  A; A* y# \此法将生成新的LOG,大小只有500多K : y6 s' Y, O/ k& S6 Q

( b* S. h: b( d/ I或用代码:
3 w5 E; ~  x  s下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 " {0 r' b" C& l) \; _0 ?. t
6 y: X. P) h5 R+ @- E6 r: `; a/ O9 l8 g3 Y
a.分离
3 I; j5 i6 T0 M5 QEXEC sp_detach_db @dbname = 'pubs'
  v: c& [1 L- }# k
* p; N2 i" A& Kb.删除日志文件 ' s- s+ R1 a+ b6 f+ A
( q# V/ z/ O) |: V' J
c.再附加 1 b+ h# |9 R2 O* D0 u& P% n
EXEC sp_attach_single_file_db @dbname = 'pubs', # T8 |8 t+ r. a  H5 \
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' 4 b8 ]/ P4 C- F7 m# n
7 l" E5 K; W$ q* x
5.为了以后能自动收缩,做如下设置: ( x( ?( r. x" j
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 5 s2 P4 U) A( m7 ?
6 F4 H9 N: Z, G  b8 P
--SQL语句设置方式:
6 J) O* C6 D1 S: vEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
1 @8 U0 W2 M+ E; M+ p6 y" M/ c% D$ v& p; @" T" |' Z, j5 }$ ^% v" [
6.如果想以后不让它日志增长得太大
: }, ^' V$ Z$ W+ E/ u- V企业管理器--服务器--右键数据库--属性--事务日志
' T8 K) i+ U1 _) u--将文件增长限制为xM(x是你允许的最大数据文件大小) 1 |: Q# c7 p$ Y* m$ `$ o1 X

4 T1 C, L' m) a. F--SQL语句的设置方式:   ~. Z4 t& Z; S$ R% x7 o* `
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 9 m5 H  q* L; J& X0 S

' n, D, }7 ]+ l& h. W% j! C7 \. w" }9 G8 F  g3 M
vxfire 2007-08-28 14:19 8 X* }7 i+ }/ f$ I
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦 ! c  X2 ~* i* L4 a' t
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 22:22 , Processed in 0.082599 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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