压缩日志及数据库文件大小
* 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 = 'c rogram 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 = 'c rogram 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 |