Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Banco de dados SQL Server em compartilhamento UNC


AttachDbFileName é uma característica terrível e enganosa. O que acontece é que cada aplicativo que se conecta a esse "banco de dados" faz uma cópia do arquivo de dados. Portanto, se Machine1 conecta e faz alterações, essas alterações são invisíveis para Machine2 . Isso causa muita confusão, mesmo em um cenário de máquina única, porque as pessoas se conectarão via Visual Studio, farão alguma atualização e não a verão no Management Studio. Ou vice-versa. A User Instance recurso foi descontinuado por uma razão; por favor, pare de usar ambos.

Como você deseja que várias máquinas/aplicativos se conectem ao mesmo cópia do seu banco de dados, a solução que você deseja é ter uma única cópia do banco de dados anexada a uma única instância do SQL Server, e ambos os aplicativos/máquinas apenas se conectam a essa única cópia.

Em MACHINE1-PC fazem isto:

  1. Mover ShopDatabase.mdf e seu .ldf associado arquivo da sua pasta de usuário para a pasta de dados da sua instância. Isso será algo Curti:

  2. Conecte-se à instância local do Express usando .\SQLEXPRESS . Anexe o banco de dados usando o seguinte código:
    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. Determine o endereço IP externo de MACHINE1-PC (você pode fazer isso via ping de outra máquina - localmente, ele informará 127.0.0.1 que é inútil). Supondo que você tenha um IP fixo e não esteja usando DHCP, essa provavelmente será uma maneira mais confiável de se conectar, ou pelo menos está faltando uma etapa extra (resolver o nome). Se você usa DHCP, não vai querer confiar nisso porque seu endereço IP pode mudar com o tempo. Sua string de conexão agora deve ser:
    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)
    

Na Machine1 sua string de conexão poderia use Data Source=.\SQLEXPRESS , mas é melhor ser consistente do que salvar algumas teclas. Desta forma, se você fizer outras alterações em seu arquivo de configuração, etc., elas podem ser distribuídas para outras máquinas sem a necessidade de alterar o nome da máquina.