Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Baza danych SQL Server w udziale UNC

AttachDbFileName jest okropną i mylącą funkcją. Dzieje się tak, że każda aplikacja, która łączy się z tą „bazą danych”, tworzy kopię pliku danych. Więc jeśli Machine1 łączy się i wprowadza zmiany, te zmiany są niewidoczne dla Machine2 . Powoduje to wiele zamieszania nawet w scenariuszu z jednym komputerem, ponieważ ludzie będą łączyć się za pośrednictwem programu Visual Studio, wprowadzać pewne aktualizacje, a następnie nie będą widzieć tego z Management Studio. Lub odwrotnie. User Instance funkcja została przestarzała z powodu; proszę przestań używać obu.

Ponieważ chcesz, aby wiele komputerów/aplikacji łączyło się z tym samym kopię bazy danych, rozwiązanie, które chcesz, to mieć pojedynczą kopię bazy danych dołączoną do jednej instancji SQL Server, a obie aplikacje/maszyny po prostu łączą się z tą pojedynczą kopią.

Na MACHINE1-PC zrób to:

  1. Przenieś ShopDatabase.mdf i powiązany z nim plik .ldf plik z folderu użytkownika i do folderu danych dla swojej instancji. To będzie coś jak:

  2. Połącz się z lokalną instancją Express za pomocą .\SQLEXPRESS . Dołącz bazę danych używając następującego kodu:

    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. Określ zewnętrzny adres IP MACHINE1-PC (możesz to zrobić przez ping z innej maszyny - lokalnie powie Ci 127.0.0.1 co jest bezużyteczne). Zakładając, że masz stały adres IP i nie używasz DHCP, prawdopodobnie będzie to bardziej niezawodny sposób na połączenie, a przynajmniej brakuje dodatkowego kroku (rozwiązania nazwy). Jeśli używasz DHCP, nie będziesz chciał na tym polegać, ponieważ Twój adres IP może się z czasem zmienić. Twoje parametry połączenia powinny teraz wyglądać tak:

    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 Twój ciąg połączenia może użyj Data Source=.\SQLEXPRESS , ale lepiej być konsekwentnym, niż zaoszczędzić kilka naciśnięć klawiszy. W ten sposób, jeśli wprowadzisz inne zmiany w swoim pliku konfiguracyjnym itp., mogą one zostać rozesłane na inne komputery bez konieczności zmiany nazwy komputera.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz tabelę tymczasową w SQL Server

  2. Jak ustawić sortowanie dla połączenia w SQL Server?

  3. Wstaw zbiorczy z parametrem nazwy pliku

  4. SQL Server ODBC Driver nie zgłasza błędów

  5. Podstawy automatyzacji zadań SQL Server