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
    • 最新
    • 标签
主页 / dba / 问题 / 76741
Accepted
RBarryYoung
RBarryYoung
Asked: 2014-09-17 08:41:52 +0800 CST2014-09-17 08:41:52 +0800 CST 2014-09-17 08:41:52 +0800 CST

RESTORE 失败并出现 OS 错误 32,文件正被另一个进程使用

  • 772

我正在为客户编写一组(部分)自动化数据库部署的程序,这些程序大部分工作正常,但有时一个 RESTORE 命令失败并出现操作系统错误 32,关于另一个进程正在使用的文件(详情如下)。

我已经对此进行了广泛的搜索,但几乎没有发现适用于我的具体案例。我怀疑有些东西我忽略了,但我似乎找不到它。

这是命令:

RESTORE DATABASE [NBBC_Logistics] FROM DISK = '\\wpdboardq01\Shares\DbCopy\DevBackups\NBBC_Logistics_140916112310.bak' 
    WITH FILE=1, NOUNLOAD, STATS=10,
     MOVE 'NBBC_Logistics' TO 'D:\MSSQL2K12\MSSQL11.MSSQLSERVER\MSSQL\DATA\NBBC_Logistics.mdf',
     MOVE 'NBBC_Logistics_log' TO 'D:\MSSQL2K12\MSSQL11.MSSQLSERVER\MSSQL\DATA\NBBC_Logistics_log.ldf',
     REPLACE 
    ;

这会导致以下错误消息:

Msg 3634, Level 16, State 1, Line 11
The operating system returned the error '32(The process cannot access the file because it is being used by another process.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'D:\MSSQL2K12\MSSQL11.DEV\MSSQL\DATA\NBBC_Logistics_log.ldf'.
Msg 3156, Level 16, State 8, Line 11
File 'NBCC_Logistics_Model2_log' cannot be restored to 'D:\MSSQL2K12\MSSQL11.DEV\MSSQL\DATA\NBBC_Logistics_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 11
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 11
RESTORE DATABASE is terminating abnormally.

需要注意的一些事项:

  1. 这只发生在一些接收 SQL 实例上,它们中的大多数都在执行非常相似的命令,没有问题。

  2. 失败的实例是在同一个盒子(DEV 和 QA)上有多个 SQL 实例,并且它正在尝试将 DEV 的数据库备份恢复到同一数据库的 QA 版本。

  3. 同一实例中的其他 DB 可以毫无问题地执行其相应的 RESTORE 命令。

  4. 源逻辑文件名(显示在错误中)与数据库现有的文件名(在命令中命名)不同可能是相关的,但是,我相信我有这样的情况。

  5. 另外,请注意,错误报告的文件路径不是我在 MOVE 中指定的,而是原始文件路径(DEV 实例仍在使用原始 DB 文件)。

所以它似乎试图首先将数据库文件恢复到它们的原始路径位置,然后才将它们移动到我告诉它的路径。这与文档所说的相反,显然一般来说是完全不可行的,因为恢复数据库副本的人无法控制原始文件的位置,也无法保证此类路径存在且尚未使用.

任何帮助将不胜感激。


只是为了阻止一些不适用的自动响应:

  • 目标数据库当前未由我或其他任何人使用。
  • 也没有出现在sp_lock
  • 该命令指定REPLACE,它应该覆盖现有的数据库
  • 指定的文件未被任何其他 Windows 进程打开
  • 但是,错误中提到的文件是由盒子上的其他 Sql 实例打开的
  • 共享上的 BAK 文件位置与它无关,在本地复制它不会改变任何东西,也不会重命名它。
  • 指定的 db 文件和路径对于目标数据库是正确的
sql-server sql-server-2012
  • 3 3 个回答
  • 27236 Views

3 个回答

  • Voted
  1. Best Answer
    Sean Gallardy
    2014-09-17T10:31:29+08:002014-09-17T10:31:29+08:00

    使用备份文件时,请确保使用逻辑文件名。在同一个备份文件中使用多个备份集时,请确保检查正在使用的文件是否正确。

    在这种情况下:

    File 'NBCC_Logistics_Model2_log' cannot be restored to 'D:\MSSQL2K12\MSSQL11.DEV\MSSQL\DATA\NBBC_Logistics_log.ldf'. Use WITH MOVE to identify a valid location for the file.

    看起来好像您有错误的逻辑文件名或备份集中的错误备份。我知道您指出了这一点,但询问备份集中的信息并仔细检查是有意义的。

    • 3
  2. Mark E
    2018-08-30T15:13:35+08:002018-08-30T15:13:35+08:00

    查找文件名中的“拼写错误”或语法错误,例如路径中的“\\”。解决这些问题,你的陈述就会奏效。

    (当然,您的路径中的拼写错误是上面给出的关于文件名不正确的答案的一个版本,但只是该问题的一个特例!)

    • 0
  3. user3365079
    2018-04-10T22:30:02+08:002018-04-10T22:30:02+08:00

    这对我来说适用于 32 错误.. 另一个进程正在使用它。

    https://support.microsoft.com/en-in/help/3153836/operating-system-error-32-when-you-restore-a-database-in-sql-server-20

    如果您从包含 SQL Server 2012 SP3、2014 或 2016 中的 FILESTREAM 数据的条带化备份集进行还原,则可能会收到此错误。修复方法是安装上面链接中为您的版本列出的累积更新(或更高版本的 SP 或 CU)。

    • -2

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve