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