W jaki sposób można zidentyfikować z której bazy korzysta aplikacja

0

Witam. Mam może takie nietypowe trochę pytanie. Chociaż wydaje mi się, że raczej taki problem prędzej, czy później może wystąpić u każdego.
Aplikacja korzysta z silnika bazy SQL SERVER. Jestem przez microsoft managment studio połączony do kilkunastu baz danych (zrzut 1).
I teraz testuję różne funkcjonalności w aplikacji i nie wiem, w której bazie danych się coś zmienia.
A wiem, że na pewno dzieje się to na jednej z nich.
Czy jest możliwość sprawdzenia do jakiej bazy jest podłączona aplikacji.
Z góry dziękizrzut 1.png

4

Tu masz takie coś:
screenshot-20220315164020.png

I tam można zobaczyć, do której bazy, jaki proces jest podłączony itp. Ale zabierasz sie do tego od du.. strony. W aplikacji gdzieś musi być jakaś konfiguracja, do czego się łączy dana aplikacja.

1
  1. Uruchamiasz SQL Server Profiler
  2. Wybierasz File->New Trace
  3. Logujesz się do swojego SQL Servera
  4. Na formularzu Trace Properties klikasz w zakładkę Events Selection
  5. W prawym dolnym roku masz przycisk Column Filters... -> klikasz w to
  6. Pojawi się dialog Edit Filter, tam z lewej strony klikasz w ClientProcessID
  7. Sprawdzasz jaki PID (process identifcator) ma twoja aplikacja, którą chcesz śledzić. Tę informację znajdziesz np. w menadżerze zadań Windows. Poczytaj:
    https://www.windowscentral.com/how-find-out-application-process-id-windows-10
  8. Wracasz do profilera i na formularzu Edit FIlter w drzewku wyrażeń rozwijasz Equals i wpisujesz tam wartość PID aplikacji.
  9. Klikasz OK na formularzu Edit Filters, a jak się zamknie Run na Trace Properties
  10. Klikasz coś w tej aplikacji, aby się dane wybrały/zmieniły/dodały co tam chcesz.
  11. A w profilerze widzisz dokładnie w jaki sposób owa aplikacja działa z bazą danych. Po prostu widzisz polecenia SQL, które wykonuje aplikacja na bazie danych. Tak, jest tam również nazwa bazy danych.

To zadziała zawsze pod warunkiem, że:

  1. Masz odpowiednie uprawniania w SQL Serverze
  2. Twoja aplikacja naprawdę łączy się do bazy danych, a nie do jakiejś usługi pośredniej. Chodzi o to, ze ten mechanizm zadziała tylko i wyłącznie z aplikacją, która posiada bezpośrednie połączenia do SQL Servera.

Ponadto pamiętaj, że śledzenie możesz zawsze zatrzymać i uruchomić na żądanie.
I nigdy nie zostawiaj włączonego profilera na produkcyjnej bazie danych, bo może być mało zabawnie. Nie, nic się nie popsuje, ale wydajność może spaść znacznie. Ale to naprawdę zależy i od aplikacji co ona z bazą danych wyczynia.

I na koniec dla wszystkich - czasem warto zobaczyć w profilerze co jakiś ORM z bazą wyczynia.
Dla kogoś kto na bazach się zna, (prawie zawsze) jest to traumatyczne przeżycie ;-)

2

lub można też wykonać zapytanie:

select p.spid id_sesji, b.name nazwa_bazy, p.loginame nazwa_uzytkownika, 
p.login_time czas_podlaczenia, p.last_batch czas_ostatniej_operacji, 
p.hostname nazwa_hosta, p.[program_name] nazwa_programu
from sys.sysprocesses p inner join sys.databases b on (p.dbid=b.database_id)
where p.[program_name]=N'Aplikacja.exe' /*filtr na nazwę programu*/
order by p.[program_name], p.last_batch, b.name

Edycja:
Nazwa programu nie zawsze musi być nazwą pliku wykonywanego, ponieważ definiując połączenie z MSSQL można przekazać nazwę aplikacji, która nie będzie miała nic wspólnego z nazwą exe-ka, np.
Server=localhost;Database=baza_test;User Id=sa;Password=1pass; Application Name=MoaAplikacja
Można też przy filtrowaniu wykorzystać LIKE.

Zapytanie zwraca aktywnie procesy, więc jeżeli program nie trzyma otwartego połączenia cały czas, tylko: łączy się do bazy, wykonuje zapytanie i zamyka połączenie z bazą, to w czasie gdy nie jest połączony te zapytanie nic nie zwróci. W takim przypadku albo odpytujesz cyklicznie otwarte procesy, albo korzystasz z profilera.

0

@wloochacz:

wloochacz napisał(a):

To zadziała zawsze pod warunkiem, że:

  1. Masz odpowiednie uprawniania w SQL Serverze
  2. Twoja aplikacja naprawdę łączy się do bazy danych, a nie do jakiejś usługi pośredniej. Chodzi o to, ze ten mechanizm zadziała tylko i wyłącznie z aplikacją, która posiada bezpośrednie połączenia do SQL Servera.

@wloochacz:
Dzięki Twoja wypowiedź a największym stopniu pomogła mi rozwiązać problem.

0

@Paweł Dmitruk:
Zwracam honor. Nie sprawdziłem odpowiedniej nazwy uruchomionego procesu. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1