sql >> Database >  >> RDS >> Sqlserver

SQL Server-database op UNC-share

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:

  1. Verplaats ShopDatabase.mdf en de bijbehorende .ldf bestand uit uw gebruikersmap en in de gegevensmap voor uw exemplaar. Dit wordt iets zoals:

  2. 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;
    
  3. Bepaal het externe IP-adres van MACHINE1-PC (u kunt dit doen via ping vanaf een andere machine - lokaal zal het u vertellen 127.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.




  1. Vreemde snelheidsveranderingen met sql-query

  2. MySQL InnoDB geeft geen schijfruimte vrij na het verwijderen van gegevensrijen uit de tabel

  3. mysql &php:tijdelijke/ virtuele id's voor queryresultaten?

  4. Integratie van postgreSQL op WAMP