Domanda

La nostra istanza di SQL Server 2000 ospita diversi database che sono tutti simili, uno per ciascuno dei nostri clienti. Quando arriva il momento di aggiornare tutti, usiamo Red Gate SQL Confronta per generare uno script di migrazione tra il database di sviluppo e una copia dello stato attuale DB di tutti i database di clienti.

SQL Confronto genera uno script che è transazionale, se un passo fallisce, lo script esegue il rollback tutto. Ma attualmente il nostro sistema utilizza un metodo che divide lo script sul separatori lotti (il GO istruzione ) e quindi esegue ogni comando separatamente, che rovina tutta la roba transazionale. Il Vai istruzione non è supportata quando si interroga il database programmazione (in ASP classico)

Vorrei sapere come ho potuto eseguire lo script (mantenendo le transazioni) su tutte quelle basi di dati (come 250 DB), a livello di codice o manualmente in uno strumento? In Query Analyzer , abbiamo bisogno di selezionare ogni DB e premi Esegui che è abbastanza lungo per il numero di DB che abbiamo.

È stato utile?

Soluzione

sqlcmd strumento a riga di comando . Ho la stessa situazione sul server di lavoro.

Ho lo script nel file * .sql e l'elenco dei database sul secondo file. Ho piccolo script bat * che iterare attraverso tutti i database ed eseguire script utilizzando sqlcmd di comando.

Nel dettaglio ho in questo modo:

  • file DB.ini con tutti i database su cui voglio schierare il mio script
  • sql / directory in cui devo conservare tutti gli script
  • RUNIT.BAT - script che distribuisce gli script

La riga di comando appare più-meno in questo modo:

sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -d <database_name> -T

In SQL Server 2000 è stato osql utility

Aggiorna

Red Gate hanno ora uno strumento chiamato SQL Multi Script , che fondamentalmente fa esattamente quello che vuoi. I supporta SQL 2000-2008 R2 e query in esecuzione su più database in parallelo, che migliorano le prestazioni.

Altri suggerimenti

Se è possibile utilizzare SSMS da SQL 2005 o 2008, allora vi consiglio il SSMS Strumento imballare

7 anni più tardi ho avuto lo stesso problema tante volte così ho fatto e pubblicato il progetto:

TAKODEPLOY

Ecco alcune caratteristiche:

  • Ottieni tutti i database da una singola istanza e applicare un filtro nome. O solo una singola connessione diretta.
  • fonti di database Mix tanto quanto si desidera. Esempio, due diretto e un'istanza completo con o withut un filtro.
  • editor di script (Avalon testo, stessa MonoDevelop usa)
  • script vengono analizzati e vengono rilevati errori prima di eseguire.
  • Gli script sono 'suddivisi' dalle dichiarazioni GO.
  • Salva la distribuzione in un file
  • Ottenere un elenco di tutti i database prima di distribuire.
  • Vedere in tempo reale ciò che sta accadendo (istruzioni PRINT sono consigliati qui!).
  • rollback automatico a base di dati indipendente, se si verifica un errore.
  • Aggiornamenti trasparente attraverso Squirrel.

Si può arrivare a: https://github.com/andreujuanc/TakoDeploy

Non sono sicuro se questo funzionerà, ma provare a sostituire le normative andare con un punto e virgola, e in esecuzione l'intera istruzione in un unico lotto.

Se non ricordo male, è anche possibile creare uno script in SQL Compare di cambiare tutto torna allo stato ha cominciato a. Si potrebbe desiderare di generare sia.

Quando ho fatto questo tipo di distribuzione (è stato un po '), in primo luogo ho caricato a un server di gestione temporanea che è stato fatto esattamente come prod prima ho iniziato a fare in modo gli script avrebbero funzionato su prod. Se qualcosa non è riuscita (di solito a causa del modo che gli script sono stati eseguiti, non è possibile impostare una chiave esterna a una tabella che non esiste ancora, per esempio). Ho anche sceneggiato Al tabella cambia prima, allora tutti vista cambia, allora tutte le modifiche UDF, quindi tutte le modifiche proc memorizzati. Questo ridurre notevolmente onthe guasti dovuti a oggetti non ancora esistenti, ma ho ancora avuto di solito un paio che aveva bisogno di essere regolata.

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