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

用户名  找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3630|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   # C: j8 y1 y3 a7 W  \
5 P( g7 [+ Y" B7 f, b7 ?
! A. |$ O! x8 O5 j: j5 Y
* |2 a8 @8 G2 W) B
  --下面的所有库名都指你要处理的数据库的库名   
; s' {. M  C% s% H
' d& x# t3 R$ W8 ~) E, J  1.清空日志   
/ J' U4 H( g5 ]( [  DUMP     TRANSACTION     库名     WITH     NO_LOG           2 f- R8 v6 v' t1 T  F5 ^0 L5 K6 K8 ^

9 A. a$ p- q* _; U  2.截断事务日志:   
- |  ?2 K6 e3 |1 |& I  BACKUP   LOG   库名   WITH   NO_LOG   
0 C" Q2 m, S5 D8 s
. {  {+ `- Y0 S/ ^: e: }1 M  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   ; i1 ]- s$ V9 i) {' g% O
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   
3 q1 t7 b$ t; r, A- k/ b6 J  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
4 m9 e/ C0 G( m9 J" {8 R( J  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
5 o0 ?9 _/ F5 A+ O! D! m$ t
5 U6 H- B$ r& n9 s  也可以用SQL语句来完成   
! A: ^; r7 w1 l0 A) y% T0 m7 F  --收缩数据库   1 p( L9 d- m% P" G  `
  DBCC   SHRINKDATABASE(库名)   7 e1 O: K# Y8 ]0 _* e' ?! o: J- Y

0 N" \& q, H( `, I  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles     r& S3 t9 d/ S! C. T
  DBCC   SHRINKFILE(1)   
- h) E( r* F) E  a& {- `) p: C. A" w; o
  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)     B4 I7 _2 e! L1 s( t
  a.分离数据库:   9 g5 F' D7 x  _# @8 w6 f* a
  企业管理器--服务器--数据库--右键--分离数据库   & ~3 _+ p/ N/ o

* _1 w/ D- Y- }  b.在我的电脑中删除LOG文件   
& y8 ^; g  Q- r5 F# M4 G) B/ S7 G
  c.附加数据库:   
/ Z' f+ w- N" r  企业管理器--服务器--数据库--右键--附加数据库   4 S# L- |7 i! d# |* ~+ c
. W1 O9 ~0 Y) n. j3 k2 x2 V  @
  此法将生成新的LOG,大小只有500多K   / T# ]) v6 `4 g; a% ?4 w% x: J+ j
8 U! _) Q: e: l2 n3 j3 m
  或用代码:     
- k" X+ \0 g8 x4 X  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   
+ r: X$ g. {' L; L8 J- ^
* ~& k" {# |  M  a.分离   0 \* V- Z2 W& `4 O
  EXEC   sp_detach_db   @dbname   =   '库名'   
. t% h; d: x, ]+ L" i0 a$ B6 l% F7 o  x% D
  b.删除日志文件   - _* {! k. o7 h. T( ?3 X

! ~' p* y3 G6 ?% l5 j  K  c.再附加   # |0 M* Y, }/ ]! _' K! T# f
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     
# c/ T1 X8 ]' v8 k6 v+ U" }        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   7 r9 j+ r8 X& p+ L

- m0 E  s: ^5 ?! M* X& T  5.为了以后能自动收缩,做如下设置:   - h% Z3 M6 h. T/ C% Y1 X9 e
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   ; J! X" v9 J) {# H* Q. n2 F1 N2 O7 [

6 c+ F' M7 @$ v' P  --SQL语句设置方式:   
9 {6 q" B2 f2 r% ~% L) S! n  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
, D2 |. A. N" B2 r
3 N6 N' J3 t0 `$ {, X1 ]! T+ S  6.如果想以后不让它日志增长得太大   : T# F9 F& C2 q7 ~, g
  企业管理器--服务器--右键数据库--属性--事务日志   " q. f1 O$ ~  k' }# E
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   $ q8 E6 N2 o. o( j  b

$ ^% f  S& J* {& \& i5 r- j( ^  --SQL语句的设置方式:   , A" s9 J; c/ J4 O
  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   + E( \0 G# Z, v$ F3 E4 B
  ---------------------------------------------------------------------
6 T, s0 Y+ ?) ^" H7 @( lSQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小)
5 z* ?0 A2 c: _7 D9 F1 a$ }4 Y, ^+ Z# e7 D6 j
*清理历史记录 9 [; `4 N$ b; U, K: [
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
) {0 `; _% ]& z) q! Q( U4 B2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
4 B$ v( w, P$ K% X; p如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY ' X$ l0 B' q8 q  F! }2 L

# B% B& f9 J* A8 ~0 N2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], $ B5 ]0 ]% ]  N
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],   j! }4 Q( B3 K# i
直接将x改成其建议其最小值y按[确定]即可压缩.
, K5 `1 K, f& O& H( j1 I: m先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
1 G, ]" o8 D5 P# A( a5 A% z3 ~% z6 L0 d6 S
总结:其实也就是两个指令就可以完成了
( X+ U9 P, @8 C6 kBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
: }# i* d, ~, f9 Q$ i' {9 }DBCC ShrinkDatabase(DateBaseName) : C/ b& o% T* @- R7 I1 I
& X1 N% H- V9 L5 c8 Y
*设定数据库自动缩小, 默认值为OFF 6 L* J, h: L) F1 D+ y, L6 i0 p
方法1.
2 A# Y& w- |2 _( y- |ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
, w$ p. n4 T. X7 q# M如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
- [$ i, q2 j+ ]3 K* q方法2. & k. z0 H: X, \
在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 2 `1 T% H: g! z' o

8 z9 N1 L, l/ L2 h3 ?
: g# ~3 d2 W  J8 U3 j6 Q' b6 P SQL SERVER日志清除的两种方法   ?9 a% g# u, e
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
* i' s& G' P6 K8 R7 [
+ g' W- j0 L+ E1 q  方法一
, T* G8 O$ S9 w5 l
8 S6 Q# l4 [& l- f+ s7 q9 z  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 ' n! i8 Z# {$ N/ x
3 |7 p' q! t0 H. [0 j
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
' Y9 m" b' f0 X6 y0 D
( e3 k2 _6 c5 [- t! L8 \/ i5 m  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
$ s+ ~, c# W4 N3 o
* f9 f7 _1 V" I& ^2 i" n9 H  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 % D5 a# V' L# B1 Z
7 }: u/ ]# l8 p% ~2 Q  s" Q

% r; l' v  ~  C/ {) a
) M2 v2 a  F$ B/ c. R$ K; q1 [3 e, ~, q9 r* {
SQLSERVER中讲:
# W# S, a+ }8 X+ p& N" G8 b6 Y1 m1 J$ c2 E$ W3 U$ ~. k2 e' J
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 & m+ e( Z3 h% d4 ?. |
7 Y$ J2 B+ R' a5 c' ^8 g) s
但我在数据库中进行上述操作后,事务日志还是没有改变。
- ]# X; j, D9 P" f
$ u3 e# h# ^' v  @3 b5 \
2 V# u6 M: v( I: \. j第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
9 {7 }, G. a( W: S在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
3 Q7 Q0 H( K' }; b" d0 _' I4 Y/ D" d1 K6 e' [
4 N* [6 @" x6 b! o: Q  l
老马嗖嗖 2007-04-30 13:03 & L5 R# `  F1 r2 ~/ y
SQL Server 2000中*.LDF文件是什么作用
! E- z6 Q; B6 F0 {  n2 W6 l% I4 ]2 F* Y5 G# X+ }+ \5 [* A
*.mdf是数据文件     ~+ U  v6 _- J7 ~# ]& S
*.ldf是日志文件   
" T( ^; p# h% F& g9 s当数据库出现问题时   
" H. i, i& P% n9 \9 F8 c可用以下语句恢复   9 O6 B4 S& N& B0 F$ R4 {- Q# U: ~$ \
数据恢复一   * Y6 {" a( `: `7 P
1. 先分离数据库   $ `3 w: u1 C3 v0 F
exec   sp_detach_db   dbname   5 O9 {; H, v( c: @7 P
2. 加上数据库   
  P! O" E- _( Z2 j3 lexec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
* k' W: W: h  n) L- U
3 G1 q+ o/ c$ B4 \2 |
( x& N5 P2 y# K; E老马嗖嗖 2007-04-30 13:04 : |( p* A( Q' ~- q5 c7 [

) Q  n! f9 _( @+ e, a: r2 ]& w% \9 `% Y3 F7 I8 i) o2 D
1.清空日志
/ ?3 q! w/ R8 b4 K) YDUMP TRANSACTION 库名 WITH NO_LOG ; j+ E7 z7 O4 r8 w

* R# L9 e' J0 j$ M! z2.截断事务日志: " Z/ Q) W; S% Y5 M- g* F3 }
BACKUP LOG 数据库名 WITH NO_LOG
, b( k  a# w# z) H1 Y, s% f1 I( J. O# g
3.收缩数据库文件(如果不压缩,数据库的文件不会减小   v2 U, |$ ^# X# x) s
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
7 y( s! N1 d) a$ B  R--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
: u* t" a7 U& v5 r/ o- z--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ' o. E$ t6 Y4 v' O2 J

7 ^5 o6 Z8 e$ M, w# |  }: d也可以用SQL语句来完成 - N3 w/ q# d2 ^$ w9 ^
--收缩数据库 ( A! X; h* u9 K+ q5 n
DBCC SHRINKDATABASE(客户资料)   \( W. ~. H2 I( I% @

6 g. O5 I  H, j--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 8 z6 {3 q' X6 [; B
DBCC SHRINKFILE(1)
+ u1 x2 \, |# U+ Q) ~7 d4 }1 [& `0 ]) i1 O
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
4 t6 u( ]1 }$ Y: |: n* h4 R; D( x- Wa.分离数据库: ' p+ g$ e( S. i) R! K% [3 f
企业管理器--服务器--数据库--右键--分离数据库 7 V4 L  w  d0 p. t( m

" z8 _( k8 h9 g& bb.在我的电脑中删除LOG文件 : z  I' L) o0 h% v; t# J4 P5 m- e+ R
# h4 \  S, D! Y$ K' |
c.附加数据库:
1 X. N5 s2 P/ E企业管理器--服务器--数据库--右键--附加数据库 ( }- s& V" q% b
& o6 n0 H, s# m) D# u
此法将生成新的LOG,大小只有500多K
' f4 P  B' [$ T* x3 d1 O
: K" m$ m  f+ W- v或用代码:
% `1 @( W# m8 z8 o下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 : s6 Y5 O- W4 Y) O4 I
3 Z, u3 [; _+ N$ M, G
a.分离 4 G; C; O- j0 ~; q
EXEC sp_detach_db @dbname = 'pubs' , N  T+ T- q: p7 k0 @9 l
" O$ S+ j, E4 l2 f' O4 a( g
b.删除日志文件 8 V$ k% D  T9 x# a, n
( e; u: _+ ^" Q7 U3 D" j. v
c.再附加 0 D  }- R3 U$ a2 o! f
EXEC sp_attach_single_file_db @dbname = 'pubs', / `- K4 @7 u4 z) n; L: D: V& Y
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
* ^6 k: v: e0 [8 V) F+ c% M. k
% l$ Z1 n5 v; C+ C7 J6 U5.为了以后能自动收缩,做如下设置: $ D( [! t! P: G% v! p7 ^
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
8 R5 H% K$ j$ P/ I8 d5 O% q3 q  k% h6 [7 t* ?# K
--SQL语句设置方式: 9 A7 |4 x0 F8 y9 T) D" e, n
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
" p  I4 C: k4 T% L- r9 Z% V; s: V$ B7 k% x+ a9 f7 E( {4 G
6.如果想以后不让它日志增长得太大
  ^9 s9 e+ M) `* f0 N企业管理器--服务器--右键数据库--属性--事务日志 / U& b! Y# Z3 _
--将文件增长限制为xM(x是你允许的最大数据文件大小)
  ~3 `2 l) p1 K, l3 j  j7 S2 a# C+ c4 h$ j9 J
--SQL语句的设置方式: 9 e, A" y/ X/ b# ^6 A8 X1 \+ S
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 6 k$ H4 [4 z: x! b  Q1 d9 G* p, l+ V! @
! P" g* Z  _9 p7 s- ?! E! w" I) ]# ^9 N
; [) v" {% U: r
vxfire 2007-08-28 14:19 " N, ^$ a+ Z) u) ]1 ~
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
& _$ q$ f; x3 }
回复

举报

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

本版积分规则

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

GMT+8, 2025-6-1 13:37 , Processed in 0.100873 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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