forked from tboggiano/autofix-vlfs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02_VLF_UpdateInfo.sql
82 lines (64 loc) · 1.66 KB
/
02_VLF_UpdateInfo.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
CREATE PROCEDURE dbo.VLF_UpdateInfo
AS
SET NOCOUNT ON
DECLARE
@DBName SYSNAME,
@vlfcount INT,
@activevlfcount INT,
@dbccquery varchar(1000),
@currentlogsizeMB INT
CREATE TABLE #VLFSummary
(
DBName SYSNAME ,
NumOfVLFs INT ,
ActiveVLfs INT ,
RecoveryMode VARCHAR(99) ,
LogSizeMB INT
)
CREATE TABLE #VLFInfo
(
RecoveryUnitId TINYINT ,
FileId TINYINT ,
FileSize BIGINT ,
StartOffset BIGINT ,
FSeqNo INT ,
[Status] TINYINT ,
Parity TINYINT ,
CreateLSN NUMERIC(25, 0)
)
DECLARE csr CURSOR FAST_FORWARD READ_ONLY
FOR
SELECT name
FROM master.sys.databases WHERE database_id <> 2
AND [state] = 0
AND is_read_only = 0
OPEN csr
FETCH NEXT FROM csr INTO @dbname
WHILE (@@fetch_status <> -1)
BEGIN
SET @dbccquery = REPLACE(REPLACE(
'DBCC loginfo ("{{DatabaseName}}") WITH NO_INFOMSGS, TABLERESULTS'
,'"','''')
,'{{DatabaseName}}', @dbname)
TRUNCATE TABLE #VLFInfo
INSERT INTO #VLFInfo
EXEC (@dbccquery)
SET @vlfcount = @@rowcount
SELECT @activevlfcount = COUNT(*)
FROM #VLFInfo WHERE [Status] = 2
SELECT @currentlogsizeMB = (size/128)
FROM master.sys.master_files
WHERE type_desc = 'log'
AND DB_NAME(database_id)=@dbname
INSERT INTO #VLFSummary
VALUES(@dbname, @vlfcount, @activevlfcount, CONVERT(VARCHAR(7),DATABASEPROPERTYEX(@dbname, 'Recovery')), @currentlogsizeMB)
FETCH NEXT FROM csr INTO @dbname
END
CLOSE csr
DEALLOCATE csr
TRUNCATE TABLE dbo.VLFInfo
INSERT INTO dbo.VLFInfo (DBName, NumOfVLFs, ActiveVLFs, RecoveryMode, LogSizeMB)
SELECT DBName, NumOfVLFs, ActiveVLFs, RecoveryMode, LogSizeMB
FROM #VLFSummary
DROP TABLE #VLFSummary
GO