Come spostare le tabelle da un database di sql server ad un altro?

Abbiamo un database che è cresciuto fino a circa 50 gb e vogliamo tirare fuori un certo numero di tavoli (circa 20) da all’interno del database e spostarli in un nuovo database. Tutto questo sullo stesso Server SQL. Le tabelle che vogliamo tirare fuori sono circa 12GB di spazio (6GB di dati, 6GB di indici).

Come possiamo spostare le tabelle da un database per la seconda, ma assicurarsi che le tabelle che vengono creati nel nuovo database sono una copia esatta dell’originale (indici, chiavi, etc.)? Idealmente voglio un copia/incolla da SQL Server Management Studio, ma so che questo non esiste, quindi quali sono le mie opzioni?

  • Vedo che hai scoperto come fare questo in SQL Server Management Studio. Complimenti! Ho aggiunto una risposta dettagliata per gli altri, in particolare a questo processo w/screenshots.

 

7 Replies
  1. 7

    Se si sta spostando le tabelle di un nuovo database solo a causa della crescita, si potrebbe essere meglio di considerare l’uso di filegroup nel database esistente, invece. Ci saranno molti meno mal di testa andando avanti che cercando di trattare con due database separati.

    MODIFICA

    Come ho detto nei miei commenti qui sotto, se avete veramente bisogno di un nuovo database, a seconda del numero totale di tabelle coinvolte, potrebbe essere più facile per il ripristino di un backup del database con un nuovo nome e rilasciare le tabelle non vuoi.

    • Questo è un grande articolo. Ma non solo per la crescita ma anche una replica di tipo merge scenario in cui abbiamo bisogno di avere due database separati per supportare sia abbonato e di pubblicazione dello stesso database.
    • Non sono sicuro di come il vostro tavolo conte sarebbe abbattere (cioè, il 20 si desidera spostare vs quante totale in DB). Il minore dei due mali potrebbe essere per il ripristino di un backup del database con un nuovo nome e rilasciare le tabelle non si desidera.
    • Sì, abbiamo considerato il backup/ripristino di percorso, ma il pensiero di spostamento/copia il 20 tavoli, sarebbe stato più veloce (meno tempi di inattività per i nostri clienti) e un po ‘ più pulita… ma si può valutare che come risposta. (Si prega di aggiungere il backup/ripristino come una risposta così posso dare credito se decidiamo di percorrere questa strada.)
    • Ho modificato la mia risposta per includere il backup/restore.
    • Stiamo andando a utilizzare il backup/ripristino di percorso.
  2. 27

    Per fare questo molto facilmente con SQL Server 2008 Management Studio:

    1.) Fare clic destro sul database (non in tabella) e selezionare Task -> Generare Script

    Come spostare le tabelle da un database di sql server ad un altro?

    2.) Fare clic su Avanti nella prima pagina

    3.) Se si desidera copiare l’intero database, fare clic su avanti. Se si desidera copiare le tabelle specifiche, fare clic su “Seleziona Oggetti di Database Specifici”, selezionare le tabelle che si desidera e quindi fare clic su avanti.

    4.) Selezionare “Salva negli Appunti” o “Salva File”. IMPORTANTE: fare Clic sul pulsante Avanzate accanto a “Salva su File”, individuare “Tipi di dati script”, e “solo Schema” a “dello Schema e dei dati” (se si desidera creare la tabella) o “solo Dati” (se hai la copia di dati a una tabella esistente). Questo è anche il luogo dove si sarebbe impostare le altre opzioni, come esattamente ciò che i tasti per copiare, etc.

    Come spostare le tabelle da un database di sql server ad un altro?

    5.) Fare clic con il resto e il gioco è fatto!

    • Ho fatto una discreta quantità di ricerca per scoprire come fare questo. Grazie, dallin!
    • Grande risposta. Foto anche!
    • Che non lavorano per grande quantità di dati. Ho 10Gb tabella con 28mil elementi.
  3. 2

    Ho fatto trovare questa soluzione potenziale utilizzo di SQL Server Management Studio. È possibile generare lo script per le tabelle specifiche per spostare e quindi esportare i dati utilizzando la procedura Guidata Genera Script e l’Importazione/Esportazione Guidata SQL Server Management Studio. Poi sul nuovo database, è possibile eseguire gli script per creare tutti gli oggetti e quindi importare i dati. Ci sono probabilmente andando a andare con il backup/ripristino metodo descritto in @Joe Stefanelli risposta ma ho trovato questo metodo e volevo postare per far vedere agli altri.

    Per generare lo script sql per gli oggetti:

    • SQL Server Management Studio > basi di dati > Database1 > Attività > Generare Script…
    • Gli Script di SQL Server verrà avviata la procedura Guidata e scegliere gli oggetti e le impostazioni di esportazione in script
      • Per impostazione predefinita, lo scripting di Indici e i Trigger non sono inclusi, in modo da assicurarsi di trun questi (e tutti gli altri che si sono interessati).

    Per esportare i dati dalle tabelle:

    • SQL Server Management Studio > basi di dati > Database1 > Attività > Esporta Dati…
    • Scegliere la sorgente e la destinazione database
    • Selezionare le tabelle da esportare
      • Assicurarsi di verificare l’Identità Inserire la casella di controllo per ogni tavolo in modo che nuove identità non vengono creati.

    Creare un nuovo database, eseguire gli script per creare tutti gli oggetti, e quindi importare i dati.

  4. 1

    Se ti piace/hanno SSIS è possibile esplorare con la Copia di Oggetti SQL Task componente per fare questo.

    • Non ho SSIS installato e anche questo è un 2005 database, quindi non sono sicuro di come buona la SSIS è con il lavoro sulla 2005 database.
    • Che avrebbe funzionato bene con il 2005, ma se non hai installato che non fanno molto bene =P
  5. 1

    Un pigro, modo efficace per fare questo in T-SQL:

    Nel mio caso, alcuni tavoli sono grandi, in modo che lo script i dati è impraticabile.

    Inoltre, abbiamo bisogno di migrare solo una frazione di un altrimenti database molto grande, e quindi non voglio fare il backup /restore.

    Così sono andato con INSERIRE /SELEZIONARE e usata information_schema ecc per generare il codice.

    Passo 1: creare le tabelle nel DB

    Per ogni tabella che si desidera eseguire la migrazione al nuovo database, creare la tabella nel nuovo database.

    Uno script tabelle, o utilizzare SQL Confrontare, sql dinamico da information_schema — molti modi per farlo. dallin risposta mostra un modo utilizzando sql server management studio (ma essere sicuri di selezionare solo schema).

    Passo 2: creare UDF su target DB per produrre colonna elenco

    Questa è solo una funzione di supporto utilizzato nella generazione di codice.

    USE [staging_edw]
    GO
    
    CREATE FUNCTION dbo.udf_get_column_list
        (
            @table_name varchar(8000)
        )
    RETURNS VARCHAR(8000)
    AS
    BEGIN
    
        DECLARE @var VARCHAR(8000)
        SELECT 
            @var = COALESCE(@var + ',', '', '') + c.COLUMN_NAME
        FROM INFORMATION_SCHEMA.columns c 
        WHERE c.TABLE_SCHEMA + '.' + c.TABLE_NAME = @table_name
        AND c.COLUMN_NAME NOT LIKE '%hash%'
    
        RETURN @var
    END

    Passaggio 3: creare il file di log tabella

    Il codice generato sarà registro di progresso in questa tabella in modo che è possibile monitorare. Ma è necessario creare questa tabella di log prima.

    USE staging_edw
    GO
    
    IF OBJECT_ID('dbo.tmp_sedw_migration_log') IS NULL 
    CREATE TABLE dbo.tmp_sedw_migration_log 
        (
            step_number INT IDENTITY, 
            step VARCHAR(100),
            start_time DATETIME
        )

    Passo 4: generare lo script di migrazione

    Qui si genera la T-SQL che consente di migrare i dati. Genera solo INSERIRE /SELEZIONARE DA istruzioni per ogni tabella, e registra i suoi progressi lungo la strada.

    Questo script in realtà non modifica nulla. Appena uscite un po ‘ di codice, che è possibile controllare prima di eseguire.

    USE staging_edw
    GO
    
    -- newline characters for formatting of generated code
    DECLARE @n VARCHAR(100) = CHAR(13)+CHAR(10)
    DECLARE @t VARCHAR(100) = CHAR(9)
    DECLARE @2n VARCHAR(100) = @n + @n
    DECLARE @2nt VARCHAR(100) = @n + @n + @t
    DECLARE @nt VARCHAR(100) = @n + @t
    DECLARE @n2t VARCHAR(100) = @n + @t + @t
    DECLARE @2n2t VARCHAR(100) = @n + @n + @t + @t
    DECLARE @3n VARCHAR(100) = @n + @n + @n
    
    -- identify tables with identity columns
    IF OBJECT_ID('tempdb..#identities') IS NOT NULL 
    DROP TABLE #identities;
    SELECT 
        table_schema = s.name,
        table_name = o.name
    INTO #identities
    FROM sys.objects o 
    JOIN sys.columns c on o.object_id = c.object_id
    JOIN sys.schemas s ON s.schema_id = o.schema_id
    WHERE 1=1
    AND c.is_identity = 1
    
    -- generate the code
    SELECT 
        @3n + '-- ' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME,
        @n + 'BEGIN TRY',
        @2nt + IIF(i.table_schema IS NOT NULL, 'SET IDENTITY_INSERT staging_edw.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' ON ', ''),
        @2nt + 'TRUNCATE TABLE staging_edw.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME,
        @2nt + 'INSERT INTO staging_edw.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' WITH (TABLOCKX) ( ' + f.f + '  ) ',
        @2nt + 'SELECT ' + f.f + + @nt + 'FROM staging.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME,
        @2nt + IIF(i.table_schema IS NOT NULL, 'SET IDENTITY_INSERT staging_edw.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' OFF ', ''),
        @2nt + 'INSERT INTO dbo.tmp_sedw_migration_log ( step, start_time ) VALUES  ( ''' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' inserted successfully'', GETDATE() );' ,
        @2n + 'END TRY',
        @2n + 'BEGIN CATCH',
        @2nt + 'INSERT INTO dbo.tmp_sedw_migration_log ( step, start_time ) VALUES  ( ''' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' FAILED'', GETDATE() );' ,
        @2n + 'END CATCH'
    FROM INFORMATION_SCHEMA.tables t
    OUTER APPLY (SELECT f = staging_edw.dbo.udf_get_column_list(t.TABLE_SCHEMA + '.' + t.TABLE_NAME)) f
    LEFT JOIN #identities i ON i.table_name = t.TABLE_NAME 
        AND i.table_schema = t.TABLE_SCHEMA
    WHERE t.TABLE_TYPE = 'base table'

    Passo 5: eseguire il codice

    Ora basta copiare l’output a partire dal punto 4, incolla in una nuova finestra query ed eseguire.

    Note

    • Nel passaggio 1, escludo hash colonne la colonna elenco (FSU) perché quelle sono le colonne calcolate nella mia situazione
  6. 0

    Provare DBSourceTools.

    http://dbsourcetools.codeplex.com.

    Questo set di strumenti utilizza SMO di script tabelle e dei dati sul disco, e permette anche di selezionare le tabelle /viste, Stored procedure per includere.

    Quando si utilizza una “destinazione di distribuzione”, sarà anche gestire automaticamente le dipendenze.

    L’ho utilizzato più volte proprio per questo tipo di problema, ed è estremamente semplice e veloce.

  7. 0
    SELECT *
    INTO new_table_name [IN new database]
    FROM old_tablename
    • Che solo ottenere i dati. Voglio indici, chiavi, ecc… tutto.

Lascia un commento