首页 > 解决方案 > 重定位文件后 SQL Server 恢复数据库

问题描述

我编写了一个工具来将大量数据库文件移动到不同的分区。这些数据库正在使用 SIMPLE 恢复并且不会发生太大变化,所以我认为这样的事情会做:

// this is a mix of sql commands and disk copy commands

// single user, then offline
SQL: ALTER DATABASE [MY_DATABASE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
SQL: ALTER DATABASE [MY_DATABASE] SET OFFLINE WITH ROLLBACK IMMEDIATE

// copy to target folder
COPY "SOURCE\MY_DATABASE.mdf" "TARGET\MY_DATABASE.mdf"
COPY "SOURCE\MY_DATABASE_LOG.ldf" "TARGET\MY_DATABASE_LOG.mdf"

// delete from source folder
DELETE "SOURCE\MY_DATABASE.mdf"
DELETE "SOURCE\MY_DATABASE_LOG.ldf"

// modify
SQL: ALTER DATABASE [MY_DATABASE] MODIFY FILE (name = 'MY_DATABASE',
    filename = 'TARGET\MY_DATABASE.mdf');
SQL: ALTER DATABASE [MY_DATABASE] MODIFY FILE (name = 'MY_DATABASE_LOG',
    filename = 'TARGET\MY_DATABASE_LOG.ldf');

// multi user, then online
SQL: ALTER DATABASE [MY_DATABASE] SET MULTI_USER WITH ROLLBACK IMMEDIATE
SQL: ALTER DATABASE [MY_DATABASE] SET ONLINE

但是,最后一个操作(SET ONLINE)经常挂起并等待一段时间,当我查询时,master.sys.databases我可以看到状态是RECOVERING.

有人可以解释为什么会发生这种情况,我在这里做错了什么,或者我是否应该以不同的方式做整个事情?

标签: sqlsql-server

解决方案


推荐阅读