在存档数据库中创建分区视图

运行 BAM 数据维护包 (BAM_DM_<activity name>) BAM 会将 BAM 主导入数据库中的每个分区复制到 BAM 存档数据库中的单独表中。 如果分离存档数据库,然后又重新附加它进行查询,那么很难找到您要查询的数据。

您可以在 BAM 存档数据库中创建分区视图,以简化数据查找过程。 BAM 最多支持 253 个分区。 BAM 为每个活动生成一个 BAM 数据维护 DTS 程序包,该程序包将活动数据复制到 BAM 存档数据库,然后从 BAM 主导入数据库删除这些数据。 如果存档数据库在复制数据之后下一次备份之前失败,则数据将会丢失。

防止丢失数据的办法是,创建一个单独的存档程序包,该程序包首先复制所有活动的旧数据,然后备份 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. 执行查询。

另请参阅