a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 112|回复: 1

[数据库] 2012年计算机三级数据库技术SQL语句辅导:技巧篇(2)

[复制链接]
发表于 2012-7-31 21:12:12 | 显示全部楼层 |阅读模式
 7、日志清除   SET NOCOUNT ON5 L3 n; {) I! g: o
  DECLARE @LogicalFileName sysname,
( ?9 e$ d( n# u1 j4 z) b  @MaxMinutes INT,
% {1 @, F5 G* ^5 N  @NewSize INT' T7 a5 F: J. y8 M) _& \3 o: N; O
  USE tablename -- 要操作的数据库名
8 ?5 v. P0 M% E5 S; Z  SELECT @LogicalFileName = 'tablename_log', -- 日志文件名
: \! }# I9 O: r" {9 v' o+ S  @MaxMinutes = 10, -- Limit on time allowed to wrap log.
: E* R9 R# H% J( T" x* _1 |" k! R  @NewSize = 1 -- 你想设定的日志文件的大小(M). E7 T; i  ]! g. D" V2 M3 r
  Setup / initialize4 w4 _: n2 @; `% i) [. K8 s
  DECLARE @OriginalSize int: \6 ?9 Q5 }) ~+ g4 n
  SELECT @OriginalSize = size
3 R$ k9 `$ p4 X9 Z8 |+ s3 x2 \  FROM sysfiles( T$ K$ O) o/ q4 X/ l% ~
  WHERE name = @LogicalFileName
- D, T' d  k& M, D  j& f" c7 Z  SELECT 'Original Size of ' + db_name() + ' LOG is ' +
! u2 }% B* G3 A& Y* f3 v7 ~3 A  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
( Y% Q3 W+ Y5 e% {9 O  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
7 `% J6 U2 X" o! [/ |  FROM sysfiles3 v  }3 m0 E+ O
  WHERE name = @LogicalFileName
, `2 f. l* Q! ~$ V" ^" ?5 t# q  |  CREATE TABLE DummyTrans& W3 f2 f8 q, Y" z
  (DummyColumn char (8000) not null)/ f, i# ]) `' m$ i( \+ B  H
  DECLARE @Counter INT,* p% ]9 A7 R) b6 n
  @StartTime DATETIME,
, _2 l- [3 y+ o) b' v) h) e  @TruncLog VARCHAR(255), {. N. d3 I9 ^* D3 ^, I
  SELECT @StartTime = GETDATE(),3 S; K3 r9 s2 R9 r; l
  @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'' R" {9 g; A/ p* l% M
  DBCC SHRINKFILE (@LogicalFileName, @NewSize)% K: h2 a. V" \

1 D: w- z! o/ H0 j0 |4 P, n$ n  EXEC (@TruncLog)
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:12:13 | 显示全部楼层

2012年计算机三级数据库技术SQL语句辅导:技巧篇(2)

</p>  -- Wrap the log if necessary.
2 d: G1 @/ k  X8 g5 o  WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
. u3 T1 k  I1 R8 H  AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
! y  s9 J% f- O7 {  AND (@OriginalSize * 8 /1024) > @NewSize% P6 r3 G# P0 i6 i  e
  BEGIN -- Outer loop., o2 s2 S; M0 W# S/ Z% l
  SELECT @Counter = 02 }4 d4 B: l: }, }+ b- I
  WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
, l# X3 B4 z. y0 r  BEGIN -- update
, W# \% G9 Z2 m7 ?  INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans
- S5 l: j- L$ v# i& A9 b  SELECT @Counter = @Counter + 1% k9 ?5 R8 _. o5 o# F
  END
" T+ X! M' |9 k7 ]5 a9 L; S  EXEC (@TruncLog)8 W& [7 v8 J& E9 R
  END! r4 I6 j% R5 _. q
  SELECT 'Final Size of ' + db_name() + ' LOG is ' +; A  z! Q9 s3 _0 V
  CONVERT(VARCHAR(30),size) + ' 8K pages or ' +$ j! S) E0 {4 c% I: A5 ]
  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'* E; V7 ^9 ~: `* u7 N
  FROM sysfiles
# j& ]2 _' e" p4 Q* `3 H' C9 l  WHERE name = @LogicalFileName
. ^4 @& U5 H& ?/ o  DROP TABLE DummyTrans% X/ K; v4 B; N$ `% u1 f5 B! _
  SET NOCOUNT OFF3 p4 R( {. O5 V
  8、说明:更改某个表2 A! C' ^1 m; b( A2 n6 o0 `, b
  exec sp_changeobjectowner 'tablename','dbo'
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-5 05:56 , Processed in 0.311287 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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