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

SQL Server-database på UNC-share

AttachDbFileName er en frygtelig og vildledende funktion. Hvad der sker er, at hver applikation, der forbinder til denne "database", laver en kopi af datafilen. Så hvis Machine1 forbinder og foretager ændringer, er disse ændringer usynlige for Machine2 . Dette forårsager en masse forvirring, selv i et enkelt-maskine-scenarie, fordi folk vil oprette forbindelse via Visual Studio, lave en opdatering og derefter ikke se det fra Management Studio. Eller omvendt. User Instance funktion er blevet forældet Af en grund; stop venligst med at bruge begge disse.

Da du vil have flere maskiner/applikationer til at oprette forbindelse til den samme kopi af din database, er den løsning, du ønsker, at have en enkelt kopi af databasen knyttet til en enkelt forekomst af SQL Server, og begge applikationer/maskiner forbindes bare til den enkelte kopi.

MACHINE1-PC gør dette:

  1. Flyt ShopDatabase.mdf og dens tilhørende .ldf fil ud af din brugermappe og ind i datamappen for din instans. Dette vil være noget som:

  2. Opret forbindelse til den lokale Express-instans ved hjælp af .\SQLEXPRESS . Vedhæft databasen ved hjælp af følgende kode:

    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. Bestem den eksterne IP-adresse på MACHINE1-PC (du kan gøre dette via ping fra en anden maskine - lokalt vil den fortælle dig 127.0.0.1 hvilket er ubrugeligt). Hvis du antager, at du har en fast IP og ikke bruger DHCP, vil dette sandsynligvis være en mere pålidelig måde at oprette forbindelse på, eller i det mindste mangler et ekstra trin (at løse navnet). Hvis du bruger DHCP, vil du dog ikke stole på dette, fordi din IP-adresse potentielt vil ændre sig over tid. Din forbindelsesstreng skulle nu være:

    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 forbindelsesstreng kunne brug Data Source=.\SQLEXPRESS , men bedre at være konsekvent end at gemme et par tastetryk. På denne måde, hvis du foretager andre ændringer i din konfigurationsfil osv., kan de distribueres til andre maskiner uden at skulle ændre maskinnavnet.




  1. ScalikeJDBC:Forbindelsespuljen er endnu ikke initialiseret.(navn:'default)

  2. ODBC-opkald mislykkedes med lagret procedure - Send forespørgsel igennem

  3. Hvornår skal jeg bruge UNSIGNED og SIGNED INT i MySQL?

  4. Brug af LENGTH (beregnet kolonne) i ORDER BY i Postgres sql