我们正在测试从本地SQL Server 2008R2数据库到Azure的迁移,但是已经遇到了障碍。
遵循流程,基于SO文章:
BadRequest;请求错误;错误状态代码:< / B> '错误请求'< / P>< P>< B个详细信息: < / B>服务操作期间遇到错误。 ;例外 Microsoft.SqlServer.Management.Dac.Services.ServiceException:无法执行 验证请求; < / P>< / DIV>< / BODY>< / HTML>
注意:上面的错误文字被修剪以排除网址,因为我没有足够的积分。
我似乎无法找到有关此错误的任何信息,或者可能有任何其他日志详细信息,以帮助确定无法导入的原因。
由于错误提及无法进行身份验证,我们还尝试执行以下操作:
这没有任何区别。
如果有人能指出我们正确的方向来实现这项工作,我们将非常感激,因为我们需要多次复制这个过程。
感谢。
答案 0 :(得分:1)
我们需要同样的事情。以下是我们所做的一些步骤和结果:
1)使用ghuey创建的SQL数据库迁移工具导出 你可以在这里下载:https://sqlazuremw.codeplex.com/ 这是一个很棒的工具,我真的建议你先试试这个。取决于您的数据库的复杂性,它将工作得很好。 对我们来说,遗憾的是没有工作。所以你转到了下一步。
2)DAC套餐 2008可以选择生成DACPAC,在Azure上创建数据库结构,然后您可以通过引用2008 Studio Managament中的连接部署到Azure,右键单击Azure服务器,部署...更多详细信息: http://world.episerver.com/documentation/Items/Upgrading/EPiserver-Commerce/8/Migrating-Commerce-databases-to-Azure/ 好吧,如果这适合你,试试吧。这更容易。 对我们来说,遗憾的是没有工作。所以你转到了下一步。
3)使用2012服务器导出bacpac,然后导入到azure 此步骤需要执行多个操作。这是:
一个。生成备份到2008并将文件移动到2012服务器;
湾将备份还原到2012;
℃。做一些SQL:
C1。将SCHEMAs的所有所有者设置为DBO。您可以使用SQL来移动这样的模式:在SCHEMA上进行ALTER AUTHORIZATION :: [db_datareader]到[dbo]
C2。删除您创建的所有用户;
C3。删除所有列和表的所有MS_Description(扩展属性)
C4。删除所有约束(提示:使用drop并生成创建选项生成数据库的完整脚本并复制“drop constraint”部分
C5。我们需要删除数据库索引的填充因子选项。您可以重新创建索引(包括与聚簇索引关联的PK)。好吧,放弃每个PK群集,并不是那么容易,但在谷歌的帮助下你可以找到一个脚本来帮助你创建和删除。这是脚本:
DECLARE @object_id int;
DECLARE @parent_object_id int;
DECLARE @TSQL NVARCHAR( 4000);
DECLARE @COLUMN_NAME SYSNAME;
DECLARE @is_descending_key bit;
DECLARE @col1 BIT;
DECLARE @action CHAR( 6);
SET @action = 'DROP';
--SET @action = 'CREATE';
DECLARE PKcursor CURSOR FOR
select kc.object_id , kc .parent_object_id
from sys.key_constraints kc
inner join sys .objects o
on kc.parent_object_id = o.object_id
where kc.type = 'PK' and o. type = 'U'
and o.name not in ( 'dtproperties','sysdiagrams' ) -- not true user tables
order by QUOTENAME (OBJECT_SCHEMA_NAME( kc.parent_object_id ))
,QUOTENAME( OBJECT_NAME(kc .parent_object_id));
OPEN PKcursor ;
FETCH NEXT FROM PKcursor INTO @object_id, @parent_object_id;
WHILE @@FETCH_STATUS = 0
BEGIN
IF @action = 'DROP'
SET @TSQL = 'ALTER TABLE '
+ QUOTENAME (OBJECT_SCHEMA_NAME( @parent_object_id))
+ '.' + QUOTENAME(OBJECT_NAME (@parent_object_id))
+ ' DROP CONSTRAINT ' + QUOTENAME(OBJECT_NAME (@object_id))
ELSE
BEGIN
SET @TSQL = 'ALTER TABLE '
+ QUOTENAME (OBJECT_SCHEMA_NAME( @parent_object_id))
+ '.' + QUOTENAME(OBJECT_NAME (@parent_object_id))
+ ' ADD CONSTRAINT ' + QUOTENAME(OBJECT_NAME (@object_id))
+ ' PRIMARY KEY'
+ CASE INDEXPROPERTY( @parent_object_id
,OBJECT_NAME( @object_id),'IsClustered' )
WHEN 1 THEN ' CLUSTERED'
ELSE ' NONCLUSTERED'
END
+ ' (' ;
DECLARE ColumnCursor CURSOR FOR
select COL_NAME (@parent_object_id, ic.column_id ), ic .is_descending_key
from sys .indexes i
inner join sys. index_columns ic
on i .object_id = ic .object_id and i .index_id = ic .index_id
where i .object_id = @parent_object_id
and i .name = OBJECT_NAME (@object_id)
order by ic. key_ordinal;
OPEN ColumnCursor ;
SET @col1 = 1 ;
FETCH NEXT FROM ColumnCursor INTO @COLUMN_NAME, @is_descending_key;
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@col1 = 1 )
SET @col1 = 0
ELSE
SET @TSQL = @TSQL + ',';
SET @TSQL = @TSQL + QUOTENAME( @COLUMN_NAME)
+ ' '
+ CASE @is_descending_key
WHEN 0 THEN 'ASC'
ELSE 'DESC'
END;
FETCH NEXT FROM ColumnCursor INTO @COLUMN_NAME, @is_descending_key;
END;
CLOSE ColumnCursor ;
DEALLOCATE ColumnCursor ;
SET @TSQL = @TSQL + ');';
END;
PRINT @TSQL;
FETCH NEXT FROM PKcursor INTO @object_id , @parent_object_id ;
END;
CLOSE PKcursor ;
DEALLOCATE PKcursor ;
C6。重新创建FK
C7。删除所有索引
C8。重新创建所有索引(没有填充因子选项)
d。现在,右键单击2012上的数据库,并以BACPAC格式将数据层导出到Azure存储。完成后,在Azure上导入。 它应该有效: - )
答案 1 :(得分:0)
对于可能偶然发现这种情况的任何人,我们已经能够通过使用bacpac文件通过2012客户端工具在本地2008R2服务器上创建新数据库来找到问题。
错误与正在触发的删除触发器有关,我不明白它为什么被执行,但这是另一个问题。
希望这可以帮助其他人在SQL Azure上导入错误。