zoukankan      html  css  js  c++  java
  • 复制SqlServer数据库

       在目前的工作中需要解决复制整个SqlServer数据库的问题,复制的内容包括数据库大纲、数据库中的存储过程、函数、表结构、主外键关系以及表中的所有数据等,也就是说copy版本与原数据库一模一样。经过一段时间的摸索,找到的一个比较简单的解决方案是:
    (1)在复制数据库之前,先备份该数据库到文件。
    (2)依据备份文件创建新的数据库,并Restore即可。

       备份数据库可用如下Sql语句:

    string.Format("backup database {0} to disk = '{1}';", dbName, bakFilePath)

       依据备份文件创建并Restore新数据库可以使用如下存储过程实现:

    CREATE PROCEDURE CopyDB
    (
    @newDbName varchar(50),  --新数据库名称
    @dbDataDirPath varchar(100), --数据库安装的Data文件夹目录路径
    @soureDbName varchar(100), --源数据库名称
    @soureBackupFilePATH varchar(100)--源数据库备份文件的路径
    )
    AS
    declare @sql varchar(3000)
    set @sql='
    create database 
    '+@newDbName+'
    ON
    (
      name=
    '+@soureDbName+'_Data,
      filename=
    '''+@dbDataDirPath+@newDbName+'_Data.mdf'',
       SIZE = 10,
       FILEGROWTH = 15% 
    )
    LOG ON
    (
      name=
    '''+@soureDbName+'_Log'',
      filename=
    '''+@dbDataDirPath+@newDbName+'_Log.LDF'',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB
    )
    --开始还原
    RESTORE DATABASE 
    '+@newDbName+' from disk='''+@soureBackupFilePATH+''' WITH REPLACE
    '
    exec(@sql)
    GO


       测试的代码如下:

                    IList<SPParameter> paraList = new List<SPParameter>();
                    SPParameter para1 
    = new SPParameter("newDbName", ParameterDirection.Input, "EASNew9");
                    paraList.Add(para1);
                    SPParameter para2 
    = new SPParameter("dbDataDirPath", ParameterDirection.Input, @"C:\Program Files\Microsoft SQL Server\MSSQL\Data\");
                    paraList.Add(para2); 
                    SPParameter para3 
    = new SPParameter("soureDbName", ParameterDirection.Input, "AutoSchedulerSystem");
                    paraList.Add(para3);
                    SPParameter para4 
    = new SPParameter("soureBackupFilePATH", ParameterDirection.Input, @"d:\sqlDatabase\AutoSchedulerSystem");
                    paraList.Add(para4);
                    IDictionary
    <stringobject> outParas = null;
                    Program.DataAccesser.GetSPAccesser(
    null).ExcuteNoneQuery("CopyDB", paraList, out outParas);


  • 相关阅读:
    Bitnami Redmine安装和插件配置
    DataTable转换成List<T>
    学习Javascript闭包(Closure)
    单例模式(Singleton)
    哈希表--HashSet<T>
    .NET 4.0中的泛型的协变和逆变
    vue-cli脚手架里如何配置屏幕自适应
    新手如何理解JS面向对象开发?
    vue轮播图插件vue-awesome-swiper的使用与组件化
    vue中sass的配置安装流程
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/679611.html
Copyright © 2011-2022 走看看