Anmelden
Ich möchte für die nächsten 30 Tagen angemeldet bleiben
Deutsch
Several pages in the usergroup are available in English. Click on english to visit these pages.

Blogs

10.04.2007
DotNetNuke, SQL Express und User Instances (Benjamin Hermann)
Verwendet man SQL Express, so gibt es die so genannten “User Instances“. Was bedeutet das eigentlich? Und was bringt das ganze für DNN 4?
Nun, bisher z.B. unter DNN 3, musste man immer einen klassischen Connection-String  angeben (DB Server Name, DB, User und Password). Wenn man nun verschiedene DNN Portale (Installationen) auf einem Webserver betreibt, dann braucht man pro Installation einen DB; und alle betriebenen DBs laufen dabei unter Windows unter einem Prozess. Musste man diesen anhalten, standen alle DNN Installationen still. Und wenn es z.B. nur einen SA User gibt, dieser aber für mehrere DNN Installationen als DB User angegeben wurde, dann können die einzelnen Host-User einer DNN Installation in die DB einer anderen Installation schauen … und das will ja keiner ;). Man konnte natürlich mehrere Instanzen des SQL-Servers bzw. der MSDE installieren, was die meisten Anwender verständlicherweise aber nicht machen.

Unter DNN 4 fällt in diesem Zusammenhang der andere Connection-String in der Web.Config auf: 

<add name="SiteSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|Database.mdf;" providerName="System.Data.SqlClient" />. 

Das Schöne daran ist, dass die DB hier direkt über den Dateinamen abgesprochen wird. Beim ersten Aufruf wird sie automatisch an den laufenden SQL Express Dienst angehängt. So kann man z.B. DNN inkl. DB leicht von einem Server auf einen anderen kopieren. Auch beim Erstellen von Backups beitet das einige Vorteile. Ein weiterer Vorteil sind die angesprochenen „User Instances“. Letztlich bedeutet das, dass pro Datenbank (sprich pro DNN) ein eigener Prozess gestartet wird. Hält man diesen an, laufen alle anderen DNN Installationen weiter. Auch die Sicherheit ist deutlich erhöht, da Host User nicht auf die Datenbanken anderer DNN Installationen zugreifen können.

Jetzt stellt sich doch letztlich die Frage, ob man bestehende DNN 4 Installationen die einen klassischen SQL-Connection-String  verwenden auf SQL Express unter Verwendung des „neuen“ Connection-Strings umziehen kann: Ja, kann man.

Im Enterprise Manager (Verwaltungs-Tool für den SQL Server) hängt man die betroffene Datenbank ab (detach). Jede Datenbank des SQL-Servers (2000, MSDE) hat auf dem Dateisystem zwei Dateien (DBNAME.mdf, DBNAME.ldf). Bei einer Standardinstallation findet man diese unter C:\Program Files\Microsoft SQL Server\MSSQL\Data o.ä.  . Die zur abgehängten Datenbank gehöhrenden Dateien (beide) kopiert man nun die das DotNetNuke Verzeichnis APP_DATA. Die dort bereits liegende Database.mdf kann man ruhig löschen. So, nun muss man nun noch die Web.Config anpassen. Natürlich muss man den SQL Express Connection String benutzen und diese entsprechend verändern. Der Wert „AttachDBFilename=|DataDirectory|Database.mdf;" muss in AttachDBFilename=|DataDirectory|DBNAMEmdf;" geändert werden. Natürlich eurem DB Dateinamen entsprechend. Und nicht vergessen: In DNN 4 gibt es zwei Connection-Strings. Beide anpassen nicht vergessen.

Für DNN3 habe ich dieses Vorgehen noch nicht getestet.

Noch zur Ergänzung: Wenn die DB unter Verwendung von User Instances eingebunden wird, dann kann man nicht gleichzeitig per Web (DNN) und per Admin Tool auf die DB zugreifen.
Dennoch: Es ist ein Zugriff auf eine DB mit dem SQL Manager im laufenden Betrieb möglich. Dazu müsst Ihr einfach die User Instances abschalten. Das sieht dann ca. so aus:
<add name="SiteSqlServer" connectionString="Data Source=.\SQLExpress;Integrated Security=True;User Instance=False;AttachDBFilename=|DataDirectory|Database.mdf;" providerName="System.Data.SqlClient" /> . und der Unterschied: nicht jede DB läuft in einem eigenen Prozess unter Windows.

http://msdn2.microsoft.com/en-us/library/ms345154.aspx
http://www.dotnetnuke.com/Community/BlogsDotNetNuke/tabid/825/EntryID/1202/Default.aspx

Kommentare: 5

Sven Hampel meint

Wie es der Teufel will, genau dieses Thema habe ich im Moment gesucht. Und die Beschreibung ist auch sehr gut. (Frage: muss bei der Migration von SQL2000 zu 2005 irgendetwas beachtet werden ?? Oder ist es genau so unproblematisch wie beschrieben ?)
# 05.05.2007 21:07

Benjamin Hermann meint

das freit mich, danke.

also, wenn du "nur" von sql 2000 / msde auf sql 2005 (auch express) updaten willst, dann musst du nichts beachten. quasi einfach ein update durchführen. die web.config musst du dann nicht "anfassen".
# 06.05.2007 10:15

Manfred Makosch meint

Hallo Benjamin,

ich lasse SQLServer Express als Instanz unter SQL Server 2005 laufen, um beide Möglichkeiten, sowohl file- als auch serverbasierende Datenbanken zu betreiben. Ich muss dies so handhaben, weil auf meinem virtuellen Server SQL 2005 vorinstalliert ist und ich diesen nicht deinstallieren kann. Das Feature mit den attachten File-Datenbanken bietet ja offensichtlich nur die Expressversion. Jetzt bekomme ich aber immer die Rückmeldung, das eine Beutzerinstanz nicht generiert werden kann. Offensichtlich fehlen der SQLExpress die nötigen Rechte hierzu. Könntest Du Dich bitte mal Remote einloggen und nachsehen (natürlich gegen Bezahlung). Ich komm mit diesem Problem einfach nicht klar. Gruß Manfred
# 03.06.2007 20:58