Mam kilka standardowych instrukcji SQL, które uruchamiam na wielu bazach danych na jednym serwerze, aby pomóc mi zdiagnozować problemy:
select
so.name,
so.type,
MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,
@@ServerName as Server,
DB_Name() as DBName
from
sysobjects so with (nolock)
join syscomments sc with (nolock) on so.id = sc.id
where (sc.text like '%emote%')
group by so.name, so.type
order by so.type, so.name
Jak mogę to zrobić dla wszystkich baz danych na jednym serwerze? (oprócz ręcznego łączenia się z jednym na raz i wykonywania)
sql-server
Andrew Bickerton
źródło
źródło
Odpowiedzi:
sp_MSForEachDB
Jedną z opcji jest sp_MSForEachDB . Jest to nieudokumentowane, ale mimo to przydatne
Wyszukiwanie interwebs zawiera również wiele innych przykładów
Uwaga: Będąc nieobsługiwaną funkcją (zawierającą znane błędy) możesz napisać własną wersję (dzięki @Pradeep)
Powyższy przykład SQL musiałby zostać zrestrukturyzowany jako:
UWAGI:
źródło
, ''?'' AS DBName
do dowolnej instrukcji select. Jak na moim przykładzieTylko moje 0,05 $: SQL Multi Script (wykonywanie wielu skryptów na wielu serwerach SQL).
źródło
Pakiet narzędzi SSMS robi to ładnie i jest bezpłatny dla serwerów baz danych przed 2012 rokiem. Funkcja: „Uruchom na wielu obiektach docelowych” - http://www.ssmstoolspack.com/Features?f=6
źródło
Istnieje kolejna metoda, która da wynik w jednym częściowo połączonym zestawie wyników. Najpierw otwórz Zarejestrowane serwery i utwórz nową grupę w Lokalnych grupach serwerów, a następnie zarejestruj swój serwer raz dla każdej bazy danych, w każdym przypadku ustawiając domyślną bazę danych na żądaną.
Po zakończeniu kliknij prawym przyciskiem myszy swoją grupę i wybierz Nowe zapytanie. Okno zapytania, które zostanie otwarte, będzie miało „wiele”, w których normalnie zobaczysz nazwę serwera na pasku stanu. Wszelkie zapytania uruchomione w tym oknie będą działać na każdym zarejestrowanym serwerze, który był w grupie. Pierwsza kolumna wyników będzie nazwą zarejestrowanego serwera. Zestaw wyników zostanie pofragmentowany według tej pierwszej kolumny, a kolejność według woli będzie działać tylko w obrębie tego fragmentu.
Bardzo potężny, ale przeoczony element funkcjonalności, gdy rutynowo musisz uruchamiać ten sam SQL na wielu serwerach.
źródło
Moja firma opracowała narzędzie o nazwie xSQL Script Executor . Jest bezpłatny do użytku osobistego, a dla mnie bardzo ułatwia wdrażanie skryptów na wielu obiektach docelowych.
źródło
Opracowałem to narzędzie: https://github.com/andreujuanc/TakoDeploy
Nadal piszę na nim kilka wierszy, ale do tej pory jest dość stabilny. Użyłem go przeciwko produkcyjnym bazom danych i działa jak urok.
źródło