Azure SDK 2.4更新“破坏”开发存储Blob

时间:2014-09-24 18:45:25

标签: azure azure-storage azure-storage-blobs

安装最新的Azure SDK VS2013更新后,我丢失了所有现有的开发存储容器,并且无法创建新的容器。

任何熟悉此事的人都知道如何“重新附加”或修复其他内容?

关于此的信息还不多。

编辑:现在似乎成功创建了新blob,我只想念我更新之前的那些。

3 个答案:

答案 0 :(得分:4)

这是预期的行为。基本上,当安装新版本的存储模拟器时,它会创建一个新的SQL Server数据库来存储本地数据。

enter image description here

不幸的是,没有简单的方法可以将您的数据导入新的数据库。一种可能的解决方案是卸载最新版本,重新安装旧版本并在计算机上下载blob。然后再次安装最新版本并再次上传blob(我知道这是非常蹩脚的解决方案)。您可能会发现此博客文章对此有用:http://blog.cerebrata.com/windows-azure-sdk-1-5-and-empty-development-storage/

答案 1 :(得分:1)

我发现了一种相对简单的方法来在花费了不到5分钟的时间的版本之间迁移数据(至少从AzureStorageEmulatorDb54-> AzureStorageEmulatorDb57开始),但作为免责声明,我仅对图像使用Blob存储

如果仿真器版本之间的架构发生了更改,这绝对也不起作用

开始之前,请确保所有存储模拟器实例均已停止

您需要做的是从旧数据库(在您更新并安装新版本的存储模拟器之后)为您关心的数据生成插入脚本

  1. 打开SSMS并连接到Azure存储模拟器创建的新数据库和旧数据库(在我的情况下,是AzureStorageEmulatorDb54和AzureStorageEmulatorDb57)
  2. 右键单击旧数据库,然后选择任务->生成脚本
  3. 选择您关心的表,在我的例子中是Blob,BlobContainer,BlockData和CommittedBlock。您将需要选择更多/其他内容,具体取决于您关心的内容以及使用仿真器的方式。我不在乎日志或表数据,仅在意blob数据。
  4. 在“指定如何保​​存或发布脚本页面”上,选择“保存到新查询窗口”,然后选择“高级”,向下滚动到“要脚本的数据类型”,然后选择“仅数据” < / li>
  5. 接下来几次并完成操作,然后将打开一个新的查询窗口,其中所有数据均已脚本化为插入语句
  6. 对于生成的脚本,将第一行-USE [AzureStorageEmulatorDbXX]更改为新版本,在我的情况下,我将USE [AzureStorageEmulatorDb 54 ]更新为USE [AzureStorageEmulatorDb 57 < / strong>]
  7. 运行脚本

就我而言,我能够将新版本的存储模拟器与旧数据一起使用。 YMMV。仅当您用于实际文件的存储位置是默认位置并且默认位置在两个版本之间没有变化时,此方法才起作用。如果更改,则必须移动实际文件。

在撰写本文时,我的默认位置是:C:\ Users \ username \ AppData \ Local \ AzureStorageEmulator \ BlockBlobRoot \ 2

答案 2 :(得分:0)

不幸的是,这是预期的行为。每次更新存储模拟器版本时,它都会使用不同的数据库来存储信息。

我建议您在将来安装较新版本的存储模拟器之前手动备份开发存储中的所有数据。如果您使用Azure Storage Explorer,这将简化备份过程:

  • Blob存储:只需创建一个类似于容器名称的文件夹,并将所有文件下载到该文件夹​​(使用存储资源管理器,您只需选择所有文件并单击下载)。但要注意,因为这只是备份blob内容。 Blob元数据和任何其他blob特定属性将不会保存。
  • 表存储:导出表(使用存储资源管理器,您可以将表数据导出到cvs,json或xml文件中。但请注意,不同版本的存储资源管理器有时会使用不同的格式。在我的情况下,当我尝试将数据导出到存储资源管理器v.5中的cvs并在v.6中导入,一些数据失败。我需要再次手动更改数据格式。:()

但是,即使是Storage Explorer也无法一键备份所有数据。希望只需单击一下即可在dev存储中备份数据。当然,我希望下一版本的模拟器不会重置数据。