SQL SERVER przydatne skrypty

2024-02-14

Podstawowym narzędziem używanym na serwerze SQL Server jest SQL Server Management Studio (SSMS). Po pewnym czasie korzystania z tego narzędzia zauważymy, że jest to w istocie graficzna nakładka, która generuje kod T-SQL. Innymi dostępnymi narzędziami są PowerShell oraz w nowszych wersjach SQL Servera Python i R. Poniżej zamieszczam kilka skryptów, które mogą ułatwić naszą pracę z serwerem.

Wszystkie skrypty dostępne są na githubie.



Konta Serwisowe

Jak każda aplikacja działająca na komputerze lub serwerze, SQL Server musi być uruchomiony w kontekście określonego użytkownika. Uprawnienia tego użytkownika są wykorzystywane do dostępu do zasobów udostępnionych na serwerze. Może zdarzyć się sytuacja, w której będziemy musieli nadać uprawnienia dla usługi SQL Server do różnych rodzajów zasobów, na przykład udziału sieciowego, aby bezpośrednio zapisywać kopie zapasowe bazy danych lub odczytywać pliki. Aby sprawdzić, które usługi serwera działają w kontekście jakich użytkowników, możemy zalogować się do konsoli MMC (Microsoft Management Console) lub użyć następującego kodu z poziomu serwera:

SELECT servicename, service_account
FROM sys.dm_server_services


IP i Port

Jak już mamy nazwy kont na jakich działają nasze usługi, warto sprawdzić adres IP i porty, ja których słucha nasz serwer baz danych

select distinct local_net_address, local_tcp_port from sys.dm_exec_connections where local_net_address is not null


Zamykanie aktywnych procesów

Locki, spowolnienia systemu i inne sytuacje, w których potrzebujemy zamknąć aktywne procesy w bazie danych, mogą mieć różne przyczyny. Zazwyczaj jednak preferujemy zamknięcie tych procesów w ramach konkretnej bazy danych, aby nie zakłócać innych obecnie wykonywanych zadań. Istnieje wiele sposobów na osiągnięcie tego celu, ale chciałbym przedstawić dwa z nich. Pierwszy jest uniwersalny i jest moją zalecaną metodą, podczas gdy drugi niestety nie jest dostępny w starszych wersjach SQL Servera, takich jak 2008.

Niezależna od wersji:

DECLARE @kill varchar(8000) = ''; 
 CREATE TABLE #sp_who2 (SPID INT,Status VARCHAR(255),
	  Login  VARCHAR(255),HostName  VARCHAR(255),
	  BlkBy  VARCHAR(255),DBName  VARCHAR(255),
	  Command VARCHAR(255),CPUTime INT,
	  DiskIO INT,LastBatch VARCHAR(255),
	  ProgramName VARCHAR(255),SPID2 INT,
	  REQUESTID INT)
INSERT INTO #sp_who2 EXEC sp_who2
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), SPID) + ';'  
FROM #sp_who2
WHERE DBName  = 'NAZWA_BAZY'
EXEC(@kill)
drop table #sp_who2

SQL Server 2012+:

DECLARE @kill varchar(8000) = ''; 
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'  
FROM sys.dm_exec_sessions
WHERE database_id  = db_id('NAZWA_BAZY')
EXEC(@kill)


Dyski i zajętość bazy danych

Najczęstszym problemem z jakim możemy się spotkać w dowolnym momencie życia serwera jest brak miejsca na dane. Rozmiar bazy warto szybko sprawdzić z różnych powodów, a tutaj moja propozycja jak to zrobić:

SELECT DB_NAME(database_id) 'DbName',name logicDisk, physical_name physical_disk, state_desc status, CAST(size/1024 as VARCHAR(MAX))+'MB' currentSize,  
case WHEN max_size <> -1 THEN CAST(max_size/1024 as VARCHAR(MAX))+'MB'
	ELSE 'unlimited'
END  max_size
,CASE WHEN is_percent_growth <> 1 THEN 
	 CAST(growth as VARCHAR(MAX))+'KB'
ELSE CAST(growth as VARCHAR(MAX))+'%'
end growthVal
,case 
	when size > max_size*0.9 AND max_size <> -1 THEN 'Less than 10%'
	when size > max_size*0.8 AND max_size <> -1 THEN 'Less than 20%'
	when size > max_size*0.7 AND max_size <> -1 THEN 'Less than 30%'
	when size > max_size*0.6 AND max_size <> -1 THEN 'Less than 40%'
	when size > max_size*0.5 AND max_size <> -1 THEN 'Less than 50%'
	else 'OK'
	END 'InfoWarning'
FROM sys.master_files
WHERE database_id > 4






Czy masz w głowie pomysł na aplikację, która mogłaby odmienić sposób, w jaki pracujesz? A może masz przed sobą trudny problem i potrzebujesz wsparcia? 
Nie wahaj się! 
Zapraszam do zakładki "Kontakt", gdzie możesz podzielić się swoimi myślami. Razem zastanowimy się, jak możemy przekuć Twoje pomysły w działanie. 
Pamiętaj, że szukanie pomocy to nie oznaka słabości, ale odwagi i determinacji w pokonywaniu wyzwań.