sql >> Databáze >  >> RDS >> Sqlserver

Přestaňte dělat SQL Server vaši špinavou práci

Často vidím "problémy", které zahrnují požadavky na SQL Server, aby prováděl "špinavou práci", jako:

  • Ve spouštěči potřebuji zkopírovat soubor do/ze sítě
  • Moje uložená procedura potřebuje soubor FTP
  • Po dokončení zálohování potřebuji, aby jej SQL Server zazipoval, vytvořil kopii a poté archivoval
  • Když je přidán zákazník, chci vytvořit novou databázi a dělat spoustu věcí ve službě Active Directory
  • Moje úloha SQL Server Agent potřebuje prohledat adresář pro soubory a provést hromadné vkládání, když najde nové

Toto není vyčerpávající seznam; Asi bych mohl zaplnit stránku. Jde o to, že provádění těchto úkolů ze serveru SQL Server představuje značné překážky:

Zabezpečení

Obvykle u čehokoli, kde se domníváte, že SQL Server potřebuje souborový systém nebo jiný přístup na úrovni OS, buď (a) udělíte explicitní práva carte blanche účtu služby SQL Server (a/nebo SQL Agent / proxy účtům), nebo (b) stačí nastavit účty služeb SQL Server tak, aby běžely jako existující doménový účet, který již má všechna tato práva. Toto je „snadné“ řešení – nyní namísto individuálního udělování přístupu k této složce a této sdílené složce a tomuto dalšímu zdroji si jen utřete ruce, protože už jsou správci domény. Dále povolíte nastavení na úrovni serveru, která jsou ve výchozím nastavení zakázána, ale stojí vám v cestě k provedení jednoho nebo více z výše uvedených úkolů (např. xp_cmdshell ).

Myslím, že nemusím vysvětlovat úroveň expozice, kterou tyto akce mohou představovat. Nebo jaké problémy se mohou stát, pokud se jedná o skutečný zaměstnanecký účet a tento zaměstnanec odejde – nebo zjistí, že je nespokojený, než odejdou. Fuj. Viděl jsem několik případů, kdy se pro všechny SQL servery používá společný účet. Hádejte, co se stane, když/když potřebujete změnit heslo pro doménový účet, který aktivně využívají desítky nebo stovky instancí SQL Serveru? Nevadí, jak často se to stane, pokud daného uživatele nevyloučíte ze zásad pro resetování hesla?

Výkon

Kromě problémů se zabezpečením může přechod mimo databázový server způsobit zpoždění, zatímco SQL Server se spoléhá na nějaký externí proces, nad kterým nemá kontrolu. Opravdu musí databázová transakce čekat na komprimaci a zkopírování souboru nebo na dokončení přenosu FTP nebo na odpověď vašeho záložního řadiče domény? Jak se to spojuje, když několik uživatelů provádí podobné úkoly, všichni soutěží o stejnou šířku pásma a/nebo diskové hlavy? Také musíte vzít v úvahu, že jakmile SQL Server řekne nějakému dávkovému souboru, aby něco udělal, pak se obsahující transakce vrátí zpět, nemůžete vrátit zpět externí akci.

Odpověď

Obvykle – a vždy existují výjimky – je odpovědí použít pro tyto úlohy externí procesy, které jsou skutečně externí vůči SQL Serveru. Používejte PowerShell, používejte C#, používejte dávkové soubory; sakra, použij VBScript. Přemýšlejte o tom, které z těchto úkolů je skutečně potřeba zpracovat *okamžitě* a dokud je transakce stále aktivní – tuším, že ne mnoho. Vytvořte pro ně tabulku fronty a zapište do tabulky fronty uvnitř transakce (která bude vrácena zpět, pokud transakce nebude úspěšná). Poté použijte úlohu nebo skript na pozadí, který spotřebovává řádky z tabulky fronty, provádí související úlohy a odstraňuje nebo označí každý řádek jako dokončený. Přidaný bonus:SQL Server Agent zde není vyžadován, takže můžete použít jakýkoli podnikový plánovač a metodika stále funguje s SQL Server Express.


  1. Proměnné rozlišující malá a velká písmena v SQL Server

  2. Proveďte tento dotaz na hodiny provozu v PostgreSQL

  3. Oracle Database Explorer:bezplatné školení a akreditace

  4. Proces upgradu krok za krokem na R12.2 Upgrade část -3