找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3795|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
0 {7 b2 j. Y- j# `2 T
9 j+ y  r) u" T  y* H1 d% @  x1 a; T5 }1 J

2 S  N$ s: j& E5 b. n0 }  --下面的所有库名都指你要处理的数据库的库名   
- O7 A/ u, L3 X' `/ G: G  s/ S$ Q3 @$ I' w2 ?
  1.清空日志   0 R5 c1 n* ~) K+ q, e  @) n, N/ w, x
  DUMP     TRANSACTION     库名     WITH     NO_LOG           0 X0 S/ R6 _3 e6 H( N' E7 Z3 G

# }# }2 _* S# l/ F/ S( v2 i. l7 k  2.截断事务日志:   
! m* [+ b* G5 L2 W  BACKUP   LOG   库名   WITH   NO_LOG   7 t) Y$ e3 U8 O1 b" I: F/ r

' q; i/ v/ g7 p; b1 B  3.收缩数据库文件(如果不压缩,数据库的文件不会减小     W& e* d6 A; Q3 g
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
! s  h: b4 u0 p; b8 v' S$ M  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
1 u. M/ X" k9 Z! ?  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
9 b& X5 d0 B' v$ b  I+ u4 ]3 x9 ~; J: K3 a8 ~# M7 S
  也可以用SQL语句来完成   
# I+ p0 r, Y) F' |' J  i  --收缩数据库   % O6 t$ r7 l5 X7 f0 P3 z5 ~
  DBCC   SHRINKDATABASE(库名)   
8 G# k7 p& Q% Y. ^9 M% r: {& p$ u2 G+ R/ B( b) }2 G' U$ ^2 s/ ~* k6 X/ |
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   / R+ k2 U% c) _. F
  DBCC   SHRINKFILE(1)   - d* R/ ?2 s( T* G1 B9 j; `4 R: j
. p" O+ o' v! ]
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   $ ^) W# g' {; |" T
  a.分离数据库:   
- v  r1 {) i4 K) I; ?  企业管理器--服务器--数据库--右键--分离数据库   
2 S) G2 ?$ d1 A" u/ n
9 ~, a8 W' O5 }( r/ C/ m) D. e  b.在我的电脑中删除LOG文件   
/ J  j/ c, T7 f% S# @2 {% U
5 O( ]! z" n* m# M+ m+ Q  t  c.附加数据库:   , `0 j" ^: h8 K( o: r* P
  企业管理器--服务器--数据库--右键--附加数据库   ' J) U, o& i! x% ]

+ f, f2 ~# w" l7 N4 A  此法将生成新的LOG,大小只有500多K   / W/ `* W  S" W; u5 f( F
+ @" B0 ?( s( B: F7 o& x, s
  或用代码:     ) I( |) j5 U; E4 w/ `9 P
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   ! A+ K" P* Z! [

! B6 B1 I5 ]0 f1 \  a.分离   
) T: I9 n( h- {  EXEC   sp_detach_db   @dbname   =   '库名'   
7 G. ^/ e- D# F8 E6 R$ g. y
2 M: {/ V% k2 R9 T4 b  b.删除日志文件   * T) t: A( U9 Z& k" p' h  k
" E4 ~+ B* x' a6 Q! _( `
  c.再附加   
6 M  c3 N% p' {2 f0 l( H2 _: e  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     
/ ^6 o8 k8 _# `9 [; N3 A        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   " p% ?! \, _. y0 }7 Y  g

% U0 _7 \8 Y& V# H* P' b  5.为了以后能自动收缩,做如下设置:   
; g- Y+ F9 |5 @/ {  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   ) y' e; L$ g# q

( `7 _9 U4 e9 ^- e) T  --SQL语句设置方式:   
  _" W' |) M  l. X" I5 ~" z" _2 G. |  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   9 v+ v+ @& t0 U) t- J

) R% B, O% r7 W/ z1 x8 f) p  6.如果想以后不让它日志增长得太大   + w# B" D# b  Z7 s0 w# T! d
  企业管理器--服务器--右键数据库--属性--事务日志   
. K! y/ ?3 r1 }- b5 t, N  --将文件增长限制为xM(x是你允许的最大数据文件大小)     r) ], q: c* M6 ]

% s( J- X3 _. q# X6 J4 P! b  --SQL语句的设置方式:   
% Y) W& A" n( f9 T( n! }4 Q  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   
: f8 t, P7 `+ M8 }! z/ W  ---------------------------------------------------------------------
; _+ u0 ~# b  V# p6 \; VSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) ( g+ J! J1 }( T* d/ b& J
% S, Z  Y9 m" c3 J5 Y0 R
*清理历史记录
% B8 R: G1 S6 c% H1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
# W! r2 g2 a9 j6 b6 H5 }2 n# q2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
' J2 ?, y3 F+ K, l; z如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 4 Y% v  C4 p3 O/ b5 A

# O  U% J- X  I0 B3 s, I: T9 c2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
) a: `$ q6 }, w  n4 A  G点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 1 J& T  z; T0 O, ^( W% J
直接将x改成其建议其最小值y按[确定]即可压缩.
, L( U: w* f  ?* d" ^先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 8 s+ c$ N7 }- ?% j+ t3 A

9 p/ T/ C+ T% _3 _总结:其实也就是两个指令就可以完成了
5 {* \; q0 T- PBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
, _' I3 F! S: H; wDBCC ShrinkDatabase(DateBaseName)
# t9 g) w: u- F% Z) J( m+ |6 ~3 \4 K7 y+ f$ @7 c! ?) ?
*设定数据库自动缩小, 默认值为OFF % v2 e8 [! u8 ~0 c- z
方法1.
2 x2 i/ I2 U! H$ j( z+ r  a) r3 p+ HALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
  t* S8 l5 y( _  h; m如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON 0 Q& }4 Q0 M. q5 {( g* h' I
方法2. : ^1 b$ R( m- t& I* y
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ) p: A6 M% e: @) n

+ ^) C& i& Q' t) R# z( i8 C" m
5 u& E4 j3 d% x( ^) N SQL SERVER日志清除的两种方法
6 Q6 S: f3 a! I( k% n# ~& j  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 4 X* T/ k0 Q5 R; U& J- V0 `

- X8 f7 O8 Z) U  方法一 ; k0 `/ H% ]/ L' V+ q

! W% M& d/ l9 ?- z/ w  Q1 n, n) M  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 ; Z8 R$ `# k" V# y5 X: Y
9 ?, G4 K6 ?$ {, J/ p! b9 [
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
' r. T& L. o& X( A9 q4 A- q. G! m  V( M. s
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
7 r$ _2 o% w4 t+ I5 Y- B1 m) E1 X$ M3 g/ }
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
* J8 ~1 `: R6 p
. m8 R' y! m$ L/ j  e
) Y( S0 v" ~* z; v4 M1 s2 ]3 m: H5 p2 y" E0 L$ w3 L. K, r
, y' \& N) W" W" x* s! J
SQLSERVER中讲:
3 V; Y2 f: h) O
) h6 U' @5 R% QBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
$ S, i: G1 H+ X$ t: F/ J4 t& |' t5 a9 u
但我在数据库中进行上述操作后,事务日志还是没有改变。
  k$ [& }4 X) S9 t3 D% p; `2 j1 k& P4 b6 S7 f: u0 m
: o0 k- y. b$ n7 {0 q
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 8 c0 E. A7 D" j. {  h; t
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
) g3 Z0 p- r+ Y) |3 i, Y1 P1 z% N: ~7 M2 h& n9 I* w0 O$ O" W

- T: i, _6 P- o) r+ g老马嗖嗖 2007-04-30 13:03 & }5 p7 `+ H, l! t
SQL Server 2000中*.LDF文件是什么作用
) U2 ^' s! H9 D/ g( D) T, H" C5 P8 ^4 V
*.mdf是数据文件   ! S/ M6 N6 C9 b# B/ e
*.ldf是日志文件   
" H4 W7 q( y5 w8 E" g" J2 V当数据库出现问题时   ' k0 [, u& ~1 X* f, N& y8 ~9 f
可用以下语句恢复   
( h* y( Q% a; B# w. c/ \数据恢复一   
9 }) |0 p1 O) T4 R5 l0 q1 C1. 先分离数据库   
9 D" }6 f, h2 B. d% Q; i: y% Q* Texec   sp_detach_db   dbname   8 p6 h8 h2 k$ |( A% [
2. 加上数据库   
3 K8 E) F* F; M0 j- }5 k9 \+ wexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’     w8 V. U& C, U  Y

' f4 Z# j7 h! o9 ]# E  I
0 |. Z$ L( A2 a- t) U5 l老马嗖嗖 2007-04-30 13:04
/ J4 h, w  Q9 T% ]* X. \: }  x8 t. g( `* B
0 P6 N1 E$ Q' i
1.清空日志
8 N" q3 J2 T: lDUMP TRANSACTION 库名 WITH NO_LOG
: X/ F, f3 @' i, \7 a0 Q9 ?; x; {
2.截断事务日志: & l. M8 \) R' n5 i3 b
BACKUP LOG 数据库名 WITH NO_LOG
) L/ P7 x& x  x2 S
  O5 Q" `) W1 s  p5 H. N) e3.收缩数据库文件(如果不压缩,数据库的文件不会减小 $ @, }7 e5 Y* I1 @
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 6 u% N2 G1 ^8 F0 d6 S4 p7 f
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ) F! e$ x+ w, D9 Y9 [7 M+ I
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 # ^1 n" V7 }' F% |+ H; u( p4 T
1 L+ @1 k7 O% a  X7 V
也可以用SQL语句来完成
) r4 F- `) ?1 X. U' Q--收缩数据库
7 q6 A3 m* B9 m- k" X, JDBCC SHRINKDATABASE(客户资料) 9 i7 @# N' V7 m" o

* _; O6 v# f3 H* ^( o--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
* X5 _5 ^- n9 B3 yDBCC SHRINKFILE(1)
/ g4 z+ j: A/ i) k! o
% I4 D: R8 e% w: R4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 6 T: @' M: X: i2 P) D
a.分离数据库:
2 E& C( K! D8 Z4 `) e企业管理器--服务器--数据库--右键--分离数据库
4 p, Y# z2 T& D; V& Z8 {
" ?/ G( D# @' c" _$ ib.在我的电脑中删除LOG文件 ) V6 d$ r! h/ |: l1 r! h

. O3 a/ z3 j1 kc.附加数据库: 9 z. }5 a  \! K8 S& B
企业管理器--服务器--数据库--右键--附加数据库 6 p- x! L9 v4 M. B  ]/ w8 O

4 ?, N/ k7 n7 d% N此法将生成新的LOG,大小只有500多K
6 k3 {  _: x& ]" `: Q0 H7 K
  @$ @* y3 g+ ^$ a8 n- R2 b或用代码:
$ R/ l* n4 P) d$ m6 k0 ?# y下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
$ O  H% g) x$ t& L
. W# W" Y& w# h9 A7 `* P$ {a.分离
5 L; m" t7 x( t+ f3 s  r& NEXEC sp_detach_db @dbname = 'pubs' : P) H  j/ m1 x2 G  s5 u' `2 K

+ a5 R0 p5 ~4 S6 h% mb.删除日志文件
# H8 @) Y3 a; p1 V3 u8 T6 _) U' C' L( ^7 R, z- l
c.再附加
- B9 H1 \* ~, \5 n. i/ wEXEC sp_attach_single_file_db @dbname = 'pubs',
+ H$ J1 `$ P6 b4 K, g& I9 Q@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
; k2 i+ J, x8 \/ q2 ~$ H7 p0 r0 ~& Y' K1 z4 q) ~+ O# L  {
5.为了以后能自动收缩,做如下设置:   ^' ^& L6 [  U' A7 p
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
" g) n$ L" v& ?* d+ h" j* H2 c# y: a2 c5 G. N
--SQL语句设置方式:   \7 V; n7 i5 \5 n& a  ]  q' ^
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 0 M/ ~) C5 Q) Z0 _
8 F3 q8 M9 l, x, z" b, q7 G
6.如果想以后不让它日志增长得太大 * u7 P' N# j% N+ y  G
企业管理器--服务器--右键数据库--属性--事务日志
3 K/ J/ P$ v# l: R: j. M' g$ M2 b% y--将文件增长限制为xM(x是你允许的最大数据文件大小) 1 [# c6 [/ M# A$ d- |- v) L

5 z5 b- ]+ k1 N, Y( Z--SQL语句的设置方式: 0 i$ U% o# x( g' T
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) : Q' q+ _% v3 ]7 j( @

  U/ A' B: r" K4 T
2 F9 k3 w" w. h4 v: ]3 B/ ovxfire 2007-08-28 14:19 7 N9 u. R) R; I7 Q0 c& K
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
9 a5 P" N* D3 T1 @$ b
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 22:06 , Processed in 0.035493 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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