BAM データ メンテナンス パッケージ (BAM_DM_<activity name>
) を実行すると、BAM プライマリ インポート データベース内の各パーティションが BAM アーカイブ データベース内の別のテーブルにコピーされます。 アーカイブ データベースをデタッチしてクエリ用に再アタッチすると、クエリのデータを見つけるのが困難になります。
BAM アーカイブ データベースにパーティション ビューを作成して、データの検索を容易にすることができます。 BAM では、最大 253 個のパーティションがサポートされます。 BAM は、アクティビティごとに 1 つの BAM データ メンテナンス DTS パッケージを生成します。これにより、アクティビティ データが BAM アーカイブ データベースにコピーされ、BAM プライマリ インポート データベースから削除されます。 データがコピーされた後、次のバックアップの前にアーカイブ データベースが失敗した場合、データは失われます。
データの損失を防ぐソリューションは、1 つのアーカイブ パッケージを用意することです。このパッケージは、最初にすべてのアクティビティから古いデータをコピーしてから BAM アーカイブ データベースをバックアップし、最後に BAM プライマリ インポート データベースからコピーされたパーティションを削除します。
[前提条件]
この手順を実行するには、BizTalk Server Administrators グループのメンバーとしてログオンする必要があります。
BAM アーカイブ データベースにパーティション ビューを作成する (SQL Server 2008 SP1 または SQL Server 2008 R2)
SQL Server Management Studio を開きます。
BAM アーカイブ データベースを選択し、[ 新しいクエリ] をクリックします。
[ クエリ ] メニューの [ 結果の出力 ] をポイントし、[ テキストに結果 ] をクリックします。
次の SQL スクリプトをクエリ ウィンドウにコピーします。 <アクティビティ名>をあなたのアクティビティ名に置き換え、
<view type>
をインスタンスビューの場合はインスタンスに、またはリレーションシップビューの場合はリレーションシップに置き換えます。set nocount on declare @activityName as nvarchar(128) declare @viewType as nvarchar(50) set @activityName = N'<activity name>'-- Substitute your activity name here set @viewType = N'<view type>'-- Substitute the view type here, either "Instances" or "Relationships" declare @tableName nvarchar(128) declare @viewName nvarchar(128) declare @isFirstTable bit declare @scriptLine nvarchar(300) set @viewName = N'bam_' + @activityName + '_' + @viewType + 'View' select N'SELECT Name FROM sysobjects where name = N''' + @viewName + ''' and type = ''V''' + char(13) + char(10) + 'IF @@ROWCOUNT > 0 DROP VIEW ' + @viewName + char(13) + char(10) + 'GO' select 'CREATE VIEW ' + @viewName + ' AS ' + char(13) + char(10) declare instance_cursor cursor local for select name from sysobjects where name like N'bam_' + @activityName + '_' + @viewType + '_%' and type = 'U' SET @isFirstTable = 1 OPEN instance_cursor FETCH NEXT FROM instance_cursor INTO @tableName WHILE @@fetch_status = 0 BEGIN if @isFirstTable = 1 BEGIN SET @scriptLine = N'SELECT * FROM [' + @tableName + ']' SET @isFirstTable = 0 END ELSE SET @scriptLine = N'UNION ALL SELECT * FROM [' + @tableName + ']' SELECT @scriptLine FETCH NEXT FROM instance_cursor INTO @tableName END CLOSE instance_cursor DEALLOCATE instance_cursor select 'GO' set nocount off
クエリを実行します。