blog.atwork.at

news and infos about microsoft, technology, cloud and more

HTML5 oder Silverlight, das ist hier die Frage

Diese Diskussion ist in Web-Developer Kreisen spätestens seit der letzten Microsoft PDC im Herbst top-aktuell. Dazu gibt es viele Statements und Meinungen. Eine recht interessante Meinung dazu findet sich hier: The Inquisitive Coder - Davy Brion's Blog - Why We're Going With HTML(5) Instead Of Silverlight Gegen Silverlight sprechen unter anderem der "proprietäre Standard" (nur in Windows und OS X) und die fehlende mobile Lösung: Android und iOS unterstützen kein SL und werden es wahrscheinlich auch so bald nicht tun, weil kein Bedarf. Für Silverlight sprechen vor allem die Entwickler-Tools (Visual Studio, Expression Blend) und die gute Integration in die Entwicklungsumgebung. Debugging ist einfach, Security kein Thema und es gibt keine Herumfrimmelei mit Browser-Support, HTML und CSS (bye bye Firebug...). Das waren jetzt nur wenige Gründe, aber mal ein paar strategische Themen. In obigem Blog-Artikel wurden die Kategorien gewichtet und darauf basierend ein Rating erstellt. Hier liegt der Vergleich der Argumente 100% HTML5 zu 77% Silverlight. Es steht und fällt also mit der Gewichtung der einzelnen Bereiche. Natürlich muss sich jeder selbst sein eigenes Bild machen. Ich denke, beide Web-Technologien haben Vorteile und - mal ganz ehrlich: Es ist bestimmt nicht verkehrt, sich beide Technologien anzueignen und je nach Bedarf zu verwenden...

IE9 RTM kommt am 15. März

Es ist soweit! Wie das Windows Team Blog verkündet, wird der nigel-nagel-neue Internet Explorer 9 am 14. März (USA Pacific Time um 21h) veröffentlicht! A More Beautiful Web Launches on March 14th Zwölf Monate nach der ersten Platform Preview Version (bei mix10, was ich live miterleben durfte) erblickt IE9 also das Tageslicht - bei uns am 15. März um 6h Früh, da ist es mittlerweile gerade hell, in den USA ist es noch Abend - und die Launch-Party wird nach der Pressemitteilung starten. Viele der neuen Funktionen konnten bereits in der Vorgänger-Versionen getestet werden (siehe IE9 News). Meine persönlichen IE9-Highlights sind vor allem die Schnelligkeit, HTML5 sowie die vielen kleinen Verbesserungen wie Neue Tabs, Pinned Sites, neuer Developer-Modus, Tracking Protection Lists, und da gibt es noch ein paar weitere... Für alle, die zum Thema IE9 topaktuell informiert werden wollen: Siehe www.beautyoftheweb.com und folgen Sie dem IE-Team auf Twitter: www.twitter.com/ie! Ich freu mich schon auf den neuen IE9. Viel Spaß und sicheres Surfen mit IE9!

SQL Server: The transaction log for database is full

Schön ist, wenn man als Datenbank-Administrator ein ruhiges Leben führen kann: Dann, wenn alle Datenbank-Wartungen gescriptet sind und automatisch laufen. So müssen nur zeitweise die Logs durchgesehen werden und die administrativen Tätigkeiten sind sehr gering (Tipp: Siehe übrigens auch Microsoft Codename Atlanta – SQL Monitoring Teil 1,  2 und  3). Allerdings kann es dennoch manchmal Situationen geben, wo eine Datenbank “steht”. Die Datenbank “steht” Das kann beispielsweise eintreten, wenn das Transaction Logfile einer Datenbank so groß wird, dass kein Platz mehr auf der Festplatte vorhanden ist – und die Datenbank nicht mehr funktioniert – zu mindestens alle Datenoperationen nicht mehr. SQL Server markiert dann die Datenbank oft als fehlerverdächtig (suspect). “Warum wächst ein Datenbank Logfile so stark?” Diese Frage haben sich schon viele Administratoren gestellt. Die Datenbank ist vielleicht winzig, aber das Logfile dazu wächst und wächst und wächst… die Analogie zur Duracell-Batterien Werbung drängt sich auf… Dazu möchte ich hier ein wenig Einblick geben und auch Lösungen liefern, vor allem, wenn Sie eine solche Fehlermeldung erhalten oder im Log finden: …failed with the following error: "The transaction log for database <dbname>' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases Aber schön der Reihe nach. Die Beteiligten Eine SQL Server Datenbank besteht immer aus (mindestens ) zwei Dateien: Einem Datenbank-File z.B. <dbname>.mdf und einem Transaction-Logfile <dbname>.ldf. Übrigens: Zusätzlich besitzt jedes File einen logischen Namen. Diese können mit select * from sys.database_files ausgelesen werden (hier z.B. “awCMS_Data” und “awCMS_Log”): Zurück zu unseren physischen Files: Das erste .mdf ist das primäre Datenbankfile. Bei großen Datenbanken kann es Sinn machten, die Daten auf mehrere Files (Filegroups) aufzuteilen – das bringt bei mehreren Laufwerken oft bessere Performance. Understanding Files and Filegroups und Files and Filegroups Architecture liefern übrigens die wichtigsten Informationen hierzu. Das Transaction Log Eine Funktion des SQL Servers ist, dass alle Datenbank-Aktionen zuerst in das Transaction-Logfile geschrieben werden und erst danach in das Datenbank-File. Die Daten aus dem Transaction Log werden erst durch eine COMMIT-Funktion in die Datenbank persistiert (dann, wenn die Datenbank-Transaktion vollständig ist). Daher stehen im Transactionlog also eigentlich nur “temporäre” Daten – eine Art Zwischenspeicher. Das Transaction Log wird in kleinere Segmente unterteilt, diese heißen “Virtual Logs”. SQL Server kümmert sich selbst um die Verwaltung des Transaction Logs. Nach dem Commit wird ein Checkpoint gesetzt und der verwendete Platz wird wieder freigegeben. Bereits gespeicherte Daten werden abgeschnitten (Truncated). Je nach Recovery Model und Größe und Auslastung der Datenbank kann die Größe des Transaction Logs allerdings wachsen (und zwar immer um ein Vielfaches eines Virtual Log Blocks). Transaktionen werden sequentiell geschrieben (siehe unten). Wenn der Platz begrenzt ist/das Ende erreicht ist, wird wieder am Anfang des Files fortgesetzt (Loop). Das Datenmodell Wichtig für den Betrieb und das Backup ist das gewählte Daten-Modell. Für jede Datenbank kann (in den Eigenschaften der Datenbank) das Recovery Model eingestellt werden, die Vorgabe ist “Full”. Diese SQL Abfrage liefert eine Übersicht über das Recovery Model aller Datenbanken: SELECT name, recovery_model_desc FROM sys.databases Ganz rasch: SIMPLE erfordert keine Log File Backups, FULL bietet höheren Schutz (Wiederherstellung) und erfordert Log File Backups. Das bedeutet, dass das Datenbank Recovery Model je nach Anforderung sorgsam gewählt werden sollte. msdn liefert in Recovery Model Overview alle Informationen hierzu. Bei Verwendung von FULL kann es also dazu kommen, dass das Transaction Log voll wird… Tipp: Damit das Transaction Log nicht die Festplatte vollschreibt, empfiehlt es sich, das Transaction Log File zu beschränken. Das funktioniert in den Datenbank-Eigenschaften durch Setzen der File-Größe. So sehen die Standard-Einstellungen aus: Und so wird die Restricted File Growth auf einen eigenen maximalen Wert gesetzt: Somit kann das Transaction Log für diese Datenbank nur bis 25MB wachsen. Beachten Sie, dass im Logfile genügend Platz für den laufenden Betrieb vorhanden ist! Hinweis: Wenn Sie Database Mirroring (mehr dazu in einem folgenden Blog-Artikel…) einsetzen, können Sie das Recovery Model SIMPLE NICHT einsetzen (sondern FULL). Tipp: Beachten Sie den Platzbedarf auch, wenn umfangreiche Datenbank-Operationen durchgeführt werden, beispielsweise wenn ein Maintenance Task alle Indizes in einer Datenbank erneuert…! Das kann leicht zu einem “Transaction Log is full” Fehler führen (so ist es auch bei einem Kunden passiert, als die Datenbank in der Nacht reorganisiert wurde - und am nächsten Tag in der Früh stand…) Transaction Log is full Wenn das Transaction Log voll ist verweigert SQL Server Abfragen und sogar Backups: Executing the query "BACKUP DATABASE..." failed with the following error: "The transaction log for database 'cms' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases BACKUP DATABASE is terminating abnormally… Was tun? Die Antwort ist zum Glück einfach: DBCC SQLPERF(logspace) zeigt, wie viel Platz IM Logfile verbraucht wird: In diesem Beispiel verwendet die Datenbank “cms” bereits 91% des verfügbaren Platzes. Ein Zeichen für einen möglichen Engpass. Wie reduziert man also die Transactions? Per BACKUP des Transaction Logs! BACKUP LOG [cms] TO DISK = N'D:\BACKUP\cms.trn' WITH NOFORMAT, INIT,  NAME = N'cms-Transaction Log  Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO So wird das Transaction Log in das Backupfile cms.trn geschrieben: Durch das Backup werden inaktive Transaktionen entfernt und das Transaction Log File somit wieder für Virtual Logs entleert. Visualisierung - Log Kontrolle Sehen wir nach dem Backup nochmals mit DBCC SQLPERF(logspace) nach: Fein, die CMS Datenbank benötigt jetzt nur mehr 21% Platz im Transaction Log File. Hat funktioniert! Weiters sehr hilfreich ist der TSQL-Befehl DBCC LOGINFO LogInfo zeigt an, welche Transactions in einer Datenbank (in einem Log File) vorhanden sind, welche committed sind (Status 0) und welche noch nicht committed sind (Status 2). Status 2 zeigt offene Transaktionen an: Die Spalte FSeqNo ist die laufende Transaktionsnummer – immer aufsteigend (sequentielles Schreiben), hier sind die Transaktionen 21990 und 21991 offen. Durch Ausführen von BACKUP LOG werden alle offenen Transaktionen geschlossen! Bei neuerlichem Ausführen danach dürfen eigentlich nur mehr neue (die letzten) Transaktionen mit Status 2 markiert sein. Wichtige Hinweise zum BACKUP Mit Full oder Bulk-Logged Recovery Mode bleiben inaktive Transaktionen im Logfile! Und zwar so lange, bis ein Checkpoint erstellt wurde und ein Backup des Transaction Logs durchgeführt wurde! Ein “Full Backup” entfernt also KEINE Transactions aus dem Transaction Log File, wie in diesem Beispiel: BACKUP DATABASE [cms] TO DISK = N'D:\Backup\cms.bak' WITH NOFORMAT, INIT, NAME = N'Vollstaendig Datenbank Sicherung', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO Ein Transaction Log Backup gibt zuvor benutzen Platz wieder frei, verkleinert das File aber NICHT, wie in diesem Beispiel: BACKUP LOG [cms] TO DISK = N'D:\BACKUP\cms.trn' WITH NOFORMAT, INIT,  NAME = N'cms-Transaction Log  Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO Shrink File Und es geht doch: Um ein Transaction Log File zu verkleinern, verwenden Sie in der aktuellen Datenbank: SELECT name FROM sys.database_files WHERE type_desc = 'LOG' Und nun den logischen Dateinamen (in meinem Beispiel “awcms_log”) in ShrinkFile einsetzen: DBCC SHRINKFILE ('awcms_log', 1000) Setzt bzw. reduziert die physische Größe des Log Files auf 1GB. Zur Vollständigkeit: Um unbenutzten Platz in Daten-Files freizugeben kann ShrinkDatabase verwendet werden: DBCC SHRINKDATABASE ('cms', TRUNCATEONLY) Hiermit wird der freie Platz am File-Ende freigegeben, aber das File nicht reorganisiert - siehe auch DBCC SHRINKDATABASE (Transact-SQL). z.B.: Achtung:  Die Datenbank sollte NICHT auf Auto-Shrink gesetzt sein, da bei kontinuierlichem Verkleinern durch starke Defragmentierung Performance-Probleme auftreten können! AutoShrink sollte also FALSE sein, so wie hier:   Wie vorbeugen? Nachdem wir nun reagieren können, stellt sich die Frage, wie man vorbeugen kann, damit dieser Fall nicht eintritt. Gut ist, bei Verwendung von Recovery Model FULL die Datenbank komplett zu sichern und danach das Transaction Log extra zu sichern. Damit wird das Transaction Log File verkleinert und kann wieder neu befüllt werden. Tipp: Bei Bedarf (bei großen Datenbanken mit vielen Transaktionen) empfehle ich, stündliche oder minütliche Backups des Transaction Logs – das bringt auch eine gute Sicherheit, da die Datenbank so leicht zu einem beliebigen Zeitpunkt (zu jedem Zeitpunkt, wo ein Transaction Log gesichert wurde) wiederherstellbar ist. Ein Backup-Verzeichnis eines Tages könnte also sinngemäß so aussehen: cms.bak cms_1.trn cms_2.trn cms_3.trn cms_4.trn Der Vorteil: Restore zu jedem der fünf Zeitpunkte und ein kleines operatives Log File. Tipp: Unbedingt beachten, dass Transaction Log auch VOR und NACH Reorganisations-Tasks (wie Index Rebuild) durchgeführt werden sollten – vor allem, wenn die File Size mit einem eigenen Wert auf restricted gesetzt ist (oder der Festplattenplatz eng ist). Damit sollte der “Transaction Log is full” Fehler der Vergangenheit angehören und Sie das Handwerkszeug zum Beheben und Warten von Transaction Log Files besitzen. Über SQL Server Wartung gibt es noch viel zu sagen und zu berichten – stay tuned.

SharePoint virtuell

Für alle Admins, Developer und SharePoint Experten: Für die Planung und den Betrieb von SharePoint in virtuellen Umgebungen - und das macht fast immer Sinn - gibt es viel zu wissen. Dazu möchte ich auf diese TechNet-Website hinweisen: http://technet.microsoft.com/en-us/sharepoint/ff602849.aspx Hier finden Sie Unterstützung und Lizenzierungsinformationen für die Verwendung von Server-Virtualisierungstechnologien für SharePoint. Reinschaun!

Wenn in SQL Server sogar bei varchar(max) bei 8000 Zeichen Schluss ist...

Microsofts SQL Server ist fast in jedem Microsoft (Server) Produkt drin. Und auch mein Lieblings-Produkt. So habe ich im Laufe meines Berufslebens bereits von SQL Server 6.5 bis hin zum aktuellen SQL Server 2008 R2 viel Datenbank-Wartung durchgeführt und viele Lösungen entwickelt. Hierbei lernt man viel - und auch viele Stolpersteine! So hatte ich vor kurzem die Anforderung, eine Reihe von SQL Server Reports neu zu generieren. Dazu habe ich mal vor einigen Jahren ein kleines Tool geschrieben, das eine XML Datei durchläuft und alle dort enthaltenen Reports mit bestimmten Parametern als PDF File persistiert - das soll weiterverwendet werden. Nun haben sich die Reports und deren Parameter geändert und eigentlich muss ich zum Neuaufruf nur das reports.xml File neu erstellen und das Tool (sozusagen per Knopfdruck) starten und alles sollte erledigt sein. Soweit so gut, das war die Vorgeschichte. Zum Generieren des neuen XML-Files verwende ich eine einfaches, zusammengebautes Script (das ich mir zum Glück aus dem Vorjahr gemerkt habe) direkt im SQL Server 2008 R2 SQL Management Studio. Dieses durchläuft eine gejointe Tabelle und schreibt den Output in eine Textvariable @x. Das ganze Script sieht vereinfacht etwa so aus: declare @x varchar(max) set @x = '<?xml version="1.0" encoding="ISO-8859-1"?>' + char(13) + char(10) + '<reports>' + char(13) + char(10) SELECT @x = @x + '<report>' + char(13)+char(10)+ '<name>/app/betrieb</name>' + char(13)+char(10)+ '<param>format=PDF|id=' + convert(varchar,BET_ID) + '</param>' + char(13) + char(10)+ '<path>C:\temp\betrieb_'+ right('00' + convert(varchar,(ROW_NUMBER() OVER (ORDER BY Name1))),2) + '.pdf</path>' + char(13) + char(10)+ '</report>' + char(13) + char(10) FROM Betriebe LEFT OUTER JOIN Bundeslaender ON BET_BDL_ID = Bundeslaender.BDL_ID WHERE (BetriebActive = 1) ORDER BY Bundesland, Name1 set @x = @x + '</reports>' + char(13)+char(10) print @x Der so erzeugte Text in @x wird dann einfach aus dem SQL Management Studio ausgeführt (F5) und ausgegeben, für jede Tabellenzeile (bei mir etwa 30 Reports) wird ein Abschnitt "<report>" erstellt, etwa so: Der Text in Messages wird dann per Zwischenablage in ein Textfile kopiert - bzw. wird die Ausgabe direkt in ein File geschrieben "Results to File": Funktioniert ... fast!  Der Output wird irgendwo abgeschnitten! Moment mal, unsere Variable @x ist doch vom Typ varchar(max)! Damit sind doch theoretisch bis zu 2GB Zeicheninhalt möglich. Also mal nachsehen, wie lange @x tatsächlich ist: print len(@x) ergibt sportliche 10655 Zeichen. Die Variable beinhaltet also den tatsächlichen Inhalt - nur wird der abgeschnitten... eine leise Vorahnung (eigentlich ein Rückblick) kommt auf... Seit SQL Server 2005 gibt es die Aufhebung der 8000-Zeichen Grenze bei Texten vom Datentyp Zeichen: Konkret war bis SQL Server 2000 aufgrund der internen Data Page-Größen bei 4000 Zeichen für nvarchar und bei 8000 Zeichen bei varchar Schluss. Nun kann stattdessen varchar(MAX) bis 2^31-1 Bytes (also fast 2GB) verwendet werden. Damit können ab SQL 2005 auch Zeichenkettenoperationen mit längeren Texten durchgeführt werden - ohne mühsame Workarounds mit Konvertierungsfunktionen und Datentyp TEXT. Die Ursache für das Abschneiden ist also das PRINT Statement. PRINT schneidet bei 8000 Zeichen ab! Print ist ja sehr praktisch. Nur hat Microsoft anscheinend vergessen, die neuen Grenzen ab SQL Server 2005 nachzuziehen? Natürlich dachte ich zuerst an die Optionen im SQL Management Studio, wo die Limits der Ausgabe eingestellt werden kann. Aber nein, das ist es nicht. Und ich könnte natürlich Zwischenschritte einlegen oder das Problem anders lösen ... aber nur weil Print die Ausgabe abschneidet alles umstellen?? Aber es gibt eine einfache Abhilfe: In diesem Blog-Artikel von Falafel Software von Adam Anderson wird eine kleine Stored Procedure "LongPrint" in nur insgesamt 26 Zeilen erstellt, welche einen langen String auf mehrere Teile á 4000 Zeichen vom Typ nvarchar aufteilt und schrittweise ausgibt: T-SQL: Exceeding the 8000 Byte Limit of the PRINT Statement Zur Anzeige des ganzen Scripts folgen Sie einfach dem Link oder klicken Sie auf dieses Bild: Eine einfache Lösung: 1. Einmaliges Ausführen des LongPrint() Scripts in der eigenen Datenbank und danach 2. statt im eigenen Script PRINT @x zu verwenden, einfach exec LongPrint @x angeben. So klappts mit langen Strings mit mehr als 8000 (bzw. 4000) Zeichen - ohne dass die bestehende Funktionalität umgebaut werden muss! Ein netter, kleiner Workaround bis sich Microsoft hoffentlich diesem Problem annimmt und das Limit von PRINT - vielleicht mit der nächsten SQL Server Version "Denali" (2012?) - behebt.

Neu: Web Platform Installer 3.0

Ganz frisch: Der neue Web Platform Installer 3.0 (Version 7.1.1042.1 vom 13.01.2011) ist verfügbar! www.microsoft.com/web/downloads/platform.aspx Für alle, die Web PI noch nicht kennen: “Der kostenfrei angebotene Web Platform Installer Version 3.0 (Web PI) hilft Ihnen, immer die aktuellen Komponenten der Microsoft Web Plattform herunterzuladen und einzusetzen. Dazu gehören Internet Information Services (IIS), SQL Server Express, das .NET Framework und Visual Web Developer. Zusätzlich installieren Sie damit weit verbreitete, beliebte Open Source-, ASP.NET- und PHP-Webanwendungen.” Für Agenturen, Web Developer, IT-Administratoren und Hoster ein Must Have. Web PI 3.0 (und viel mehr) zeigen wir übrigens auch live auf der xtopia 2011! Web Platform Installer 3.0 läuft unter allen Windows Versionen ab Windows XP SP2 und ab Windows Server 2003 SP1. Der Download ist nur 92KB klein, d.h. die zu installierenden Pakete werden natürlich bei Bedarf aus dem Internet nachgeladen. www.microsoft.com/web ist übrigens ein guter Startpunkt für Web-Hoster. So sieht Web PI nach der Installation aus: Gewünschte Pakete werden einfach hinzugefügt und installiert. Nach der Installation: Simple as click! Achja, neben dem Web PI wurden eine ganze Reihe weitere Development-Produkte wie ASP.NET MVC 3, IIS Express, SQL CE 4, Web Farm Framework, Orchard und WebMatrix veröffentlicht – aber das ist eine weitere Geschichte. Viel Spaß mit der Microsoft Web Plattform und beim Ausprobieren der vielen neuen Click-and-Run Weblösungen aus dem Web Platform Installer 3!

atwork auf der xtopia 2011

Unter dem Motto „Kreativität, Inspiration, Ideen“ wird das kommende Microsoft Event xtopia 11 spannende Web-Projekte, Produkt-News sowie Geschäfts-Möglichkeiten vorstellen. auf der xtopia ist das Event für Web-Agenturen und Hoster und findet am 1. Februar 2010 in Wien statt. Der Eintritt ist frei. Wir von atwork freuen uns, auf der xtopia 11 – wie schon im Vorjahr – zwei Sessions für Sie zu präsentieren! In unseren Projekte befassen wir uns ständig mit neuen Webtechnologien und –möglichkeiten. Diese stellen wir Ihnen am Event vor: In unserem Track “HTML 5 und jQuery - das neue Flash?” für Web-Developer berichten wir über diese brandaktuellen Technologien, wie man sie einsetzt, ihre Vorzüge und demonstrieren dies anhand vieler Beispiele aus unserer Praxis. Unsere Session “Die Microsoft Web Platform aus Business Sicht” richtet sich an Entscheider und Web-Developer und zeigt, welche Vorteile Sie mit ASP.NET, SQL Server und IIS Webserver erhalten, aber auch wie Sie “fremde” Systeme auf Ihre eigene Plattform übernehmen können. Nebenbei werden wir viele Praxisbeispiele zeigen und Ihnen Informationen aus unserer jahrelangen Erfahrung in Entwicklung und Hosting liefern. Und zum Austauschen und Netzwerken ist ebenso viel Zeit! Lassen Sie sich vom innovativen Design des neuen BENE Showrooms inspirieren und besuchen Sie uns auf der xtopia 11! Melden Sie sich jetzt gleich an – die Plätze sind begrenzt! Wir freuen uns! CU there!

SQL Server-Problem mit SP2 Update (sqlagent100_msdb_upgrade.sql encountered error 598)

SQL Server kann viel. So viel, dass manchmal auch Fehler zustande kommen können, wo man zunächst an nichts Böses denkt ... und dann kommt es doch anders. Bei Web-Hostern äußerst beliebt ist die freie SQL Server Express Edition, die ist gratis, schlank, reicht für Web-Anwendungen meist völlig und ist dennoch ein voller SQL Server: Kurz: Eine ausgezeichnete Plattform zum Betreiben von Webseiten und kleinen Systemen. Ich habe die Anforderung eine neue Webanwendung mit kleiner SQL Datenbank auf einem Webserver einzurichten. Kein Problem (dachte ich mir), die Webanwendung war sofort am IIS7 Webserver eingetragen, jetzt nur noch die Datenbank restoren... So starte ich das SQL Management Studio der SQL Server Express Edition - aber die Anmeldung funktioniert nicht... Vielleicht ist etwas mit dem Dienst nicht in Ordnung? Ah, der SQL Dienst läuft gar nicht mehr! (Wie ist denn das passiert?) Also den SQL Dienst neu starten. Das funktioniert wie gewohnt, ok. Leider funktioniert die Verbindung zum SQL Dienst immer noch nicht! Hm, dann verbinden wir uns mal nochmals mit dem SQL Management Studio auf den nun laufenden Datenbank-Dienst. Jetzt kommt die Überraschung: Login failed ... Reason: Server is in script upgrade mode. Only administrator can connect at this time. Da stimmt wohl etwas nicht... Auf ins Eventlog. Hier steht schon etwas mehr Information zum Problem mit MSSQL$SQLEXPRESS: "Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online." Na toll (Muss ich jetzt wirklich die MASTER Datenbank restoren?). Und gleich darunter (Ja, weiterlesen hilft... ) "Script level upgrade for database 'master' failed because upgrade step 'sqlagent100_msdb_upgrade.sql' encountered error 598, state 1, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion." Aha. Es gibt also ein Problem während eines SQL Server Updates bzw. nach der Installation von SP2 (das auf der Maschine vor ein paar Tagen durchgeführt wurde), die Recherche liefert dazu auch Ergebnisse, hier einige davon: http://connect.microsoft.com/SQLServer/feedback/details/610217/sqlserver-2008-sp2-installation-failed http://www.sqldbadiaries.com/2010/12/06/server-is-in-script-upgrade-mode-only-administrator-can-connect-at-this-time/ http://datazulu.com/blog/2010/05/default.aspx Die Ursache: Die Installation des SP2 wurde durchgeführt, aber "bestimmte" Scripts konnten nicht vollständig ausgeführt werden. "This issue happens because the SQL Server service was stopped when the SP2 installation was in progress. Service Pack installation completes successfully but certain scripts (most of the times sqlagent100_msdb_upgrade.sql) in the Service Pack will be applied only after the SQL Server service starts the next time." Also lautet die Empfehlung: Das abgebrochene Script fortsetzen um den SQL Dienst wieder zum Laufen zu bringen. Allerdings steht nicht dabei WIE. Mein SQL Dienst kann zwar starten, aber ich laufe immer wieder in dasselbe Problem, dass ich mich nicht anmelden kann. Ich erspare Ihnen und mir jetzt meine erfolglosen Recherche-Ergebnisse und Versuche - hier die zusammengefasste, rasche Lösung dazu: In RegEdit.exe nachsehen, wie die Datenpfade des SQL Servers lauten und zwar im Key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer   In meinem Fall lauten die eingetragenen Verzeichnisse D:\SQL\Data und D:\SQL\Log. Und: Diese Verzeichnisse sind NICHT vorhanden! Das abgebrochene Script überprüft anscheinend nicht, ob die Verzeichnisse vorhanden sind und ... bricht ab. Also nun die beiden Verzeichnisse physisch anlegen:   (Bzw. Prüfen Sie bitte VOR SP2 Installation, ob die SQL Daten-Verzeichnisse vorhanden sind...) Soweit so gut. Jetzt muss nur noch das Script irgendwie fortgesetzt werden. Here´s how: Nun den SQL Server Dienst (wenn er läuft: stoppen) im Single User Mode wie folgt aus der Console starten: CD "C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn" sqlservr.exe -c -m -s "SQLEXPRESS" (Der Instanz-Name heißt standardmäßig SQLExpress. Infos zu den Parametern hier: Starting SQL Server in Single-User Mode) Nun startet der SQL Server Dienst und das abgebrochene Script läuft durch - ein cleverer Kerl, der SQL Server: Wenn das Script durchgelaufen ist (bei mir etwa 1 Minute), dann meldet der Dienst "Recovery is complete. ... No user action is required." Nun den Dienst mit STRG+C abbrechen (wie im Screenshot), damit wird auch der SQL Dienst beendet. Und jetzt wie gewohnt den SQL Dienst neu starten.   Jipee. Der Dienst startet (wie gewohnt im Multi User Mode) und die Anmeldung im SQL Management Studio klappt wieder! Was so ein fehlendes Daten-Verzeichnis in Verbindung mit einem Update-Script bewirken kann... Bei dieser Gelegenheit ist es vielleicht eine ganz gute Idee, die (System) Datenbanken wieder mal zu sichern bzw. die Backup-Scripts laufen zu lassen - bei SQL Express Edition läuft der SQL Agent ja nicht, das muss man dann per Workaround automatisiert machen - das schreib ich mal in einem eigenen Artikel... . Ich hoffe, diese step-by-step Anleitung hilft allen DB- und System-Admins, die auch in dieses SP2-Upgrade Problem laufen! Somit hoffe ich, alle (Datenbank) Systeme laufen brav und ohne Überraschungen über die kommenden Festtage und wir SysAdmins haben geruhsame Feiertage!

IE9 ganz Privat: Tracking Protection Lists

Das IE9-Team tut (Einiges) Alles, um den neuen Internet Explorer 9 zum Top-Browser zu machen (siehe auch TechNet: Microsoft Internet Explorer). Vor kurzem hat das Produkt-Team in seinem Blog eine weitere neue Funktion angekündigt: "Tracking Protection". Mit "Tracking Protection Lists" (mit der sinnigen Abkürzung TPL) kann ein Benutzer unerwünschtes Tracking ausschalten - und somit auch kontrollieren, welche Informationen an fremde Systeme gesendet oder nicht gesendet werden dürfen. Das Thema Privatsphäre muss ernst genommen werden. Somit hat sich auch das IE Team zum Ziel gemacht, effektive Mechanismen einzusetzen um dem Benutzer die Steuerung seines Datenstroms zu ermöglichen ("...more effective technologies for consumer control"). TPL ist eine davon. Hm, wozu könnte das gut sein? Heute sind fast alle Webseiten verlinkt und benutzen Inhalte und Scripts von anderen Web(systemen), etwa für Social Media-Aktivitäten, Website-Traffic Analyse aber auch für Werbebanner und sonstige Adserver-Aktivitäten. Hier einige Beispiele: oder Der Seiten-Quellcode offenbart auch die Quelle, zum Beispiel sieht das bei der obigen Werbung so aus: <iframe width="300" height="250" title="Ad" src="http://d3l3lkinz3f56t.cloudfront.net/dclk1-0.9.html#swf=http%3A//s0.2mdn.net/1614546/EA_... Mit TPL können solche eingebetteten Inhalte auf Wunsch blockiert werden. "IE9 will offer consumers a new opt-in mechanism ("Tracking Protection") to identify and block many forms of undesired tracking." Unerwünschte URLs können zur TPL hinzugefügt werden, das sieht dann (mit unscharfem Screenshot aus einem Video) in etwa so aus: Geblockte Inhalte werden mit rotem Rahmen angezeigt, zugelassene Inhalte mit grünem Rahmen (nach dem Reload der Seite erscheinen die roten Rahmen nur mehr leer). Diese Regeln "Do not Track" wirken sich nicht nur auf die aktuelle Webseite aus, sondern natürlich für alle Webseiten (die diese geblockten Adressen aus der TPL verwenden) - wir kennen das Verhalten ja bereits von Drittherstellern und "AdServer-Blocking" AddOns. Mit TPL kann jeder Anwender mit einem Regelwerk selbst bestimmen, welche Fremd-Aufrufe zugelassen werden sollen und welche nicht. Die Regeln können sehr komplex sein und werden in einem XML-Dokument gespeichert - dieses wird voraussichtlich so aussehen (Screenshot aus dem Original-Artikel): Hier werden mit Regular Expressions geblockte (blockRegex) und erlaubte (allowRegex) Adressen angegeben: Das Fazit des IE-Produktteams: "We believe that the combination of consumer opt-in, an open platform for publishing of Tracking Protection Lists (TPLs), and the underlying technology mechanism for Tracking Protection offer new options and a good balance between empowering consumers and online industry needs." Vor allem: Es funktioniert sehr einfach - eine gute Voraussetzung für den Einsatz. Hier geht es zum Original-Artikel: IE9 and Privacy: Introducing Tracking Protection. Ein kurzes Silverlight-Video im Artikel zeigt die TPL-Funktionalität in Action: TPL wird ab dem IE9 Release Candidate verfügbar sein. (Für die letzte IE9-Version siehe http://ie.microsoft.com/testdrive) Achja noch ein Hinweis zur Installation von IE9: Im Web sind Gerüchte aufgetaucht, dass IE9 RTM unbedingt Windows 7 SP1 benötigen wird. Diese sind FALSCH. IE9 wird nur einige Hotfixes und Updates benötigen, die in SP1 enthalten sein werden, aber nicht das "ganze" SP1 - und diese Updates werden mit der Installation von IE9 mitkommen und sich bei Bedarf automatisch installieren: "When you install Internet Explorer 9 on a system that has Windows 7 RTM installed, additional operating system components are included as part of the installation of Internet Explorer 9. ... this will be a seamless process for the user." Derzeit ist Windows 7 Service Pack 1 Release Candidate verfügbar, die RTM-Version wird in der ersten Jahreshälfte 2011 veröffentlicht werden. Viel Spaß beim Testen von IE9!

Hidden features in IE9 #tee10

IE9 ist cool. Nicht nur wegen Geschwindigkeit und HTML5-Unterstützung sondern auch wegen einer Reihe von neuen, coolen Funktionen - für Anwender und vor allem für Web-Developer. Einige davon hat Giorgio Sardo, Sr. Technical Evangelist bei Microsoft, auf der TechEd 2010 verraten. Also: Nicht weitersagen! Einige Funktionen sind ganz neu - Holen Sie sich die letzte IE9 Platform Preview von www.ietestdrive.com! Neu in IE9 sind die "New Tabs" (STRG+T). Wie kann man einstellen, wie viele zuvor besuchten Websites IE9 präsentiert, wenn man eine neue Website mit "New Tab" öffnet? Standardmäßig werden zwei Zeilen mit den am stärksten besuchten Seiten angezeigt. Ich finde diese Funktion sehr praktisch, denn beim Öffnen einer neuen Registerkarte will man im Regelfall ja ... eine neue oder bestehende Seite öffnen. Das Anpassen funktioniert recht einfach: Starten Sie den RegistrierungsEditor regedit.exe und erstellen Sie in HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing\NewTabPage einen neuen Key vom Type DWORD mit Namen "NumRows" und dem Wert "4" (Hex oder Dez.) - wie hier: Danach IE9 schließen, neu starten und ausprobieren: Voila, 4 Zeilen mit den meist besuchten Websites. Fesch, oder? (Fast) ganz neu: Die Developer Tools (F12). Im Menü "Extras/Zeichenfolge des Benutzer-Agents ändern" (Change user agent string) kann das Rendering auf andere Browser umgeschalten werden, z.B. auf einen "Benutzerdefinierten" Typ mit Einstellungen fürsMobile Phones od. ähnliche Browserkennungen - Cool für Web Developer! Testen wir mal mit bing.com: Heute wieder mal mit besonders hübschem (Urlaubs) Foto. (Woher weiß bing, dass ich auf Urlaub fahren möchte...?) Stellen wir mal den User Agent auf Benutzerdefiniert: Und tragen diese Zeichenfolge ein: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 Und sehen uns bing.com erneut an (Refresh mit F5): Hat funktioniert: So sieht bing.com also am iPhone aus. ;-) Sehr hilfreich finde ich auch die Bild-Informationen. In Developer Tools, Menü "Bilder/Bildabmessungen ... anzeigen" aktivieren - zeigt die Größe aller Bilder in der Webseite, auch die Alt-Tag-Info, Bildpfad und Bildgröße: So wird dann die  Bild-Information in jedem Bild eingeblendet: Gerade für unvollständige Bildinformationen ist das für Developer sehr hilfreich, ebenso auch der Bildbericht (der hat bei mir aber nicht funktioniert, ich nehme an, daran wird noch gearbeitet...). Im Developer Menu File kann auch ein alternativer Texteditor, wie z.B. Visual Studio, eingestellt werden um den Seitenquelltext darzustellen: Jetzt zu einem sehr coolen Feature: Javascript. Die nun beschriebene Funktion ist jedoch erst im letzten IE9 Preview 7 enthalten (die vorigen Funktionen sind bereits in IE9 Beta integriert): Man nehme eine Website wie z.B. Facebook . Ich will mir den Seitenquellcode ansehen - also F12. Hier nun auf Skript: Alle in der aktuellen Seite eingebetteten Javascripts werden in einer eigenen Dropdown angezeigt. Hm. Der Javascript-Code ist für optimale Ladezeiten optimiert. Gut fürs Web - aber für einen Entwickler kaum lesbar. Dafür gibt es in den Tools die Funktion "Format Javascript": Besser: ;-) Aus optimiertem JS-Code wird gut lesbarer Code. Oder - wie man heutzutage Zustimmung zeigt: "Gefällt mir". Fazit: In IE9 gibt es - gerade für Web Developer - viel zu entdecken. Starten Sie Ihre eigene Entdeckungstour! Viel Spaß!

HTML5 rulez @ #tee10

So gab es bei der virtuellen PDC und bei TechEd Europe viele Eindrücke, Sessions und Meinungen zum Thema HTML5. Also fangen wir ... von hinten an: Mit der letzten Session der TechEd am Freitag nach Mittag: Giorgio Sardo, Sr. Technical Evangelist bei Microsoft, präsentierte in WEB203 eine Reihe von Demos in HTML5. Hiermit kann sich jeder schon jetzt ein Bild von den Möglichkeiten mit HTML5 machen - es ist nur ein (neuer) Browser erforderlich, der HTML5 unterstützt: Holen Sie sich zum Ansehen der Demos die letzte IE9 Platform Preview von www.ietestdrive.com! Zunächst aber noch ein paar aktuelle Infos zu HTML5: "HTML5" wird gerne als Umbrella Begriff verwendet, für alles was mit "Neuen Web Standards" bezeichnet wird. Tatsächlich folgt HTML5 aber einer wohl definierten Spezifikation. Microsoft hat sich zu HTML5 verpflichtet: Vollständige Unterstützung von HTML5, CSS3, SVG, Web Apps, und ECMA Script 262. Die HTML5 Spezifikation (kind of feature complete) wird in den ersten 2-3 Monaten 2011 erwartet, von da an wird HTML als Candidate Recommendation definiert und als call for implementers fortgeführt. Auf jeden Fall ist zu erwarten, dass sich alle Browser Hersteller daran halten und den neuen Standard umsetzen werden. Giorgio zeigte in seiner Session auch einige Neuigkeiten von IE9 Beta Release 7, wie Download Manager, Speed Up, Mixed Mode und ein paar Tipps und Tricks - diese folgen in einem eigenen Artikel hier. ;-) Und nun zu einigen HTML5-Demos: Besuchen Sie www.beautyoftheweb.com! Viele Demos (und auch Tutorials) auf ietestdrive.com Viele Fotos auf Flickr Postcards Auf canvasdemos.com finden sich viele Demos, von Apps über Games bis hin zu Tutorials. Tipp: Spiele Sie Sinuous, das ist einfach und macht Spaß. ;-) dhteumeuleu.com und Canvas 3D ansehen, interaktives Bewegen in Räumen - unglaublich, was mit HTML5 machbar ist. Auf 10k.aneventapart.com sind die Gewinner und deren Apps des Microsoft HTML5 Wettbewerbs, die eine App in weniger als 10KB Code erstellt haben. Demos: 426 - Drahtgitter, 68 - Uhrzeit Die besten 10: Roundup of Best HTML5 10K Applications beatkeep.net interaktives Demo mit Schlagzeug-Steuerung von (eigenen) Songs - alles außer dem Logo sind Canvas-Objekte. Etwas Patriotisches: html5.redbull.com Interaktives Design von BMW: joydefinesthefuture.com nevermindthebullets.com ein interaktiver Western. ...more to follow... Viel Spaß mit den Demos und HTML5!