fha 10 Geschrieben 18. April 2011 Melden Geschrieben 18. April 2011 Hallo Zusammen, ich möchte über alle Datenbanken einer Instanz die Fragmentierung der Indexe ermitteln. Für eine Datenbank habe ich folgende Abfrage: use DB; SELECT DB.name as DatabaseName, a.index_id as IndexID, a.object_id as ObjektID, b.name as Indexname, avg_fragmentation_in_percent as Fragmentierung FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id JOIN master.dbo.sysdatabases as DB on a.database_id = DB.dbid WHERE avg_fragmentation_in_percent > 10.0 AND a.index_id > 0 order by avg_fragmentation_in_percent DESC; Nun versuche ich diese Abfrage so zu verpacken,dass alle Datenbanken durchgegangen werden: Declare @DBID smallint Declare @ID smallint Declare @DBNAME as varchar(64) Declare dbid_cursor CURSOR FOR select dbid from master.dbo.sysdatabases where name='DB'; Open dbid_cursor; FETCH NEXT FROM dbid_cursor INTO @ID; WHILE @@FETCH_STATUS = 0 Begin select @DBNAME=name from master.dbo.sysdatabases where dbid=@ID; Set @DBID=DB_ID(@DBNAME); SELECT DB.name as DatabaseName, a.index_id as IndexID, a.object_id as ObjektID, b.name as Indexname, avg_fragmentation_in_percent as Fragmentierung FROM sys.dm_db_index_physical_stats (@DBID, NULL, NULL, NULL, NULL) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id JOIN master.dbo.sysdatabases as DB on a.database_id = DB.dbid WHERE avg_fragmentation_in_percent > 10.0 AND a.index_id > 0 ORDER by avg_fragmentation_in_percent DESC; FETCH NEXT FROM dbid_cursor INTO @ID; END CLOSE dbid_cursor; DEALLOCATE dbid_cursor; Nun habe ich das Problem, dass die beiden ABfragen für die selben Datenbanken unterschiedliche Ergebnisse liefern. Wenn die erste 101 Ergebnisse bringt, bekomme ich von der zweiten nur 98. Sind bei der ersten 65, sinds bei der zweiten nur 13. Ich kann keine System feststellen. Das einzige was ich weiß ist, dass wenn ich manuell ein 'USE DB;' bei der zweiten einbringe, dann funktioniert es. Allerdings kann ich das USE-Kommando ja nicht dynamisch in die Abfrage einbringen. Hat jemand eine Idee, woran das liegen könnte?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden