2010-05-13 81 views

回答

6

2005年和最多可以運行

DBCC DBINFO ('YourDatabaseName') WITH TABLERESULTS 

找dbi_dbccLastKnownGood

2

試試這個檢查所有DB對SQL 2005起

SET NOCOUNT ON; 
DBCC TRACEON (3604); 

CREATE TABLE #temp (
     Id INT IDENTITY(1,1), 
     ParentObject VARCHAR(255), 
     [Object] VARCHAR(255), 
     Field VARCHAR(255), 
     [Value] VARCHAR(255) 
) 

CREATE TABLE #Results (
     DBName VARCHAR(255), 
     LastGoodDBCC VARCHAR(255) 
) 

DECLARE @Name VARCHAR(255); 

DECLARE looping_cursor CURSOR 
FOR 

SELECT name 
FROM master.dbo.sysdatabases 
WHERE CONVERT(varchar(500),databasepropertyex(name, 'Status'),0) = 'ONLINE' 

OPEN looping_cursor 
FETCH NEXT FROM looping_cursor INTO @Name 
WHILE @@FETCH_STATUS = 0 
    BEGIN 

     INSERT INTO #temp 
     EXECUTE('DBCC PAGE (['[email protected]+'], 1, 9, 3)WITH TABLERESULTS'); 

     INSERT INTO #Results 
     SELECT @Name,MAX(VALUE) FROM #temp 
     WHERE Field = 'dbi_dbccLastKnownGood'; 

    FETCH NEXT FROM looping_cursor INTO @Name 
    END 
CLOSE looping_cursor; 
DEALLOCATE looping_cursor; 

SELECT DBName 
    ,ISNULL(LastGoodDBCC,'1900-01-01 00:00:00.000') AS 'LastGoodDBCC' 
FROM #Results 

DROP TABLE #temp 
DROP TABLE #Results 
0

上面的查詢會產生不正確的結果因爲#temp表在光標內未被截斷

SET NOCOUNT ON; 
DBCC TRACEON (3604); 

CREATE TABLE #temp (
     Id INT IDENTITY(1,1), 
     ParentObject VARCHAR(255), 
     [Object] VARCHAR(255), 
     Field VARCHAR(255), 
     [Value] VARCHAR(255) 
) 

CREATE TABLE #Results (
     DBName VARCHAR(255), 
     LastGoodDBCC VARCHAR(255) 
) 

DECLARE @Name VARCHAR(255); 

DECLARE looping_cursor CURSOR 
FOR 

SELECT name 
FROM master.dbo.sysdatabases 
WHERE CONVERT(varchar(500),databasepropertyex(name, 'Status'),0) = 'ONLINE' 

OPEN looping_cursor 
FETCH NEXT FROM looping_cursor INTO @Name 
WHILE @@FETCH_STATUS = 0 
    BEGIN 

     INSERT INTO #temp 
     EXECUTE('DBCC PAGE (['[email protected]+'], 1, 9, 3)WITH TABLERESULTS'); 

     INSERT INTO #Results 
     SELECT @Name,MAX(VALUE) FROM #temp 
     WHERE Field = 'dbi_dbccLastKnownGood'; 

     truncate table #temp 

    FETCH NEXT FROM looping_cursor INTO @Name 
    END 
CLOSE looping_cursor; 
DEALLOCATE looping_cursor; 

SELECT DBName 
    ,ISNULL(LastGoodDBCC,'1900-01-01 00:00:00.000') AS 'LastGoodDBCC' 
FROM #Results 
相關問題