AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 32160
Accepted
marc_s
marc_s
Asked: 2009-06-27 05:12:44 +0800 CST2009-06-27 05:12:44 +0800 CST 2009-06-27 05:12:44 +0800 CST

用于复制数据库的 T-SQL 脚本

  • 772

我想找到一种基于 T-SQL 脚本的方法将我的“PROD”数据库(它是只读的,由几个文件组组成)复制到一个读/写的“EDIT”数据库,我可以在其中使用和编辑数据.

我知道复制数据库向导,并且现在正在使用它 - 但是,我更愿意自动执行此操作,以便单个脚本可以从备份中恢复 PROD 数据库并将其复制到 EDIT 数据库。

似乎 T-SQL 中没有“COPY DATABASE”命令,我也找不到任何其他方法来实现这一点 - 除了恢复备份两次。真的吗?有没有更好的方法来做到这一点?

我想做的是:

  1. 开始从磁盘恢复到“MyPROD_Database”
  2. 完成后,我想将刚刚恢复的数据库复制到“MyEDIT_Database”
  3. 作为最后一步,我想将我的 PROD 数据库的文件组设置为只读

最好是一个 T-SQL 脚本,我可以从 SSMS 和/或 sqlcmd 运行。

系统是 SQL Server 2005(备份来自哪里)和 SQL Server 2008(我恢复到哪里)。

手套就在那里——谁来捡?:-)

马克

sql-server restore
  • 7 7 个回答
  • 21699 Views

7 个回答

  • Voted
  1. Bob
    2009-06-27T05:24:34+08:002009-06-27T05:24:34+08:00

    SQL Server 发布向导可以使用命令行参数自动化。

    从帮助页面

    以下命令将使用名为“Alice”和密码“7h92-v6k3”的用户名“Alice”和密码“7h92-v6k3”到文件 C:\FooDB.sql 的 SQL Server 身份验证从名为 MYSERVER 的机器上的默认实例编写 FooDB 数据库脚本:

    sqlpubwiz script -d FooDB -S MYSERVER -U Alice -P 7h92-v6k3 C:\FooDB.sql
    

    因此,一旦您拥有该脚本,您将能够使用SQLCMD在您的其他数据库实例上运行它。

    sqlcmd -S MYSERVER -U Alice -P 7h92-v6k3 -i C:\FooDB.sql -o 
    
    • 7
  2. Best Answer
    Yishai
    2009-06-27T07:51:36+08:002009-06-27T07:51:36+08:00

    SSIS 具有复制数据库功能,因此您必须通过 SSIS 执行 T-SQL,然后您可以将复制数据库作为该过程中的一个步骤。

    • 3
  3. Ed Leighton-Dick
    2009-06-27T07:56:12+08:002009-06-27T07:56:12+08:00

    如果运行脚本的登录名具有系统管理员权限,您可以这样做:

    • 恢复 PROD 数据库
    • 分离 PROD 数据库
    • 使用 xp_cmdshell 复制 PROD 数据库的文件
    • 使用原始文件附加 PROD 数据库
    • 使用复制的文件附加 EDIT 数据库

    如果您可以使用 SQLCMD 或 Management Studio 的 SQLCMD 模式来运行脚本,您还可以利用 SQLCMD 的 !! 执行操作系统命令以复制文件的语法。

    但是,无论如何,这(以及复制数据库向导,就此而言)涉及使 PROD 数据库脱机以进行复制。如果这不是一个选项,那么多次还原可能是您唯一的选择。

    • 2
  4. Andrija
    2009-06-27T05:15:45+08:002009-06-27T05:15:45+08:00

    这可以帮助: http: //www.codeproject.com/KB/database/ScriptDatabase.aspx

    编写整个数据库的脚本,包括用于将数据导入数据库的 SQL Insert 语句。

    • 1
  5. DBAndrew
    2009-06-27T06:43:20+08:002009-06-27T06:43:20+08:00

    查看其中一些资源。

    http://www.sqlservercentral.com/scripts/Backup+%2f+Restore/66372/

    http://www.sqlservercentral.com/scripts/Backup+%2f+Restore/62380/

    • 1
  6. The Cone of Silence
    2009-06-27T09:28:30+08:002009-06-27T09:28:30+08:00

    这可能有用:

    SQL 多脚本

    • 1
  7. Bruce
    2015-11-14T13:27:41+08:002015-11-14T13:27:41+08:00

    备份/恢复更快更简单:

    SqlCmd -E -S localhost -Q "BACKUP DATABASE mydb TO DISK='c:\temp\mydb.bak'"
    REM Make Sure connections are closed
    SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET SINGLE_USER WITH ROLLBACK AFTER 60"
    SqlCmd -E -S localhost -Q "RESTORE DATABASE PIDataCopy FROM DISK='c:\temp\mydb.bak WITH MOVE  'mydb_Data' TO 'C:\SQLData\PIDataCopy_Data', MOVE 'mydb_Log' TO 'C:\SQLData\PIDataCopy_Log', RECOVERY,REPLACE"
    SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET MULTI_USER"
    
    • 1

相关问题

  • 如何从 SQL Server 2005 迁移到 2008

  • 启用 SQL 调试是否有任何风险

  • 从 SQL Server 回收内存

  • SQL Server 的廉价集群

  • 如何从 SQL Server 2008 中的备份中排除索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve