zoukankan      html  css  js  c++  java
  • SQL数据库完全复制

    很少摸 Windows 环境下的东西,最近被个 MS SQL Server 的数据库搞得头大。实在不像 MySQL 那样用起来轻车熟路, OrZ ...

    本来以为企业管理器里面既然提供了 DTS 数据导入/导出 的功能,直接使用 DTS 指定源和目标库就可以完全复制数据库到远程服务器上了。结果发现除了表的基本结构和数据,字段约束、键值、默认值等都没过去。最终还是要靠直接磁盘拷贝数据文件了事。

    如果数据库服务可以停下来的话,最快的方法是直接拷贝对应的 .mdf 和 .ldf 文件(在企业管理器选择数据库右键看属性的“数据文件”项确定文件名);然后执行T-SQL命令(比如新的目标数据库名为 test ):

    -- 如果 test 数据库已经存在,需要先把其分离。
    -- 如果已经有应用连接到该数据库的话,使用以下语句强制断开现有连接
    ALTER DATABASE test

     
          SET SINGLE_USER 
          WITH ROLLBACK IMMEDIATE; 
    -- 分离tst数据库
    EXEC sp_detach_db 
          @dbname = 'test',
          @skipchecks = 'true'

    -- 把拷贝出来的 .mdf 文件和 .ldf 文件作为 test 数据库的数据文件挂上去
    EXEC sp_attach_db

     
          @dbname = 'test', 
          @filename1 = 'e:db est.mdf', 
          @filename2 = 'e:db est.ldf'

    -- 如果不想使用原来的 .ldf 文件,也可以单独挂 .mdf 文件
    EXEC sp_attach_single_file_db

     
          @dbname = 'test', 
          @physname = 'e:db est.mdf'

    如果当前数据库处于生产环境不允许关闭服务的话,可以使用 BACKUP / RESTORE 的方法来完成复制工作:

    -- 把数据库名为realdb的数据库备份到指定的磁盘文件
    -- 用 WITH FORMAT 参数对bak文件进行格式化,以便进行完整重写
    BACKUP DATABASE realdb TO DISK = 'E:dbBAK_FOR_realdb.bak' WITH FORMAT
    -- 用 RESTORE FILELISTONLY 命令查看数据库备份文件里面的
    -- 数据文件和日志文件的逻辑名称,用于下一步的命令
    RESTORE FILELISTONLY FROM DISK = 'E:dbBAK_FOR_realdb.bak'

    -- 使用备份文件创建一个新的数据库, realdb_dat 和 realdb_log
    -- 分别是上面使用 RESTORE FILELISTONLY 命令查出的数据文件逻辑
    -- 名称
    RESTORE DATABASE test
        FROM DISK = 'E:dbBAK_FOR_realdb.bak'
        WITH MOVE 'realdb_dat' TO 'E:db est.mdf',
        MOVE 'realdb_log' TO 'E:db est.ldf'
    GO

  • 相关阅读:
    新人优惠的风险
    Linux服务器记录并查询历史操作记录
    斜率比截距重要
    专访李果:初生牛犊不怕虎的移动创业者
    iPhone开发视频教程 ObjectiveC部分 (51课时)
    珍藏40个android应用源码分享
    iPhone开发教程 UI基础课程(58课时)
    ios源码分享之动画类
    史上最全的ios源码汇总。欢迎收藏
    Android开发教程汇总
  • 原文地址:https://www.cnblogs.com/hzpin/p/3926285.html
Copyright © 2011-2022 走看看