Condividi tramite


Creazione di una vista partizionata nel database di archiviazione

Quando si esegue il pacchetto di manutenzione dati BAM (BAM_DM_<activity name>) BAM copia ogni partizione nel database di importazione primaria BAM in una tabella separata nel database di archiviazione BAM. Se si scollega il database di archiviazione e lo si ricollega per l'esecuzione di query, sarà difficile individuare i dati per la query.

È possibile creare viste partizionate nel database di archivio BAM per facilitare l'individuazione dei dati. BAM supporta fino a 253 partizioni. Per ogni attività, BAM genera un pacchetto DTS di manutenzione dati BAM, che copia i dati dell'attività nel database di archiviazione BAM e quindi li rimuove dal database di importazione primaria BAM. Se il database di archiviazione non riesce dopo la copia dei dati, ma prima del backup successivo, i dati andranno persi.

La soluzione per evitare la perdita di dati consiste nell'avere un singolo pacchetto di archiviazione, che copia prima i dati precedenti da tutte le attività, quindi esegue il backup del database di archiviazione BAM e infine elimina le partizioni copiate dal database di importazione primaria BAM.

Prerequisiti

Per eseguire questa procedura, è necessario essere connessi come membro del gruppo Amministratori di BizTalk Server.

Creare una vista partizionata nel database di archivio BAM (SQL Server 2008 SP1 o SQL Server 2008 R2)

  1. Aprire SQL Server Management Studio.

  2. Selezionare il database di archiviazione BAM e quindi fare clic su Nuova query.

  3. Sul menu Query, puntare a Risultati e quindi fare clic su Risultati su Testo.

  4. Copiare lo script SQL seguente nel riquadro query. Sostituire <il nome> dell'attività con il nome dell'attività e sostituire <view type> con Istanze per la visualizzazione dell'istanza o Relazioni per la visualizzazione delle relazioni.

    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. Esecuzione della query.

Vedere anche