Bei der Arbeit in einem sehr großen SQL Server Umgebung ist es sehr häufig, dass niemand in der Organisation weiß, wer eine bestimmte Datenbank verwendet. Dieses Szenario ist sehr häufig, wenn mehrere Legacy-Systeme vorhanden sind. Befolgen Sie diesen Artikel, um festzustellen, wie effektiv Ihre SQL Server Datenbanken werden verwendet.
Methode 1:
Bei dieser Methode lesen wir die Ausgabe von sp_who2 und erfassen sie in einer Tabelle. Der erste Schritt besteht darin, die Tabelle mit diesem Skript zu erstellen.
CREATE TABLE T1 ( session_id INT ,status_message VARCHAR(1000) NULL ,login_name SYSNAME NULL ,Name_of_Host SYSNAME NULL ,Blocked_By SYSNAME NULL ,Database_Name SYSNAME NULL ,Script_description VARCHAR(1000) NULL ,CPU_Time INT NULL ,Disk_Input_Output INT NULL ,Last_Batch VARCHAR(1000) NULL ,Name_of_Program VARCHAR(1000) NULL ,Session_ID_2 INT ,ID_of_Request INT NULL ,Log_Date DATETIME DEFAULT GETDATE() );
Planen und führen Sie dieses Skript als aus SQL Server Job. Wir können die Protokolltabelle jederzeit überprüfen, um festzustellen, ob unsere Zieldatenbank verwendet wird.
INSERT INTO T1 ( session_id ,status_message ,login_name ,Name_of_Host ,Blocked_By ,Database_Name ,Script_description ,CPU_Time ,Disk_Input_Output ,Last_Batch ,Name_of_Program ,Session_ID_2 ,ID_of_Request ) EXECUTE sp_who2 active;
Methode 2:
Im Gegensatz zur obigen Methode ist dieses Skript am besten geeignet, wenn Sie nicht an zu vielen Details interessiert sind und nur wissen möchten, ob die Datenbank verwendet wird oder nicht. Wenn Sie verwenden SQL Server Bei Versionen vor 2014 funktioniert dies nicht. Die Ausgabe dieses Skripts zeigt drei Felder. Das erste Feld enthält Informationen zum Datenbanknamen. Dies ist für uns das Schlüsselfeld, da wir so feststellen können, ob unsere Zieldatenbank verwendet wird. Das zweite Feld hilft uns, die Verbindungen zur Datenbank in Benutzerverbindungen und externe Verbindungen zu klassifizieren. SQL Server interne Verbindungen. In der letzten Spalte wird die Anzahl der Verbindungen zur Datenbank aufgeführt.
SELECT DB_NAME(sys.dm_exec_sessions.database_id) AS [Database Name] ,CASE WHEN sys.dm_exec_sessions.is_user_process = 1 THEN 'YES' WHEN sys.dm_exec_sessions.is_user_process = 0 THEN 'NO' END AS [Is it User connection?] ,COUNT(sys.dm_exec_sessions.session_id) AS [Connections Count] FROM sys.dm_exec_sessions GROUP BY DB_NAME(sys.dm_exec_sessions.database_id) ,sys.dm_exec_sessions.is_user_process ORDER BY 1 ,2;
Methode 3:
Bevor die Daten in die Protokolltabelle verschoben werden, können wir in Methode 1 keinen Filter für den Datenbanknamen durchführen. Dies ist jedoch in Methode 2 und Methode 3 möglich.
SELECT t1.objtype AS [Object] ,t1.refcounts AS [ReferredCount] ,t1.usecounts AS [Usage] ,t1.size_in_bytes / 1024 AS [KB Size] ,db_name(t3.dbid) AS [DatabaseName] FROM sys.dm_exec_cached_plans t1 OUTER APPLY sys.dm_exec_text_query_plan(plan_handle, 0, - 1) t2 OUTER APPLY sys.dm_exec_sql_text(plan_handle) AS t3 WHERE db_name(t3.dbid) = 'ERP10_SandBox' ORDER BY t1.usecounts DESC;
Methode 4:

Entfernen Sie die Datenbank

Einführung des Autors:
Neil Varley ist ein Experte für Datenwiederherstellung in DataNumen, Inc., das weltweit führend bei Datenwiederherstellungstechnologien ist, einschließlich Relook PST-Datenfehler reparieren und Excel-Wiederherstellungssoftwareprodukte. Für weitere Informationen besuchen Sie www.datanumen.com €XNUMX