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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3575|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
8 F( ]0 M6 O  e4 O
! v) p' G, M7 _, d! m
9 E' [' |+ {! [/ O) `6 f
$ _, `& A. k! u% u  --下面的所有库名都指你要处理的数据库的库名   5 ^& z. f+ i  F6 [  y5 G! b/ E! t
4 w6 n/ Y, v+ p2 a6 y! J
  1.清空日志   , P( A6 Y% d! _$ U) S7 ?# r
  DUMP     TRANSACTION     库名     WITH     NO_LOG           
4 A& U9 ]+ b4 R& j, A3 q
$ N# m) G9 S7 x4 D  2.截断事务日志:   
! y; t& r  P' V  BACKUP   LOG   库名   WITH   NO_LOG   8 C. k# G' @4 h8 h3 D0 I' b
' [& C) I% p" L( t+ F: l
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   ( Y$ f2 y% y. E6 J0 d4 X4 T0 |
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
4 C/ N7 o5 J' U. Q4 K  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
. H0 D9 h) r3 {  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   : L5 k. `* u7 n* G
# t$ q: p' \6 I- O( O3 p3 m
  也可以用SQL语句来完成   
& g! Y; x, L6 ?! |' P  --收缩数据库   ! i0 N' P2 [2 I3 N( R
  DBCC   SHRINKDATABASE(库名)   
2 b: ]2 ~+ u/ p4 |: b! L9 U+ T
  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   ! d% T! z0 k4 M/ \4 Q
  DBCC   SHRINKFILE(1)   
" p( ~, `: `! p  z% u, A' v* G0 A& c+ [1 t4 F" ^8 J5 U* V2 p
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   ! G6 V2 _5 h1 }7 p& w& A. o4 v
  a.分离数据库:   * m& Q0 @. S7 w* V9 V9 u& U" l
  企业管理器--服务器--数据库--右键--分离数据库   0 }2 j! o3 s% r- x4 w
* G# H8 t9 D  E2 \  B! H6 i# m
  b.在我的电脑中删除LOG文件   - E  ^; _6 O  C; p" Q" v
- O# A6 w& ^1 _6 ~9 @
  c.附加数据库:   
  s) K1 ]. {9 [/ V  企业管理器--服务器--数据库--右键--附加数据库   3 ?% N5 _9 f; d  `* H
3 p9 `" ?. E5 }# a6 K3 j  F; m
  此法将生成新的LOG,大小只有500多K   . i/ g: i( T4 S! i3 Y8 q/ Q
+ j/ I4 {0 s# `. C- s
  或用代码:     
/ F& m9 I% Z5 m6 ~/ {2 D8 e  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   ' H9 Y- L; x0 @2 r0 Q8 n7 R0 i

% N3 A6 X+ B* h& E# R2 z! C  a.分离   & ]  {( W4 R1 T5 T# V0 z, D. e
  EXEC   sp_detach_db   @dbname   =   '库名'     Q. N' q+ S" E/ s) e! V

5 D1 |: M* G% T$ _$ \- j  b.删除日志文件   8 [4 _+ [. s9 m1 `6 G2 f4 ]
! c: N' l+ m" E0 D
  c.再附加   
* c1 |7 O8 R; E7 _2 m  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     , ]% ?2 S- }* `7 B5 D
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   
, W2 V& E1 u! q) B* r9 n$ l
- V$ ?* p. P9 H3 c  G" O  5.为了以后能自动收缩,做如下设置:   8 C5 ^% u; [" M8 H2 o2 f$ z
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   , z! Q* A9 Z6 q0 J1 P
+ Y8 k5 a8 g. B) l
  --SQL语句设置方式:   3 H( |8 m6 u+ B/ h/ G
  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   " |, V& N% [9 \) V7 [
3 i0 u' Q& x: I- c) c7 U# ?; H
  6.如果想以后不让它日志增长得太大   
1 x2 K" k" B" K9 t+ T2 r! H  企业管理器--服务器--右键数据库--属性--事务日志   & \! O% O  a; d, R0 {
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   & ?4 r. D+ _: L2 E# g
; }( H+ z$ S% A( K, J
  --SQL语句的设置方式:   
9 K9 |& r% x/ n) G0 p" T  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   ; q* |, V4 w, z" y+ k
  ---------------------------------------------------------------------; r  @/ E) H8 c/ \& @7 ^, R( C
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
7 V. g8 E: ^3 c; L' q" t. V# {, q6 }. D& {4 C) y% }
*清理历史记录
# F* V/ H! ~& h" q4 h# [1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) ( t/ w. a' z: H- O, Q) c; k
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
& ?- b- h& L: q1 K如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY * E3 u# L9 L( f

" t9 Y( G; [: ?4 y2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
6 h! Z7 _! E7 y" `点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], / q9 o, {6 K7 `- z
直接将x改成其建议其最小值y按[确定]即可压缩. ) t  v8 F& o; n; K
先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. * }7 @/ J+ |$ k
9 d! f; j" M5 v
总结:其实也就是两个指令就可以完成了
$ Q, e: N9 s& a- ]2 ?( eBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
4 V; I3 e: j# n7 |; pDBCC ShrinkDatabase(DateBaseName)
( `- y, _" c% t4 \% m0 _  n3 @
" P5 F. m# z) O9 D/ [# \* \*设定数据库自动缩小, 默认值为OFF ) H4 `# p0 ^8 c% N9 d7 E
方法1.
- x) m! H2 s2 |) B  c6 m5 `+ kALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON - m0 ~. _% k0 y; S
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
6 X. x. I+ [, t  j6 S方法2.
7 ^  F8 j. J9 U# K/ D+ Z5 f: C. m在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
* ]: l/ v7 q! H+ g$ \! H0 L9 ^+ b; [5 J

0 ?. J$ p' @. |/ H* e2 @, c) A SQL SERVER日志清除的两种方法
, m3 o6 m* M7 ~8 T  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 1 U1 V4 V) \$ Y5 T' G' v5 h8 i7 D

+ k9 A( b7 |. Z5 ^  方法一
  Z& t( Q' z  F( D0 n
* p: B1 \2 C1 T: W- S  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大
; W% U+ {- P8 c. V: y- u, D( Z5 \5 ^& C
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 3 Z: e, E  q# y' @3 f  ~+ o
+ f; y" M2 C, `. Y
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
  q2 x, o- J* A  _' [1 M1 v( |% b  h! w; u; |1 K6 f
  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
4 w6 S" [9 q2 d- p( D7 t$ }
' D: W' \6 G2 x4 g+ B$ t/ W$ }" h& C6 ?; o- Z" [; ?- _& |

, n$ L0 L/ I- T; j4 |2 ~; y3 s* S" s5 m
SQLSERVER中讲: 1 _& `$ q" D3 t9 W0 s

/ g$ L4 ^& I9 n% l, K+ d' A  JBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 % P; `9 w5 a' G- a- j" }: T

: `- A8 p/ i; T7 b但我在数据库中进行上述操作后,事务日志还是没有改变。 ) `8 j/ B; h& K! Q

( V* l, g8 Q' C; {" v8 g4 z7 h' _4 L1 Z4 L
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
3 J& I" c) N' b在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
8 e# C& V- N8 E! j$ `# J) E3 g6 k  u, a( Y) T/ O
+ ?4 m, E! G: j! R0 y/ F
老马嗖嗖 2007-04-30 13:03
; k6 a7 `- L) g6 U! ]# n/ @6 ]SQL Server 2000中*.LDF文件是什么作用
2 ~* P% l  p- Z0 j
# D- [) H: k4 Y2 U*.mdf是数据文件   
3 |8 r+ o6 O: z% X! \9 v$ V9 E2 p, T*.ldf是日志文件     L1 }! m' q4 _, T; ^3 M6 D- X6 e
当数据库出现问题时   $ ?- ~. F6 Z/ Y( a
可用以下语句恢复   ; a; }! E2 S4 B; J0 _# D
数据恢复一   
- L; f+ P0 [; s8 j. ^+ z' a5 B1. 先分离数据库   
- k5 W. s4 d0 S5 u8 ^) @0 K+ ~exec   sp_detach_db   dbname   
2 G* V) N: z8 k5 L1 Q6 t0 h2. 加上数据库   4 X. L1 `4 u3 {. h+ [
exec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
. r5 G" _3 e* p: \0 }
- d6 F; _/ M/ {% Y% R4 k0 Z
: Z) q& ?7 h/ s/ t) k老马嗖嗖 2007-04-30 13:04
% F2 ^5 P6 \8 a! ^2 J
  _. m( K! i- [6 T  [+ N4 j* f. i* C: z6 x. O8 ?3 P. s
1.清空日志
1 u3 }" R* M- ~$ i9 IDUMP TRANSACTION 库名 WITH NO_LOG
. z  z" q) c/ G  S1 w/ L+ m
/ I6 ?3 O8 O2 N2.截断事务日志:
0 G( m5 }$ Z9 mBACKUP LOG 数据库名 WITH NO_LOG ( S3 t! \7 k. ~9 U2 H' Q

# U0 S. p3 q/ s9 \2 `. _( U3.收缩数据库文件(如果不压缩,数据库的文件不会减小 : ~+ u1 m7 T: k( v
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
3 Y* m) \+ p7 P& j  L--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
0 E3 e5 A  U) y( v. J--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 9 [  Z7 B, `- h' c
$ u4 ~$ b9 v' I  `6 j" M- ?4 t
也可以用SQL语句来完成 3 @  f' S8 k7 ?. @2 I* D
--收缩数据库
* i1 a& f. [3 F- }DBCC SHRINKDATABASE(客户资料)
+ c5 L' G, }9 D5 P' _
; }7 B, c# b9 |. N4 F# w, y9 f--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 9 G2 T6 W1 z  K  J
DBCC SHRINKFILE(1)
7 b! C1 L- N+ r6 B
, O3 E5 q7 c9 m: i% B9 |4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
5 `" }9 m6 q! g' Ca.分离数据库: * x+ ]' j- d) H5 s8 r
企业管理器--服务器--数据库--右键--分离数据库 * r1 @; c$ |; g% Z- ^1 Q" C3 S

; _  e+ ~: u( z" l; H- U4 M" A: \b.在我的电脑中删除LOG文件 2 }1 R0 G* p" i, {2 f  R
9 B4 T7 N# s. f6 ]
c.附加数据库: , ^' G4 T8 ~/ V
企业管理器--服务器--数据库--右键--附加数据库
* Y3 w  ~8 s, M- [4 v4 M# h2 p, k
此法将生成新的LOG,大小只有500多K & o3 M# C) z- Y- x! g
$ n1 |# g3 k# r* S9 c, B* g
或用代码: 5 K# Y# I( C$ S- a/ a
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
3 B( m  m7 O3 p: z% ]: `( m0 R; o
7 F2 T: ^1 X6 V! t* m+ aa.分离 ( w% u  F- y" ~$ h' N$ s
EXEC sp_detach_db @dbname = 'pubs'
3 H* ~2 Y( Y8 Y; e. f8 W5 ?5 q% @  Y2 s3 b, T- e
b.删除日志文件 : r& {8 l* Z- O( n
! e- u  m% o0 b1 ?/ d1 N( y5 w
c.再附加 5 w7 E' k0 c/ o2 J
EXEC sp_attach_single_file_db @dbname = 'pubs',
& u1 r; Q* ]/ f% q* i@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
; \& P; Z% f4 G/ U/ u% D( ?$ h! I! n/ X, Q. |( M: N2 X
5.为了以后能自动收缩,做如下设置: 0 w% G- _# l  P( C. l) q
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" ! L9 Y* Q/ _: |) g4 p

% Y  D/ J* x0 v; C--SQL语句设置方式:
1 R7 f: z# p# LEXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
9 y. U6 u* N. j/ @, ^, i4 ~& O. p" O. `; w+ `$ O
6.如果想以后不让它日志增长得太大 5 [/ {3 E" B  b$ h
企业管理器--服务器--右键数据库--属性--事务日志
6 @- F, F5 ]5 E! d; x; p0 u, ~! @--将文件增长限制为xM(x是你允许的最大数据文件大小) ; N3 Z' X; B/ @0 j( ^' m

. g: m4 {$ j4 [. w% Y/ D--SQL语句的设置方式: . V+ x4 y. x5 Q* s7 N
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 3 t& x$ Y  ]$ h' r- O8 S

/ T# y* y4 [" X% \- D/ H( `* S) ?( J2 G5 u9 i* a* N; T
vxfire 2007-08-28 14:19 1 a% \5 u& d9 {! B4 T7 @, F
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
( B& I. f$ G! M/ v5 ?7 M' A! u8 e7 y/ C
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 09:36 , Processed in 0.103034 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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