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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3667|回复: 0

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

[复制链接]
发表于 2009-9-16 00:32:35 | 显示全部楼层 |阅读模式
压缩日志及数据库文件大小   
* e) x! H( b5 A7 ]6 h7 r4 f
7 x+ H$ c7 {  v; o% a) q3 ?3 E
" F) @+ f7 w. j
# l3 Z# R- }% H& }: |5 k- z9 l: z  --下面的所有库名都指你要处理的数据库的库名   
9 K; a1 H6 U5 |0 t) b! Z. f# U+ S/ E: G
  1.清空日志   
; \7 L$ J; }2 d1 }$ S  DUMP     TRANSACTION     库名     WITH     NO_LOG           4 u; m0 w0 E7 y1 {1 q) m
" @- e& u  u1 t- s& c
  2.截断事务日志:   $ x& I+ Y$ Z8 w* `. o, R) J$ Z
  BACKUP   LOG   库名   WITH   NO_LOG   
" F8 G2 p( J. S$ l: Z# ^& S6 s) \0 e4 q5 S2 L& z. t3 l
  3.收缩数据库文件(如果不压缩,数据库的文件不会减小   2 F/ x% |. U. K  w/ e
  企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件   . z, ]8 ^& H2 E/ B! P2 z  O
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
/ L0 a% R9 b; o  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了   
! b0 A0 Y) R# `9 c4 f/ P" r3 m- K) o' i" Q* H2 B' v+ [7 U* h
  也可以用SQL语句来完成   
0 t( T+ V/ R7 o9 Y" W  --收缩数据库   5 H) p! w# X' N% M$ u' V. z
  DBCC   SHRINKDATABASE(库名)   , ]- Y7 v0 P: H( B& T) ?7 C3 u

; e* }% E  l8 B$ f  --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select   *   from   sysfiles   7 m* T2 r0 s% i4 V9 x& f* I
  DBCC   SHRINKFILE(1)   
7 H, R7 {3 g  H* ^) O
, t2 O$ |; n! J- {* I) `  4.为了最大化的缩小日志文件(如果是sql   7.0,这步只能在查询分析器中进行)   
* x+ g- B2 R0 K  a.分离数据库:   
) O! O- Y4 g0 u! L! H% I! F  r  企业管理器--服务器--数据库--右键--分离数据库   
4 X7 f" z1 \  W! W8 F; Q
: |7 y4 D; t, Z3 p  b.在我的电脑中删除LOG文件   
- w3 p0 C- y8 }! \  @& h& y" R) I
  c.附加数据库:   7 X% }2 g- d- V! `% a9 t
  企业管理器--服务器--数据库--右键--附加数据库   
6 x* v/ k6 L6 p. Z+ i) c; c+ j  ~9 ~
  此法将生成新的LOG,大小只有500多K   ! B) |' a4 G' Z9 g' v
1 ]# [/ P" g" u/ _4 {
  或用代码:     $ U! Q. Z4 o4 W
  下面的示例分离   pubs,然后将   pubs   中的一个文件附加到当前服务器。   
- k1 w; z4 ^( h9 Z0 {+ T/ t: ^4 V7 h; W5 u1 t+ J3 L0 z
  a.分离   
3 s8 W9 L. b4 N8 R9 ?3 U& z' h  EXEC   sp_detach_db   @dbname   =   '库名'   
: U* f: N$ ^, N% q( K2 {7 M
- i, d; D; {+ T9 K  b.删除日志文件   
4 V* N9 t7 R" c' L9 G2 M, S6 f; P( S
  c.再附加   6 g2 b- n. K2 @1 j
  EXEC   sp_attach_single_file_db   @dbname   =   '库名',     * g' G$ ^7 R4 v+ n1 z
        @physname   =   'crogram   FilesMicrosoft   SQL   ServerMSSQLData库名.mdf'   ) d, s' \3 ^0 C* Z+ E" ~1 q  b
6 v$ T) j, x$ B7 @! w) W
  5.为了以后能自动收缩,做如下设置:   9 \" \* m8 R# b  P$ ^  m) N+ H$ S
  企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"   
! ^1 V+ j3 h2 U5 Y% r( `+ p0 Z' V. @( @( k7 L/ v# m! a3 D
  --SQL语句设置方式:   
. m. ?) X: l- p, o6 g+ ]  EXEC   sp_dboption   '库名',   'autoshrink',   'TRUE'   
' F3 Z# p& P! e) Z* g! H" n0 S' e" M9 {
  6.如果想以后不让它日志增长得太大   2 \7 ^+ k  k! \! ~+ e3 g
  企业管理器--服务器--右键数据库--属性--事务日志   " E  B# f4 q0 |. v
  --将文件增长限制为xM(x是你允许的最大数据文件大小)   8 U& D. |2 n8 X- q1 k5 U/ ?" M5 K# _
# r2 R0 G5 p: w: _: A! l, u
  --SQL语句的设置方式:   
# b& a9 E( `  d4 L+ L8 g* w! _4 ?% `* y  alter   database   库名   modify   file(name=逻辑文件名,maxsize=20)   9 E! K& @' N2 b: X2 W6 k" _& E
  ---------------------------------------------------------------------! D$ O% r# X) F5 K3 S
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) , x$ B& Y  h5 R' s) s% s7 u
" [; N. J: k2 a( [6 E1 a6 C5 Y" R
*清理历史记录 , u+ g% j6 k3 K/ @$ f6 D) Y2 q
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器) 6 Z7 ?9 J& Y/ O) x' f+ E# A# r
2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
- m" d- ~; [& W如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY
# T/ a( D5 b, l$ z& {1 x8 b" f7 M. C4 S# |4 H4 U
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
9 e8 {6 e( w# ~+ a3 c0 c点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
* W9 i# a3 h9 U$ O. B直接将x改成其建议其最小值y按[确定]即可压缩.
* k) G. _# f9 R- l先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. & ]3 {0 `0 L8 o. X( v6 b

7 `( U; e; z6 R6 N* {: @总结:其实也就是两个指令就可以完成了
# z" M" ]: L& KBACKUP LOG DateBaseName WITH TRUNCATE_ONLY ( I6 o2 T3 c* y8 m# D9 L6 _
DBCC ShrinkDatabase(DateBaseName) : Y3 {* Z6 p! `
  `* R: z# `8 h3 l
*设定数据库自动缩小, 默认值为OFF , L' ~2 `# m( Y; F
方法1. + I% |' E: S6 t1 l- l( v: y$ B
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 3 _1 N8 s' D7 N
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
2 x& f8 R3 r% k* P1 \方法2.
# b3 L+ u0 s0 K+ g, j0 `在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 ; f. {3 ?# P( Q# {7 D3 \+ b

/ m8 N3 L  O& A, m. n5 A; h- S
* Y6 f' D; S; e; h" {+ V0 P' c SQL SERVER日志清除的两种方法 " g5 f" Z/ S9 S* g; S) t2 U7 l! m& m
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 2 U4 a. L0 W& {6 w- Y& e7 f8 {3 {

8 }: [! h( t5 F& a9 W% K1 f+ ~  方法一
6 @/ S8 U7 a0 C
  }/ A' e) M/ t5 ~$ K( k! X* i0 }  Y8 l  一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 % t% N: w- i. a0 {! ~4 ?# M0 T: O
' [9 |3 W% F9 G
  1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。 9 x* X- f' o# ?1 Z, q
: }3 f1 S. f# r4 _
  2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
' ^" q9 a2 ?5 R6 Y# c+ [9 D
. x6 K! Y' p. J, Z  3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 2 r- S: D- K; S

2 x7 q( Z6 ^6 Y; }/ ]
( e+ R( N/ N9 {& M# p( g& M! B' N3 m% O8 H
' T/ y: v6 I3 X' Z; f# a
SQLSERVER中讲:
3 {( `- f/ D# t( ~
6 |/ G- _/ E* LBACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
; g$ P/ Z6 r1 B& S3 k- S
$ f3 o1 d2 f% J0 W但我在数据库中进行上述操作后,事务日志还是没有改变。
9 |( q/ k. @4 u9 u2 E% n
( n- U% e, C* a2 M& _6 I, f! i( r9 \( v4 s% @7 W7 f% k+ ^
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。   q( e& }/ Q1 `! S( x5 S
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
4 N8 B/ ?2 h. f- B$ N$ P0 G' [
7 n; S& m0 O+ g% W; [: \/ w2 x
# v$ p; B% j( U! U3 N  l7 `& u. e老马嗖嗖 2007-04-30 13:03 3 u4 h8 y# v2 t# Y6 f+ i& y
SQL Server 2000中*.LDF文件是什么作用
2 O1 B! J/ O% U1 }* L3 y1 c# c; e' l% M: b  _
*.mdf是数据文件   $ D' s# c1 i& `7 n
*.ldf是日志文件   
2 K3 \0 O) z. G; y( w' `当数据库出现问题时   
! X! ~* _% E. d  j5 u: K# z可用以下语句恢复   * T* g, {; N' |0 r2 g
数据恢复一   
, `4 h4 H* U0 v5 c( k$ x6 o) W1. 先分离数据库   : T# c4 z" D* ^+ v" }
exec   sp_detach_db   dbname   
! R/ t' l+ ]/ z! d2. 加上数据库   ; g) Z8 U2 _6 `
exec   sp_attach_db   @dbname=’dbname’,@filename1=’d:sql   server...dbname.mdf’,@filename2=’d;sql   server...dbname_log.ldf’   
) r8 T: c/ u: Q% M: E7 Y
* U8 r8 u+ [% T- ^. e& f
/ T  y% A$ S: I& O老马嗖嗖 2007-04-30 13:04
, C0 j/ l4 {+ Z% E* b! ]; j9 _6 ?; K6 H4 T, d) Y( s
: U4 p* b1 |0 |. j! r6 o2 O: ~* _
1.清空日志
5 q4 @' I3 a, t+ B& e! j4 `3 c! ^; _DUMP TRANSACTION 库名 WITH NO_LOG 7 G3 ^4 n0 P. o8 F

7 ]8 s" t7 q: X- A5 k5 w2.截断事务日志:
' d4 Z& i  q% v, A4 lBACKUP LOG 数据库名 WITH NO_LOG
+ Z2 e8 [- F' |0 o' t
& z! G, F3 W5 D$ t4 X' a3.收缩数据库文件(如果不压缩,数据库的文件不会减小 ; d* `( F* Z, j4 U" C+ C
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 / I: F8 I" z: N7 A% Q
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
* R* D* x0 P) D  b6 q. d--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
: \: r/ d1 M/ \$ z( z* g: h# d+ C; m0 `. S& l
也可以用SQL语句来完成
2 W0 m3 _2 a' p' M) W: ]. o* @--收缩数据库 & ?0 ^; H5 p% P
DBCC SHRINKDATABASE(客户资料)
# m6 A. [. t: N. \
8 h4 s1 j6 Y/ c9 v% l# h--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
- I1 I' g6 @# ^' I& e2 R( uDBCC SHRINKFILE(1) 2 e2 _8 @1 ~$ r8 P  w8 _
" l! p1 G0 u9 V+ q  q6 d; h
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
" U, t. {( x  u" |" ra.分离数据库: 7 K2 H8 s2 C/ H
企业管理器--服务器--数据库--右键--分离数据库 & m1 `, h' \- u9 {0 Z
8 v( _0 ~) d& B7 P! Z) ^
b.在我的电脑中删除LOG文件 % r$ M( I! Z1 }! f' d
+ r% R3 N( ~- w1 x6 y1 v
c.附加数据库: 8 f' ~$ Z$ V9 ~' K5 U  S
企业管理器--服务器--数据库--右键--附加数据库 2 W; _3 L+ X3 \3 F$ z; u
; f  E! o3 r: g0 f- F' w3 ]
此法将生成新的LOG,大小只有500多K
* j: l4 A6 Y. ]) M2 O1 s
- Q% x, ~9 `  j8 X* W" k或用代码: ( Z: q. `: g$ q4 U
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 8 f8 K$ V7 B: a

2 i' b" f. L. ]. qa.分离
- f( b; l/ o! o1 W0 X" m1 f* _8 b! j& ~EXEC sp_detach_db @dbname = 'pubs' ( s& E! x+ q6 ?  Z' }: f

( w% B% T% `6 Y* d( j- z' sb.删除日志文件
. P# W, U' A" H9 t! Q' s* u4 |' R. U. v" W
c.再附加
: R6 X0 ]7 y: C2 O; DEXEC sp_attach_single_file_db @dbname = 'pubs', . c! k6 F$ c" B1 T) U: m
@physname = 'crogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'
, P9 ~9 c2 a% p( `! O& j# V, V& _" E; ?
5.为了以后能自动收缩,做如下设置: ( M) z  i' Y9 F' i0 i8 @
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 5 D) F7 ^* W: G' Q  O, t4 d

/ L3 [& b' @* V# S6 z" c--SQL语句设置方式:
5 F" G$ ?$ ^8 [8 P! ~EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE'
# @5 {6 Z/ W$ a( v+ Y  d- B) F: h+ K6 j( A( |; k6 n8 O+ Y+ b: c
6.如果想以后不让它日志增长得太大 8 p) H. G7 w7 }, r
企业管理器--服务器--右键数据库--属性--事务日志 1 @( _8 }6 x3 F' g0 G" Z- z8 X, k
--将文件增长限制为xM(x是你允许的最大数据文件大小)
- e# E4 o) h7 g; ?, r2 j: f3 @
* y, K) M4 N* ^" v  e! m3 ]) I--SQL语句的设置方式: $ b* u# v1 Y0 z% p! h# H3 |2 S( s
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) 6 ?  \6 d- d( ?+ E. {

8 N  K# l+ d4 e+ M9 s$ ^
* r, D; S  {- z$ l; Z: Cvxfire 2007-08-28 14:19 : c9 u1 \/ s) |$ ~
我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
3 C/ x- O* M2 x5 J! F
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 04:56 , Processed in 0.088896 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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