2017-05-16 1 views
0

Wir haben Produktionsdatenbank über 100Gig. Ich möchte diese Datenbank duplizieren und jedem Entwickler geben, um seinen Code zu testen, aber die Größe ist zu groß. Kann ich nur Top 1000 Zeilen mit FKs sichern und in der neuen DB wiederherstellen? Oder duplizieren Sie zuerst die DB und löschen Sie alle Datensätze aus allen Tabellen, aber behalten Sie 1000 Zeilen mit FKs oder auf andere Weise, um die Größe unter 5Gig zu halten.Kopieren Sie SQL Server-Datenbank für die Entwicklung, aber kleiner

Ich habe gesucht, aber keine der Lösungen waren für Tabellen mit Fremdschlüsseln.

Danke, Basheer

+2

tun haben Sie einen Nicht-Produktions-Server, die Sie über die Produktionsdatenbank kopieren und dann die Größe vor der Entwicklung reduzieren? – maSTAShuFu

+0

Häufig sind transaktionale Tabellen sehr groß und Nachschlagetabellen sind klein. So können Sie Ihr Replikat vereinfachen, indem Sie einfach alle Nachschlagetabellen kopieren, auf die sich die Transaktionen beziehen, und dann ist jede Teilmenge der Transaktionen, die Sie auswählen, immer gültig. Dies ist ein guter Mittelweg für die Verringerung der Größe ohne Komplexität. Andernfalls müssen Sie ein benutzerdefiniertes Skript schreiben, das sich durch alle FK's bewegt. Wenn Sie sehr große Nachschlagetabellen haben, ist dies möglicherweise nicht die richtige für Sie. –

+0

@maSTAShuFu Ja, ich habe einen Nicht-Produktionsserver, um eine Kopie der Prod-DB auszuführen. – Bash

Antwort

0

eine Reihe von Projekten auf Github Es gibt die darauf abzielen, genau das zu tun: macht eine Untergruppe, die referentielle Integrität bewahrt. Hier ist ein solches Projekt:

https://github.com/18F/rdbms-subsetter

+0

Funktioniert das für MSSQL? – Bash

1

das die Idee:

Erstens:

Create new database: 

Zweitens: Wählen Sie kleine Datensätze nur wie:

select top 500 from allYourTables 
then insert to each every table to your new Database Created. 

Drittens:

Dump the new database and give to its every developer 

Hoffe, es hilft:

Unter der Annahme, dass Sie eine neue db_to_dev Database Namen haben und Sie arbeiten, um Ihre aktuelle Datenbank: Diese Prozedur fügt alle Daten von Ihrem Arbeitsdatenbank, um sicherzustellen, dass Sie bereits eine Datenbank erstellt haben. db_to_dev:

Information_Schema können Sie in alle Tabellen auswählen:

CREATE PROCEDURE PROC_TRANSFER_DATA @NUM_OF_RECORDS nvarchar(255) as 
BEGIN 
SET NOCOUNT ON; 
DECLARE @message varchar(80), @tablename nvarchar(50); 
Declare @sqlstmt nvarchar(255); 
PRINT '-------- List of tables --------'; 
    DECLARE Schema_cursor CURSOR FOR 
    SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 

    OPEN Schema_cursor 
    FETCH NEXT FROM Schema_cursor INTO @tablename 

    IF @@FETCH_STATUS <> 0 
     PRINT '   <<None>>'  
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SELECT @message = '   ' + @tablename 
     set @sqlstmt = 'select top ' + @NUM_OF_RECORDS + ' * into [db_to_dev].[dbo].['+ @tablename +'] from ' + @tablename; 
     EXEC sp_executesql @sqlstmt 
     PRINT @message 
     FETCH NEXT FROM Schema_cursor INTO @tablename 
     END 

    CLOSE Schema_cursor 
    DEALLOCATE Schema_cursor 

END 

zu benutzen:

mit einer Option Parameter:

EXEC PROC_TRANSFER_DATA '500' 

Parameterwert wird von Ihnen abhängen, ob, wie viele Datensätze, die Sie in Ihre neue Datenbank übertragen möchten db_to_dev.

Dieser gespeicherte Proc ist getestet.

Viel Glück

+0

Gute Idee. Richten Sie dies so ein, dass Sie jede halbe Minute auf Ihrem Produktions-SQL-Server ausführen. Legen Sie die Datenbanksicherung (oder MDF) am Ende jedes Laufs an einem Ort ab, an dem Ihre Entwickler sie erhalten können. –

+0

Danke Rots. Muss ich das für jeden Tisch ausführen? Kann ich alles auf einmal machen? – Bash

+0

Aktualisiert die Antwort oben, um es sofort zu tun. –

Verwandte Themen