压缩日志及数据库文件大小 l- W- Q5 _/ }# L+ `
# ]" }) j- u1 s
; J% t! S5 `( a- j. n1 ~+ `
0 r! p+ e B# r5 W* G --下面的所有库名都指你要处理的数据库的库名 5 v3 x) P# u) G0 h
$ [! @5 G8 o! X8 {7 h4 P
1.清空日志
( B( a0 W) z3 B DUMP TRANSACTION 库名 WITH NO_LOG
u3 n P. }7 N' a$ X9 f4 U
( B8 O$ B" {8 [) `8 X8 x4 K2 E 2.截断事务日志:
7 H( v8 M3 S6 t6 j- i8 Z BACKUP LOG 库名 WITH NO_LOG 6 K3 ~' V& y- z' @7 J% q1 N
) r& L9 W& j h' y 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 # i# r# F2 f$ _
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
5 F4 B" V1 \ p2 W* i* U# k --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 ; {4 K2 ?6 D$ U: `" C8 b
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
$ w" t, L, k2 x3 l r3 \" L; t; |
也可以用SQL语句来完成
* E! |0 h5 k2 j --收缩数据库 % R6 q% D. } Y& u- Y7 W
DBCC SHRINKDATABASE(库名) / a0 F. y/ Q& K$ W! U. V
) c' r/ l, v3 Z& v2 D/ |2 B7 |/ B
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 3 M4 Z1 Z1 ^6 t$ {2 z O
DBCC SHRINKFILE(1)
( `2 f: ?# i2 h0 _3 s7 {$ _$ R' g Z$ A/ I
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
" t5 S. m7 G; ?! Z. h; ~0 v# y a.分离数据库: 8 ~& t f' |1 \9 Z
企业管理器--服务器--数据库--右键--分离数据库
! Q! l7 A. c9 A5 r, C: [7 ^3 Z7 t* _6 K$ k
b.在我的电脑中删除LOG文件 K2 B6 o' c, c+ U6 n( o; V
* ?0 y6 q) }6 u Z$ g! _- ]
c.附加数据库:
% f/ u3 F/ r3 V: h* U 企业管理器--服务器--数据库--右键--附加数据库
6 U8 i) g7 c, g: [8 P9 @( h c/ h7 S3 N3 H* Y _6 H
此法将生成新的LOG,大小只有500多K d3 x9 f7 Y" x `& ~7 M
2 X# y9 |* T5 T
或用代码: / L8 R$ `% D7 y1 B7 _- e4 @" v
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 ) x! s3 O" \1 j0 s8 a6 I( ^# E: d
1 o$ S. y9 B' S" i a.分离 ; L+ H+ E V7 }0 |
EXEC sp_detach_db @dbname = '库名'
2 ~6 C+ N. h! ~2 w4 O7 W
0 N9 `# g! w# Q1 y( w- I b.删除日志文件
* X9 H N% k: y# t6 ~7 B) x6 M1 t7 P; z q, r) E- O
c.再附加
y0 Q% }! f5 k- o% ^' t/ `2 q EXEC sp_attach_single_file_db @dbname = '库名',
* x( `% d* @6 w4 }- {; E @physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf'
~2 E& m/ ]% F5 X5 \: r- t. u! E1 a& A j* m- @7 p' D( \
5.为了以后能自动收缩,做如下设置:
, }" E. X* Y/ H) C$ w1 z% H 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 4 C8 k. r8 w2 i( i) s3 g8 y
}+ ^: {) G! K. g
--SQL语句设置方式:
Q% s9 L0 U; P EXEC sp_dboption '库名', 'autoshrink', 'TRUE' , L* w5 o/ O. E l( w; {
: `' b9 v$ @& n. X9 A* x* Q8 `
6.如果想以后不让它日志增长得太大 }+ X5 ^0 C8 s5 Z
企业管理器--服务器--右键数据库--属性--事务日志
* ~5 ^7 y% }1 C: F, p --将文件增长限制为xM(x是你允许的最大数据文件大小)
, e1 F& k4 j! c% Y/ |' E! c# z* i
--SQL语句的设置方式: ; ]+ J5 X" ]+ O$ I6 L
alter database 库名 modify file(name=逻辑文件名,maxsize=20) & a7 w( I1 x4 h( E
---------------------------------------------------------------------+ g6 G6 T) {4 \5 O0 `
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) & x& x- X; V |* N: `
3 L `3 J6 w& r*清理历史记录
d9 s# W( y/ v3 j1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
& p. _' K" a& `2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY
9 o7 ?1 k: Y9 O如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY / u2 e$ p% @# q- P$ G- f
+ S0 m6 q, A" j6 m7 ?0 }2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库],
! S% ^5 X1 M4 X# Y9 o! o. L$ W% w& S点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)], 8 E" H% N) ] i4 e6 ~; [# r( e2 N
直接将x改成其建议其最小值y按[确定]即可压缩.
) N9 ^$ b: ^* t0 T6 @( _" c先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次. % k) y+ G( ?) P l. F: M9 N
! I% ~& [! n& }" O' g/ H" k总结:其实也就是两个指令就可以完成了
+ s: r& C* @ A) A: w6 _BACKUP LOG DateBaseName WITH TRUNCATE_ONLY / l- r/ t' g0 ^0 p) H
DBCC ShrinkDatabase(DateBaseName)
' j; P/ ~$ h/ e* d @5 L; u& }1 l8 b* ?# z0 r1 |5 Z
*设定数据库自动缩小, 默认值为OFF
( p) m k0 V3 L8 E5 `4 q方法1. / l2 F0 W5 }! h9 \, s' V
ALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON
* j! ~! i3 ~" `如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON 3 H+ J2 ?7 @' c
方法2.
8 \+ A$ Y& g7 z+ w6 ?- P在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定 6 V6 A* _; @" j/ z
! a4 I1 B; K a5 u
6 ^3 w/ h* e7 ?$ i SQL SERVER日志清除的两种方法
8 h: s% J+ F1 r7 C4 V% r 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……
( p- ^& G, u$ G' F2 V* [: `& h. O" I- q: ]+ J2 y8 c+ E
方法一 3 i8 f$ u4 Y; B! o
6 s) r D, t# X; ]0 J 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 8 u; e! A5 P& s+ \' b) o: _
3 q! W d. T) i: N% f3 J
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
; G* y; Q' R( i
( k3 [5 u5 Z% I/ ~ 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
% \, d& K* k! _' j' |6 ^
4 A1 z! O: t r7 s 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据
0 ^2 f2 r$ Q) H# \) u2 h$ C, Z6 H) p) g- f+ H
9 h2 c: f* R" ]! R* d) Z0 L2 g5 E" t
1 {) f* o2 j' a6 BSQLSERVER中讲: 1 H/ {' W- ^: C: [
, U: i8 B2 x8 w' |) l2 J
BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。
9 B* n6 z8 V1 D0 x
; A% o% `2 _( f% s/ U+ X但我在数据库中进行上述操作后,事务日志还是没有改变。
% N. N; c2 O' x' I' t# I s; C" O
9 T' a: l! L8 p/ Q' t$ L( z% v4 K# d9 H6 ?
第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。 7 B! m4 _. f8 D* @1 |
在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。 p5 R; X! ~6 a& [' H3 I4 g
0 ?9 l. b7 E& S1 y
+ L; f3 u! s# o老马嗖嗖 2007-04-30 13:03 5 m: y( C6 ?9 m# [
SQL Server 2000中*.LDF文件是什么作用
6 k( m: s& t" F7 Q1 U M! l- d: n% y7 M$ w+ D1 _( i6 q
*.mdf是数据文件 / P9 I, @, R$ A' C7 j5 u
*.ldf是日志文件 ! ]& W6 Z, M' d) q4 {
当数据库出现问题时 % b. [7 Y/ A9 L9 x$ m0 i& d) e
可用以下语句恢复
" l7 e/ J6 `# t& U% _" ~3 A数据恢复一 6 }& Y0 a, i" W8 R0 j/ z4 t8 l
1. 先分离数据库
; I/ K& q0 B' g" P1 }- l3 w( m$ l+ ]* gexec sp_detach_db dbname
! o, G' x; C) M! n; S$ k2. 加上数据库
! R8 o7 L! }, c# D9 }exec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’
: @7 ]7 o! g$ w' w M. n, ]" ^5 m( e0 @: G4 k
8 Z/ O- g' D3 |9 M8 @
老马嗖嗖 2007-04-30 13:04
7 t1 a+ d6 n" j* T+ H% }9 Q7 n! [* `; v
) u& {7 }0 [+ L+ F( h0 F
1.清空日志
( `* w0 k8 E, B% Q' I3 eDUMP TRANSACTION 库名 WITH NO_LOG
/ m+ O: D+ f! u% _- |+ G0 Y- v4 |0 b, U
2.截断事务日志: , A+ `! M! G3 f5 t6 o! u( F# Y
BACKUP LOG 数据库名 WITH NO_LOG
5 D& ^0 v' p6 b/ A- N5 i, S c
2 _) ]. u- B1 e" e3.收缩数据库文件(如果不压缩,数据库的文件不会减小
: b+ w0 Y* u3 w( T企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
3 k1 c9 ~1 w+ x3 j/ h--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
* Q3 p1 {/ b4 H--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
w. @( H. n3 ?* ]. q; ], f0 q8 s. T p( y# ~- [: S) l% Z0 A
也可以用SQL语句来完成 d9 e: i. w: F5 H) B6 @
--收缩数据库
; T0 z) ^, i @- i8 cDBCC SHRINKDATABASE(客户资料) : b$ o \6 J% \
V7 _( _: l- D% Q
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles 5 O" q+ ^! B1 d3 ~% i- a# x+ j* J
DBCC SHRINKFILE(1)
! M: P: N' b$ h+ M ~/ H# u9 r1 t0 d& d% ~
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
' F, `: e" u$ _: {4 F% c: }a.分离数据库:
' e/ R( N% N; M- H. c企业管理器--服务器--数据库--右键--分离数据库
- y1 M& E( b2 e5 a9 `% q+ B2 I$ x0 M! W' o9 z
b.在我的电脑中删除LOG文件 / H$ n! H2 R4 }' Z' I0 d/ `+ J( C
( d1 l. C: O E1 {! Lc.附加数据库:
! ^0 d: \: m& f9 A% A& \3 J企业管理器--服务器--数据库--右键--附加数据库
# e$ W5 ?, [& W" v) i# w) F% z4 _: I; j
此法将生成新的LOG,大小只有500多K
U5 J9 Z7 L0 ]: L! Q
8 {6 E N- R& l' C或用代码:
. |" z; S T, J$ N1 l( u0 i+ h下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
% {, T. t1 u1 x' U; j3 K# M" u" X! Y
a.分离 ! W9 t7 L2 U M( P
EXEC sp_detach_db @dbname = 'pubs' ! s4 W, g3 u* f7 T1 Y
3 y$ a- Y0 I, Q9 eb.删除日志文件
4 s% {6 J' q W8 n5 B
0 p" X7 D& e* N! }c.再附加
0 z, y; m; B$ {6 |EXEC sp_attach_single_file_db @dbname = 'pubs', . ~+ \; H3 _/ F- }/ F9 ~' B \
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' # M8 |' t/ D0 W4 D
' M" ]# ]0 I1 @3 s# ~. x0 W1 V9 A2 Y5.为了以后能自动收缩,做如下设置:
1 T' g3 y9 k& x$ r/ q# f# p2 [企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
' W9 J$ Y H) c5 ]& |9 \ ~* Y( Z& M- o1 s9 E# R6 ]
--SQL语句设置方式: * j! r. s. v6 b7 ? y3 k- O C
EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 4 w6 T! t' A* t, p
9 R' \+ p6 b- ~4 L; j: e
6.如果想以后不让它日志增长得太大 6 L; E3 c" d; i+ d+ u R
企业管理器--服务器--右键数据库--属性--事务日志
- y1 Q. Y6 k; O) d0 B8 b/ t--将文件增长限制为xM(x是你允许的最大数据文件大小) / g7 T- B+ n6 H1 E5 [) j, { `
, h7 A4 b1 D! v j--SQL语句的设置方式:
0 k$ P+ @. A ^' U- j2 ?alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)
8 `& a% K, C1 P% y& n) o8 b. [
7 Y9 q4 a& F/ `' I& H9 u# Y" M# H% k1 M) x8 f5 J4 T
vxfire 2007-08-28 14:19
/ Q2 f: l4 G3 |1 [( T# A1 s: N( X我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
* w) f7 i: _7 G- A" ?( k- E |