新しい会話を開始

未解決

Community Manager

 • 

3.1K メッセージ

109

2020年8月10日 21:00

SourceOne Discovery Manager:Discovery Managerが検索結果の完全なセットを返さない場合がある(000534859)

プライマリ製品:SourceOne Discovery Manager

製品:SourceOne Email Management、SourceOne、SourceOne Discovery Manager

バージョン:5

記事タイプ:不具合修正

対象読者:レベル30 = お客様

最終発行日:2019年8月14日水曜日14:50:25(GMT)

 

サマリー:

Discovery Managerが検索結果の完全なセットを返さない場合があります。

 

問題:

フル テキスト インデックス検索時に、すべての結果がDiscovery Managerのデータベースにコミットされていない場合があります。そのため、検索結果が不完全となる可能性があります。
この問題は、すべての検索に影響するとは限りません。この問題が発生する原因は、フル テキスト インデックスに重複するメッセージが存在かどうかと、それらの結果が返される順序によって異なります。この問題は、以下の条件に該当するシステムで発生する可能性が高くなります。

·         フル テキスト インデックスに重複する項目が存在する

·         MaxSearchHitsThreadsオプションが有効になっている

·         複数のIn-Place Migrationアーカイブが存在し、データが複数のEmailXtenderサーバーから1つのSourceOne Mapped Folderに移行された。   

 

原因:

Discovery Managerの検索を実行すると、検索プロセスはインデックスの検索条件との一致(ヒット)を探します。  ヒット数が5,000件に達するか検索が完了すると、その結果はSQLトランザクションを介してDiscovery Manager SQLデータベースに登録されます。  トランザクションに重複するエントリーが含まれるのは、マッピングされた同じフォルダーから同じメッセージが同じ検索の同じまたは以前のトランザクションによって既に登録されている場合であり、その場合はプライマリー キー違反エラーが返され、トランザクションがロールバックされます。  ロールバックされたトランザクションに含まれるヒットは、検索の結果セットには追加されません。

 

解決方法:

Dell EMCでは、インストールされている7.2バージョンに対して、以下のSourceOne Email Managementパッチのいずれかを適用することを推奨しています。
7.2 SP6 HF4(7.2.6.6229)
7.2 SP7以上
http://support.emc.comのSourceOne Email Management製品ページからダウンロードできます。

SourceOne Email Managementの修正版バージョンをインストールすると、今後のすべての検索ではすべての結果が反映されるはずです。  影響を受けるバージョンを実行している場合に実行されたすべての検索については、結果の完全性を保証するために再実行が必要です。


SourceOne Email Managementバージョン7.2.8では、Index Validationによって、重複や「Extra Items」コンテンツがあるインデックス セットを特定できる場合があります。これらの検証結果を使用して、再実行する必要がある検索を特定できます。次の手順を実行します。  

最初に、Mode 2以降を使用してIndex Validationスキャンを設定します。Index Validationによって問題があるインデックス セットに黄色の感嘆符(!)のフラグが付けられ、インデックスのステータスが「Extra Items」になります。  以前のリリースでスキャンが実行されている場合は、SourceOne Email Managementコンソールで各YYYYMMフォルダーを右クリックして[Rescan]を選択することによって、再スキャンを実行できます。  スキャンが完了したら、すべての影響を受けるDiscovery Managerの検索を再実行する前に、「Extra Items」のステータスになっているすべてのインデックスを正常に再構築する必要があります。

以下の手順では、以前に実行したDiscovery Managerの検索のなかで問題があるインデックスセットを検索した可能性があるものを特定します。

注:以下のSQLクエリは、SourceOneデータベース名がデフォルトであることを前提としています。デフォルトではない場合は、クエリをSourceOneデータベース名の正しい名前に変更する必要があります。

まず、この問題の発生中に実行された過去のSourceOne Discovery Managerの検索を特定するために、以下のSQLクエリを実行します。

1. 以下のクエリを実行して、SourceOne環境のインストール日とアップグレード日を取得します。

use ES1Archive
select EndTime into #TEMP from [DBMaintenanceHistory] where (version >=7 and version <7.27000) and Description = 'SourceOne Archive database update complete'
insert into #TEMP select EndTime from [DBMaintenanceHistory] where Description = 'New SourceOne Native Archive database created' and Version >=7 and Version < 7.27000
GO



2. 以下のクエリを実行し、手順1で取得した日付に基づいて、実行されたDiscovery Managerの検索に関するすべての情報を収集します。
 

use ES1Activity;
with cte as(
select ActivityID as activityid,TaskTypeID,Name as SearchName,search.value('(@searchOperation)[1]','varchar(max)') as operation, search.value('(.)[1]','varchar(max)') as daterange,
xConfig.value('(/SearchJobConfig/QueryString/SearchCriteria/@displayName)[1]','nvarchar(max)') as SearchUser from Activity
cross apply xConfig.nodes('/SearchJobConfig/QueryString/SearchCriteria/ExpressionSet/SimpleAttributeExpression') as ref(search)
where xConfig is not null --and --TaskTypeID = 8
and search.value('(@displayName)[1]','varchar(max)') = 'Date')
select activityid,TaskTypeID,SearchUser,SearchName, 'StartDate' = Replace(CASE 
WHEN min(daterange) = max(daterange) THEN 'ALL'
ELSE min(daterange) END,'T',' '), 'EndDate' = Replace(CASE
WHEN min(daterange) = max(daterange) THEN 'ALL'
ELSE max(daterange) END,'T',' ') into #SearchDates from cte
group by activityid,TaskTypeID,SearchUser,SearchName



3. 以下のクエリを実行して、影響を受ける可能性のある検索に関するすべての情報を出力します。出力には、以下のようなDiscovery Managerの検索に関する基本的な情報が含まれます。

 

 

 

 

MatterName:

検索が実行されたときに起こっていた問題の名前

SearchName:

Discovery Manager Clientに表示される検索の名前

JobID:

SourceOne Email Management Consoleの[Job Management]ウィンドウに表示されるJobIDの値

ActivityName:

SourceOne Email Management Consoleの[Job Management]ウィンドウに表示されるアクティビティ名

Search Run Date:

検索が実行された日付/時刻

Search Start/End Date:

検索で使用された日付の条件。検索で[Date]フィールドが使用されていない場合は、すべての日付が検索されています。

Executing user:

検索を作成して実行したユーザー


use DiscoveryManager

select distinct m.MatterID,m.name as MatterName,O.Name as SearchName,J.JobID,A.Name as JobSearchName,W.JobOrQueryID as [DM-JobOrQueryID],O.StartDate as [Search Run Date],
S.StartDate as [Search Start Date], S.EndDate as [Search End Date], 
u.userid, u.Name as [Executing User] from Operations O
join Requests R on O.OperationID = R.OperationID
join WorkItems W on R.RequestID = W.RequestID
join matters m on o.MatterID = m.matterid
join users u on u.UserID = O.UserID
join ES1Activity.dbo.Activity A on (A.Name like CONCAT('%',W.JobOrQueryID,'%') )
join ES1Activity.dbo.Tasks T on A.ActivityID = T.ActivityID
join ES1Activity.dbo.Jobs J on T.TaskID = J.TaskID
join #SearchDates S on (S.ActivityID = A.ActivityID and S.SearchName = A.Name)
where A.TaskTypeID =31 and M.MatterID ! = 0 --0=Dummy Matter 
and O.StartDate > (select min(EndTime) from #TEMP) and O.StartDate < (select max(EndTime)from #TEMP)

GO
drop table #SearchDates
drop table #TEMP

GO



注:次の手順に進む前に、Index Validationを必ず完了してください。

次に、問題のあるSourceOneインデックス セットとその状態を特定するために、次のSQLクエリを実行します。


1. 以下のクエリを実行して、SourceOne環境のインストール日とアップグレード日を取得します。

use ES1Archive
select EndTime into #TEMP from [DBMaintenanceHistory] where (version >=7 and version <7.27000) and Description = 'SourceOne Archive database update complete'
insert into #TEMP select EndTime from [DBMaintenanceHistory] where Description = 'New SourceOne Native Archive database created' and Version >=7 and Version < 7.27000
GO


2. 以下のクエリを実行して、いずれかの時点で「Extra Items」としてマークされていたすべてのSourceOneインデックスを取得します。

use ES1Archive
select WorkID,CmdType,cast(CmdParam as XML).value('(/WQ_Parms/WQ_FolderId/node()) [1]', 'bigint') as FolderID,cast(CmdParam as XML).value('(/WQ_Parms/WQ_FldrPath/node()) [1]', 'nvarchar(max)') as [Archive_Index Path],LastModified as ScanDate, SUBSTRING(ResultStr,(CHARINDEX( 'indexflags(', ResultStr, 0)+11),(CHARINDEX( ')', ResultStr, (CHARINDEX( 'indexflags(', ResultStr, 0)+11) )-(CHARINDEX( 'indexflags(', ResultStr, 0)+11))) as ResultStr,'Result' = CAST('Extra Items' as varchar(50))
into #ExtraItems 
from WorkQueue 
where CmdType =17 and (CHARINDEX( 'indexflags(', ResultStr, 0) > 0 and (CAST(SUBSTRING(ResultStr,(CHARINDEX( 'indexflags(', ResultStr, 0)+11),(CHARINDEX( ')', ResultStr, (CHARINDEX( 'indexflags(', ResultStr, 0)+11) )-(CHARINDEX( 'indexflags(', ResultStr, 0)+11))) as bigint) & CAST( 65536 as bigint) ) > 0)
GO

3. 以下のクエリを実行して、問題発生時に再構築されたすべてのSourceOneインデックスを取得します。 

use ES1Archive
select WorkID,CmdType,cast(replace(replace(CmdParam,' ',''),' ','') as nvarchar(max)) as [Archive_Index Path], min(LastModified) as [Rebuild Date], 'Result' = CASE WHEN CmdType=1 THEN 'Rebuilt' ELSE 'Unknown' END into #Rebuilt 
from WorkQueue (nolock) 
where CmdType = 1 and (LastModified >= (select min(EndTime) from #TEMP) and LastModified < (select max(EndTime) from #TEMP))
group by WorkID,CmdParam,CmdType order by CmdParam,CmdType
GO
update #Rebuilt set [Archive_Index Path] = replace([Archive_Index Path],char(13),'')
update #Rebuilt set [Archive_Index Path] = replace([Archive_Index Path],char(10),'')
GO
set IDENTITY_Insert #ExtraItems ON
insert into #ExtraItems (WorkID,CmdType,[Archive_Index Path],ScanDate,Result)
select * from #Rebuilt where NOT EXISTS(select * from #ExtraItems where #ExtraItems.[Archive_Index Path] = #Rebuilt.[Archive_Index Path])
GO

 

4. 以下のクエリを実行して、SourceOne 7.2 SP8にアップグレードした後にValidationに失敗したかIndex Validationプロセス中に見つからなかったすべてのSourceOneインデックスを取得します。

use ES1Archive
select replace(FP.path,'\FPROOT\','') + CASE
WHEN LEN(FT.IndexNum) = 1 THEN ('00' + CAST(FT.IndexNum AS VarChar(20)))
WHEN LEN(FT.IndexNum) = 2 THEN ('0' + CAST(FT.IndexNum AS varchar(20)))
WHEN LEN(FT.IndexNum) = 3 THEN CAST(FT.IndexNum AS varchar(20)) END as [Archive_Index Path] into #IndexList
from FTIndex FT 
join FolderPlan FP on FT.FolderNodeID = FP.FolderID
EXCEPT
select replace(FP.path,'\FPROOT\','') + CASE
WHEN LEN(FT.IndexNum) = 1 THEN ('00' + CAST(FT.IndexNum AS VarChar(20)))
WHEN LEN(FT.IndexNum) = 2 THEN ('0' + CAST(FT.IndexNum AS varchar(20)))
WHEN LEN(FT.IndexNum) = 3 THEN CAST(FT.IndexNum AS varchar(20)) END as [Archive_Index Path] 
from FTIndex FT 
join FolderPlan FP on FT.FolderNodeID = FP.FolderID
where (FT.LastScanDate > (select Max(Date) from DBMaintenanceHistory where Description = 'SourceOne Archive database update complete'  and Version > 7.27))
GO
set IDENTITY_Insert #ExtraItems ON
insert into #ExtraItems (WorkID,CmdType,[Archive_Index Path],Result) 
select '0','17',[Archive_Index Path],'Result'='Not-Validated' from #IndexList 
WHERE NOT EXISTS (select * from #ExtraItems where #ExtraItems.[Archive_Index Path] = #IndexList.[Archive_Index Path])
GO

5. この最後のクエリを実行すると、影響を受けている可能性のあるすべてのSourceOneインデックスが出力されます。「Extra Items」としてマークされていたインデックスに対して実行されたすべての検索は、正しい結果を取得するために再実行する必要があります。「Rebuilt」だったインデックスに対して実行されたすべての検索も再実行する必要があります。これは、インデックスの再構築は解決されたものの、再構築されたインデックス セットに対して検索が実行されたタイミングによって変わるためです。

select WorkID,[Archive_Index Path],ScanDate as Date,Result from #ExtraItems where Result !='Validated'
GO
drop table #TEMP
drop table #Rebuilt
drop table #ExtraItems
drop table #IndexList
GO

 

プライマリ製品:

SourceOne Discovery Manager

 

製品:

SourceOne Email Management、SourceOne、SourceOne Discovery Manager

レスポンスがありません。
イベントは見つかりませんでした!

Top