AttachDbFileName
is een vreselijke en misleidende functie. Wat er gebeurt, is dat elke toepassing die verbinding maakt met deze "database" een kopie van het gegevensbestand maakt. Dus als Machine1
maakt verbinding en brengt wijzigingen aan, die wijzigingen zijn onzichtbaar voor Machine2
. Dit veroorzaakt veel verwarring, zelfs in een scenario met één machine, omdat mensen verbinding maken via Visual Studio, een update uitvoeren en deze vervolgens niet zien vanuit Management Studio. Of vice versa. De User Instance
functie is beëindigd
voor een reden; stop alsjeblieft met het gebruik van beide.
Omdat u wilt dat meerdere machines/applicaties verbinding maken met dezelfde kopie van uw database, de oplossing die u wilt is om een enkele kopie van de database te koppelen aan een enkele instantie van SQL Server, en beide toepassingen/machines maken gewoon verbinding met die enkele kopie.
Op MACHINE1-PC
doe dit:
-
Verplaats
ShopDatabase.mdf
en de bijbehorende.ldf
bestand uit uw gebruikersmap en in de gegevensmap voor uw exemplaar. Dit wordt iets zoals: -
Maak verbinding met de lokale Express-instantie met behulp van
.\SQLEXPRESS
. De database bijvoegen met de volgende 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;
-
Bepaal het externe IP-adres van
MACHINE1-PC
(u kunt dit doen via ping vanaf een andere machine - lokaal zal het u vertellen127.0.0.1
wat nutteloos is). Ervan uitgaande dat je een vast IP-adres hebt en geen DHCP gebruikt, is dit waarschijnlijk een betrouwbaardere manier om verbinding te maken, of je mist in ieder geval een extra stap (het oplossen van de naam). Als u DHCP gebruikt, wilt u hier echter niet op vertrouwen, omdat uw IP-adres in de loop van de tijd kan veranderen. Uw verbindingsreeks zou nu moeten zijn: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)
Op Machine1
uw verbindingsreeks zou gebruik Data Source=.\SQLEXPRESS
, maar het is beter om consistent te zijn dan een paar toetsaanslagen op te slaan. Op deze manier kunnen, als u andere wijzigingen aanbrengt in uw configuratiebestand enz., deze naar andere machines worden gedistribueerd zonder dat u de machinenaam hoeft te wijzigen.