Błędny SPN dla usługi SQL powoduje błąd The target principal name is incorrect. Cannot generate SSPI context.

2014-12-12

Dziwny przypadek. Na serwerze X jest zainstalowany SQL. Serwer działa wykorzystując domenowe konto serwisowe. Do serwera X z zainstalowanym SQL można się bez problemu dostać lokalnie, ale przy próbie połączenia zdalnego dostawało się komunikat:

TITLE: Connect to Server
Cannot connect to serverX.
The target principal name is incorrect. Cannot generate SSPI context. (Microsoft SQL Server, Error: 0)
 

Kerberos_sspi_context_error

Większość artykułów jakie znajdowałem w Internecie wskazywała na problem z SPN. Komenda:

setspn -L serverX

listuje wszystkie SPN związane z danym komputerem, a dokładniej z kontem tego komputera w AD (serverX$). W moim przypadku znajdowałem tu również:

C:\>setspn -L ServerXRegistered ServicePrincipalNames for CN=ServerX,OU=W2k12,OU=App,OU=Company,OU=Servers,OU=com,DC=domain:
MSSQLSvc/ServerX.domain.com:1433
MSSQLSvc/ServerX.domain.com
TERMSRV/ServerX
TERMSRV/ServerX.domain.com
WSMAN/ServerX.pl.domain.com
WSMAN/ServerX
RestrictedKrbHost/ServerX
HOST/ServerX
RestrictedKrbHost/ServerX.domain.com
HOST/ServerX.domain.com Czytaj dalej »
By Rafał Kraik in SQL

Excel 2013. Zawsze otwiera dodatkowe okno ze skoroszytem personal.xlsb

2014-12-10

Jeśli bawiłeś się z makrami zapisanymi w skoroszycie makr osobistych, to zostały one zapisane w personal.xlsb. Skoroszyt znajduje się w

c:\users\<username>\AppDataW\Microsoft\Excel\XLSTART

Excel domyślnie otwiera pliki, które tu się znajdują przy uruchomieniu programu. W moim przypadku wystarczyło usunąć ten plik z tego folderu (nie był mi potrzebny) i od tej pory Excel nie otwiera dodatkowego niepotrzebnego okna.

By Rafał Kraik in Helpdesk

SQL Restart mirrora

2014-11-20

Początek niby niewinny. Brak miejsca w bazie. Powinno wystarczyć powiększyć plik, albo zdać się na Autogrow. Okazało się jednak, że wykonanie jakiejkolwiek czynności na bazie się nie wykonuje, bo jest blokowane przez inne procesy. Nawet proste otwarcie okienka properties dla bazy danych kończyło się komunikatem o lockach.

Rzut oka w sp_who lub Activity Monitora (z filtrem na tą jedną wybraną bazę danych) i już widać niepokojący stan bazy. Dużo zablokowanych procesów, praktycznie nic się nie dzieje, wszystko stoi, a Head Blockerem jest systemowy proces mirroringu. Jakimś rozwiązaniem byłoby wyłączenie mirroringu i skonfigurowanie go na nowo. To jednak dość mocny krok, jak na proste zablokowanie się procesów…

Pomocna okazała się komenda:

ALTER DATABASE MyDB SET PARTNER SUSPEND

a po sprawdzeniu, że blokady minęły

ALTER DATABASE MyDB SET PARTNER RESUME
Okazało się, że w nocy coś było nie tak z siecią i mirroring napotkał pewne problemy, które dotknęły właśnie tą jedną bazę danych (inne działały poprawnie). Oto próbki komunikatów znalezionych w ERRORLOG:
Database mirroring connection error 4 'An error occurred while receiving data: ’64(failed to retrieve text for this error. Reason: 15105)’.’ for 'TCP://server_name.domainname:5022′.

Database mirroring is inactive for database 'MyDB’. This is an informational message only. No user action is required.

By Rafał Kraik in SQL

Pass Summit 2104

2014-11-10

 

 

pass_summit_2014

 

W dniach 4-7 listopada uczestniczyłem w konferencji Pass Summit 2014. Największa konferencja dla ludzi SQL odbywała się w Seattle. Oto sesje, w których uczestniczyłem:

  • SQL Server 2014: In-Memory Overview Kevin Farlee DBA-321-M
  • Upgrading and Migrating SQL Server John Martin DBA-410-M
  • Latches, Spinlocks, and Lock Free Data Structures Klaus Aschenbrenner DBA-405
  • SQL Server 2014: ColumnStore Index Sunil Agarwal DBA-318-M
  • Query Tuning Mastery: Manhandling Parallelism, 2014 Edition Adam Machanic AD-400
  • Solving Complex Problems with Extended Events Jonathan Kehayias DBA-406
  • Maintaining High Performance When Using Encryption Steve Jones DBA-312
  • Tuples, Sets, and Members: Understanding the Basics of MDX Brian Larson BIA-311
  • Troubleshooting AlwaysOn Availability Groups in SQL 2014 Trayce Jordan DBA-404-M
  • Shortcuts to SSIS via C#.Net – EzAPI Paul Rizza BIA-316-M
  • Enter the Dragon: Running SQL 2014 on Windows Server Core Mark Broadbent DBA-310
  • Deep Dive into Power Query Formula Language Matt Masson, Theresa Palmer-Boroski BID-401-M
  • High Performance Infrastructure for SQL Server 2014 Michael Frandsen DBA-403

Więcej:

http://www.sqlpass.org/summit/2014/Live.aspx

lub

https://www.sqlpass.org/

By Rafał Kraik in Aktualności

SSRS Diagnostyka Data Driven Subscription z wysyłką maila

2014-10-22

Data Driven subscription skonfigurowane, ale nie działa…. Jak znaleźć punk zaczepienia?

Zajrzyj do logów (w katalogu SSRS podkatalog logs). Każdy plik to log z ostatniego uruchomienia SSRS. Poszukaj w nim:

library!WindowsService_48!dc8!10/21/2014-13:15:03:: i INFO: Schedule 8da1eeb1-1656-4e67-87de-e297814b3673 executed at 10/21/2014 13:15:03.
schedule!WindowsService_48!dc8!10/21/2014-13:15:03:: Creating Time based subscription notification for subscription: 64b6ea63-b6b8-4378-869e-a93d1d96f4c6
library!WindowsService_48!dc8!10/21/2014-13:15:03:: i INFO: Schedule 8da1eeb1-1656-4e67-87de-e297814b3673 execution completed at 10/21/2014 13:15:03.
library!WindowsService_48!dc8!10/21/2014-13:15:03:: i INFO: Handling data-driven subscription 64b6ea63-b6b8-4378-869e-a93d1d96f4c6 to report

/FOLDER_NAME/SUBFOLDER_NAME/REPORT_NAME, owner: USERNAME, delivery extension: Report Server Email.
library!WindowsService_48!dc8!10/21/2014-13:15:04:: i INFO: Initializing EnableExecutionLogging to 'True’  as specified in Server system properties.
library!WindowsService_48!1f4c!10/21/2014-13:15:05:: i INFO: Initializing EnableExecutionLogging to 'True’  as specified in Server system properties.
library!WindowsService_48!1f4c!10/21/2014-13:15:05:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InvalidReportParameterException: ,

Microsoft.ReportingServices.Diagnostics.Utilities.InvalidReportParameterException: Default value or value provided for the report parameter 'CollectionID’ is

not a valid value.;

W tym przypadku widzimy, że collectionID ma niepoprawną wartość. Oznacza to, że tabela zasilająca data driven subscription przechowuje niepoprawne wartości lub wartości niepoprawnego typu. Popraw, aż w końcu w logu znajdziesz informację o poprawnym uruchomieniu subskrypcji: Czytaj dalej »

Powershell: stronicowanie wyniku (more)

2014-10-14

Wykonujesz polecenie, a tu fiuuuu, wszystko przeleciało przez ekran. Wolałbyś żeby wyniki pokazywane były partiami, po jednym ekranie, a np. po naciśnięciu SPACE ładował się kolejny ekran. Zastosuj

Get-process | Out-Host -Paging

Po wyświetleniu pierwszego ekranu otrzymasz prompt:

paging

 

 

No ale…. czasami możesz też dostać błąd:

out-lineoutput : Metoda lub operacja nie jest zaimplementowana.
At line:1 char:1
+ Get-process | Out-Host -Paging
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [out-lineoutput], NotImplementedException
+ FullyQualifiedErrorId : System.NotImplementedException,Microsoft.PowerShell.Commands.OutLineOutputCommand

 Jak to Metoda lub operacja nie jest zaimplementowana. !!! Microsoft zapomniał i wypuścił taki produkt w świat!?

Nie… Jest to przykład parametru zależnego od hosta (gdzie przez host rozumiemyprogram uruchamiający polecenia powershell). Stronicowanie działa poprawnie w interfejsie znakowym, ale w ISE nie jest zaimplementowane. Tam masz się bawić suwaczkami i przewijać wynik… Na otarcie łez, pamiętaj, że w ISE możesz korzystać z Out-GridView:

Get-process | Out-GridView

out-gridview

By Rafał Kraik in Power Shell

Powershell: Dodanie numeru wiersza po Sort-Object (ROW_NUMBER)

2014-10-14

Polecenie Sort-Object układa obiekty przyjęte z poprzedniego polecenia w zadanej kolejności, np.

Get-Process | Sort -property CPU -Desc

sortuje procesy umieszczając na początku te, które najbardziej obciążyły procesor. Jednak co zrobić, aby zwracane pozycje miały dodatkowo numer wiersza (proces najbardziej obciążający CPU numer 1, kolejny numer 2 itd.)?

Rozwiązanie 1

$i=0

Get-Process | sort -Property cpu -Descending |
select id, processname, @{n=”Row number”;e={$i+=1; $i}}

Fajne, ale nie działa…. w/w polecenie zawsze wyświetli jedynki w kolumnie Row Number. Dlaczego? Wyrażenie e={$i+=1; $i} „nie widzi” zadeklarowanej wcześniej zmiennej $i, Dlatego zawsze $i na początku jest równe 0, potem jest zwiększane o 1 i zwracana jest jedynka. Dzieje się tak dla każdego procesu przechodzącego do polecenia Select.

Zmienną $i można jednak „awansować” na zmienną skryptu:

$script:i=0

Get-Process | sort -Property cpu -Descending |
select id, processname, @{n=”Row number”;e={$script:i+=1; $script:i}}

To działa! Zmienna $script:i jest poprawnie „widziana” przez skrypt i wszelkie wyrażenia w skrypcie. Ta zmienna jest globalna dla całego skryptu!

Rozwiązanie 2

Bazujemy tu o cmdlet Foreach-Object. Dla każdego obiektu zwiększamy wartość $rowNumber, a potem zwracamy wynik przez return $rowNumber,$_

$rowNumber=0

Get-Process | sort -Property cpu -Descending |
% { $rowNumber+=1; return $rowNumber,$_}

Niestety, to nie jest ładne rozwiązanie… zwracana liczba jest niezależna od zwracanego procesu, nawet na ekranie prezentuje się to brzydko…, ale:

Get-Process | sort -Property cpu -Descending |

% { $rowNumber+=1; $ret = $_ | Add-Member -NotePropertyName RowNumber -NotePropertyValue $rowNumber -PassThru; return $ret} |

select Id, Process, RowNumber

zadziała dobrze. Co tu się dzieje? W ForEach-Object do obiektu proces (reprezentowany przez $_) jest dodawana właściwość „RowNumber” o wartości „$rowNumber”. Ponieważ obiekt typu proces nie pozwala na dodawanie właściwości, dodajemy parametr PassThru. Parametr powoduje utworzenie nowego obiektu, który odziedziczył wszystkie właściwości z typu proces i dodał nową właściwość RowNumber.

Natchnienie do rozwiązania numer 2 pochodzi z http://technet.microsoft.com/en-us/library/hh849879.aspx

By Rafał Kraik in Power Shell