Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Datenbank auf UNC-Freigabe

AttachDbFileName ist eine schreckliche und irreführende Funktion. Was passiert ist, dass jede Anwendung, die sich mit dieser "Datenbank" verbindet, eine Kopie der Datendatei erstellt. Wenn also Machine1 verbindet und Änderungen vornimmt, sind diese Änderungen für Machine2 unsichtbar . Dies führt selbst in einem Einzelcomputerszenario zu erheblicher Verwirrung, da die Benutzer eine Verbindung über Visual Studio herstellen, einige Aktualisierungen vornehmen und diese dann von Management Studio aus nicht sehen. Oder umgekehrt. Die User Instance Funktion wurde eingestellt aus einem Grund; Bitte hören Sie auf, beides zu verwenden.

Da Sie möchten, dass sich mehrere Computer/Anwendungen mit demselben verbinden Kopie Ihrer Datenbank, besteht die gewünschte Lösung darin, eine einzelne Kopie der Datenbank an eine einzelne Instanz von SQL Server anzuhängen, und beide Anwendungen/Maschinen stellen einfach eine Verbindung zu dieser einzelnen Kopie her.

Auf MACHINE1-PC tun Sie dies:

  1. Verschieben Sie ShopDatabase.mdf und die zugehörige .ldf Datei aus Ihrem Benutzerordner und in den Datenordner für Ihre Instanz. Das wird etwas sein wie:

  2. Stellen Sie mit .\SQLEXPRESS eine Verbindung zur lokalen Express-Instanz her . Datenbank anhängen Verwenden Sie den folgenden Code:

    CREATE DATABASE ShopDatabase 
      ON (FILENAME = 'C:\...\ShopDatabase.mdf'), 
      -------------------^^^ fill this in
         (FILENAME = 'C:\...\ShopDatabase_Log.ldf') 
      -------------------^^^ fill this in
    FOR ATTACH;
    
    -- if there is no log file, you may need to do:
    
    CREATE DATABASE ShopDatabase 
      ON (FILENAME = 'C:\...\ShopDatabase.mdf') 
      -------------------^^^ fill this in
    FOR ATTACH_REBUILD_LOG;
    
  3. Bestimmen Sie die externe IP-Adresse von MACHINE1-PC (Sie können dies per Ping von einem anderen Computer aus tun - lokal wird Ihnen 127.0.0.1 mitgeteilt was sinnlos ist). Angenommen, Sie haben eine feste IP und verwenden kein DHCP, ist dies wahrscheinlich eine zuverlässigere Verbindungsmethode oder es fehlt zumindest ein zusätzlicher Schritt (Auflösen des Namens). Wenn Sie jedoch DHCP verwenden, sollten Sie sich nicht darauf verlassen, da sich Ihre IP-Adresse möglicherweise im Laufe der Zeit ändert. Ihre Verbindungszeichenfolge sollte jetzt lauten:

    Data Source=MACHINE1-PC\SQLEXPRESS;
      Network=DBMSSOCN;
      Integrated Security=True;
      Initial Catalog=ShopDatabase;
    
    -- or:
    
    Data Source=<<IP Address>>\SQLEXPRESS;
      Network=DBMSSOCN;
      Integrated Security=True;
      Initial Catalog=ShopDatabase;
    
    -- (replace <<IP Address>> of course)
    

Auf Machine1 Ihre Verbindungszeichenfolge könnte Verwenden Sie Data Source=.\SQLEXPRESS , aber besser konsequent sein, als ein paar Tastenanschläge zu sparen. Auf diese Weise können andere Änderungen an Ihrer Konfigurationsdatei usw. an andere Computer verteilt werden, ohne dass der Computername geändert werden muss.