次の方法で共有


アーカイブ データベースでのパーティション ビューの作成

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)

  1. SQL Server Management Studio を開きます。

  2. BAM アーカイブ データベースを選択し、[ 新しいクエリ] をクリックします。

  3. [ クエリ ] メニューの [ 結果の出力 ] をポイントし、[ テキストに結果 ] をクリックします。

  4. 次の 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
    
  5. クエリを実行します。

こちらもご覧ください