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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3655|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
; ?" n% [- |! j* S: e" E6 w
3 Y, t, \4 v) c6 `- t( n/ Z" q/ ]4 t- @4 P; U! x) u
' P" m) M, Y7 Q2 P9 U( V) t* q, X5 Z
  --下面的所有库名都指你要处理的数据库的库名   4 n: o2 H0 P/ u3 Y5 N

) @" n0 b  x( T: m! _7 U  1.清空日志   % K5 C0 k7 B& I2 f2 b
  DUMP     TRANSACTION     库名     WITH     NO_LOG           
0 ]; y, Y. ^; N2 v! \
; C6 d/ E) i; F  2.截断事务日志:   
6 s% E0 v! o/ X, M+ f1 b8 N# m  BACKUP   LOG   库名   WITH   NO_LOG   
& P$ U  l) e; p& k: K
+ w# w, t  D7 g1 T  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   
1 S; S4 a& M, i3 N! s  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件     T; L3 E" i& n  V+ U$ S7 Z
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   & s9 e) N( n* Z2 o7 a9 ^
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
( v7 H7 A/ q; o5 Q4 |
9 Q' z. P% m2 x# j+ I. x; ~  也可以用SQL语句来完成   
$ ?1 _% P: I# l# x2 Q+ t  --收缩数据库   . ~+ F' k; O3 R2 q6 T
  DBCC   SHRINKDATABASE(库名)   
  \5 p. i5 C/ I' i) D. X9 e  p5 s+ d
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   
5 T4 P2 o8 u0 @# X: \' i6 v  DBCC   SHRINKFILE(1)   
6 {. j4 x& a; L! `2 N  Q
" V/ `& T  `" f+ j6 D5 O! M( {  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
! k8 M, u2 B4 f& [! w: U2 X  a.分离数据库:   . b6 U( d* C5 p- I- U
  企业管理器--服务器--数据库--右键--分离数据库   
+ S+ K" x+ R! _/ d; ^* S. a% _+ N: \! m! b& N
  b.在我的电脑中删除LOG文件   7 a( R" c1 l6 J! M* b

8 t6 T: k& d8 C. t% Z0 h  c.附加数据库:   
- w. D( _! m. `$ J) h! M  企业管理器--服务器--数据库--右键--附加数据库   " h4 A# {6 P& K" v. `

* p  {1 N/ c! m% l  此法将生成新的LOG,大小只有500多K   
* p2 a& M3 b8 N: k+ q- T; [" Q/ M. ^* Q  ]. j/ z9 K
  或用代码:     
" }' g6 f3 Y( p% a& C( C- F1 n  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   3 M- F1 t' l! [
- M9 R; D2 u% m0 q
  a.分离   
" p& w+ f( a7 h$ |  EXEC   sp_detach_db   @dbname   =   '库名'   8 h* b3 F( Q0 `& C( G
$ W. g. C. c( F- D
  b.删除日志文件   , ]# f% ?  N6 u- \) @
# ?5 v7 y; D+ ?0 v/ i  l
  c.再附加   
0 M6 b% q$ P- g/ K; z  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     * N6 s8 a) g# H' l6 a" L3 E4 a% g7 k
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   4 G* [* p: d: [0 k2 G

; C! \- t  k# M0 p3 p* a! L- H9 f  5.为了以后能自动收缩,做如下设置:   
. M; @3 L, m% P' q. `& p  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
& D+ @7 ^2 G+ b" ?. j# y$ P
2 c. j1 u  E. Z4 O* R  --SQL语句设置方式:   # G0 a* q# y) d. e3 r; Z
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
$ C$ t+ Y# i% Z4 J" \
! r! F+ r' J$ n2 C; m# z5 E8 u; O1 S  6.如果想以后不让它日志增长得太大   
2 \1 G6 D6 G; c& e  企业管理器--服务器--右键数据库--属性--事务日志   ; c: W4 ^6 h$ ~& ]/ g! E
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   
& l! P9 t5 O  A( E5 q+ V; V& J2 R# w& c, l& Q1 u  v% B
  --SQL语句的设置方式:   
9 J7 n, d) W0 u( T4 C  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   8 X' _! e$ ]2 O* H  w) q
  ---------------------------------------------------------------------: N% M2 E* F6 L3 ?
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) " T" x" h1 t% |3 }

5 J  e) x5 a" I! Q9 {*清理历史记录 ) f% c7 q8 U& O5 G& L  T( W
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
/ ?: x2 x: I3 V2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY 9 V4 ]$ u- t9 |. k" H% V) ~
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY 0 q0 I) Y+ B. A) n
% I% s' F# g( y$ s% G* f  T% o
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
2 V+ s6 a* c% `点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], % d0 N6 l2 s$ L  I2 M: `0 s
直接将x改成其建议其最小值y按[确定]即可压缩.
* L9 g2 `5 k$ i. m+ e2 ^先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. 6 m/ E3 Z/ J. d$ ?& U
! Y2 ^1 j" S0 i
总结:其实也就是两个指令就可以完成了
8 l: a5 j. a) _  Z$ Y6 K* fBACKUP LOG DateBaseName WITH TRUNCATE_ONLY % K9 u; s5 d, D; V  ~
DBCC ShrinkDatabase(DateBaseName)
6 k$ s7 p0 v) l7 W! m* V3 M* U5 t8 Z) @) z& ^
*设定数据库自动缩小, 默认值为OFF 7 U4 @2 F  I3 O+ B! X# b
方法1.
. }; P8 s4 t. N3 H8 n; w; ?" q6 }( PALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
7 T1 K1 E+ Y. G4 _0 m  T如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
# J+ O0 x( I; e! h. Q方法2. + @7 \; a/ S. b6 b# h! h- ~  l
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ; X% y/ w3 s& X3 j8 X/ r
+ t& {, b3 _+ `$ G! D

, u  r0 \  P. { SQL SERVER日志清除的两种方法 : V& Z7 I5 Z& K) z2 u, W6 ?: ^
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… + H" I1 u) O9 A  k

; u0 B1 |* _. c/ j& J6 R  方法一
7 T# w/ l+ }/ M
/ r9 m! T$ V# l7 _/ _8 {5 d; C  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
0 V6 f4 J' }4 K: s- K4 L) F3 D
5 ^. m# [8 V/ x( N+ `; S  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 _# Y+ T% Q; u6 |

, r" `" F  {0 E7 u3 K$ U  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。 & e9 u6 h" y+ G& b

( Z7 t+ t6 Q3 _! W4 N& x+ Q; S; D  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
0 `8 g4 j! s9 d- l8 W! C) N1 O9 s' P0 E) G
3 G# \9 Z; g9 H0 N4 y

9 r) W4 B5 ^* M+ W* }" c
; z: ^1 ]3 k7 b; j7 _0 X4 _# bSQLSERVER中讲:
$ d1 d3 X# C: k6 U' ]
1 n' q) q3 k+ |% e& g5 j/ DBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 , M4 h8 |, y0 R& M% {( m& m
) F/ ^8 r( m+ t# _0 H$ B0 j7 H
但我在数据库中进行上述操作后,事务日志还是没有改变。 % a3 [1 y' q5 F3 ?1 ?

  ]" q: \/ Q9 S! w4 G/ k% }3 v" ~' {! X* r  S! C
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
- }1 |. m4 L, E( S2 Y在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 ! v6 h: V0 t' W+ R5 E: P
7 ]. G+ T1 n# J1 }; c: u0 o; i
3 J( m# L( {: a6 b1 u& C
老马嗖嗖 2007-04-30 13:03
$ Y' \/ n# p1 v; T; p7 \7 |  qSQL Server 2000中*.LDF文件是什么作用9 ]! O& G& y2 v" ?1 ^

0 m+ R1 h+ A2 F8 p9 G3 q, V: a; z2 F! F*.mdf是数据文件   * K9 O/ }6 h4 y/ E9 d
*.ldf是日志文件   
8 f4 I, a0 F- v! u: E当数据库出现问题时   , j0 x, q+ k6 x" H% N0 @. o( ~, T
可用以下语句恢复   
1 _  o# N0 o+ x4 f5 x3 @  L数据恢复一   
4 K% k: W+ s! M- Y. T3 m1. 先分离数据库   
% z0 M0 Z4 D- J% z) f& J' z' s+ `exec   sp_detach_db   dbname   ( u5 T. M1 R, v# v
2. 加上数据库   5 E) |2 Z, n  l$ A6 o/ L3 J
exec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
6 k4 }+ I; j3 ]. L$ Z$ Q- U" i) J# ^% k0 v8 {7 U; O: y6 N( j

/ s5 D6 c8 a+ \1 l老马嗖嗖 2007-04-30 13:04 3 E' a! e/ e! D: H% _
" K& N- _, _0 K% s

$ Z- ]* i3 J9 F2 e4 r$ F% N1.清空日志 . \8 i/ R! @5 G9 }
DUMP TRANSACTION 库名 WITH NO_LOG 9 B6 T+ Z: K" u
* S5 ]0 M8 n, s5 `: D( L
2.截断事务日志:
" O5 Z8 u* B! u9 j& V) }/ q% }BACKUP LOG 数据库名 WITH NO_LOG
' g4 G) i( ]) t. \/ r( \3 W
$ a; M5 S% t( o( R! B1 C" O3.收缩数据库文件(如果不压缩,数据库的文件不会减小
  e' Y5 u5 G( h$ g企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
& c& o( c2 j4 _! z% }$ z, @9 H& M--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
7 }/ d& u! u" r, Q2 v--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ! Z( k3 _8 z( C& m8 ]6 a
! ^. b( ^. G% |3 t7 j. J" Z
也可以用SQL语句来完成 ' |9 Q" L( m7 q9 A: j+ Q) Y) g
--收缩数据库 9 N( s9 V' S5 Q; J" ]. M
DBCC SHRINKDATABASE(客户资料)
5 Y$ V' E6 N+ H) m$ m& l9 ]+ K, ]# w/ C
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
- `- S8 p2 ^# `& ?1 m# mDBCC SHRINKFILE(1)
: w8 E9 O/ N% J6 E% Q3 G1 Z' n( y3 u& u
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) 0 o& j& D9 \' M2 C+ {
a.分离数据库:
, t! z% f9 _: G& N9 h- S企业管理器--服务器--数据库--右键--分离数据库 . B) U" G- a: U: b* q. u% t

  }! Q4 ]0 i7 g' |* Q! S% Rb.在我的电脑中删除LOG文件 ( F' C& W4 S3 {9 }2 k1 k

+ i9 C+ D7 T1 ~# [! H) cc.附加数据库: 1 z9 e# _5 v3 H3 H6 ], q5 ~7 W/ t, P
企业管理器--服务器--数据库--右键--附加数据库
) Q/ ]" {+ ]: d. ^$ i
+ ?; K7 E" z5 Z5 P; P8 a, K! K此法将生成新的LOG,大小只有500多K
5 n, b: Y+ R. l, {: J1 {/ ^' j  I9 h" C  @2 G$ \7 N4 b& Y$ |2 X: f+ h# T
或用代码:
% l2 {! d* F: c! {2 B3 Z2 K2 [4 S下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 . u8 Q8 F- R+ @' Q9 M. r6 ^

6 w6 T) o9 D3 g( P7 O3 ^a.分离
5 W- K1 i' d% _( D( U. p; F5 PEXEC sp_detach_db @dbname = 'pubs'
5 K/ h0 `1 Z; b; X' w: t0 J1 B. Z, g7 K, F0 c+ J; D1 G; r
b.删除日志文件
2 y, D8 {  i; m* A
: p& W- e" b( F. J( U- T0 V6 ^c.再附加 . L( v- l- L9 t0 i/ ]* k
EXEC sp_attach_single_file_db @dbname = 'pubs', 7 G- {2 ^, o" {- G# G; K( G
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
9 r+ u8 B& Q( t, v  p$ O& M  r' T& I- Z
5.为了以后能自动收缩,做如下设置:
& [8 ^9 X" C+ h! f企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
7 ?+ v3 b4 L, V2 h+ u* n  R
; N4 C& X+ m" N--SQL语句设置方式:
0 O  K8 Y& ?2 m! n* ]EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
- P% J9 L& B6 Q+ j+ j
( s: H. ]( N) g  C$ L: k6.如果想以后不让它日志增长得太大
+ O! H+ f' |2 R0 c3 U1 J2 \8 C企业管理器--服务器--右键数据库--属性--事务日志 * Z' I$ u, ?7 c/ s1 }
--将文件增长限制为xM(x是你允许的最大数据文件大小)
4 ?/ d& D. H; E5 L( B' D; v/ w# g# n' z9 Y
--SQL语句的设置方式: # ?% O6 e0 a  c) Y* t0 y
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) : L5 v; F$ e8 ~
7 C$ r' E% x4 n5 c) s6 u- O8 O
+ I8 k  M- d+ f0 {: i
vxfire 2007-08-28 14:19
) \) E6 l+ W  \我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
- x9 l- e. g9 {2 u0 Y7 p
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 13:09 , Processed in 0.088891 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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