17. September 2010

Deadlocks im SqlServer analysieren

Um Details zu einem DeadLock im SQL-Server zu analysieren müssen folgende beiden Statements zunächst auf dem SQLServer ausgeführt werden:
DBCC TRACEON(1204,-1)
und
DBCC TRACEON(1222,-1)
Im Falle eines DeadLocks erhält man dann im SQLSever-Errorlog (Achtung: NICHT IM WINDOWS EVENT-LOG, sondern in Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG ) folgenden Eintrag:
4:33:24.60 spid5s      Deadlock encountered .... Printing deadlock information
2010-09-17 14:33:24.60 spid5s Wait-for graph
2010-09-17 14:33:24.62 spid5s
2010-09-17 14:33:24.62 spid5s Node:1

2010-09-17 14:33:24.62 spid5s KEY: 8:72057594042384384 (4600ba76d76e) CleanCnt:3 Mode:X Flags: 0x0
2010-09-17 14:33:24.62 spid5s Grant List 2:
2010-09-17 14:33:24.62 spid5s Owner:0x178A6BE0 Mode: X Flg:0x0 Ref:0 Life:02000000 SPID:57 ECID:0 XactLockInfo: 0x1CF52C7C
2010-09-17 14:33:24.62 spid5s SPID: 57 ECID: 0 Statement Type: SELECT Line #: 1
2010-09-17 14:33:24.62 spid5s Input Buf: Language Event: SELECT * FROM TAB_CATALOG
2010-09-17 14:33:24.62 spid5s Requested By:
2010-09-17 14:33:24.62 spid5s ResType:LockOwner Stype:'OR'Xdes:0x2B9038F8 Mode: S SPID:61 BatchID:0 ECID:0 TaskProxy:(0x26102378) Value:0x26effe40 Cost:(0/2356)
2010-09-17 14:33:24.62 spid5s
2010-09-17 14:33:24.62 spid5s Node:2

2010-09-17 14:33:24.62 spid5s KEY: 8:72057594040352768 (3c004236556a) CleanCnt:2 Mode:X Flags: 0x0

14. September 2010

T4 Templates debuggen mit VisualStudio

Um T4-Templates aus VisualStudio heraus zu debuggen muss das Template um die Debug Property erweitert werden:
<#@ template langauge="C#v3.5" debug="True"#>
Dadurch werden das notwendig PDB-File und die Source-Datei unter c:\Documents and Settings\USERNAME\Local Settings\Temp\ abgelegt. Danach kann im Script
System.Diagnostics.Debugger.Launch();
eingefügt werden um den Debugger zu starten.


Siehe auch http://www.olegsych.com/2008/09/t4-tutorial-debugging-code-generation-files

8. September 2010

Firefox & NTLM

Um im Firefox NTLM Authentification zu verwenden muss über
about:config
die Site eingetragen werden, zu der NTLM Authentification erlaubt werden soll. Dies wird unter
network.automatic-ntlm-auth.trusted-uris
gemacht. Mehrere Sites werden durch Komma getrennt:
http://intranet,http://server1

6. August 2010

PerfMon-Logs in DB importieren

Schritt 1: ODBC-Datenquelle anlegen: "MyODBCSource"
Schritt 2: Über relog in DB importieren:
relog myperlog.blg -f SQL -o SQL:MyODBCSource!myperlog.blg
Schritt 3: In der ODBC-Datenquelle wurden 3 Tabellen angelegt:
  • DisplayTOID: Informationen über alle importieren Logs
  • CounterDetails: Informationen über alle gesammelten Counter
  • CounterData: Daten zu den Countern (GUID FK zu DisplayTOID und CounterID FK zu CounterDetails)

23. Juli 2010

UNC Alias für einen DomainController unter Windows 2003 Server

Problem: Man hat im DNS-Server ein Alias für den Domain-Controller erzeugt. Dieses kann aber nicht über einen UNC-Pfad aufgelöst werden.

Lösung: Diese zwei Registry-Keys eintragen, dann funktioniert es:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"DisableStrictNameChecking"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
"DisableLoopbackCheck"=dword:00000001

6. Mai 2010

Binding Probleme von Assemblies analysieren

Um Binding-Probleme wie diese
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.


unter .NET zu finden, gibt es das Assembly Binding Log Viewer-Tool (Fuslogvw.exe), das Teil des Microsoft SDKs für Windows ist.

27. April 2010

LOG4NET Config wird nicht geladen

Problem: Die Konfiguration von LOG4NET in der App.Config wird nicht geladen.

Lösung:

1. Prüfen, ob in AssemblyInfo.cs folgendes Attribut gesetzt ist:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

2. Prüfen, ob die App.config folgende Einträge enthält:
<configuration>

<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
...
<log4net>

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]" />
<footer value="[Footer]" />
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>

<root>
<level value="ERROR" />
<appender-ref ref="ConsoleAppender" />
</root>

</log4net>
...
</configuration>

3. Ist die Assembly (mit der LOG4NET-Konfiguration in der app.config) eine DLL, die z.B. über NUnit ausgeführt wird und andere DLLs referenziert, die LOG4NET verwenden, muss die DLL explizit eine LOG4NET-Klasse laden, auch wenn sie selbst kein Logging verwenden möchte. Sonst wird die Konfiguration nicht geladen!
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Um möglichen Problemen auf den Grund zu gehen, kann das LOG4NET-interne Logging eingeschaltet werden in der app.config:
<appsettings>
<add key="log4net.Internal.Debug" value="true"></add>
</appsettings>

Wird die Konfiguration erfolgreich geladen, so muss folgender Log-Output generiert werden:
...
log4net: XmlConfigurator: configuring repository [log4net-default-repository] using file [C:\projects\Testing\ReportingTestProject\bin\Debug\ReportingTestProject.dll.config]
...

9. April 2010

PowerShell 2.0 Notizen

  • PowerShell 2.0 wird mit Windows 7 ausgeliefert, für andere Betriebssyteme kann man das Windows Management Framework installieren, das PowerShell 2.0 enthält.
  • Ab 2.0 gibt´s eine IDE: Windows PowerShell ISE



















Wichtige Befehle:
  • Get-Help (help): Hilfe zu einem CommandLet, z.B.
    help dir
    Hilfe zu einem Befehl oder
    help *
    Hilfeübersicht über eine Menge von Befehlen (definiert über einen Filter)
  • Get-Children (dir): Erweitertes "Dir"
  • Format-List (fl): Formattiert Ausgabe als Liste (alle Items untereinander als Key/Value-Paare), z.B.
    dir | fl
    für die Default Attribute

    oder
    dir | fl *
    für alle verfügbaren Attributen (der Stern * eignet sich auch zur Ermittlung welche Attribute ein CommandLet hat)
  • Format-Table (ft): Formattiert Ausgabe als Tabelle (z.B:
    dir | ft Name,Length
    mit zwei bestimmten Attributen
  • Sort-Object (sort): Sortiert Objekte, z.B.
     dir | sort LastWriteTime

  • Signieren: Infos, wie PowerShell-Scripts signiert werden können gibt es hier.

  • Sollte beim Signieren ein "UnknownError" kommen liegt das daran, dass das .PS1-File mit der Powershell ISE erzeugt wurde. Diese speichert per default als "Unicode big endian". Einfach die Datei in UTF-8 speichern, dann funktioniert das Signieren mit Set-AuthenticodeSignature.

24. März 2010

Prozess-IDs der IIS AppPools

%systemroot%\system32\IISApp.vbs

15. März 2010

ActivityMonitor im SqlServer Management Studio starten

Um zu analysieren, welche Prozesse aktuell mit dem SqlServer verbunden sind, kann man den ActivityMonitor starten.

12. März 2010

SQLServer Backups überprüfen

RESTORE VERIFYONLY FROM DISK = N'd:\files\DBs\mybackup.bak'

4. Februar 2010

Verwaiste Login<->DBUser-Zuordnung nach Restore beim SqlServer

Problem: Nach dem Einspielen eines Backups auf dem SqlServer sind die Login<->DB User Zuordnungen verschwunden.
Lösung: Wiederherstellung der Zuordnunung über dieses Script:
exec sp_change_users_login 'Auto_Fix', 'MyUser'

20. Januar 2010

SID zu einem User ermitteln

Über das Sysinternal-Tool psgetsid kann man SIDs ermitteln

SID zu einem User
psgetsid.exe "User Name"

User zu einer SID
psgetsid.exe S-1-5-21-3915356022-177584461-1412300212-1116

13. Januar 2010

InstallUtil Debuggen

Um Code zu debuggen, der über das InstallUtil installiert werden soll, kann wie folgt vorgegangen werden:
public class MyInstaller: Installer
{

protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
System.Diagnostics.Debugger.Launch();
}
}

Dadurch wird der Debugger gestartert, bevor es los geht.