V administraci databázových serverů je kladeno stále větší důraz na automatizaci, která dokáže optimalizovat procesy a snížit chybovost. Základním nástrojem pro implementaci automatizovaných postupů je práce s metadaty, která obsahují veškeré informace o struktuře databáze a jejích objektech. Tento přístup je obzvláště důležitý, pokud chceme nejen udržovat výkon databáze na vysoké úrovni, ale i zabezpečit její správu podle definovaných politik.

Pro optimalizaci výkonu databáze a správu indexů je klíčové pravidelně provádět údržbu indexů. Například pomocí skriptů, které automaticky generují SQL příkazy pro obnovení indexů, můžeme zajistit, že nebudou ignorovány fragmentace, které mohou zpomalit výkon dotazů. V tomto případě se používá skript, který sestavuje příkazy typu ALTER INDEX REBUILD pro každý index, který má více než 25% fragmentace na listové úrovni. Tento skript používá funkci sys.dm_db_index_physical_stats, která získává informace o fyzickém stavu indexů, a spojuje je s tabulkami sys.indexes, sys.objects a sys.schemas, aby správně získal názvy indexů a schémat.

Tento přístup umožňuje automatizovaně udržovat databázi bez nutnosti ručního zásahu administrátora, čímž se minimalizuje riziko opomenutí kritických operací údržby a optimalizace. Využívání metadat tímto způsobem má významný přínos v rozsáhlých databázových systémech, kde ruční správa každého jednotlivého indexu by byla časově náročná a náchylná k chybám.

Kromě výkonu je ale nutné věnovat pozornost i správě bezpečnosti. Například funkce jako xp_cmdshell, která umožňuje vykonávat příkazy operačního systému z prostředí SQL Serveru, je často považována za potenciální bezpečnostní riziko. I když některé administrátorské týmy argumentují, že přístup k této funkci by měl být omezen pouze na důvěryhodné uživatele, vždy je lepší, pokud je tato funkce zakázána, zejména v souladu s bezpečnostními standardy, jako jsou CIS (Center for Internet Security). Skripty pro kontrolu a deaktivaci této funkce mohou být pravidelně spouštěny, aby zajistily, že se nezmění žádná nastavení, která by mohla ohrozit integritu systému. Příkladem může být PowerShell skript, který kontroluje, zda je xp_cmdshell povoleno, a pokud ano, vypne tuto funkci.

Správa konfigurace SQL Serveru prostřednictvím nástrojů jako je PowerShell nebo SQL Server Management Studio (SSMS) se stává důležitým nástrojem pro zajištění souladu s firemními politikami a bezpečnostními standardy. V praxi může být například potřeba automatizovaně deaktivovat funkce, které jsou považovány za nebezpečné, nebo nastavit konfigurace, které podporují požadavky na výkonnost a bezpečnost.

V souvislosti s konfigurací serveru je vhodné zmínit i rozhraní sp_configure, které poskytuje možnost změny různých nastavení serveru. Některá z těchto nastavení, jako například "max degree of parallelism" nebo "query wait", mají přímý dopad na výkon SQL Serveru, a je tedy důležité je konfigurovat v souladu s požadavky provozu a požadovaným výkonem. K tomu se hodí znalost nejen samotných možností konfigurace, ale i jejich vzájemného vlivu, což je klíčové pro dosažení optimálního výkonu a stability.

Správa SQL Serveru tedy není pouze o monitorování výkonu a provádění rutinní údržby. Je to také o zajištění správného nastavení všech aspektů serveru, od bezpečnosti po výkonnostní parametry, které jsou nezbytné pro dlouhodobý a efektivní běh systému. V tomto kontextu se metadaty stávají mostem, který propojuje jednotlivé aspekty správy a automatizace, a umožňuje efektivně reagovat na změny a potřeby databáze.

Z tohoto pohledu je pro každého správce databáze důležité nejen chápat technické detaily správy metadat a skriptů, ale i rozumět tomu, jak tato automatizace může usnadnit a zefektivnit jeho každodenní práci. Správné nastavení politik a jejich vynucování v praxi, ať už pomocí metadat, nebo skriptů, je klíčem k bezproblémovému a bezpečnému provozu databázového systému.

Jak spravovat připojené servery v SQL Server pomocí DSC a PowerShellu?

Při implementaci správy konfigurace pro SQL Server pomocí PowerShell DSC (Desired State Configuration) je důležité mít správně nastavené prostředí a definované požadavky pro všechny související zdroje. Tento proces zahrnuje nejen instalaci a konfiguraci SQL Serveru, ale také integraci s jinými servery a zajištění správného propojení prostřednictvím „linked servers“. Pro tento účel se často používají pokročilé skripty, které běží na SQL Serveru a zajišťují jeho správu bez manuálního zásahu.

Jedním z důležitých kroků při konfiguraci SQL Serveru je správné nastavení připojení k centrálnímu serveru, což umožňuje provádět dotazy proti hlavnímu serveru pro správu. Bohužel v modulu SqlServerDsc neexistuje specifický zdroj pro správu připojených serverů, a proto je nutné použít pokročilý zdroj SqlScriptQuery, který umožňuje definovat vlastní skripty pro operace Get, Test a Set.

Skripty pro tento proces se skládají z několika částí, počínaje skriptem pro zjištění, zda již daný server existuje, pokračující testovacím skriptem pro ověření, že server je v katalogu sys.sysservers, a konče skriptem pro nastavení propojeného serveru. Každý skript musí být napsán ve formátu T-SQL a měl by zahrnovat základní funkce pro správu těchto serverů.

První částí tohoto procesu je skript pro získání dat, který ověřuje existenci propojeného serveru v katalogu SQL Serveru. Příklad skriptu pro získání názvu serveru z katalogu sys.sysservers je následující:

sql
SELECT srvname
FROM sys.sysservers WHERE srvname = 'CENTRALMGMT' FOR JSON AUTO

Tento skript hledá server s názvem CENTRALMGMT a vrací výsledek ve formátu JSON, což umožňuje další zpracování v PowerShell DSC. Tento skript zajišťuje, že propojený server existuje a je k dispozici pro další dotazy.

Další částí procesu je testovací skript, který ověřuje, zda server existuje. Pokud server není nalezen, skript vrátí chybu. Tento testovací skript je napsán následovně:

sql
IF (SELECT COUNT(srvname) FROM sys.sysservers WHERE srvname = 'CENTRALMGMT') = 0 BEGIN RAISERROR ('Did not find the CENTRALMGMT linked server', 16, 1) END ELSE BEGIN PRINT 'Found the CENTRALMGMT linked server' END

Tento skript provádí jednoduché ověření přítomnosti serveru. Pokud server neexistuje, vrátí chybovou hlášku, jinak pouze informuje o jeho přítomnosti.

Poslední částí je skript pro nastavení propojeného serveru, který využívá systémové uložené procedury sp_addlinkedserver a sp_addlinkedserverlogin. Tyto procedury přidávají propojený server a nastavují autentizaci pro přístup k němu. Skript vypadá následovně:

sql
USE master GO EXEC master.dbo.sp_addlinkedserver @server = 'CENTRALMGMT', @srvproduct='SQL Server' GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = 'CENTRALMGMT', @locallogin = NULL, @useself = 'True' GO

Tento skript přidává nový propojený server a konfiguruje přihlášení pro autentizaci. Pokud je vše správně nastaveno, uživatelé budou moci spouštět dotazy proti propojenému serveru s použitím bezpečnostního kontextu toho, kdo dotaz spustil.

Pro implementaci těchto skriptů v prostředí PowerShell DSC je nutné použít pokročilý zdroj SqlScriptQuery, který vám umožní definovat výše uvedené skripty pro operace Get, Test a Set. Parametr QueryTimeout specifikuje maximální dobu, po kterou může každý skript běžet, než dojde k vypršení času.

powershell
SqlScriptQuery 'CentralMgmtLinkedServer' { Id = 'CentralMgmtLinkedServer' ServerName = 'localhost' InstanceName = $SqlInstanceName GetQuery = @' SELECT srvname FROM sys.sysservers WHERE srvname = 'CENTRALMGMT' FOR JSON AUTO '@ TestQuery = @' IF (SELECT COUNT(srvname) FROM sys.sysservers WHERE srvname = 'CENTRALMGMT') = 0 BEGIN RAISERROR ('Did not find the CENTRALMGMT linked server', 16, 1) END ELSE BEGIN PRINT 'Found the CENTRALMGMT linked server' END '@ SetQuery = @' USE master GO EXEC master.dbo.sp_addlinkedserver @server = 'CENTRALMGMT', @srvproduct='SQL Server' GO EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = 'CENTRALMGMT', @locallogin = NULL, @useself = 'True' GO '@ QueryTimeout = 30 }

Tento zdroj spustí skripty pro zajištění požadovaného stavu propojeného serveru a monitoruje jeho stav na základě definovaných kritérií.

Při vytváření takovýchto konfigurací v PowerShell DSC je kladeno důraz na správné pořadí zdrojů a jejich závislosti. Například, pokud máte zdroj pro správu SQL Serveru, je nezbytné, aby byl tento server aktivní, než se spustí jakýkoli jiný konfigurační skript. Také je nutné správně nastavit závislosti mezi různými moduly a skripty tak, aby každý krok byl proveden ve správném pořadí.

Endtext