Un non-DBA chiede: come copiare / spostare indolore un'istanza di SQL Server su un altro server tramite backup / ripristino?


11

Abbiamo appena ottenuto un nuovo server, quindi ho bisogno di copiare l'istanza esistente di SQL Server 2008 dalla vecchia casella db.

Normalmente lo faccio copiando i file .mdf e di log e collegandoli ma non sono in grado di togliere i dbs dalla linea poiché sono usati 24 ore su 24, 7 giorni su 7, quindi ho eseguito il backup dei database e li ho ripristinati sul nuovo macchina. Tuttavia, ho riscontrato alcuni problemi legati a utenti orfani . Quindi quello che sto cercando è un processo a prova di errore per spostare tutto con il minimo clamore / fastidio / mal di testa. Sono un sviluppatore .Net con una buona quantità di SQL sotto la mia cintura, ma i meccanismi interni di SQL Server sono in gran parte un mistero per me e trovo la documentazione MS dolorosa da strascicare.

Per favore aiuto.


1
Puoi trovare alcune idee in questa domanda precedente . Ma le risposte precedenti sono piuttosto esplicative. Penso che l'idea migliore sarebbe quella di stabilire un mirroring e romperlo dopo, o un log shipping (può fare solo dalla procedura guidata) per tutti i dbs e ripristinare ulteriormente i backup del log necessari, ma se dici di non essere un DBA , quindi probabilmente il metodo di backup è migliore.
Marian,

Risposte:


10

Se non è possibile portare offline i database, è necessario eseguire il backup / ripristino. Suggerirei quanto segue:

  1. Installare SQL 2008 nella nuova casella, utilizzando la stessa struttura di file della vecchia casella per i file MDF e LDF.
  2. Prendi i backup di tutti i database sulla vecchia scatola.
  3. Ripristina master dalla vecchia casella alla nuova casella con SQL avviato in modalità utente singolo. Ripristina metodo principale
  4. Ripristinare ciascun database dalla vecchia casella alla nuova casella con l'opzione NORECOVERY per poter applicare futuri backup Diff o T-log.
  5. Ripristina msdb dalla vecchia casella alla nuova casella.

Se costruisci e configura la nuova scatola in modo che assomigli esattamente a quella vecchia, avrai un minimo sforzo.

Non ho idea di quanto siano grandi i tuoi database, quindi questo metodo potrebbe richiedere molto tempo. La cosa più semplice da fare sarebbe chiudere la vecchia scatola e copiare i file MDF e LDF e quindi (dopo aver ripristinato il master) dovrai solo riavviare SQL per avere i tuoi database online. Ma hai dichiarato che non è un'opzione, poiché i database non possono essere offline.


3
Non dimenticare di copiare le modifiche apportate ai dati dopo aver eseguito i backup. È possibile eseguire un backup diff o un backup tlog e applicarli al nuovo server dopo che è attivo, ma prima di passare.
Eric Humphrey - lotsahelp,

buon punto, ho dimenticato di menzionare anche quello. forse dovrei includere una configurazione db mirror, che potrebbe essere rotta in seguito?
SQLRockstar

1
Immagino che qualcuno abbia già un ampio articolo sui diversi modi di migrare i server. Inoltre, ecco un articolo sul trasferimento di dati di accesso a un nuovo server: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp

8

Fai menzione dell'operazione 24/7, quindi il modo migliore per farlo è creare un mirror del database sul nuovo sistema, quindi puoi semplicemente passare al minimo - forse zero, a seconda di come è strutturata la tua applicazione - downtime utilizzando un client- reindirizzamento laterale. I passaggi di base sono:

  1. Assicurarsi che il database primario sia in esecuzione in modalità di recupero COMPLETO .
  2. Eseguire il backup del primario e ripristinarlo sul mirror WITH NORECOVERY
  3. Creare "endpoint" su entrambi i server e garantire la connettività (ad es. Regole del firewall), impostando correttamente la porta e l'indirizzo IP) ad es .:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
  4. Imposta il mirroring sul mirror, puntando al primario:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
  5. E sul primario, indicando il mirror (solo un nome di database e un indirizzo IP diversi.

  6. Quindi, quando arriva il momento, passa dal primario al mirror:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO

Nota: suppongo che questi due server si trovino sulla stessa rete, quindi sarà OK operare in modalità sincrona. Se si trova su un collegamento WAN, utilizzare la modalità asincrona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.