Command-line SQL… install vagy amit akartok

Hogy legyen valami kis SQL is a blogomon, megosztom veletek egyik aktuális kedvencemet. (Be kell valljam, hogy alapból nem értek jobban a SQL Serverhez egy átlag foltos tengerimalacnál, de mindig találok valami érdekeset benne, azt elolvasom, aztán akkor abból okos vagyok egy hétig vagy kettőig. De ezt ne mondjátok meg az MS-nek:) Mint visszatérő olvasóim tudják, élek-halok a parancssoros-begépelős-villogókurzoros üzemeltetésért, néha sehogysem értem, hogy hagytam ott a Linuxot fiatalkoromban (aztán mindig eszembe jut, hogy azért, mert X-et két nap alatt tudtam csinálni, hangot meg sohasem a RH7 alatt). És kérem, az SQL Serverben vannak dolgok, amik csak gépeléssel érhetőek el. SQL-t installállni lehet GUI-ból és CLI-ből is – na de editiont upgrade-elni, vagy automatikusan installálni csak parancssorból lehet. Mivel folyton 100 dolgot csinálok, nekem kényelmesebb egy cluster úgy installázni, hogy a fekete ablakba bepötyögöm (vagy copy-paste a BOL-ból):

Start /wait X:\servers\setup.exe /qn VS=<vsname> INSTALLVS=SQL_Engine INSTANCENAME=<instancename> ADDLOCAL=SQL_Engine,Client_Components PIDKEY=<pidkey value with no "-"> ADDNODE=<nodename1 ,NodeName2> GROUP=<diskgroup> IP=<ip ,Networkname> ADMINPASSWORD=<strongpassword> SAPWD=<strongpassord> INSTALLSQLDIR=<installationpath> INSTALLSQLDATADIR=<sharedrivepath> SQLACCOUNT=<domain \user> SQLPASSWORD=<domainuserpassword> AGTACCOUNT=<domain \user> AGTPASSWORD=<domainuserpassword> SQLBROWSERACCOUNT=<domain \user> SQLBROWSERPASSWORD=<domainuserpassword> SQLCLUSTERGROUP="MyDomain\MySQLDomainGroup" AGTCLUSTERGROUP="MyDomain\MyAGTDomainGroup" FTSCLUSTERGROUP="MyDomain\MyFTSDomainGroup" ERRORREPORTING=1, SQMREPORTING=1 SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS

Aztán elmegyek ebédelni, és nem klikkelgetek húsz percet, mire eljutok az installhoz. De nem is ez a legjobb rész benne, hanem az, hogy a cluster install amúgy is szívás: install szerver+kliens az aktív node-ra, majd install kliens (+SSIS) a passzív node-(ok)ra. Minden hotfixnek is ugyanúgy le kell mennie az összes node-ra, mert a nem patchelt kliens cucc az egyik leggonoszabb veszélyforrás. Nem értjük, hogy miért nem működik, pedig jól összekattogtattuk. Ja, a kliens RTM, és rossz queryt futtat a háttérben…

Szóval a lényeg, hogy letolhatom az installt szinte-szinte automatában így scriptelve, megdöbbentően sok paramétert be lehet állítani, soha nem hittem volna, hogy ilyen agyrémek vannak, mint Management Studio shortcut rebuild meg effélék. Az edition upgrade viszont még nagyobb móka volt, konkrétan egy Evaluationt kellett Developerré növesztenem. Össze is raktam a cuki kis parancsot, bedobtam minden elvárt paramétert, aztán mindig elkezdett kérdezgetni, hogy akkir itt az interaktív rész, mondjam meg az instance nevét meg effélék. Némi gondolkodás után sem jöttem rá, hogy ezt most pebkac vagy anti-user-friendly megoldás: van két kapcsoló az installerhez: a /qb basic dialógus ablakokat és hibákat feldob, a /qn pedig semmit, még hibát se. Úgy hal meg, hogy a logba írja, miért tette. Na, én /qb-vel elindultam, és sorban megakadtam. Végül megpróbáltam /qn-nel, és tovább jutottam. Egész eddig:

SQL Server Setup has encountered the following problem: [Microsoft][SQL Native Client][SQL Server]The certificate cannot be dropped because one or more entities are either signed or encrypted using it.. To continue, correct the problem, and then run SQL Server Setup again.

At is mondta persze, hogy A certificate with the name ‘##MS_AgentSigningCertificate##’ already exists or it has already been added to this database. Néztem, mint Rozi a filmszínházban. Irány a gugli (vagy a bing, összevissza használom őket, általában pontosan az egyik keres kedvem szerint), és íme, a megoldás egy fórumban: le kell futtatni egy kis scriptet, és újra megpróbálni:

use msdb

BEGIN TRANSACTION

declare @sp sysname
declare @exec_str nvarchar(1024)
declare ms_crs_sps cursor global for select object_name(crypts.major_id) from sys.crypt_properties crypts, sys.certificates certs where crypts.thumbprint = certs.thumbprint and crypts.class = 1 and certs.name = '##MS_AgentSigningCertificate##'

open ms_crs_sps

fetch next from ms_crs_sps into @sp

while @@fetch_status = 0

begin
 if exists(select * from sys.objects where name = @sp) 
 begin 
  print 'Dropping signature from: ' + @sp set @exec_str =   N'drop signature from ' + quotename(@sp) + N' by certificate [##MS_AgentSigningCertificate##]'
  Execute(@exec_str)
  if (@@error <> 0)
  begin
   declare @err_str nvarchar(1024)
   set @err_str = 'Cannot drop signature from ' + quotename(@sp) + '. Terminating.'
   close ms_crs_sps
   deallocate ms_crs_sps
   ROLLBACK TRANSACTION
   RAISERROR(@err_str, 20, 127) WITH LOG
   return
  end
 end
fetch next from ms_crs_sps into @sp
end

close ms_crs_sps
deallocate ms_crs_sps
COMMIT TRANSACTION
go

A homlokomra csaptam: hogy ez hogy nem jutott eszembe magamtól! És ezután már le is futott az edition upgrade. Mndenféle emberi beavatkozás nélkül. Kocka…

Valami véget ért…

Kedves Mindenki!

Mint sokatoknak feltűnt, az utóbbi időben nem írtam túl sokat. Ez annak volt köszönhető, hogy kissé sűrű volt az élet a munkahelyemen, és összes tartalék kreativitásomat abba kellett ölnöm. Ezért kissé el is hanyagoltam a blogolást meg fórumozást meg efféle földi hívságokat.

De a büntetés engem is utolért, papíron ki lettem taszítva a teki társadalomból. A desktop supportos – rendszermérnök – (senior?) DBA – Senior DBA – Team Lead & DBA Expert ív most egy Infrastructure Operations Manager titulusnál állomásozik. Remélem nem zárul le, bár nagyon szeretem a jelenlegi helyemet (tényleg, nem nyalásból írom, egy főnököm sem tud magyarul, a beosztottak meg úgyis tudják az igazságot :). Ez viszont magával hozza azt a kellemetlen tényt, hogy egy lépéssel távolabb kerülök a szakma kétkezi részétől, habár a mi részlegünkön van hagyománya a munkás menedzsernek: az egyik routert konfigurál és projektort szerel, a másik meg logot elemez, hibát keres (és talál), és konfigfájlokat pucol. Asszem én jó harmadik leszek :) Amit a legjobban élvezek, az az, hogy nem leszek többet on-call, amit kevésbé, az az, hogy tulajdonképpen mindig az leszek (bár senki nem bánt, ha nem érnek el munkaidőn kívül).

Ezt a postot most nem tudom, hogy miért is írtam. Asszem leginkább csak dicsekedni akartam, mert sajnálni tuti hogy senki nem fog :P

Üzemeltetés belülről

(Ez a post afféle “írok ki a fejemből mindenfélét” jellegű lesz.)

Az üzemeltetés külön állatfajta az informatikán belül, már ha komolyan csinálják. Senkit nem akarok megsérteni, de az üzemeltetés szerintem ott kezdődik, hogy létezik az üzembiztonság, tehát a “van pár szerverünk, amit én frissítek, meg indítok újra, ha kell, meg adminisztrálok” szerintem nem üzemeltetés, amíg nincs BIZONYÍTOTTAN HASZNÁLHATÓ, RENDSZERES mentés a szerverről, és valamiféle monitorozás. Bizonyítottan használható az, hogy csak a mentés segítségével fel tudok állítani egy új rendszert, ami használható a régi helyett, legalább a fő funkciók tekintetében (ezt majd egyszer kifejtem külön). Ha még ennél is picit feljebb akarom tenni a lécet, akkor azt mondom, hogy ha valamit csinálok, akkor tudom, hogy hogyan tudok visszajutni a kiindulási állapotba (az a bizonyos rollback nem véletlenül szerepel a lap tetején nagy betűkkel). Ez természetesen időnként úgy hangzik, hogy “fogom a backupot a, és visszatöltök mindent nulláról” – lehet ez is egy jó válasz, de ha mindig ez a válasz, az elég gyanús… Continue reading ‘Üzemeltetés belülről’ »

SQL DBA WANTED!

Kihasználva, hogy a Technet után talán megnézi valaki a blogomat, ide is kiteszem az álláshirdetést :)
MSSQL adatbázis adminisztrátort keresek,
jó közepes tudással, némi szakmai tapasztalat nem árt, de én többre értékelem azt, ha tudja az ember egy év munka után, hogy mitől megy az SQL, mint ha valaki már 12 éve dolgozik releváns területen, de lövése nincs arról, hogy mi van az Enterprise Manager mögött. Apró kellemetlenség: angolul tudni kell, legalább olyan szinten, hogy az ember megértesse magát telefonban, ahol mutogatni nem lehet, de nem kell perfekt angolnak lenni. Ha valakit érdekel, pingeljen meg, és elmesélem a többit :)