Domanda

Ho creato un nuovo diagramma di database nel database di test ed è nel server sitde01.Ora voglio spostarlo su un altro server.Come faccio a migrarlo su un altro server.

È stato utile?

Soluzione

può essere fatto, ma è un dolore reale. Ecco un contorno del processo e alcuni script.

I diagrammi sono memorizzati in una tabella "Sistema" denominata Sysdiagrams. Questa tabella (solo?) Viene creata quando fai clic sul nodo dei diagrammi in SSMS, ti chiede se si desidera creare gli oggetti che supportano i diagrammi e fai clic su "Sì". Fallo su entrambi i tuoi database di origine e target.

Creare lo schema o i diagrammi nel database "Sorgente".

Rivedi la struttura e il contenuto dei sysdiagram. Nota che la colonna diagram_id è una colonna di identità. 1 riga viene conservata per ogni diagramma. (Non ti interessa, ma è solito essere 4 o 5 righe in SQL 2000.)

Per copiare in un altro database sulla stessa istanza SQL , il modo più semplice è quello di fare inserire ... Selezionare ... tra le tabelle. Con quella colonna di identità nel modo in cui dovrai agitare con set identity_insert e forse assegnare un nuovo valore di identità sul computer di destinazione. Irritante, ma non criticamente difficile.

Il seguente script coprerà tutti i diagrammi da un database a un altro sullo stesso server (questo è il modo in cui i diagrammi di archivio complessi che hanno impiegato Waaay troppo a lungo per creare, dai database che sono inclini a essere ritirati e ricreati): .

USE TargetDatabase

DELETE sysDiagrams
 where name in (select name from SourceDatabase.dbo.sysDiagrams)

SET identity_insert sysDiagrams on

INSERT sysDiagrams (name, principal_id, diagram_id, version, definition)
 select name, principal_id, diagram_id, version, definition
  from SourceDatabase.dbo.sysDiagrams

SET identity_insert sysDiagrams off
.

Per copiare in un altro database su un'istanza SQL diversa (o server), bene, diventa ancora più difficile. Io uso temporaneamente creato definizioni del server collegate, usando script ho sudato i proiettili durante anni fa e non vogliono mai dover modificare di nuovo (cioè pubblicare una domanda diversa in modo che qualcuno che sappia possa dirti come funzionano) e modificano gli script con quattro Convenzioni di denominazione della parte. Altre opzioni (OpenRowset e simili) sono possibili, ma sono ancora meno familiare con quelle.

Altri suggerimenti

Se desideri spostare i tuoi diagrammi da un'istanza o un server a un altro e non desideri ripristinare l'intero database, puoi procedere come segue.

  1. Se non esiste, crea il database sul tuo server di destinazione.Devi anche fare clic sul nodo "Diagrammi database" in SSMS per creare una tabella dbo.sysDiagrams.
  2. Assicurati quindi di importare tutte le informazioni sullo schema di cui hai bisogno nel diagramma.Perché il tuo diagramma indicherà questi.Cioè.tabelle, PK, FK ecc.deve essere presente.
  3. Eseguire il backup del database sul server di origine.
  4. Ripristinarlo in un database temporaneo sul server di destinazione.In questo modo ottieni tutte le informazioni del tuo diagramma nel server di destinazione.
  5. Copia le informazioni dalla tabella dbo.sysDiagrams nel database temporaneo nella tabella dbo.sysDiagram del database di destinazione.Potresti fare qualcosa del genere (adattato il codice di Philip Kelley):

    USE TargetDatabase 
    
    SET identity_insert sysDiagrams on 
    
    INSERT sysDiagrams (name, principal_id, diagram_id, version, definition) 
     select name, principal_id, diagram_id, version, definition 
      from TempDatabase.dbo.sysDiagrams 
    
    SET identity_insert sysDiagrams off 
    

Questa soluzione ha funzionato perfettamente per me.Ovviamente se non vuoi tutti i diagrammi o se nel database di destinazione esistono altri diagrammi, devi filtrare l'istruzione select ed eseguire qualche manipolazione di Identity_insert, ma questo non dovrebbe essere troppo difficile.

Per spostare il diagramma del database dovrai migrare tutte le tabelle e i trigger inclusi in quello diagramma.Il modo più semplice per farlo è eseguire il backup del DB e ripristino sull'altro server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top