sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server-databas på UNC-resurs

AttachDbFileName är ett fruktansvärt och missvisande inslag. Det som händer är att varje applikation som ansluter till denna "databas" gör en kopia av datafilen. Så om Machine1 ansluter och gör ändringar, dessa ändringar är osynliga för Machine2 . Detta orsakar mycket förvirring även i ett scenario med en enda maskin eftersom människor kommer att ansluta via Visual Studio, göra någon uppdatering och sedan inte se det från Management Studio. Eller tvärtom. User Instance funktionen har fasats ut av en anledning; snälla sluta använda båda dessa.

Eftersom du vill att flera maskiner/applikationer ska ansluta till samma kopia av din databas, lösningen du vill ha är att ha en enda kopia av databasen kopplad till en enda instans av SQL Server, och båda applikationerna/maskinerna ansluter bara till den enda kopian.

MACHINE1-PC gör så här:

  1. Flytta ShopDatabase.mdf och dess associerade .ldf fil från din användarmapp och till datamappen för din instans. Det här blir något gillar:

  2. Anslut till den lokala Express-instansen med .\SQLEXPRESS . Bifoga databasen med följande kod:

    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. Bestäm den externa IP-adressen för MACHINE1-PC (du kan göra detta via ping från en annan dator - lokalt kommer den att berätta för dig 127.0.0.1 vilket är värdelöst). Förutsatt att du har en fast IP och inte använder DHCP, kommer detta troligen att vara ett mer tillförlitligt sätt att ansluta, eller åtminstone saknas ett extra steg (att lösa namnet). Om du använder DHCP men du vill inte lita på detta eftersom din IP-adress potentiellt kommer att förändras över tiden. Din anslutningssträng ska nu vara:

    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)
    

Machine1 din anslutningssträng kunde använd Data Source=.\SQLEXPRESS , men bättre att vara konsekvent än att spara ett par knapptryckningar. På det här sättet om du gör andra ändringar i din konfigurationsfil etc. kan de distribueras till andra maskiner utan att behöva ändra maskinnamnet.




  1. Hur sanerar jag data som tas emot från ett textområde på rätt sätt när jag matar ut det tillbaka till textområdet?

  2. MySQL kolumnnamn standarder / konventioner

  3. Hur man skapar en tabell i designvy i Access 2016

  4. MySQL Row-nivålås