Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Database di SQL Server su condivisione UNC

AttachDbFileName è una caratteristica terribile e fuorviante. Quello che succede è che ogni applicazione che si collega a questo "database" fa una copia del file di dati. Quindi se Machine1 si connette e apporta modifiche, tali modifiche sono invisibili a Machine2 . Ciò provoca molta confusione anche in uno scenario su un solo computer perché le persone si connetteranno tramite Visual Studio, eseguiranno alcuni aggiornamenti e quindi non lo vedranno da Management Studio. O vice versa. L'User Instance funzione è stata ritirata per una ragione; per favore smetti di usarli entrambi.

Poiché desideri che più macchine/applicazioni si connettano allo stesso copia del database, la soluzione che desideri è avere una singola copia del database collegata a una singola istanza di SQL Server e entrambe le applicazioni/macchine si connettono semplicemente a quella singola copia.

Su MACHINE1-PC fai questo:

  1. Sposta ShopDatabase.mdf e il relativo .ldf file dalla tua cartella utente e nella cartella dei dati per la tua istanza. Sarà qualcosa come:

  2. Connettiti all'istanza Express locale utilizzando .\SQLEXPRESS . Allega il database utilizzando il seguente codice:

    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. Determina l'indirizzo IP esterno di MACHINE1-PC (puoi farlo tramite ping da un'altra macchina - localmente ti dirà 127.0.0.1 che è inutile). Supponendo che tu abbia un IP fisso e non utilizzi DHCP, questo sarà probabilmente un modo più affidabile per connettersi, o almeno mancherà un passaggio aggiuntivo (risoluzione del nome). Se utilizzi DHCP, tuttavia, non vorrai fare affidamento su questo perché il tuo indirizzo IP potrebbe potenzialmente cambiare nel tempo. La tua stringa di connessione ora dovrebbe essere:

    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)
    

Su Machine1 la stringa di connessione potrebbe usa Data Source=.\SQLEXPRESS , ma è meglio essere coerenti che salvare un paio di sequenze di tasti. In questo modo, se apporti altre modifiche al tuo file di configurazione, ecc., possono essere distribuite su altre macchine senza dover cambiare il nome della macchina.