2

我正在使用 New-AzureRmResourceGroupDeployment Powershell cmdlet 部署到使用 Azure 资源模板的资源组。这是一个测试环境,因此我想从 .bacpac 文件恢复数据库,以便为数据库提供真实的数据量。

以下代码段在第一次部署到此资源组时成功部署,因为没有现有数据库,但在任何后续部署中都失败。

{
                "name": "[variables('databaseName')]",
                "type": "databases",
                "location": "[resourceGroup().location]",
                "apiVersion": "2014-04-01-preview",
                "dependsOn": [
                    "[variables('databaseServerName')]",
                    "[concat('Microsoft.Sql/servers/', variables('databases.ServerName'))]"
                ],
                "tags": {
                    "displayName": "testDatabase"
                },
                "properties": {
                    "collation": "[variables('databaseCollation')]",
                    "edition": "[variables('databaseEdition')]",
                    "maxSizeBytes": "1073741824",
                    "requestedServiceObjectiveName": "[variables('databaseServicePlan')]"
                },
                "resources": [
                    {
                        "name": "Import",
                        "type": "extensions",
                        "apiVersion": "2014-04-01-preview",
                        "dependsOn": [
                            "[variables('databaseName')]"
                        ],
                        "properties": {
                            "storageKeyType": "[variables('databaseBackupStorageKeyType')]",
                            "storageKey": "[parameters('databaseBackupStorageKey')]",
                            "storageUri": "[concat(parameters('databaseBackupStorageLocation'), '/', parameters('backupFileName'))]",
                            "administratorLogin": "[variables('databaseAdminLogin')]",
                            "administratorLoginPassword": "[variables('databaseAdminPassword')]",
                            "operationMode": "Import"
                        }
                    }
                ]
            }

失败时的错误:

Resource Microsoft.Sql/servers/databases/extensions '[resource-group-name]/[database-name]/Import' failed with message 'The ImportExport operation with Request Id 'b1f54bdd-6c98-4feb-a86f-656a5c6f1cc5' failed due to 'Error encountered during the service operation. 

Data cannot be imported into target because it contains one or more user objects. Import should be performed against a new, empty database.

也许我误解了这些模板是如何部署的——我认为 ARM 修补了环境。有谁知道我可以通知 ARM 仅在这些资源的配置发生更改时创建/更新数据库(和子资源)的方法?

或者,如果有更好的方法来使用资源模板恢复数据库,我很想听听。

非常感谢任何帮助或建议!

提前致谢,

4

4 回答 4

0

如错误消息所述,您只能将数据导入空数据库或在创建新数据库时。

您是每次都尝试将数据导入同一个数据库还是每次都导入新数据库?如果是后者,那么我将与我的团队中更熟悉 ARM 模板的成员进行协调,以帮助修复模板中的错误。

于 2016-07-08T19:00:44.353 回答
0

从它的声音来看,您希望在每次部署时重新创建相同的测试数据库。正确的?

正如 nnuemah 所说,在导入 bacpac 之前,您必须有一个空数据库或没有数据库。我们正在考虑支持部署dacpac文件(除了导入bacpac文件),这可能会解决您的场景,尽管它们更针对幂等模式部署,而不是作为场景测试数据恢复。同时,在部署导入 bacpac 的模板之前,您是否可以带外删除数据库?

您可以在此处找到有关 dacpacs 和 bacpacs 及其差异的更多信息:https ://msdn.microsoft.com/en-us/library/ee210546.aspx

我还将寻找其他可能在此期间起作用的模板选项。

干杯,比尔

于 2016-07-08T22:17:10.003 回答
0

不幸的是,正如比尔所说,dacpac 文件的部署尚不支持,但这是我们正在研究的问题。目前,bacpacs 不是幂等的。一旦支持 dacpacs,您应该能够完成您所描述的内容。

于 2016-07-22T21:18:08.140 回答
0

我有同样的问题。对我来说好处是,即使我的数据库部署失败,我的部署模板中的所有其他内容都会被提交。但是得到这些错误是令人不安的。

参考 Microsoft 的 Kirk Evans,这是工程师意识到的一个已知问题。硒https://blogs.msdn.microsoft.com/kaevans/2016/03/28/deploy-bacpac-to-azure-sql-database-using-arm/#comment-56605

对此的解决方案是使用部分模板引用 Web 应用程序的可能性,该应用程序发出数据库部署部分。然后,此 Web 应用程序可以查询数据库是否存在,并根据结果发出部分内容。

于 2016-10-07T07:57:36.537 回答