压缩日志及数据库文件大小 . l X. Z9 j/ e4 ^
) x, L+ F$ V L. [; ~1 b8 n- ^) p) H w! R5 n7 w/ D% q
- m8 k9 T: r. h; J
--下面的所有库名都指你要处理的数据库的库名
# }2 A) o* \) H; k4 l: F: s2 I4 X M. v0 E% C
1.清空日志
6 ]. @0 t6 V1 P3 r2 O9 L, s9 ]; k" L DUMP TRANSACTION 库名 WITH NO_LOG 7 ~0 O' n7 y( E! V {8 e+ ?; z
o; B5 j8 F0 P8 X; o
2.截断事务日志: 7 ]$ d) k+ } L7 h$ M
BACKUP LOG 库名 WITH NO_LOG , n, J# y8 N: n. V
. s# a. M6 J6 t7 l4 k4 c: |% ]
3.收缩数据库文件(如果不压缩,数据库的文件不会减小 . T* H. @# B( C9 g+ |. e
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 - [' z2 u6 H) L& h, K) [9 E: r
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 . C3 _8 f) \6 F
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
" e* Y7 j& q F3 F+ }% x8 I8 z! Q9 a. A$ v8 o: y3 m
也可以用SQL语句来完成
! `, \0 O: L% T/ O4 R --收缩数据库
5 e% ]/ n2 B" ?, {6 m- Y: i, m DBCC SHRINKDATABASE(库名)
5 x; G3 z, X+ G# z. X/ m* V' P( {5 x# A6 t2 j- k
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles : |: o% }' M4 f/ R' O# d
DBCC SHRINKFILE(1) + B' C2 u( v' n6 P2 v$ d
% Q5 f: K4 k9 ], ]
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) . a( J% r! p2 e
a.分离数据库: `& e4 W" F. D( D1 B
企业管理器--服务器--数据库--右键--分离数据库 " `: y% b% N0 {& d
) y9 J- x$ V! |/ V. r- l$ f- P# X% `
b.在我的电脑中删除LOG文件 ' y0 C; `( L- T9 O( m
7 O% D+ d; l8 I) a* i) d c.附加数据库: 3 a. v: M: c4 Q, q
企业管理器--服务器--数据库--右键--附加数据库 U+ v+ O: t2 |0 B6 N
; _8 S) _( u. s* J 此法将生成新的LOG,大小只有500多K
& R' z' Y4 C+ [
3 \* c9 g5 }4 C 或用代码: 2 v- I4 Z9 Z; e% i
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 * ~# m3 {$ ^' |& G, }
; e) N; H3 G! i. n- v, q
a.分离 " z1 m$ z0 `1 A
EXEC sp_detach_db @dbname = '库名'
" U5 B( `: K3 {! T" U R: u, V6 L3 m
b.删除日志文件
1 r( a4 b1 J! r5 E
( s: C! s$ v$ N% c! K c.再附加 % T: f+ T1 L' b8 @8 v
EXEC sp_attach_single_file_db @dbname = '库名', & a& v7 @* B5 w7 y. `9 b- o$ E/ R' q+ M
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLData库名.mdf' " _! K7 l% `. \7 ]
6 ]1 o. `/ s) T0 ]; ^2 f v f( O 5.为了以后能自动收缩,做如下设置: & e; O, s- y% N$ @
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" 7 r3 i5 J3 a- l4 g. X# l8 s: C0 O( r A
$ \2 y% r6 e: R# Q --SQL语句设置方式: - O% ^$ ]! s6 j! {! m# |
EXEC sp_dboption '库名', 'autoshrink', 'TRUE' 8 f. X6 p% O/ U% X$ y# E
; y; r* p. d3 N: U$ K
6.如果想以后不让它日志增长得太大 0 Q6 d+ T# d/ H( n( n
企业管理器--服务器--右键数据库--属性--事务日志 % K2 j# q6 Q# i- B& T2 B7 R% y
--将文件增长限制为xM(x是你允许的最大数据文件大小) $ C g7 [0 Z# D. Z9 q
) b+ y/ T3 O$ A3 W( A2 S, G
--SQL语句的设置方式:
5 G* f: d1 m. H& D, K* L# U5 X3 o alter database 库名 modify file(name=逻辑文件名,maxsize=20) ) Z- ~8 ?" O8 f9 a$ s
---------------------------------------------------------------------9 ~( D7 x8 S: n' v
SQL Server 控制Ldf文件的大小(清理历史记录 &设定自动缩小) 5 i4 z. n4 M7 G) C1 Q4 Z5 M) Y! _
. |% A2 h- `8 i7 P8 a% O E
*清理历史记录 / A+ l: V5 E) _1 x3 K7 V/ D
1. 在SQL Server Enterprice Manager(企业管理器)工具列---进入 SQL Query Analyzer(SQL查询分析器)
E. C3 i% t b/ o% e& V y2. 输入BACKUP LOG <你的数据库名称> WITH TRUNCATE_ONLY 6 }% l5 w2 n9 h% p
如: BACKUP LOG myXXDB WITH TRUNCATE_ONLY % _, o1 z- u# P
' g% e' v* D4 a. ?
2. 回SQL Server Enterprice Manager, 在该数据库上按右键选[所有工作/压缩数据库], ; E5 G0 L r8 F4 h
点[文件], 在数据库文件选择该 Log文件, 在[压缩动作]选择[将文件压缩为X MB (最小值为Y MB)],
4 g6 ~3 A8 H$ O7 U, P直接将x改成其建议其最小值y按[确定]即可压缩.
' {+ n* V; o2 K# h) z! X先不要离开,再点一次[文件]看看压了多少, 会发现还可以再压, 还会变更小哟! 可以压两三次.
, G T8 Q* E/ a# K) S3 S0 M! J$ \, v, n& t- n5 k
总结:其实也就是两个指令就可以完成了
- G) I: g- Z* SBACKUP LOG DateBaseName WITH TRUNCATE_ONLY
" |/ p, J- L8 b2 B4 ^DBCC ShrinkDatabase(DateBaseName)
) O# v% O$ e6 p1 s7 ]1 R4 z
6 l1 O" ~6 l* F9 F' Y*设定数据库自动缩小, 默认值为OFF
( p8 B% V4 @$ a: T- b( i! }方法1.
0 K6 l3 B# q" _2 T" BALTER DATABASE <你的数据库名称> SET AUTO_SHRINK ON 5 ]: ^3 }# i+ `1 _9 ~- z1 G g
如: ALTER DATABASE myXXDB SET AUTO_SHRINK ON
$ v/ R& b# a- N6 z: w5 _. E' ?方法2.
8 k) c/ F7 ^& q4 E在数据库上按右键选内容(要等一下下), 点[选项]页, 勾选[自动压缩]后按确定
$ I% Q* Y; ]( J9 m$ s* ]
' P" b0 G7 O9 e& ], v m5 S' q$ h
+ s$ n) S) \% \0 C8 U/ I SQL SERVER日志清除的两种方法
+ r% u+ E5 n3 x8 J( g 在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法…… 7 A0 O6 ]# H0 G$ G
U2 l) X# ^- ]0 i) n9 w* N! @ 方法一
. _, J9 s: ]$ W; ]$ ]) L' i5 P5 ?9 |
) t) d9 y% l! o. X7 F/ ^. G* v 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 / O6 m. G- q& ], q
) u2 t0 E8 n, s: ?5 Y, m
1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。
" M3 O) {' b4 r6 S+ u- }2 U& `, E( Y: T/ ^
2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。
- _. b# s7 r0 U# k j
* ?" W1 D% W, W6 a 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 3 |5 h3 o3 d8 m/ e b( W$ ^
- ?. e, |3 I+ @" Q, U5 R: r$ T# g* T* v
$ R, U' x$ T( t8 {
& W. E1 } f$ |# A4 `; `SQLSERVER中讲: " f4 n4 U& V, A% D& l6 }, O
5 V0 {6 j; \4 ?BACKUP LOG 数据库名 WITH NO_LOG|TRUNCATE_ONLY可以截断事务日志。 8 p1 o9 J) v8 ?1 |2 P& x } E
3 {$ Q& a" ~/ \1 \: N% J+ o6 U6 j) h但我在数据库中进行上述操作后,事务日志还是没有改变。 8 o7 Y& W% V& T" t7 U- g0 |6 V
+ H$ B# x' g7 G9 v: W# R
" V: o5 M9 z5 f! W. c* l% B第一步只是将非活动的事务日志截断,并没有收缩数据库,只有进行第二项操作后,数据库才进行事务日志的清理工作,将截断的非活动事务删除,并将事务日志文件收缩到适当尺寸。
/ s6 K4 U' ]) G. N: E2 d在使用 SQL Server 时,数据库里的日志文件会越来越大,需要把它删除。 我先把这个数据库分离,在数据库上点右键 -> 所有任务 -> 分离数据库,分离之后,就可以把 Log 文件删除,同时也可以把数据进行备份。之后,就可以在所有任务里的附加数据库再把那个数据库添进来,SQL Server 会提示 LOG 文件不存在,问你是不是要新建一个,选是就行了,这样,LOG 文件就清空了。 这个方法只需几分钟的时间,但在这几分钟里,就不能访问这个数据库了,我觉得只适用于小型的应用,对于大型的系统就要找其它方法了。
/ ^. c" `. s1 _( v2 G
. t+ a0 F7 y4 ~) E" v+ z2 D
& Q1 s& [& T2 P) Z3 c老马嗖嗖 2007-04-30 13:03 ' b- T; K* d7 z+ o5 J
SQL Server 2000中*.LDF文件是什么作用
: W2 M* K9 Y! Y, z/ t* a; `8 W5 u6 g ?5 M
*.mdf是数据文件 0 ^) X' W3 a) z3 B @" `
*.ldf是日志文件 ! X8 s" \) P% M: L
当数据库出现问题时
$ i/ O0 C4 S- X" h, d可用以下语句恢复 7 P; r9 D$ i3 W0 T
数据恢复一 * \) \" E4 n2 I
1. 先分离数据库
* Z9 q! e2 j, e& ^' w9 {exec sp_detach_db dbname
3 s5 \3 i5 L5 o" K5 o* ?2. 加上数据库
+ s# n- `! \. h2 S3 U! Yexec sp_attach_db @dbname=’dbname’,@filename1=’d:sql server...dbname.mdf’,@filename2=’d;sql server...dbname_log.ldf’ , h0 q1 X+ t0 Q) S4 h+ W- t, D
+ {& Z( j3 O- C9 M0 q! l' ]( q$ v/ b
老马嗖嗖 2007-04-30 13:04
0 d; E# E0 w6 q# e. G0 g
( j; L+ x5 i, T5 O
3 }7 t/ A5 C8 @& j: s; {8 F( K1.清空日志
" K* D) Q1 k V0 u* O5 @2 U$ w) fDUMP TRANSACTION 库名 WITH NO_LOG 7 w% Z* v6 ]) }! F+ I. V9 [
' w: S- Z% w% T" o0 F8 A2.截断事务日志:
" O! z" ^6 E* k* N% t& {; f1 z3 SBACKUP LOG 数据库名 WITH NO_LOG i( O- D) s" s# o
: ^% D* V- R \1 Z
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
6 A/ X [9 B+ R企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
0 `6 A1 k; L1 _7 p. e5 V--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
9 u/ ^: S, d/ d--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
( m( k: D0 v9 N
+ V- C; V5 h' d/ k6 K也可以用SQL语句来完成 $ T% f6 S3 O. V$ _4 t
--收缩数据库
! C" \7 Q" C \1 f, MDBCC SHRINKDATABASE(客户资料) % `/ a5 R9 G% F* {) Q" g
3 X8 X! {& a/ T3 D--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
~! K+ Z8 O8 P& N3 e) oDBCC SHRINKFILE(1)
/ g+ E0 }% `5 A3 @/ Z, A; B6 C- E; k. [
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) ( n6 V a" ]2 j- f" q$ K# ~9 C7 c
a.分离数据库: , s1 l+ a1 C9 G B! H
企业管理器--服务器--数据库--右键--分离数据库 2 S( P$ J; w; d0 j% [9 Q( r/ ~
0 C- a; }; @! |
b.在我的电脑中删除LOG文件
4 H0 C5 q- e5 ~( ]& \; S6 o+ }4 Z' Q8 f
c.附加数据库: 2 {) P B; X# o' }2 o
企业管理器--服务器--数据库--右键--附加数据库 5 D5 u# B1 e. E) k3 w2 U2 ?
* j. [/ U, q3 E1 z1 u* a% n
此法将生成新的LOG,大小只有500多K
8 x1 }- Q$ S; U% s2 ~& }. A
" j! f4 P4 u& Z4 @0 T; R" t或用代码: 1 u+ D, S$ [ n) N. F3 L
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 9 U; o+ Q: Q8 t
) Y( | k$ T) }7 e6 r) ka.分离 8 _7 h5 {" z2 i; u
EXEC sp_detach_db @dbname = 'pubs' 5 ~0 ]5 _8 u4 n9 f
, G* S7 D+ k" Y* e4 q1 x& u
b.删除日志文件 " t& e6 c; T) D+ P
: J# R; {) m' w
c.再附加
+ k) o3 n8 E' p8 ]EXEC sp_attach_single_file_db @dbname = 'pubs', ' }' w8 ]/ @+ ?% x# A
@physname = 'c rogram FilesMicrosoft SQL ServerMSSQLDatapubs.mdf' ( \ |4 a: ~6 P. ~
9 A5 k% J8 C* U- {4 ~# P+ I# w9 z2 b8 C& }
5.为了以后能自动收缩,做如下设置: : A' ^( ^+ R) i0 a/ z: u
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
3 r, k1 J3 [- @; J' Y$ q0 v
) _9 l, F9 G' e l, B3 J& p--SQL语句设置方式:
5 I E; X/ W; s* D0 v" _EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' . B& O2 ]$ L, U- e
" ?: z9 p6 R, ^" x3 I: [6 N6.如果想以后不让它日志增长得太大
( ^( z! G' W7 n+ ^& r4 u& Z ~+ b2 `: j企业管理器--服务器--右键数据库--属性--事务日志
, L* Z7 J- ~' B7 B9 E6 Z' l, Z2 d--将文件增长限制为xM(x是你允许的最大数据文件大小)
9 A! [ L7 N+ f2 q4 x4 a2 c9 B* X. y# r& ?
--SQL语句的设置方式:
8 k" A. f* q3 x; p! @alter database 数据库名 modify file(name=逻辑文件名,maxsize=20) ( v6 K5 O( i8 F, Q8 p3 z5 g
8 P" w/ Q1 ]9 s' x( e' |! T# f$ P* @- C, y7 E, q
vxfire 2007-08-28 14:19
$ _5 ^) l, x! _; L/ P9 a' T我这里.ldf文件比Mdf文件大100G怎么解决啊。,头痛死啦
- F/ E1 r' S0 o* h |