Gå til innhold

MSSQL: Kopiere database fra en server til en annen


Anbefalte innlegg

Hvordan "speiler" man en database fra en mssql server til en annen?

En måte er å stoppe begge serverene, kopiere over filene databasen ligger i, og starte serverene igjen. Håper det finnes en måte å gjøre dette på uten å stoppe serverene. Serverene står på samme LAN, og det er ingen fw mellom dem.

Om dette er instruksjoner som kan legges i et script ville det være perfekt.

 

NB: Min mssql erfaring er begrenset til start/stopp og kopiering av filene.

Lenke til kommentar
Videoannonse
Annonse

Det er for at ansatte skal kunne utnytte tida på tog/buss til/fra jobb med å jobbe. Tanken er at databaser som kun oppdateres av en person skal kunne kopieres ut av serveren til en lokal msde på laptop, oppdateres på reisen, og legges tilbake på serveren når vedkommende er tilbake på jobb.

Samtidig skal databasen slettes fra laptopen når den ikke trenger å være der (i tilfelle den blir stjålet).

 

Det er ikke snakk om noen permanent sync mellom to servere.

Lenke til kommentar
Hvis det er for å ha en standby server så les om Log Shipping i BOL. Jeg har dessverre ikke prøvd det selv.

6497405[/snapback]

Log Shipping er greit, men der hardware kan tillate det vil Database Mirroring som ble innført i SQL Server 2005 være et bedre alternativ. Database Mirroring i synkront modus vil kunne garantere at dataene til enhver tid er identiske på de to serverene, noe Log Shipping ikke kan. Man kan også ha automatisk failover mellom de to serverene, noe Log Shipping ikke kan.

 

Men, jeg må få påpeke at såvel Log Shipping som Database Mirroring fungerer på databasenivå, så det må tas høyde for at logins, brukerdefinerte meldinger og backuphistorikk ikke blir replikert, siden disse ligger i henholdsvis master, master og msdb-databasen.

 

For informasjon om database mirroring, så er det en utfyllende artikkel på TechNet: Database Mirroring in SQL Server 2005.

 

Ellers så kan det jo også nevnes at backup/restore lenge har vært en metode for å flytte/kopiere databaser fra en server til en annen, uten nedetid.

Lenke til kommentar
Det er for at ansatte skal kunne utnytte tida på tog/buss til/fra jobb med å jobbe. Tanken er at databaser som kun oppdateres av en person skal kunne kopieres ut av serveren til en lokal msde på laptop, oppdateres på reisen, og legges tilbake på serveren når vedkommende er tilbake på jobb.

Samtidig skal databasen slettes fra laptopen når den ikke trenger å være der (i tilfelle den blir stjålet).

 

Det er ikke snakk om noen permanent sync mellom to servere.

6501312[/snapback]

 

Da er det Merge Replication du må ta en kikk på.

Har selv en stor database som replikeres til sju server verden over. Den replikeres ikke til vanlige brukeres pcer eller laptoper, men det er ingenting i veien for å gjøre det.

Det er en del ting du må være klar over før du setter opp Merge Replication. Bl.a. blir det lagt til en ny kolonne i alle replikerte tabeller av type guid. Kolonner av type Identity må settes til Not For Replication, og hver subscriber må tildeles en egen autonummerserie. Triggere bør(må) settes til NOT FOR REPLICATION, eller vil de også kjøres når replikatoren oppdatere rader. NOT FOR REPLICATION bør også settes på check constraints og unique indexes.

 

Foreslår at du leser gjennom artiklene i BOL og setter opp et testmiljø. En lærer mye av prøving og feiling.

Lenke til kommentar
Samtidig skal databasen slettes fra laptopen når den ikke trenger å være der (i tilfelle den blir stjålet).

6501312[/snapback]

Dette er et av de svært få (om ikke den eneste) grunnene til å bruke EFS på databasefiler. Hvis noen bruker et verktøy for å resette en brukers passord vil han ikke lenger få åpnet filene kryptert med EFS. Jeg foreslår på det sterkeste at du tar en titt på Encrypting File System (EFS). Merk, det er svært viktig (kritisk) å forstå hvordan EFS fungerer, og ikke minst hvordan man kan få tilbake krypterte data, før man tar dette i bruk i et produksjonsmiljø.

Lenke til kommentar

Synes dette høres veldig koplisert ut.

Er det ikke mulig å gjøre dette i en sql spørring?

Noe av typen

> DROP database localhost.test
> CREATE database localhost.test LIKE dbserver.test
> FOR $table=tables IN dbserver.test (
>> CREATE localhost.test.$table LIKE dbserver.test.$table
>> INSERT INTO localhost.test.$table (SELECT * FROM dbserver.test.$table)
> )

 

Backup/Restore programmene må vel på et vis utføre noe tilsvarende?

Lenke til kommentar
Synes dette høres veldig koplisert ut.

Er det ikke mulig å gjøre dette i en sql spørring?

Noe av typen

> DROP database localhost.test
> CREATE database localhost.test LIKE dbserver.test
> FOR $table=tables IN dbserver.test (
>> CREATE localhost.test.$table LIKE dbserver.test.$table
>> INSERT INTO localhost.test.$table (SELECT * FROM dbserver.test.$table)
> )

 

Backup/Restore programmene må vel på et vis utføre noe tilsvarende?

6513256[/snapback]

Nei, Backup/Restore henholdsvis leser og skriver de blokkene i databasefilene som inneholder informasjon, enten det er metadata eller andre data.

 

Etter min mening er det kun én god løsning på denne problemstillingen, og det er merge replication i forbindelse med EFS. Det tar noe tid å sette seg inn i og få på plass, men fungerer utmerket etterpå.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...