1

現在、MSDeployを使用して、一連の Web サイトを II6 から IIS7.5 を実行している別のマシンに移行しています。実際の Web サイトの移行は期待どおりに機能しますが、各 Web サイトに関連するデータベースも移行しようとしています。

これまでのところ、一連のテスト サイトを正常に移動することができましたが、ライブ サイトに対しては展開に失敗します (400 MB のデータベースで 1 時間以上の非常に長い実行時間)。私が見ている失敗は、SQLデータベースに(データとして)保存されているJavaScriptに関連しているようです。SMO BatchParserが生成した SQL スクリプトを読み込むと、データに JavaScript を含む行を挿入しようとする最初の行で停止するようです。

私が使用しているMSDeployコマンドは次のとおりです。

msdeploy.exe -source:source-manifest.xml -dest:manifest=dest-manifest.xml

source-manifest.xml:
<sitemanifest>
  <dbFullSql path="Data Source=srv_source;Initial Catalog=db;User ID=usr;Password=pwd" Transacted="True" CopyAllLogins="False" CopyAllUsers="False" />
</sitemanifest>

dest-manifest.xml:
<sitemanifest>
  <dbFullSql path="Data Source=srv_dest;Initial Catalog=db;Integrated Security=true" DropDestinationDatabase="True" />
</sitemanifest>

MSDeploy エラーは次のとおりです。

Error: An error occurred during execution of the database script. The approximate location of the error was between lines '17009' and '17400' of the script. The verbose log may have more information about the error. The command started with:
INSERT [dbo].[Pages] ([PathID], [PageID], [PageKey

Error:
Error count: 1.

エラーの原因となっているsql ファイルからの抜粋:

INSERT [dbo].[Pages] ([PathID], [PageID], [PageKey], [DeveloperID], [FrameworkID], [MasterPageID], [FormID], [Label], [Description], [Status], [AdminPosition], [AdminIndent], [Created], [LastEdited], [PageScript], [PageScriptHead], [PageScriptForm], [PageOnLoad], [PageOnUnload], [PageOnSubmit], [HtmlAttributes], [HasThumbnail], [QueryStringVars], [FriendlyPageURL], [CanonicalURL], [MvtStatus], [MvtAutoOptimize], [MvtStartDate], [MvtEndDate], [MvtExperimentID], [DeepLinkOk]) VALUES (72, 580, N'zz', N'zz', N'zzz', N'zzz', NULL, N'zzz', N'zzz', N'U', 0, 0, CAST(0x00009D3D00A0C296 AS DateTime), CAST(0x00009D4C00C99FA8 AS DateTime), NULL, N'  <script language="javascript" type="text/javascript">
function javascript_stuff()
{
    this.$("panel").style.display = "block";
    ...
lots more snipped out code in here  
}

var regex = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;

var jsobj = new jsobj();
</script>', NULL, NULL, NULL, NULL, NULL, 1, NULL, N'welcome', NULL, N'N', N'N', NULL, NULL, 0, 0)
GO

また、 IIS UI エラーからパッケージをインポートしようとすると、次のようになります。

An error occurred during execution of the database script. The approximate location of the error was between lines '17003' and '17394' of the script. The verbose log may have more information about the error. The command started with : 
INSERT [dbo].[Pages] ([PathID], [PageID], [PageKey

[Expanded Information]
Microsoft.Web.Deployment.DeploymentException: An error occurred during execution of the database script. The approximate location of the error was between lines '17003' and '17394' of the script. The verbose log may have more information about the error. The command started with : 
INSERT [dbo].[Pages] ([PathID], [PageID], [PageKey
 ---> ManagedBatchParser.ParserException
at ManagedBatchParser.Parser.Parse()
at Microsoft.Web.Deployment.SqlBatchParser.ProcessSqlCmdScript(String sqlCmdScript)
at Microsoft.Web.Deployment.SqlScriptToDBProvider.AddHelper(DeploymentObject source, Boolean whatIf)
--- End of inner exception stack trace ---
at Microsoft.Web.Deployment.SqlScriptToDBProvider.AddHelper(DeploymentObject source, Boolean whatIf)
at Microsoft.Web.Deployment.DeploymentObject.AddChild(DeploymentObject source, Int32 position, DeploymentSyncContext syncContext)
at Microsoft.Web.Deployment.DeploymentSyncContext.HandleAddChild(DeploymentObject destParent, DeploymentObject sourceObject, Int32 position)
at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
at Microsoft.Web.Deployment.DeploymentSyncContext.SyncChildrenOrder(DeploymentObject dest, DeploymentObject source)
at Microsoft.Web.Deployment.DeploymentSyncContext.ProcessSync(DeploymentObject destinationObject, DeploymentObject sourceObject)
at Microsoft.Web.Deployment.DeploymentObject.SyncToInternal(DeploymentObject destObject, DeploymentSyncOptions syncOptions, PayloadTable payloadTable, ContentRootTable contentRootTable)
at Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentProviderOptions providerOptions, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)
at Microsoft.Web.Deployment.DeploymentObject.SyncTo(DeploymentWellKnownProvider provider, String path, DeploymentBaseOptions baseOptions, DeploymentSyncOptions syncOptions)
at Microsoft.Web.Deployment.UI.InstallProgressWizardPage.OnWorkerDoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)

どうすればこれを回避できるかについて、誰か考えがありますか?SQL Management Studio を使用して直接パッケージから sql ファイルを実行すると、問題なく実行されます。したがって、SMO BatchParser にバグがない限り、この問題を回避するために設定できる何らかの SMO オプションが必要です。

どんな助けでも大歓迎です!

4

1 に答える 1

0

ここの Web Deploy チームは、この問題を検討しています。乞うご期待!

編集: これは間違いなく、TSData スクリプトの解析における Web Deploy のバグです。スクリプトに $ で始まるステートメントが含まれている場合、それは sqlcmd ディレクティブとして扱われます。回避策はありません。v2 でこれを修正する方法を検討中です。

于 2010-09-30T05:55:40.590 に答える