The SQL Server Agent service terminated unexpectedly. It has done this 37892 time(s).

Counter se nám docela slušně rozběhl, služba SQL Agent se neustále automaticky restartovala, a všechny plánované úlohy přestaly fungovat – jako popis problému od zákazníka je to i poměrně dostatečné množství informací, často pracujeme s mnohem méně informacemi.

Celý problém ležel úplně jinde, jen se trochu hůř hledal. Agent se spustil a vypnul, a tak pořád dokola. V SQL Error logu nebyla žádná chyba, v agent logu taky ne, v Event logu byla pouze informace o službě, která se neočekávaně vypnula. Velkou výhodou v tuto chvíli bylo spuštění SQL agenta přes příkazovou řádku, v tu chvíli se totiž objevil zdroj všech problémů – PowerShell a poslední Windows Update. Jedná se o dva update, které způsobily problém a to KB3163245 a KB3163251. Po jejich instalaci nebylo možné spustit PowerShell, a protože SQL Server Agent obsahuje i PowerShell subsystém, tak pád PowerShell sebou nesl i pád celé služby SQL Agenta.

Reinstalace obou update vyřešila problém a SQL Agent funguje bez problémů.

PowerShell

Služba MSSQL nestartuje – chyba network library a inicializace SSL

Ale kdeže, na SQL nebylo SSL vůbec použité.

Ale schválně, co v tom tedy hledat

TDSSNIClient initialization failed with error 0x80092004, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. Cannot find object or property. TDSSNIClient initialization failed with error 0x80092004, status code 0x80. Reason: Unable to initialize SSL support. Cannot find object or property.

Celý problém spočívá v účtu pro běh SQL služby, který byl právě měněn. Účet jako takový byl naprosto v pořádku, jen bohužel přihlášení k tomuto účtu někdy dříve nefungovalo a byl tomuto účtu přiřazen dočasný windows profil. Tento profil už v systému zůstal a pokaždé se tento účet přihlásit do dočasného profilu a v takovém případě služby MS SQL serveru nenastartují. Stačí tedy smazat dočasný profil v nastavení počítače a je hotovo.

profily

 

 

Příliš nízká hodnota maxservermemory

Nešťastnou náhodou se povedlo nastavit maximální pamět SQL serveru na hodnotu 240. Je třeba si uvědomit, že parametr pro uloženou proceduru sp_configure je třeba zadávat v MB a ne v GB. Jednalo se o server, který měl paměti opravdu dostatečně – 256GB. Bohužel s takovýmto nastavením služba SQL Server nenaběhne, vždyt se podařilo nastavit, že může používat maximálně 240MB. Není podstatné, jak se změnil memory manager mezi verzemi, tato hodnota je natolik nízká, že službu není možné pustit.

Nezbývá než v takovém případě je potřeba použít jeden ze startup parametrů -f, který umožnuje start služby s naprosto minimální konfigurací. I v tomto případě je možné se připojit přes Management Studio, pokud se Vám nechce pracovat přes příkazovou řádku, a nastavit správnou hodnotu pro max server memory. Po odstranění parametru a restartu služby už funguje vše v pořádku.

Mizející databáze MSSQLSystemResource

Každá instance SQL Serveru má svoji vlastní databázi MSSQLSystemResource, která je umístěná přímo ve složce SQL Serveru společně s aplikačními soubory .exe

Tato databáze je nutná pro start a konfiguraci serveru, její obsah si probereme v některém z delších článků, a je tedy velice důležité, aby tato databáze byla v pořádku. Bohužel některé instalace oprav jako jsou Service Pack a Cummulative updates mají schopnost při své instalaci tuto databázi smazat!!

Nemáte-li zálohu této databáze, je možné tyto dva soubory (mdf a log) zkopírovat z jiného SQL serveru. Musíte pouze pohlídat, že se jedná o stejnou verzi / edici a service pack, případně cummulative updates a sql security hotfixes.

Zrádné limity SQL Agenta

Při vytváření plánovaných úloh v SQL Agentovi je nutné zvolit rozumné jméno úlohy a každého kroku. V extrémních případech je bohužel zvoleno jméno příliš dlouhé, proti čemu samotný agent nikterak neprotestuje … dokud se nechcete podívat na jednotlivé úlohy nebo na activity monitor. Nepomůže ani nejnovější verze SQL Management Studia, která má se zobrazením plánované úlohy, jejíž jméno je delší než 128 znaků, problém.

Jednoduché řešení
Pomocí UPDATE příkazu manuálně upravit jméno úlohy a případně jednotlivých kroků a vše opět funguje.

Replikace a recovery model

Transakční replikace pro svoji správnou funkci nepotřebuje full recovery režim u jednotlivých databází. Může se to zdát divné, protože simple recovery režim využívá jednodušší správu transakčního logu, kdy dokončené transakce nejsou zachovávány v logu a jsou vymazány. Při zapnutí transakční replikace jsou tyto transakce z logu vymazány až poté, co jsou překopírovány do distribuční databáze a označeny jako replikované.

Proces, který se stará o kopírování transakcí do distribuční databáze se jmenuje log reader a společně se zapnutím transakční replikace zajišťuje, že log nebude čištěn, dokud nejsou transakce replikovány.

Chyba 0x84B10001 z instalace service pack na SQL 2008 R2

Další zajímavá situace z probíhajícího patch procesu. Při instalaci hotfixu MS14-044 pro SQL se při jeho instalaci objevuje chybová hláška

TITLE: SQL Server Setup failure.

——————————
SQL Server Setup has encountered the following error:
Configuration system failed to initialize
Error code 0x84B10001.

Popis chyby není zrovna nejkošatější, a stejná chyba se objevuje s instalací service pack, který by tento hotfix obsahoval. Řešení bylo poměrně zajímavé, stačilo přepsat nebo upravit machine.config soubor v cestě C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config

A problém byl vyřešen.

Zálohování databází do Windows Azure

Zálohování databází do Windows Azure

Zálohování databází je běžnou součástí správy databázového serveru. V nové verzi SQL Serveru 2014 je možné zálohovat databáze nejen na disky, ale i do úložiště Windows Azure a využít tak „cloud storage“ pro uložení záloh databází.

clip_image001

U starších verzí SQL serveru tato možnost není nativně nabízena, ale Microsoft má k dispozici nástroj „Microsoft SQL Server Backup to Azure Tool“, který po instalaci tuto možnost emuluje. Backup to Azure dává možnost zálohovat databáze do Windows Azure pro SQL server jakékoli verze a edice. Jedná se o velmi malý nástroj, dostupný jak pro 32 tak to 64bitový systém. Po instalaci zbývá pouze velmi jednoduchá konfigurace, ve které je nutné zvolit jaké lokální cesty má tento nástroj monitorovat a jaké soubory v těchto cestách má považovat za zálohy SQL databází.

Continue reading

Seriál o replikaci na SQL Serveru 2012 – II. Díl

V prvním díle seriálu o SQL replikaci jsme si popsali snapshot replikaci a možnosti jejího nastavení na SQL Serveru 2012. V dnešním díle se budeme zabývat transakční replikací.

V prvním díle seriálu o SQL replikaci jsme si popsali snapshot replikaci a možnosti jejího nastavení na SQL Serveru 2012. V dnešním díle se budeme zabývat transakční replikací. Transakční replikace začíná zpravidla pomocí snapshotu z publikovaných dat. Následně každá změna v datech nebo schématu na publisher serveru je synchronizována na subscriber v reálném čase a ve správném pořadí v jakém tyto změny probíhaly na publisher serveru (tím je udržena transakční konzistentnost mezi publisher a subscriber servery).

Continue reading

Seriál o replikaci na SQL Serveru 2012 – I.

Prvním dílem začíná další seriál o technologiích dostupných v SQL Serveru, tentokráte se zaměřením na replikace.

Existují tři základní druhy replikací, a všechny mají stejný cíl. Tímto cílem je duplikace dat. Nejčastěji vytváříme další kopii dat pro reporting, zálohu, ale může být využíta i pro tzv. scale-out scénář pro zvýšení výkonu. Kopie dat může být vytvořena ve stejné databázi, na stejném serveru nebo klidně ve vzdáleném datacentru. Kopie dat mohou být synchronizovány v daných intervalech, nebo udržovány v neustálé synchronizaci. Máme možnost zvolit a konfigurovat replikaci jako jednosměrnou, z jednoho serveru na druhý, nebo i obousměrnou pro přenos a synchronizaci z obou serverů.

Continue reading