it-swarm-eu.dev

Jak zjistím, zda se stále používá databáze serveru SQL?

Těšíme se na vyřazení instance serveru SQL Server, na které ještě zbývá několik databází.

Jak zjistím, zda je stále používají uživatelé nebo webová aplikace?

Našel jsem vlákno fóra , které mělo dotaz T-SQL, který můžete spustit, abyste získali poslední datum dotazu. Zdá se, že to funguje, ale chci vědět, zda jsou tyto informace dostatečně platné k tomu, aby se vyhodily databáze. Je to?

Pokud máte alternativní metody, které by také pomohly.

34
jsauni

Museli byste se zabývat položkami, které byly vymazány z mezipaměti a které jste zmeškali, nebo databázemi, které mají jen zřídka použití.

Spíše než vyřazení databází z ruky je dejte buď OFFLINE, abyste zabránili přístupu, aniž byste je vynechali, nebo v režimu RESTRICTED_USER omezte přístup. Pokud tak učiníte, můžete je nechat v tomto stavu měsíc nebo dva, abyste zkontrolovali, zda není příležitostně použito.

V této databázi byste také mohli použít filtrování trasování profileru na straně serveru.

30
NicCain

Toto jsou metody, které jsem použil v minulosti:

  1. Přepněte databázi do režimu offline/odpojte
  2. DENY přístup pro uživatele/přihlášení
  3. Stopa profilu

Problém je v tom: jak dlouho čekáte, než si budete jisti, že k datům nikdo nebude mít přístup? Pro finanční údaje máte některé položky spuštěny denně, týdně, měsíčně, čtvrtletně, pololetně a ročně. Ale je rok dostatečně dlouhý? Také jsem viděl žádosti o zpřístupnění dat po dobu nejméně 7 let, a v jednom případě mi bylo řečeno, že data v jednom systému musí být navždy, i když je nikdo nepoužíval.

Nejlepší doporučení je toto: ať děláte cokoli, abyste přístup vypnuli, ujistěte se, že jej můžete okamžitě znovu zapnout. Zjistil jsem, že pro tuto práci nejlépe funguje detatch. Prostě bych skript z reattach a pokyn můj tým "pokud se někdo někdy zeptá, kde to je, spusťte tento skript". To nám dalo nejlepší šanci vrátit věci co nejrychleji.

14
SQLRockstar

Souhlasím s Nic s jeho radou. Pokud si musíte být jisti, museli byste jít s Profilerem (trasování na straně služby), protože některé dotazy SQL nebudou uloženy do mezipaměti nebo z jakéhokoli důvodu by mohla být mezipaměť procedur vymazána.

Normálně bych také kontroloval informace o statistikách virtuálních souborů, abych zjistil, zda se na úrovni souborů OS dějí nějaké čtení nebo zápisy. I když databáze NENÍ aktivní, stále uvidíte malé čtení/zápisy, pokud berete zálohy protokolu, plné zálohy atd. ... ale to vám také poskytne představu o činnosti čtení a zápisu v této databázi.

Před vypuštěním jakékoli databáze bych se ujistil, že máte alespoň 2 nebo 3 čitelné zálohy (vyzkoušejte je) v samostatných umístěních. Nikdy nevíte, kdy je potřebujete.

13
Sankar Reddy

Následující dotaz zobrazuje databáze, které od posledního restartu neměly žádné využití, aniž by se spoléhaly na plány dotazů držené v mezipaměti, protože zobrazuje uživatele IO proti indexům (a haldy).) něco podobného použití statistik virtuálních souborů, ale zde použitý DMV vylučuje IO aktivita ze záloh. Není třeba udržovat běh trasování profilerů, není nutné spouštění ani auditování. Samozřejmě, pokud restartujete server SQL často (nebo často připojujete/vypínáte databáze), možná to nebude takhle :-)

Přesto souhlasím s tím, že i když se zdá, že tento dotaz potvrzuje, že DB může být zrušena, rozhodně udělejte OFFLINE/odpojte nebo odepřete přístup uživatele na nějakou dobu, plus jakoukoli náležitou péči, abyste se před tím zeptali. skutečně klesá!

select [name] from sys.databases 
where database_id > 4
AND [name] NOT IN 
(select DB_NAME(database_id) 
from sys.dm_db_index_usage_stats
where coalesce(last_user_seek, last_user_scan, last_user_lookup,'1/1/1970') > 
(select login_time from sys.sysprocesses where spid = 1))
8
FloorDivision

Pracoval jsem na místě, které mělo velké množství osiřelých a polosirotických databází. Bylo obtížné zjistit, zda skutečně byly osamoceny, protože mnoho úkolů bylo sezónních nebo ročních - takže webové stránky běží pouze 3–4 měsíce ročně (například formuláře W2 musí být elektronicky podány 1/31, takže zpracování webových stránek ty běžely až od poloviny ledna do konce dubna).

Bylo provedeno spojení:
* Zeptejte se každého vývojáře, zda používal nějakou databázi nebo jinou (tyto e-maily by vycházely měsíčně nebo vždy, když by záloha trvala příliš dlouho).
* Přeneste databázi do režimu offline a zjistěte, kdo si stěžuje.
* přejmenujte server, aby zjistil, kdo si stěžuje.

Protože špičatý vlasový šéf byl ochoten umožnit „úplnou a úplnou“ dokumentaci, wiki byla výslovně zakázána a snížení počtu zaměstnanců vedlo k dramatickému poklesu dokumentace, která splňovala normu.

Pokud by to bylo na mně, na každém serveru by byla wiki stránka s kontaktními jmény pro každou databázi (a možná krátký popis toho, pro co je databáze určena). Jakákoli databáze nezdokumentovaná na wiki by byla férová hra pro smazání.

Měli jsme jednoho velkého finančního klienta, který stále používal SQL Server 2000 až v roce 2009, takže jsme museli ponechat jednu instanci SQL Server 2000 spuštěnou, dokud se tento klient nakonec nepřesunul na SQL Server 2005.

3
Tangurena

Další řešení zobrazuje dočasné celkem, čisté a špinavé stránky v MB pro konkrétní databáze ve vaší instanci (nalezené na internetu a trošku upravené):

SELECT
    (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
    COUNT(*) *8/1024 AS [TotalPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 0 ELSE 1 END) *8/1024 AS [CleanPages in MB],
    SUM(CASE WHEN ([is_modified] = 1) THEN 1 ELSE 0 END) *8/1024 AS [DirtyPages in MB]
FROM sys.dm_os_buffer_descriptors
GROUP BY database_id
ORDER BY DB_NAME(database_id)

nebo

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
where  attribute = 'dbid' 
order by last_execution_time desc

nebo

select value [DBid],attribute, last_execution_time ,text
from
sys.dm_exec_query_stats
cross apply
sys.dm_exec_plan_attributes(plan_handle)
cross apply
sys.dm_exec_sql_text(plan_handle)
--where dbid=8
where 
      text like '%idAdministrator%' and
      attribute = 'dbid' 
      and value>= 5 -- dbid >=5 for user databases but include resource database which
                     --you can exclude by its numer I don't remember at the moment
order by last_execution_time desc
2
SQL Server Frant

Další dvě alternativy jsou:

  1. Vytvořte spouštěče v databázi, které vás upozorní (nebo uloží do tabulek) o jakékoli činnosti.
  2. Povolit auditování v databázích.

    • Závisí na vaší verzi DB.
2
StanleyJohns