SQL: Gdy śmierć patrzy ci w oczy

2016-03-02

Brzmi groźnie? Śmierć w SQL to DEADLOCK. No więc, co masz zrobić biedny adminie, kiedy uruchamiasz swoje polecenie, które jest oczywiście najważniejsze na świecie, a SQL serwer powiada Ci na to „you have been chosen as a deadlock victim”?

Spróbuj tego:

SET DEADLOCK_PRIORITY HIGH

Mi to życie uratowało 😉

By Rafał Kraik in SQL

Powershell: Uruchomić proces i poczekać aż się skończy

2016-03-02

Skrypty powershellowe są często używane do automatyzacji instalacji oprogramowania na serwerach. Podczas tej instalacji często spotyka się 3 główne kroki:

1. Przygotowanie instalacji, np sprawdzenie czy są obecne inne wymagane komponenty, czy jest wystarczająca ilość miejsca na dysku, czy są odpowienie foldery itp. Na tym etapie również często przekoiowujemy na serwer binaria instalacyjne

2. Właściwa instalacja programu – zazwyczaj uruchomienie batch-a instalacyjnego lub programu setup.exe z odpowienimi parametrami

3. Czynności poinstalacyjne, jak np.: usunięcie plików instalacyjnych, uruchomienie usług, konfiguracja zainstalowanego programu itp.

O ile przejście od kroku pierwszego do drugiego jest proste, bo po wykonaniu wszystkich zadań z kroku 1 przechodzisz po prostu do kroku 2, o tyle moment w którym należy wykonać krok 3 nie jest już taki oczywisty. Krok ten należy wykonać dopiero po zakończeniu pracy instalatora, który nie jest twoim skryptem, ale raczej zewnętrznym programem.

I tu przychodzi z pomocą parametr -Wait, który można używać wraz z poleceniem Start-Process:

Start-Process -FilePath "notepad.exe" -PassThru -Wait

Powyższa instrukcja uruchamia notatnik, ale skrypt zatrzyma się do momentu zakończenia naotatnika. Gdyby to polecenie uruchamiać bez przełącznika -Wait, to proces notatnika również się uruchomi, ale zaraz potem, mimo tego, że notatnik nadal działa, skrypt będzie kontynuwał pracę.  Czytaj dalej »

By Rafał Kraik in Power Shell

SQL: SQL Agent nie startuje, ma focha i nawet nie powie co go boli!

2016-02-16

Zatrzymany SQL Agent – pestka! Start service i po sprawie… Ale co to? Agent nie startuje. Cała sytuacja ma miejsce na clustrze, a w logach zbyt wiele śladów znaleźć nie można:

Cluster resource 'SQL Server Agent’ in clustered service or application '******’ failed.

StartResourceService: Failed to start SQLSERVERAGENT service.  CurrentState: 1

OnlineThread: ResUtilsStartResourceService failed (status 435)

OnlineThread: Error 435 bringing resource online.

Niestety SQLAgent.OUT jest pusty.  Jedno z rozwiązań, kiedy nie wiadomo o co chodzi, jest próba uruchomienia usługi jako administrator. Ponieważ w tym przypadku Agent uruchomił się bez problemu, to przyczyną musi być brak uprawnień. Zazwyczaj chodzi np o brakujące prawo LogOnAsService. Te uprawnienia były jednak nadane. Co pomogło? Czytaj dalej »

By Rafał Kraik in SQL

Powershell: Ładowanie modułu z bieżącego katalogu

2016-02-16

Masz skrypt. Skrypt używa modułu. Podczas instalacji skryptu plik skryptu i moduł zostaną umieszczone w tym samym katalogu. Jak to zrobić, żeby w początkowych linijkach skryptu zidentyfikować w jakim jesteśmy katalogu i załadować z niego moduł?

Proste

import-module .\MyModule.psm1

Nie zadziała, bo .\ oznacza katalog bieżący, który nie musi być zgodny z katalogiem, w którym znajduje się skrypt. Z pomocą przychodzi jednak zmienna $MyInvocation:

$scriptDir = Split-path $MyInvocation.InvocationName -Parent
$modulePath = Join-Path $scriptDir 'MyModule.psm1' 


Import-Module $modulePath

Pierwsza linijka pozwala pobiera ścieżkę do skryptu i wycina z niej tylko katalog.

Druga linijka łaczy nazwę tego katalogu z nazwą modułu

Trzecia linijka ładuje ten moduł.

By Rafał Kraik in Power Shell

Powershell: Dodanie suffix-u do plików w katalogu

2016-02-06

Właśnie wróciłem z ferii zimowych. Dzieci podrosły, same pstrykają zdjęcia, kolejna rola ojca została przejęta przez potomków… Pod koniec jednak trzeba jakoś scalić te paręset zdjęć i podzielić tematycznie…

Pliki miały nazwy w postaci yyyyMMdd hh:mm:ss.jpg (yyyy – rok, MM – miesiąc itd.). Chciałbym przenieść pliki z różnych aparatów do tego samego folderu, ale jeśli zdjęcia były wykonane w tej samej sekundzie, to mam problem, bo ich nazwy są takie same. Rozwiązanie, które mnie zadowoli, to dodanie do plików suffixu np. „TA” – Tato, „MA” – Mama itp. Czemy by nie skorzystać ze złożonego na szybko skryptu:

$dir = 'C:\Users\rafal\Desktop\Tata'
$suffix = '_TA'
$files = Get-ChildItem $dir
foreach($file in $files)
{
     $fileName = $file.BaseName + $suffix
     $extension = $file.Extension
     $newName = "$fileName$extension"
     Rename-Item -Path $file.FullName -NewName $newName
     echo "$newName"

}

Jak już skończyłem, to okazało się, że taką funkcjonalność ma mój program graficzny…

By Rafał Kraik in Power Shell

Szkolenie Powershell dla administratora Windows – promocja

2016-01-31

Szkolenie Powershell dla administratora Windows jest do końca marca 2016 dostępne w obniżonej cenie, około 15 €.

W celu aktywowania zniżki podczas zakupu kliknij „Redeem a coupon” i wpisz „FERIE”.

Kurs_powershell_landscape_620

Na Udemy jest też dostępne szkolenie wprowadzające do SQL. Celem szkolenia jest wprowadzenie w SQL, w tym:

  • Uproszczona instalacja SQL Server
  • Instalacja przykładowej bazy danych
  • Korzystanie z SQL Server Management Studio (SSMS)
  • Korzystanie z SQL Configuration Manager
  • Korzystanie z solucji i projektów w SSMS
  • Przegląd pojęć związanych z relacyjną bazą danych
  • Wprowadzenie do SQL Azure.

Szkolenie jest dostępne za darmo. Kolejne szkolenia na ten temat też niedługo się pojawią. Zapraszam!

Kurs_sql#1_landscape_620

By Rafał Kraik in Aktualności

PowerShell: Ludzie używajcie StrictMode!

2016-01-20

Załóżmy, że masz skrypt. Prawie gotowy. Postanawiasz go trochę przerobic i zmieniasz nazwy kilku zmiennych. Sprawdzasz, skrypt wydaje się działać. Super!

Jednak w pewnym momencie… dziwne błędy… tak jakby zmienne nie miały wartości, czy coś!!!

Bardzo częsta przyczyna takiej sytuacji to… skleroza. Nie zauważyłeś, że zmienna jednak w skrypcie jeszcze gdzieś występuje, albo może wpisując nazwę zmiennej zrobiłeś drobną literówkę.

Proponuję następujące rozwiązanie. Dodaj na początku skryptu:

Set-StrictMode -Version Latest

Spowoduje to, że ilekroć odwołasz się do niezdefiniowanej zmiennej (np takiej zapomnianej podczas zmian lub z przekręconą nazwą) to skrypt wysypie się z błędem. Powiesz jak to? Opcja ma być fajna bo będzie błąd!? Tak! Bo zobacz jaki to fajny błąd:

The variable '$SQLUser’ cannot be retrieved because it has not been set.

Aaa…. czyli już wiadomo o co chodzi. Błędem jest to, ż echcesz użyć zmiennej, której wcześniej nie nadałeś wartości. Taki błąd łatwiej naprawić, niż szukać „a dlaczego to nie udało mi się zalogować do serwera SQL…”.

Opcja -version latest powoduje, że sprawdzane są zmienne użyte w różnych sytuacjach (np w napisach). Domyślnie Powershell nie krzyczy na autora, jeżeli używa niezainicjowanych zmiennych, co jest całkiem fajne na początkowym etapie nauki PowerShella. W przytczonym przykładzie działanie opcji Set-StrictMode pomogło mi wychwycić kilka błędów, które z czasem na pewno by się na mnie zemściły.

By Rafał Kraik in Power Shell