复制SQL Server数据库以进行开发但更小

时间:2017-05-16 00:21:58

标签: sql sql-server database

我们有100Gig以上的生产数据库。我想复制这个数据库并将其交给每个开发人员来测试它的代码,但是它的大小太大了。无论如何,我可以用FK备份前1000行并将其恢复到新的数据库?或者首先复制数据库并删除所有表中的所有记录,但保留1000行FK&s或其他任何方式将大小保持在5Gig以下。

我进行了搜索,但没有解决方案适用于具有外键的表。

谢谢, BASHEER

2 个答案:

答案 0 :(得分:1)

这是IDEA:

<强>首先

Create new database:

<强>第二 选择小记录只有:

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

<强>第三

Dump the new database and give to its every developer

希望有所帮助:

假设您有一个新的db_to_dev数据库名称,并且您正在使用当前数据库: 此过程将插入工作数据库中的所有数据,确保您已创建数据库。 db_to_dev

使用Information_Schema您可以选​​择所有表格:

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

使用:

使用选项参数:

EXEC PROC_TRANSFER_DATA '500'

如果要将多少条记录传输到新数据库db_to_dev,参数值取决于您。

此存储过程已经过测试。

祝你好运

答案 1 :(得分:0)

github上有许多项目正在寻求这样做:制作一个保留参照完整性的子集。这是一个这样的项目:

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