Når du jobber i en veldig stor SQL Server miljø, er det veldig vanlig at ingen i organisasjonen vet hvem som bruker en bestemt database. Dette scenariet er veldig vanlig hvis det er flere eldre systemer. Følg denne artikkelen for å identifisere hvor effektivt du SQL Server databaser brukes.
Metode 1:
I denne metoden skal vi lese utdataene til sp_who2 og fange det i en tabell. Det første trinnet er å lage tabellen ved å bruke dette skriptet.
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() );
Planlegg og utfør dette skriptet som en SQL Server Jobb. Vi kan se gjennom loggtabellen når som helst for å identifisere om vår target-databasen blir brukt.
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;
Metode 2:
I motsetning til metoden ovenfor, hvis du ikke er interessert i for mye detaljer og bare ville vite om databasen er i bruk eller ikke, så passer dette skriptet best. Hvis du bruker SQL Server med eldre versjon enn 2014, vil ikke dette fungere. Utdataene fra dette skriptet viser 3 felt. De første feltene gir informasjon om databasenavnet. Dette er nøkkelfeltet for oss, da dette vil hjelpe oss å identifisere om vår target-databasen er i bruk. Det andre feltet vil hjelpe oss med å klassifisere forbindelsene til databasen som brukerforbindelser vs SQL Server interne forbindelser. Den siste kolonnen viser antall tilkoblinger til databasen.
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;
Metode 3:
Før vi skyver dataene inn i loggtabellen, i metode 1, kan vi ikke gjøre et filter på databasenavn. Det er imidlertid mulig i metode 2 og metode 3.
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;
Metode 4:

Fjern databasen

Forfatterintroduksjon:
Neil Varley er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparer Outlook pst-datafeil og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med