SQL: Uzyskiwanie nazwy instancji SQL w job SQL Agent

2019-04-25

Największą trudnością w automatyzowaniu administracji jest takie napisanie skryptu, które pozwoli uruchamiać dany skrypt w dowolnym środowisku bez modyfikacji.

Tym razem napisałem skrypt w powershellu, który można uruchamiać w jobie SQL Agent. Jedno z zadań tego skryptu było podłączenie się do BIEŻĄCEJ instancji SQL i wykonanie update na tabeli. Po cichu założyłem sobie, że kiedy agent uruchamia job typu powershell i wykonuje polecenie:

Invoke-SQLCmd $query

to połączenie zostanie wykonane do BIEŻĄCEJ instancji. Niestety. Połaczenie było wykonywane do DOMYŚLNEJ instancji. Kiedy więc mój skrypt uruchomił się na instancji nazwanej – dochodziło do błędu Login Failed…

Jest na to rada. Można korzystać z dostępnych zmiennych. W skrypcie powershell dodałem na początku:

$serverInstance = "$(ESCAPE_DQUOTE(SRVR))"

a potem wykonując update na bazie danych:

Invoke-SQLCmd $query -ServerInstance $serverinstance

I znowu wszystko się udało 🙂

SQL: Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server

2019-04-24

A to ci dopiero!

Mój skrypt powinien utworzyć job-y jeden po drugim. Szczerze mówiąc, poszczególne joby zostały wyklikane w interfejsie graficznym, a potem zeskryptowane i połączone w jeden duży skrypt. Poczas uruchamiania tego dużego skrptu pojawiał się błąd:

Msg 14274, Level 16, State 1, Procedure msdb.dbo.sp_add_job, Line 132

Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server.

Kluczowe w tym błędzie są następujące objawy:

  • Tworzenie joba za pomocą osobnego skryptu udaje się bez problemu
  • Tworzenie joba w ramach jednego skryptu kończy się błędem

To jednoznacznie wskazuje, że błąd jest związany z wartością zmiennych, które zmieniają swoją wartość podczas tworzenia pierwszego joba. Szczęśliwie tych zmiennych nie ma za wiele. Dodanie następującej linijki tuż przed procedurą sp_add_job rozwiązało problem:

SET @jobId = NULL

 

By Rafał Kraik in SQL

Powershell – uzyskiwanie nazwy dnia tygodnia

2019-03-29

Chcesz wydobyć z daty nazwę dnia tygodnia? No problem!

Zobacz następujące propozycje:

PS C:\> get-date -format "dddd"
piątek
PS C:\> get-date | select -expand dayofweek
Friday
PS C:\> (get-date).DayOfWeek
Friday
PS C:\> (get-date).ToString("dddd")
piątek

Teraz wynik takiego polecenia wystarczy zapisać do zmiennej i gotowe, np.:

$dayOfWeek =  (get-date).ToString("dddd")
By Rafał Kraik in Power Shell

Kurs MS Excel Tips & Tricks – za darmo przez pewien czas ;)

2019-03-27

Od dzisiaj na platformie Udemy jest dostępny nasz nowy kurs „MS Excel Tips & Tricks

Jak zwykle przez pewien czas kurs jest dostępny za darmo. To takie „dziękuję” za wszystkie porady znajdowane na blogach, forach, filmach w chwili kiedy sam nie potrafię sobie z czymś poradzić.

A co w tym kursie? Dokładny spis treści znajduje się poniżej. Do każdego filmu do dyspozycji jest zadanie do samodzielnego rozwiązania razem z plikami ćwiczeniowymi, jeśli akurat są potrzebne. Jeśli więc masz ochotę – zapraszam do nauki! Czytaj dalej »

By Rafał Kraik in Aktualności

PowerShell: Sprawdzanie i nadawanie użytkownikom praw użytkownika User Rights

2019-03-09

W systemie Windows użytkownicy mogą mieć uprawnienia (do plików, drukarek itp) oraz prawa (do wyłączenia komputera, do zalogowania itp). Tutaj przedstawiam dwie funkcje, które pracują z prawami użytkowników. Pierwsza z nich sprawdza, czy użytkownik ma przyznane prawo, a druga nadaje takie prawo.

Filozofia obu funkcji jest podobna. Polecenie secedit służy do wyeksportowania informacji o przyznanych prawach dla użytkowników oraz do zaimportowania tych informacji. Między eksportem a importem znajduje się trochę typowej PowerShellowej logiki, która sprawdza czy użytkownik ma przypisane prawo czy nie. Czytaj dalej »

By Rafał Kraik in Power Shell

Helpdesk: Nie można usunąć pliku, bo jest otwarty przez inny proces

2019-03-09

Czasami, kiedy chcesz usunąć plik lub katalog, możesz otrzymać komunikat mówiący o tym, że plik nie może być usunięty, bo jest otwarty przez inny proces. No tak, tylko jaki proces otworzył ten plik? Gdybym znał nazwę tego procesu mógłbym go zakończyć – normalnie lub z managera zadań, tylko jak ustalić co to za program?

Oto metoda:

  1. Uruchom program „Resource Monitor”, w tym celu kliknij start i wpisz nazwę resmon
  2. Przejdź do CPU >> Associated Handles i wpisz fragment nazwy pliku lub ścieżki pliku, którego planujesz usunąć
  3. Już za chwilę zobaczysz jakie pliki o nazwie pasującej do wprowadzonego wyrażenia są otwarte i jakie programy je otworzyły:

 

Teraz już wiadomo jaki proces trzeba zakończyć. Zresztą można to zrobić bezpośrednio w tym oknie. Kliknij dany proces prawym przyciskiem myszy i wybierz Zakończ

By Rafał Kraik in Helpdesk

SQL: Jak sprawdzić jakie komponenty są zainstalowane

2019-03-06

SQL Server to nie tylko silnik bazy danych, ale także inne „spokrewnione” usługi. Moim celem było sprawdzenie, czy na serwerze jest zainstalowany replication services.

Metoda na to jest następująca. Odpowiednie narzędzie do tego celu to SQL Server Installation Center. Może się zdarzyć tak, że na serwerze jest dostępnych więcej wersji narzędzi. W takim przypadku należy wybrać tą odpowiednią, w moim przypadku 2016

Tutaj należy przejść do sekcji tools, w której znajduje się link do „Installed SQL Server feature discovery report”. Czytaj dalej »

By Rafał Kraik in SQL