Azure 存储模拟器无法初始化,并显示“数据库 'AzureStorageEmulatorDb57' 不存在”

Posted

技术标签:

【中文标题】Azure 存储模拟器无法初始化,并显示“数据库 \'AzureStorageEmulatorDb57\' 不存在”【英文标题】:Azure Storage Emulator fails to init with "The database 'AzureStorageEmulatorDb57' does not exist"Azure 存储模拟器无法初始化,并显示“数据库 'AzureStorageEmulatorDb57' 不存在” 【发布时间】:2019-05-09 11:16:39 【问题描述】:

我在使用 Azure 存储模拟器时遇到问题。我试图重新初始化数据库并得到以下错误。

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

我知道重置听起来有点激烈,但 VS 2019 在 VS2017 中破坏了我的 Azure Functions,它们无法启动,所以我想要一个全新的安装。

如果我使用 sqllocaldb create(版本 13.1.4001.0)手动创建数据库,则可以正常创建数据库,但初始化仍然失败并显示相同的消息。

有什么想法吗?

C:\Program Files (x86)\Microsoft SDKs\Azure\Storage 模拟器>AzureStorageEmulator.exe 初始化 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 emulator吗? 是的,5.8 安装程序运行良好,但问题仍然存在。 【参考方案1】:

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

看起来我在重置后遇到了与(我认为)我的新帐户相同的权限问题,没有权限访问数据库。

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

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

然后我可以毫无问题地运行 Azure Function。

【讨论】:

谢谢它的工作,我删除了 .mdf 文件并重新运行 storage emulator START 命令。完成 是的!这对我有用,只需删除 mdf 文件,然后再次运行“init”命令。谢谢 谢谢!这也帮助了我。我迁移到一台新电脑,不小心将此 mdf 文件复制到了新电脑,因此它阻止了 azure 模拟器创建数据库。删除它,它的工作。 这对我有用,我必须投票赞成这个解决方案【参考方案2】:
    如果 Azure 模拟器正在运行,请停止它。 打开 SSMS 并连接到您的 (localdb) 实例。 手动创建“AzureStorageEmulatorDb57”。 以管理员身份打开命令提示符。 运行“AzureStorageEmulator.exe init”。 运行您的 VS 项目。

【讨论】:

【参考方案3】:

在为 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 在尝试打开或创建物理文件“C:\UsersusernameAzureStorageEmulatorDb59.mdf”时遇到操作系统错误 5(访问被拒绝。)。

此错误将我引导至以下帖子:https://dba.stackexchange.com/questions/191393/localdb-v14-creates-wrong-path-for-mdf-files 通过阅读那里的答案,我了解到这是 SQL Server 2017 中的一个错误。在无法访问补丁的情况下,对我有用的解决方案是授予 Everyone 修改 C:\Users 的访问权限。这只是我的开发笔记本电脑上的一个问题,所以我有能力进行安全更改 或正如 Andrii 所评论的,为 SQL Server 2017 安装 CU13 HotFix。之后,AzureStorageEmulatorDb<xxx>.mdf 将为您创建应有的用户目录。

【讨论】:

确实是这个问题。我为 SQL Server 2017 安装了CU13 HotFix,它现在可以工作了。 授予所有人修改 C:\Users 的权限解决了我的问题。谢谢。 @Andrii 对于此答案所描述的问题,这是更好的解决方案(更安全),非常感谢。我已将其添加到 aleroy 答案中。 这个序列对我有用,停止->清除->初始化->开始github.com/Azure/azure-storage-net/issues/…【参考方案4】:

我遇到了这个问题,我不知道为什么当我删除我的 MSSQLLocalDB 实例时,AzureStorageEmulatorDb57_log.ldf 仍然存在于我的 %USERPROFILE% 目录中,但之后删除该文件问题就消失了。

【讨论】:

这对我有用,但在此之前,我还安装了 SQL Express,所以不确定哪个解决了问题【参考方案5】:

我在将用户登录名更改为我的机器时遇到了这个问题。我已经从我以前的用户帐户创建了数据库。我已将数据库文件复制到新用户帐户,但它给了我这个错误。这似乎是一个权限问题。

你需要找到这个数据库的mdf和ldf文件的保存位置。就我而言,它存储在“C:\Users\yourUserName”中

只需删除这些文件并再次运行 AzureStorageEmulator.exe init,它就会为您创建新的 mdf 和 ldf 文件。

【讨论】:

这也为我解决了。 2016 年和 2019 年都有同样的错误,当我尝试使用 SSMS 手动创建数据库时,我终于收到了一条有用的错误消息(由于文件已经存在而无法创建数据库),它指向了这个解决方案。很遗憾存储模拟器隐藏了该错误消息!【参考方案6】:

按照these instructions 手动将我的 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;

【讨论】:

【参考方案7】:

为我工作:

    删除与 azure 模拟器相关的任何 storage/sql 数据库 在 StorageEmulator 路径上运行此命令:

AzureStorageEmulator.exe 初始化 /server 。

(或者你的 SQL 实例,我的是“.”)

【讨论】:

【参考方案8】:

检查您是否安装了带有 Visual Studio 的 Azure SDK,如果没有,您可以添加该功能

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

我会帮你的。首先创建一个sql server local db。 然后转到存储模拟器文件夹 _- Storage Emulator 默认安装在 C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator。

然后运行这个 AzureStorageEmulator.exe init /server

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

【讨论】:

【参考方案11】:

打开 SSMS 并连接到您的 (localdb) 实例。 手动创建“AzureStorageEmulatorDb...”。

【讨论】:

【参考方案12】:

要添加另一个答案,我没有任何 MDF 或 LDF 文件。相反,我只有一个位于%USERPROFILE%\AppData\Local\AzureStorageEmulator\AzureStorageEmulator.5.10.config 的配置文件。我也无法使用 SSMS 连接到我的本地 (localdb) 实例。

我将该配置文件中的SQLInstance 值更改为localhost 而不是(localdb)\MSSQLLocalDB,它开始工作了。

【讨论】:

【参考方案13】:

您应该有一个名为 Microsoft Azure Storage Emulator 的应用程序。

启动此应用程序。

如果应用程序指示它正在运行,请先运行AzureStorageEmulator.exe stop,否则直接运行AzureStorageEmulator.exe Start。应该自动创建你的数据库,至少它为我做了。

https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator

【讨论】:

【参考方案14】:

我初始化了db实例并且成功了,但是我的SQLServer是2017的。

然后我搜索解决方案,doc 说删除故障数据库将解决问题。也许你可以按照文档中的步骤尝试一下。

如果您仍有疑问,请告诉我。

【讨论】:

我确实尝试过。重新改造我的笔记本电脑解决了这个问题。【参考方案15】:

一般不推荐此解决方案,但您可以尝试一下。 我认为 AzureStorageEmulator 通过某种方式无法完全访问 localDB 目录中的设置限制了权限。

    您可以转到文件夹属性> sercurity > 编辑为完全权限(我的目录是用户> Appdata)。 然后重启模拟器 cmd restart the azure emulator。

现在它起作用了。以后你必须考虑到它的不安全感

【讨论】:

以上是关于Azure 存储模拟器无法初始化,并显示“数据库 'AzureStorageEmulatorDb57' 不存在”的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从本地 Azure Blob 存储批量插入?

Azure 存储模拟器访问 Blob 时出错

Azure Blob 存储 - 显示上传的图像时出错

选择用于可视化和分析的最佳 Azure 存储

模拟 Azure 存储事务

添加 VS 2015 SDK 后 Azure 存储模拟器失败