开发者社区> 问答> 正文

复制数据库的最佳方法是什么?

当我要复制数据库时,总是创建一个新的空数据库,然后将现有数据库的备份还原到其中。但是,我想知道这是否真的是最不容易出错,最简单和最有效的方法?

展开
收起
心有灵_夕 2019-12-24 22:01:02 742 0
1 条回答
写回答
取消 提交回答
  • 这是我过去使用的动态sql脚本。可以进行进一步修改,但会为您提供基础知识。我更喜欢编写脚本,以避免使用Management Studio时可能犯的错误:

    Declare @OldDB varchar(100)
    Declare @NewDB varchar(100)
    Declare @vchBackupPath varchar(255)
    Declare @query varchar(8000)
    
    
    /*Test code to implement 
    Select @OldDB = 'Pubs'
    Select @NewDB = 'Pubs2'
    Select @vchBackupPath = '\\dbserver\C$\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\pubs.bak'
    */
    
    SET NOCOUNT ON;
    
    Select @query = 'Create Database ' + @NewDB
    exec(@query)
    
    Select @query = '
    Declare @vBAKPath varchar(256)
    declare @oldMDFName varchar(100)
    declare @oldLDFName varchar(100)
    declare @newMDFPath varchar(100)
    declare @newLDFPath varchar(100)
    declare @restQuery varchar(800)
    
    select @vBAKPath = ''' + @vchBackupPath + '''
    select @oldLDFName = name from ' + @OldDB +'.dbo.sysfiles where filename like ''%.ldf%''
    select @oldMDFName = name from  ' + @OldDB +'.dbo.sysfiles where filename like ''%.mdf%''
    select @newMDFPath = physical_name from ' + @NewDB +'.sys.database_files where type_desc = ''ROWS''
    select @newLDFPath = physical_name from ' + @NewDB +'.sys.database_files where type_desc = ''LOG''
    
    select @restQuery = ''RESTORE DATABASE ' + @NewDB + 
    ' FROM DISK = N'' + '''''''' + @vBAKpath + '''''''' + 
    '' WITH MOVE N'' + '''''''' + @oldMDFName + '''''''' +  
    '' TO N'' + '''''''' + @newMDFPath + '''''''' +  
    '', MOVE N'' + '''''''' + @oldLDFName + '''''''' +  
    '' TO N'' + '''''''' + @newLDFPath + '''''''' +  
    '', NOUNLOAD, REPLACE, STATS = 10''
    
    exec(@restQuery)
    --print @restQuery'
    
    
    exec(@query)
    
    2019-12-24 22:01:46
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载