SQL Service Broker: The message could not be delivered because….

2017-09-12

Service Broker to fantastyczne rozwiązanie na pokładzie platformy SQL, o ile działa….

W moim przypadku wysłanie komunikatu ze instancji A do B kończyło się tym, że w sys.transmission_queue na „A” nie był logowany żaden bład, ale wiadomość nie była wysyłana.

No cóż – trzeba było włączyć profiler (najlepiej po obu stronach i analizować).

Na instancji B nie było tak źle. Widać było, że komunikaty chodzą, ale… się dublują i generalnie wszystkie były odrzucane jako duplikaty:

This message could not be delivered because it is a duplicate.

Ten komunikat mówi mniej więcej tyle, że taka wiadomość już raz do instancji B dotarła, ale z jakiegoś powodu nie udało się jej potwierdzić. Najczęściej jest to związane z niepoprawnie ustawionym routingiem. Dla przypomnienia:

  • należy zdefiniować w bieżącej bazie danych route do zdalnego serwisu
  • oraz w bazie msdb lokalny routing dla lokalnego serwisu

Jednak dlaczego nie można potwierdzić otrzymania komunikatu? Mój routing był ustawiony dobrze! Odpowiedź udało się znaleźć w profilerze na instancji A. Pełny komunikat o błedzie to:

The message could not be delivered because it could not be classified. Enable broker message classification trace to see the reason for the failure.

O jaką klasyfikację chodzi? To się udało odczytać w kolejnej pozycji wyłapanej przez profilera:

Event Class „Broker:Message Classify”

Lokalnego routingu nie można było przeczytać, bo service broker w bazie danych msdb był wyłączony…. rzeczywiśce parę godzin wcześniej musiałem na tej instancji odtworzyć bazę msdb i przy tej okacji flaga BROKER_ENABLED została wygaszona. Wystrczyło włączyć brokera na bazie msdb na instancji A i komunikacja Service Brokera ruszyła z kopyta!

By Rafał Kraik in SQL

Powershell: praca z rejestrem HKEY_CLASSES_ROOT

2017-09-10

Z powershellem można wszystko! Czy aby na pewno? Program regedit.exe pozwala edytować cały rejestr, podczas gdy w powershellu dostępne są tylko dwie części:

  • HKLM
  • HKLU

A co z HKEY_CLASSES_ROOT? Nie można? Da się!

Wykorzystaj do tego polecenie New-PSDrive:

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
By Rafał Kraik in Power Shell

Powershell: sprawdzanie, czy port jest otwarty

2017-08-16

Im bardziej skomplikowana i zabezpieczona jest infrastruktura sieciowa, tym trudniej jest diagnozować występujące problemy. Weźmy na przykład kwestię serwera, do którego nie można się połączyć przez RDP lub do serwera SQL. Jeśli serwer występuje w tej samej sieci, w tym samym segmencie, to jednym z podstawoych testów, jakie mogły by być wykonane jest ping sprawdzający czy serwer w ogóle odpowiada i jest włączony. Niestety jeśli między maszynami znajdują sie zapory sieciowe (firewall), to ping może nie działać (wyłączony ICMP), ale połączenie RDP (port TCP/3389. UDP/3389) lub SQL (tcp/1433) mogą być dostępne.

Do niedawna w takich przypadkach korzystałem z polecenia portqry.exe, np

portqry -n <server_name> -t <protocol> -e <port_number>

portqry -n CANTOR10 -t tcp -e 3389

Nie wszyscy są świadomi, że właściwie na nowszych systemach wcale nie ma potrzeby korzystania z zewnętrznego programu. Można korzystać z cmdlet Test-NetConnection:

Test-NetConnection -computer CANTOR10 -protocol tcp -port 3389

Można zaryzykować stwierdzenie, że Test-NetConnection to taki „ping na port”. Niektórzy w celu sprawdzenia otwarcia portu korzystają również z polecenia telnet otwieranego na określony port. Wydaje się jednak, że Test-NetConnection robi to co należy i jak należy w stosunkowo prosty sposób.

By Rafał Kraik in Power Shell

Powershell: wyświetlenie informacji o procesie i użytkowniku jednocześnie

2017-08-02

Jak zwykle w powershell zadanie można zrealizować na dziesiątki sposobów, a ten poniżej to tylko jedna z propozycji

Get-WmiObject win32_process | 
  Foreach { `
       $ret=@{}; `
       $ret['ProcessName']=$_.Name; `
       $ret['Owner']=$_.GetOwner().User; `
       $obj =New-Object -TypeName PSObject -Property $ret; `
       $obj }

Co takiego się tutaj dzieje?

  • Ponieważ polecenie Get-Process samo w sobie nie posiada możliwości wyświetlenia właściciela procesu korzystamy z Get-WmiObject dla klasy Win32_process, które…
  • samo w sobie również nie ma informacji o użytkowniku, ale…
  • posiadając obiekt klasy win32_process, można wywoływać jego metody.
  • Dlatego dla obiektu $_ (konkretny proces) wywołujemy metodę GetOwner() i ze zwróconego obiektu pobieramy tylko nazwę użytkownika – reszta nas obecnie nie interesuje.
  • Znalezione informacje o nazwie procesu i właścicielu umieszczamy w tablicy hashowanej $ret. Do deklarowania tablicy hash korzystamy z $ret=@{}, a następnie przypisujemy omówione wcześniej: nazwę procesu i właściciela.
  • Mając hash table łatwo jest stworzyć obiekt. Po prostu wywołujemy New-Object wskazując że ma to być generyczny (pusty) obiekt a jego właściwości mają być pobrane z hash table, czyli będą to nazwa procesu i nazwa użytkownika.
  • Ostatnia linijka zwraca ten obiekt. Voila!

By Rafał Kraik in Power Shell

Praca: Szukam nowych kolegów/koleżanek do zespołu SQL w Katowicach…

2017-07-13

Szukam nowych kolegów/koleżanek do zespołu SQL w Katowicach…

Jeśli szukasz nowych wyzwań, coś już wiesz o SQL i chcesz wiedzieć jeszcze więcej to daj znać. Ponieważ ilość serwerów którymi się opiekuję rośnie szybciej niż idzie automatyzacja, przydałaby się pomoc. Napisz maila z informacją o swoich doświadczeniach SQL-owych i nie tylko. Nie będę się tu rozpisywał o młodym dynamicznym zespole ani o prywatnej opiece medycznej ani nawet o wymaganych kwalifikacjach. Stanowisk do obsadzenia jest kilka. Praca w Katowicach, ale odezwij sie nawet jeśli jesteś z województw ościennych. Z nami można  się dużo nauczyć! Czekam 🙂 Pisz na adres kontakt@mobilo24.eu

By Rafał Kraik in Aktualności

Kurs SQL Server Reporting Services – Tworzenie raportów

2017-07-13

Już jest!

  • 103 lekcje,
  • ponad 4 godziny video
  • do każdego filmu quiz i ćwiczenie praktyczne
  • dostęp bez ograniczeń czasowych (lifetime access)
  • możliwość uuruchamiania kursu na komputerze lub smartfonie 

Żeby podzielić się chwilą „sukcesu” przez kilka dni kurs jest dostępny za darmo! Ja się cieszę cziesz się i Ty!

Szkolenie SQL Server Reporting Services – Tworzenie raportów powstał z dwóch głównych powodów:

  • wiem jak fantastyczne raporty można tworzyć za jego pomocą i jakie robią wrażenie na odbiorcach
  • pamiętam, jak samodzielnie trudno mi było zrozumieć kilka w gruncie rzeczy prostych zasad pracy z SSRS

Kurs w całości jest poświęcony tworzeniu raporów, czyli pracy wykonywanej przez programistów, zaawansowanych użytkowników, managerów, analityków. Zaczynamy od „wyklikania” pierwszego prostego  raportu za pomocą kreatora. Potem robimy to samo ale zaczynamy od przerażającej pustej kartki. Dowiesz się więc wielu szczegółów na temat budowy raportu  i poznasz od środka właściwości najważniejszych kontrolek.

Użytkownicy lubią nie tylko w 100% gotowe raporty. które coś tam prezentują. Raport może być dynamiczny i pozwalać okeślać użytkownikowi co będzie wyświetlone. Dlatego jedna sekcja jest poświęcona parametrom: tym całkiem prostym, ale także pobieranym z bazy danych, hierarchicznym, i multivalue parameters.

Do każdego materiału video dostępny jest quiz. 3 pytania, na które nie powinno być problemu z odpowiedzią, bo co do zasady pytam tylko o to co było w czasie filmu. Quiz pozwala ci sprawdzić na ile uważałeś. Do każdej lekcji dostępne też są zadania do samodzielnego rozwiązania. Te ćwiczenia pozwalają ci samodzielnie spróbować sił. Nie czarujmy się. Jak czegoś sam nie przećwiczysz, to nie będziesz tego pamiętać.

A czego na kursie nie ma lub jest bardzo mało? Nie ma administracji Reporting Services, ale na to przyjdzie kolej w innym kursie, jeśli tylko ten temat się Wam spodoba!

Nie czekaj i zapisz się już dzisiaj klikając link. W zamian proszę o wystawienie oceny, kiedy już zostaniesz o to poproszony/a.

Kurs SQL Server Reporting Services

(Chcesz być powiadamiany o nowych wpisach na stronie? Zasubskrybuj bloga  formularzem w menu >>>)

Przy okazji zapoznaj się też z moimi innymi kursami o SQL i Powershell. Korzystając z tych odnośników cena robi się bardzo atrakcyjna:

Kurs SQL Server #2 - Zapytania SQL
Kurs SQL Server #3 - Programowanie, typy zaawansowane, XML Kurs Reporting Services - Tworzenie raportów
Kurs PowerShell dla administratora Windows Course Sybase - Installation and Configuration

 

 

By Rafał Kraik in Aktualności

Windows: Kto się podłączył do mojego serwera!?

2017-07-12

W nowszych serwerach, kiedy łączysz się przez RDP i jesteś administratorem, a wszystkie sesje są zajęte, to zobaczysz listę zalogowanych użytkowników. Możesz wybrać kolegę, który najbardziej ci podpadł i wylogowć go. Niestety w starszych windowsach zobaczysz tylko komunikat o tym, że nie ma wolnych sesji. Co zrobić?

Zakładając, że tym samym kontem możesz się zalogować na inny serwer uruchom z niego polecenie:

QWINSTA /server:YourServerName

w wyniku otrzymasz listę sesji. Każda z nich ma swoją nazwę. Zobaczysz też nazwę użytkownika. Mając nazwę sesji uruchom:

LOGOFF rdp-tcp#25 /server:YourServerName

nazwa rdp-tcp#25 to nazwa sesji z poprzedniego polecenia