Azure存储仿真器无法初始化,显示“数据库'AzureStorageEmulatorDb57'不存在”的错误消息。

40

我在使用Azure存储模拟器时遇到了问题。我尝试重新初始化数据库,但出现了以下错误。

这是在安装Visual Studio 2019 Preview后发生的,但这可能只是巧合。我花了大约一个小时来尝试运行它,然后放弃了,并选择了“保留我的文件”选项重置了我的机器,重新安装了Visual Studio 2017和Azure工具,但仍然看到相同的问题。

我知道重置听起来有些极端,但VS 2019破坏了我在VS2017中的Azure函数,它们无法启动,所以我想要一个干净的安装。

如果我使用sqllocaldb create(版本13.1.4001.0)手动创建DB,则DB会被成功创建,但初始化仍然失败并显示相同的消息。

有什么想法吗?

C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator>AzureStorageEmulator.exe init Windows Azure Storage Emulator 5.7.0.0命令行工具 找到SQL实例(localdb)\MSSQLLocalDB。 在SQL实例“(localdb)\MSSQLLocalDB”上创建数据库AzureStorageEmulatorDb57。 无法创建数据库“AzureStorageEmulatorDb57”:数据库“AzureStorageEmulatorDb57”不存在。提供有效的数据库名称。要查看可用的数据库,请使用sys.databases。 一个或多个初始化操作失败。在再次尝试运行存储模拟器之前,请解决这些错误。

错误:无法创建数据库 'AzureStorageEmulatorDb57':数据库 'AzureStorageEmulatorDb57' 不存在。请提供有效的数据库名称。要查看可用的数据库,请使用 sys.databases。

你尝试安装最新的v5.8模拟器了吗? - Jerry Liu
是的,5.8安装程序可以正常运行,但问题仍然存在。 - Murray Foxcroft
17个回答

61

在重置我的计算机(并保留文件)后,我遇到了这个问题。对我来说,由于无法启动仿真器而无法在Visual Studio 2019中运行Azure函数。

看起来我有与(我假设)重置后的新帐户相同的权限问题,没有权限触及数据库。

我通过以下方式解决了这个问题:

  1. 删除Azure存储仿真器DB文件:%USERPROFILE%/AzureStorageEmulatorDb[number].mdf
  2. 然后以管理员权限运行AzureStorageEmulator.exe start

然后我就能够顺利地运行Azure函数了。


3
谢谢,它起作用了,我删除了 .mdf 文件,然后重新运行了存储模拟器的 START 命令。完成。 - shary.sharath
3
好的,这对我来说是可行的,只需删除mdf文件,然后再次运行“init”命令即可。谢谢。 - Elwi
3
谢谢!那对我也很有帮助。我迁移到了一台新PC,无意中把这个MDF文件复制到了新PC上,这就阻止了Azure模拟器创建数据库。删除它后问题得以解决。 - RoiTr
这对我有用,我必须投票支持这个解决方案。 - Tấn Nguyên

28
  1. 如果Azure模拟器正在运行,请停止它。
  2. 打开SSMS并连接到您的(localdb)实例。
  3. 手动创建"AzureStorageEmulatorDb57"。
  4. 以管理员身份打开命令提示符。
  5. 运行"AzureStorageEmulator.exe init"。
  6. 运行您的VS项目。

25

在安装了 SQL Server 2017 的 LocalDb 后,我也遇到了同样的问题。以下步骤帮助我解决了这个问题:

  • C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator 中打开命令行
  • 运行 AzureStorageEmulator.exe init /forceCreate
  • 通过查看错误日志(位于 %USERPROFILE%\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB),我看到了:

2018-12-21 15:41:13.47 spid65 CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Users{username}AzureStorageEmulatorDb59.mdf'.

  • 或者按照Andrii的评论,安装SQL Server 2017 CU13 HotFix。之后AzureStorageEmulatorDb<xxx>.mdf将会像应该的那样被创建在你的用户目录下。

  • 4
    确实,这就是问题所在。 我安装了 SQL Server 2017 的 CU13 HotFix,现在它可以工作了。 - Andrii
    授予每个人修改C:\ Users的访问权限解决了我的问题。谢谢。 - Vakhtangi Abashidze
    1
    @Andrii 这是一个更好的解决方案(更安全),适用于此答案描述的问题,非常感谢您。我已将其添加到 aleroy 的答案中。 - Marek R
    这个顺序对我有用,停止->清除->初始化->开始。 https://github.com/Azure/azure-storage-net/issues/635#issuecomment-455845507 - PrashSE

    16

    我遇到了这个问题,我不知道为什么在删除了我的MSSQLLocalDB实例后,在我的%USERPROFILE%目录下仍然存在一个AzureStorageEmulatorDb57_log.ldf文件,但在删除该文件后,问题得到解决。


    1
    这对我有用,但在此之前,我还安装了SQL Express,所以不确定哪一个解决了问题。 - Y. Khan

    3

    按照这些指示,我手动将MSSQL 2016 LocalDB升级到了MSSQL 2019,但由于不知道Azure存储模拟器内部使用的是LocalDB,所以出现了上述错误。

    为了修复此问题,我只需使用以下SQL命令手动重新附加位于%UserProfile%中的数据库即可:

    CREATE DATABASE [AzureStorageEmulatorDb510]
        ON (FILENAME = 'C:\Users\<username>\AzureStorageEmulatorDb510.mdf'),   
        (FILENAME = 'C:\Users\<username>\AzureStorageEmulatorDb510_log.ldf')   
        FOR ATTACH;
    

    3
    我遇到了一个问题,我把用户登录名更改为我的机器。我已经从以前的用户帐户创建了数据库。我将数据库文件复制到新的用户帐户,但是出现了这个错误。它似乎是权限问题。
    您需要找到该数据库的mdf和ldf文件的保存位置。在我的情况下,它存储在“C:\ Users \ yourUserName”中。
    只需删除这些文件并再次运行AzureStorageEmulator.exe init,它将为您创建新的mdf和ldf文件。

    这个解决方法对我也有用。我在2016和2019版本中都遇到了同样的错误,当我尝试使用SSMS手动创建数据库时,最终得到了一个有用的错误信息(由于文件已经存在而无法创建数据库),这指向了这个解决方案。可惜存储模拟器隐藏了那个错误信息! - IGx89

    2

    对我有用:

    1. 删除与Azure模拟器相关的任何存储/SQL数据库
    2. 在StorageEmulator路径上运行此命令:

    AzureStorageEmulator.exe init /server .

    (或您的SQL实例,我的是“。”)


    1

    这可能不适用于一般情况,但对于我来说,我必须进入任务管理器并停止Azurite进程。然后我返回到目录并输入启动命令:
    %\Azure\Storage Emulator\ AzureStorageEmulator.exe start

    这解决了我的问题,希望分享给大家。


    0

    我会帮助您解决这个问题。首先创建一个 SQL Server 本地数据库。 然后进入存储模拟器文件夹 _-存储模拟器默认安装在 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator。

    然后运行此 AzureStorageEmulator.exe init /server

    文档:AzureStorageEmulator.exe init /server localhost\SQLEXPRESS01


    0

    您可以在用户文件夹中找到mdf和ldf文件。只需停止模拟器,将这些文件复制到其他位置并从用户文件夹中删除。 然后再次运行模拟器,它将创建新的mdf和ldf文件。 然后停止模拟器,将旧文件复制回来并重新启动模拟器。这样您就不会丢失任何数据。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接