2015-08-13
Podczas wykonywania prac na bazie przełączyłem ją do SINGLE_USER. Ot tak, na wszelki wypadek, żeby nikt w tej bazie oprócz mnie nie pracował. Potem przeszedłem do mastera, bo bazę trzeba było odtworzyć. Niestety od tej pory z bazą nie dało się już nic zrobić, bo stale wyskakiwał bład:
Msg 5064, Level 16, State 1, Line 1
Changes to the state or options of database ’XXX’ cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Zajrzałem do sys_dm_exec_sessions, sp_who, ale żadnej aktywnej sesji pracującej w tej bazie nie znalazłem poratowało mnie dopiero polecenie:
SELECT request_session_id FROM sys.dm_tran_locks
WHERE resource_database_id = DB_ID(’XXX’)
Okazało się, że zupełnie inna sesja „trymała” tam coś jeszcze. Rozłączenie tej sesji pozwoliło kontynuować pracę.
2015-08-12
Notepad ++ bo ma podświetlanie składni między innymi dla SQL i powershell i fajne funkcje edytorskie. W połączeniu z Compare Plugin pozwala wizualnie porównywać pliki.
https://notepad-plus-plus.org/download/v6.8.1.html
http://sourceforge.net/projects/npp-compare/
Port Query – do sprawdzania, czy SQL nasłuchuje na odpowiednim porcie. Jeżeli lokalnie wynik jest pozytywny a ze zdalnego hosta negatywny, to wskazuje to na porty zamknięte na firewall
http://www.microsoft.com/en-us/download/details.aspx?id=24009
LockOutStatus – pozwala sprawdzić, czy konto użytkownika lub wykorzystywane przez SQL konto usługi jest lub było zablokowane na jakimś kontrolerze domeny.
http://www.microsoft.com/en-us/download/details.aspx?id=15201
Performance Analysis of Logs (PAL) Tool – narzędzie do wygenerowania szablony zbierania danych wydajnościowych w systemie Windows, a następnie pozwalające wykonać analizę tak zebranych danych. Przydatne podczas rozwiązywania problemów wydajnościowych. https://msdn.microsoft.com/en-us/library/cc296652(v=bts.10).aspx
IderaSQLPermissionsExtractor – darmowy programik pozwalający na skopiowanie uprawnień użytkownika z jednej instancji SQL na drugą. Do pobrania wraz z innymi przydatnymi programami z https://www.idera.com/productssolutions/freetools – wymagana rejestracja
PSTools – sysinternals – zestaw narzędzi wykorzystywanych chyba przez każdego admina…
https://technet.microsoft.com/en-us/sysinternals/bb896649.aspx
SAPD Service Account Password Dumper – program, który w połączniu z PSTools z sysinternals pozwala na odszyfrowanie hasła usługi (w tym SQL lub agenta) Program do pobrania z http://zine.net.pl/blogs/mgrzeg/pages/retrieve-services-user-account-password.aspx , dokładny opis http://zine.net.pl/blogs/mgrzeg/pages/retrieve-services-user-account-password.aspx. W skrócie:
-Najpierw uruchamiasz cmd jako administrator
-potem uruchamiasz proces sapd.exe jako proces systemowy (opcja –s w psexec) i przekazujesz argument wskazujący na nazwę usługi, której hasło chcesz odczytać:
PsExec.exe –s SAPD.exe MSSQLSERVER
Remote Desktop Manager – programik pozwalający usystematyzować ikonki do połączeń RDP do zarządzanych serwerów
http://www.microsoft.com/en-us/download/details.aspx?id=44989
Kerberos Configuration Manager for SQL Server – program pozwalający na sprawdzenie poprawności rejestracji SPN wykorzystywanych przez SQL Server.
http://www.microsoft.com/en-us/download/details.aspx?id=39046
2015-07-22
Po zmianie hasła w Linux RedHat Open Client otiera się okienko z pytaniem o hasło do Network Manager Applet Keyring.
Jest to aplikacja, która przechowuje hasła wykorzystywane przez system operacyjny podczas nawiązywania połączeń. Nie byłoby dobrze, gdyby hasła te były przechowywane niezaszyfrowane…, stąd potrzeba wprowadzania hasła.
Początkowo Keyring jest chroniony pierwszym hasłem, jakie użytkownik wygenerował dla swojego konta, jednak po zmianie hasła Network Manager oczekuje nadal starego hasła. Warto więc wiedzieć dwie rzeczy:
- Jak zmienić hasło
- Jak zrobić, żeby Keyring korzystał z tego samego hasła co Linux.
Odpowiedź na to drugie pytanie jest prostsza. Zmieniając hasło dla Network Managera na takie samo jak hasło użytkownika, po zalogowaniu nie będziesz pytany ponownie o nie pytany, bo Network Manager skorzysta z hasła używanego w sesji Linuxa. Pozostaje więc wyjaśnić, jak zmienić hasło – a to również jest proste:
- Kliknij Start >> More applications I wyszukaj ikonki Passwords and Encryption Keys (patrz ilustracja)

- Na zakładce Passwords, na linii “Passwords: login” kliknij prawym przyciskiem myszy I wybierz “Change Password”
- Gotowe! Jeżeli wpiszesz to samo hasło, co użytkownik ma w Linuxie, to pytanie o wprowadzenie hasła się więcej nie pojawi… aż do kolejnej zmiany hasł
2015-07-21
Mamy w SQL dwa widoki:
- sys.dm_exec_connections
- sys.dm_exec_sessions
Dlaczego dane o połączeniach/sesjach zostały podzielone na 2 widoki? Czy może być sesja bez połączenia albo połączenie bez sesji?
Zazwyczaj jedna sesja = 1 połączenie. Ale połączenie określa raczej fizyczne cechy komunikacyjne między klientem a serwerem, jak rodzaj protokołu, ilość wysyłanych i odbieranych pakietów, szyfrowanie połączenia, parametry wykorzystanego protokołu itp.
Sesja to obiekt, w którym z kolei zapisujemy informacje o nawiązanym przez klienta połączeniu, ale tam interesują nas bardziej typowo SQL-owe parametry jak informacja o tym kto się zalogował, jaki poziom izolacji transakcji ma być używany, jaki jest język, ustawienia daty itp.
A w jakim przypadku nie ma zależności 1 połaczenie = 1 sesja?
- Istnieje coś takiego jak Multiple Active Result Sets (MARS), gdzie w jednym połączeniu może być wiele sesji.
- Mogą być też sesje bez połączeń – nawiązane przez procedury aktywacyjne brokera, sesje systemowe
- Istnieją też połączenia bez sesji, np wykorzystywane poza TDS np. mirroring lub broker
2015-07-21
Właśnie jesteś w połowie wykonywania „Ważnej Rzeczy” na komputerze z systemem Windows (nieważne czy to programowanie, czy gra, czy rozmowa na skype), a tu wyskakuje komunikat „W celu zakończenia instalowania aktualizacji za chwilę uruchomimy Windowsa na nowo”. O zgrozo! Jak to wyłączyć?
Zacznijmy od szybkich kroków, które u mnie zadziałały.
1. Naciśnij przycisk Windows
2. W kafelkowym menu wpisz
cmd
3. Kliknij ikonkę prawym przyciskiem myszy i wybierz uruchom jako administrator
4. W wierszu poleceń wpisz:
NET STOP wuauserv
5. A jak wolisz powershella, to usługę windows update możesz zatrzymać wykonując:
Stop-Service wuauserv
A teraz jak spowodować aby po aktualizacji Windows okno wcale się nie pokazywało grożąc zamknięciem systemu. Jak to wyłączyć raz na zawsze: Czytaj dalej »
2015-07-13
No i przyszło mi się zderzyć z CLR na SQL. Jeśli chodzi o tworzenie bibliotek – no problem. Kompilujesz ładujesz, działa. Sęk w tym, że na jednym serwerze ciągle pojawiał się błąd z załadowaniem bibliotek CLR. Bład wskazywał na brak pamięci. Tymczasem na systemie z 16 GB RAM miałem 7GB RAM wolnego. Jak diagnozować ten przypadek?
CLR został udostępniony w SQL w wersji 2005. W wersji 2012 znacznie przebudowany został Memory Manager i w zawiązku z tym również zarządzanie pamięcią dostępną dla CLR.
Bardzo ogólnie do wersji 2008R2:
- otrzymaną pamięć SQL dzielił sobie na 2 obszary. Najpierw rezerwował „zapas”, tzw. Memory To Leave lub Memory To Reserve lub MTL, a następnie resztę pamięci przeznaczał na buffer pool.
- tzw. single page allocator przyznawał pamięć z zakresu buffer pool
- w obszarze MTL przechowywany był CLR, zewnętrzne biblioteki dll, database mail, obiekty COM oraz pamięć o którą prosił CLR podczas tworzenia obiektów większych niż jedna strona. Pamięć przyznawał tzw. multipage allocator
- MaxServerMemory definiował tylko buffer pool, więc normalne było, że SQL zajmował więcej pamięci niż MaxServerMemory.
- Jeśli chciało się mieć więcej pamięci poza MaxMemory należało uruchamiać SQL z przełącznikiem /g
Miało to sens. W buforze obsługiwane były żądania na pojedyncze strony, bo taka jest specyfika pracy bazy danych. Dodatkowo jeśli CLR wymagał utworzenia małego obiektu <8KB, to te obiekty również były tworzone w Bufer pool (tzw. stolen pages)

I znowu ogólne od wersji 2012:
- SQL rezygnuje z dwóch allocatorów pamięci. Jest tylko jeden, który obsługuje wszystko
- Jest ograniczony przez MaxServerMemory. Teraz SQL może zająć już na prawdę niewiele więcej pamięci niż określa to MaxMemory
- Żądania o pamięć (czy to pojedyncze strony czy o ciągły zakres kilku stron) są realizowane z pamięci buffer pool.
- Jedyny wyjątek od tej zasady, to jeśli CLR tworzy obiekty bezpośrednio w systemie Windows (żąda pamięci w VAS)
Czytaj dalej »
2015-07-09
Przypomina mi się chwila szaleństwa, dawno temu, kiedy chciałem sprawdzić czy można zainstalować SQL server na… Linuxie. Jedyne co znalazłem wtedy na stronach Microsoft, to artykuły o tym jak migrować się z Linux na Windows…
Tym razem problem polegał na tym, że miałem dostęp do SQL, ale nie miałem do serwera. Chciałem się dowiedzieć, jaka wersja windows jest zainstalowana na tym serwerze. Z pomocą przyszedł widok sys.dm_os_windows_info (dostępny od SQL 2008 R2).
W kolumnie WindowsRelease otrzymujesz wartość, która identyfikuje wersję Windows. Niestety wartość ta jest symboliczna, więc żeby ją rozszyfrować udaj się na https://msdn.microsoft.com/library/ms724832(VS.85).aspx
Zrzut tabelki zamieszczam poniżej:
| Operating system |
Version number |
| Windows 10 Insider Preview |
10.0* |
| Windows Server Technical Preview |
10.0* |
| Windows 8.1 |
6.3* |
| Windows Server 2012 R2 |
6.3* |
| Windows 8 |
6.2 |
| Windows Server 2012 |
6.2 |
| Windows 7 |
6.1 |
| Windows Server 2008 R2 |
6.1 |
| Windows Server 2008 |
6.0 |
| Windows Vista |
6.0 |
| Windows Server 2003 R2 |
5.2 |
| Windows Server 2003 |
5.2 |
| Windows XP 64-Bit Edition |
5.2 |
| Windows XP |
5.1 |
| Windows 2000 |
5.0 |