【问题标题】:Copy SQL MDF file复制 SQL MDF 文件
【发布时间】:2013-10-16 14:59:39
【问题描述】:

我正在尝试获取 MDF 文件的副本,但遇到了标准的“文件正在使用”消息,我认为该消息是 SQL 服务对其进行了锁定。是否可以在不停止服务或以任何方式影响用户/应用程序的情况下制作 mdf 文件的副本?

如果没有,是否可以将一次性完整备份 mdf 创建到与现有位置不同的位置,这样它就不会被 SQL 服务锁定?

(已经在这个网站上询问过关于这个的变体,但我不认为这是重复的。我不是试图重新定位数据库,只是试图获取 mdf 的副本 - 而不会中断实时操作 - 这样我就可以将它放在家里的开发机器上并使用数据库)

【问题讨论】:

    标签: sql sql-server database sql-server-2005 database-backups


    【解决方案1】:

    这会让你做一个备份:

    BACKUP DATABASE MyDatabase TO DISK = 'W:\DBs\MyDatabase.bak' WITH INIT;
    

    如果您也想备份日志文件,那么只需在上一个命令之前添加此命令:

    ALTER DATABASE MyDatabase SET RECOVERY FULL;

    如果你想从备份文件中恢复数据库,试试这个命令:

    USE [master]
    ALTER DATABASE MyDatabase 
    SET SINGLE_USER WITH
    ROLLBACK IMMEDIATE
    -- The previous command will used to close all connections to the database
    -- until you recover it
    
    Restore Database MyDatabase From Disk = 'W:\DBs\MyDatabase.bak' WITH REPLACE;
    
    ALTER DATABASE MyDatabase SET MULTI_USER
    -- This will reopen the database for users connections
    

    【讨论】:

    • 这会改变 Live 设置吗?我担心这样的事情会改变当前的备份设置/过程,看到像 ALTER DATABASE 这样的东西让我很紧张!
    • 抱歉,澄清一下:我只会使用 BACKUP DATABASE 命令。我假设 .bak 路径指向一个不同于当前计划备份例程(无论如何都是 mdf)的新文件/位置,并且该运行完全独立于常规备份例程,并且绝不会影响它。对吗?
    • 是的,没错,如果您不想更改备份设置,则不要运行 Alter 代码,只需运行备份代码即可
    • 作业完成并且正常备份正在运行。谢谢,很高兴得到确认我不会干扰 Live 系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多