代码之家  ›  专栏  ›  技术社区  ›  jr3

克隆数据库并进行备份是可能的吗?

  •  4
  • jr3  · 技术社区  · 14 年前

    我需要编写一个工具来克隆一个数据库,而不是分离它并复制.mdf和.ldf,只是备份它并恢复一个新创建的数据库不是更好吗?

    7 回复  |  直到 14 年前
        1
  •  4
  •   Maximilian Mayerl    14 年前

    是的,您可以使用备份作为克隆数据库的方法。为此,您可以简单地使用RESTORE命令。

    例如:

    RESTORE DATABASE    DatabaseName
    FROM DISK = N'C:\Path\To\Your\File.bak'
    

    Click!

        2
  •  3
  •   Scott Lawrence    14 年前

    为了扩展maximilianmayerl的回答,我建议使用MSBuild和 MSBuild Community Tasks 库来自动执行此过程。

    您可以从这样一个SQL脚本(可能称为CloneDb.SQL)开始:

    USE master
    GO
    
    RESTORE DATABASE dbname
       FROM DISK = 'SOURCEDIR\dbname.bak'
       WITH REPLACE, FILE = 1,  
        MOVE N'dbname' TO N'DBDEVICEDIR\dbname.mdf',  
        MOVE N'dbname_log' TO N'DBDEVICEDIR\dbname_log.LDF',  
        NOUNLOAD,  
        STATS = 10
    GO
    

    在MSBuild脚本中,您将创建一个包含如下序列的目标:

    <FileUpdate Files="$(BuildDir)\CloneDb.sql"
                    Regex="SOURCEDIR"
                    ReplacementText="$(SqlSafeActualBuildDir)\dbdeploy" />
        <FileUpdate Files="$(BuildDir)\CloneDb.sql"
                    Regex="DBDEVICEDIR"
                    ReplacementText="$(SqlSafeActualBuildDir)\dbdevices" />
        <ExecuteDDL Files="$(BuildDir)\CloneDb.sql" ConnectionString="Server=$(LocalDbServer);Database=master;Trusted_Connection=True;" />
    

    有了它,从visualstudio命令行运行“msbuild.exe CloneDb.proj/t:”可以一步克隆数据库。为了方便起见,可以将命令放在批处理文件中。

        3
  •  2
  •   Martin Smith    14 年前

    您可以使用备份来执行此操作。虽然还没有人提到使用 COPY ONLY

    BACKUP DATABASE YourDB
    TO DISK = 'C:\Backups\YourDB.bak'
    WITH COPY_ONLY; 
    
        4
  •  1
  •   Pavel Belousov    14 年前

    可能是这样的:

    RESTORE DATABASE [NewDB] 
        FROM  DISK = N'Path\file.bak' 
        WITH  FILE = 1,  
        MOVE N'NewDB_Data' TO N'C:\Data\MSSQL.1\MSSQL\Data\NewDB_Data.mdf',  
        MOVE N'NewDB_Log' TO N'C:\Data\MSSQL.1\MSSQL\Data\NewDB_Log.ldf',  
        NOUNLOAD,  STATS = 10
    
        5
  •  1
  •   Justin Wignall    14 年前

    最简单的方法,如果你是新来的,我想说的是

    a) 在sqlmanagementstudio中创建一个数据库,但是不要单击“OK”来创建它,而是将该操作编写成SQL脚本并运行它。

    c) 将两个文件合并为1,得到一个“克隆数据库”sql脚本。

        7
  •  1
  •   MickeyfAgain_BeforeExitOfSO    14 年前

    我们使用SQLServer2005,并不断地复制和交换数据库以进行测试。我们现在总是使用备份和恢复。分离、重新附加.mdf和.ldf文件经常会导致SQL Server损坏到需要重新安装的程度,在这之前甚至可能进行非常糟糕的清理。正如其他一些人所建议的,使用.bak文件非常简单。