IBM Support

文書 ID の構成について

技術情報(FAQs)


質問

メール配信や複製のトラブルシューティングをする際、文書 ID がどのように構成されているのかを知っておくと役立つときがあります。この文書では、文書 ID の個々についての詳細を説明します。また、Lotus Notes/Domino のタスク (レプリカなど) によってどのように扱われているのかについて説明します。

回答


文書 ID の構成要素について

文書 ID は次のように構成されています。

  • UNID (Universal Note ID)
すべての文書に固有の識別子であり、データベースのロケーションや日時の情報は含まれません。 すべてのレプリカ上の同一文書は同じ UNID を保持します。 この識別子は文書を更新しても変化しません。
  • OID (Originator ID)
文書のバージョン情報を表す識別子です。 すべてのレプリカ上の同一文書は同じ OID を保持しますが、文書が更新されると OID も更新されます。
  • GNID (Global Note ID)
データベースのロケーション情報を含んだ識別子です。 GNID は文書を更新しても変化しません。 ロケーション情報が含まれるため、レプリカ上の同一文書であっても GNID は異なります。
  • NID (Note ID)
データベース内固有の識別子です。 NID にはデータベースのロケーションに関する情報は含まれていません。 文書が更新されても NID は変化しません。
  • IID (Instance ID)
データベース内固有の文書のバージョン情報を表す識別子です。 IID は文書を更新すると変化します。
  • GIID (Global Instance ID)
データベース内固有の文書のバージョン情報を表す識別子です。 GIID はデータベースのロケーション情報を含みます。 文書が更新されると GIID も更新されます。

これらの ID の情報は、Lotus Notes クライアントから参照することが可能です。 ビューで任意の文書を選択するか、または文書を開いた状態で [文書のプロパティ] を実行します。 そうすると、以下のように 5 行の ID 情報が表示されます。 このように、文書 ID はキー値 (アルファベット) と 16 進数の値で構成されています。

 (文書 ID の例)
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT0000C092

次に、各々の ID についての詳細を上記の例を使って説明します。


Universal Note ID (UNID) と Originator ID (OID) について

上から 4 行は、文書の完全な Originator ID です。 Originator ID は、 Universal Note ID と文書更新日時 (Sequence Time)、バージョン情報 (Sequence Number) から構成されています。

Originator ID (OID) =
ID: OF 0000039D:3836C29F
  ON 85255DC9:0056FB94
  SD 00255DF4:0057B8FA-SN 00000003
  DB85255CD9:00567287
  NT0000C092

Universal Note ID (UNID) =
ID: OF 0000039D:3836C29F
  ON 85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT0000C092

Sequence Time =
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD 00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT0000C092

Sequence Number =
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN 00000003
  DB85255CD9:00567287
  NT0000C092

さらに、一番最初の OF から始まる行はファイルメンバー ("Originator ID - File") を意味し、2 番目の ON からはじまる行はノートメンバー ("Originator ID - Note") を意味します。

OID.File =
ID: OF 0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT0000C092

OID.Note =
ID: OF0000039D:3836C29F
  ON 85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT0000C092

nsfdata.h というヘッダーファイルに ORIGINATORID 及び UNIVERSALNOTEID の定義がされていますので参照してください。

nsfdata.h 抜粋

typedef struct {
  DBID File;      /* Unique (random) number */
           /* (Even though this field is called "File," */
           /* it doesn't have anything to do with the file!) */
  TIMEDATE Note;    /* Original Note Creation time/date */
             /* (THE ABOVE 2 FIELDS MUST BE FIRST - UNID */
             /* COPIED FROM HERE ASSUMED AT OFFSET 0) */
  DWORD Sequence;    /* LOW ORDER: sequence number, 1 for first version */
             /* HIGH ORDER WORD: flags, as above */
  TIMEDATE SequenceTime;/* time/date when sequence number was bumped */
} ORIGINATORID;

#define OID ORIGINATORID

typedef struct {
  DBID File;      /* Unique (random) number */
             /* (Even though this field is called "File," */
             /* it doesn't have anything to do with the file!) */
  TIMEDATE Note;    /* Original Note Creation time/date */
} UNIVERSALNOTEID;

#define UNID UNIVERSALNOTEID

Originator ID (OID) は、Universal Note ID と更新情報 (更新日時及びバージョン情報) という二つの要素から構成されています。
Universal Note ID (UNID) は、同じ文書のレプリカコピーかどうかを識別するためのものであり、更新情報はほんとうに同一内容の文書なのかを比較するのに利用されます。Universal Note ID (UNID) は文書を更新しても変化しない値であることから、文書の階層構造や文書リンクの生成時に利用されます。


複製と UNID、OID の関係について

Universal Note ID (Originator ID の最初の部分) は、バージョンが異なってもレプリカコピー内の同一文書であれば同じ ID を持っています。つまり、同じ UNID を持っている文書は、互いのレプリカコピーであると言えます。このため、一つのデータベース内には同じ UNID を持つ文書は存在しません。レプリカタスクがデータベース内に同じ UNID を持つ複数の文書を見つけた場合は、ログにエラーを出力してその文書の複製はされません。

Originator ID は更新情報も加味した識別子です。すべてのレプリカコピー内の同一文書であれば、同じ OID を持ちます。しかし一方の文書を更新した場合は、異なる OID を持つことになります。OID には更新日時とバージョン情報を含んでいるからです。このため、複製の更新がされていないレプリカコピー間の同一文書では、UNID は同じでも OID (バージョン情報や更新日時) が異なることになります。

Lotus Notes/Domino のレプリカタスクは、文書のマッチングに UNID を利用します。
データベース A とそのレプリカであるデータベース B が存在するとします。 データベース A、B 間でレプリカの更新を実施した場合、もし特定の UNID を持つ文書がデータベース B 上になかった場合は、レプリケーターは文書のコピーをデータベース B 上に作成します。

データベース A 及び B で同一の UNID を持つ文書が見つかった場合は、それが互いのレプリカコピーであると認識します。
この場合は、Originator ID に含まれる更新日時とバージョン情報を比較します。更新情報がまったく同一であれば、レプリケーターはそれ以上の処理をしません。更新日時とバージョン情報が異なる場合は、それらを比較して最新の文書に置き換えます。

一方の文書が更新されていて、もう一方はまったく更新されていない場合、更新されたほうの文書のバージョンは更新されていないものよりも数値が大きくなります。
レプリカタスクはバージョンが新しい方を古い方の文書に上書きします。


競合文書について

競合文書は、同一文書の更新を実施することで発生します。あるユーザーが、データベース A 上の文書を更新し、他のユーザーがそのレプリカデータベース B 上の同じ文書を更新してしまった場合、これらの二つの文書は同じバージョン情報を持ちますが、異なる更新時間の情報を持ちます。
その後レプリカタスクがデータベース A B 間の更新を行った場合、この文書には競合文書が作成されることになります。
更新時間が新しいほうが勝者となり、更新時間が古いほうが競合文書となります。

レプリケーターは、勝者の文書を敗者のデータベースへコピーします。勝者の文書の OID はそのまま保持されます。次に敗者の文書には異なる OID を生成しなおし、さらに $Conflict (VIEW_CONFLICT_ITEM) という特別な内部フィールドを持たせます。
この $Conflict フィールドがあることで、Lotus Notes はその文書が競合文書であると認識します。また、レプリケーターは敗者の文書に $REF フィールドを生成し、勝者の文書の UNID 値を挿入します。
このため、競合文書は勝者の文書の返答文書としてビューに表示されることになります。


Global Note ID (GNID) と NOTEID (NID)

Global Note ID (GNID) は、Database ID と Note ID (NID) という二つの識別子で構成されています。

GNID は文書のプロパティの ID 情報内の下 2 行のことを表します。

Global Note ID (GNID) =
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB 85255CD9:00567287
  NT 0000C092

Database ID (GNID.File) =
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB 85255CD9:00567287
  NT0000C092

Note ID (GNID.NoteID) =
ID: OF0000039D:3836C29F
  ON85255DC9:0056FB94
  SD00255DF4:0057B8FA-SN00000003
  DB85255CD9:00567287
  NT 0000C092


Database ID は "DB" というキー値と 16 進数で表されます。 また Note ID は "NT" というキー値と 16 進数で表されます。
この二つの要素から、GNID が構成されています。


Global Note ID (GNID)

OID とは異なり、GNID は文書のバージョン情報は持っていません。また Note ID はデータベースファイル内の格納位置に関連する識別子であるため、レプリカデータベース内の同一文書であっても値は異なります。
Database ID はデータベースのレプリカ ID の値と同じです。
文書内の Database ID は、その文書を保持するデータベースの Database ID と同じです。


Note ID (NID)

Note ID (NID) はデータベース内の文書を特定するための識別子であり、Record Relocation Vector (RRV:文書のデータベースファイル上の位置情報) をもとに構成されています。
Note ID は、文書が更新されても ID 値が変化することはありません。 ただし文書を削除した場合は ID 値が変化し、RRV_DELETED という値が挿入されます。

#define RRV_DELETED 0x80000000L  /* indicates a deleted note */

Note ID はデータベースのファイル位置情報ですので、レプリカコピーであってもデータベースごとに異なる Note ID が割り振られます。


INSTANCEID (IID)

Instance ID はデータベース内の文書のインスタンス識別子です。文書が更新されるたびに Instance ID は変化します。
Instance ID は、文書の更新日時と Note ID で構成されています。
詳細については nsfdata.h に定義されていますので、参照してください。

nsfdata.h 抜粋

typedef struct {
  TIMEDATE Note;    /* Note's MODIFICATION date/time */
  NOTEID NoteID;    /* Note's RRV */
} INSTANCEID;

#define IID INSTANCEID

更新日時は OID 内の更新日時とは異なります。IID は文書の未既読の表示を決定するのに利用されます。OID はレプリカデータベース間で複製の更新を行う時に、文書のバージョンが同一かどうかを比較するのに利用されます。
C API の NSFNoteUpdate 関数を使用して文書を更新すると、そのたびに更新日時が設定されます。この更新日によってビューの未読情報は管理されています。未読 ID テーブルにはこのテーブルの最終更新日時の情報が含まれています。もしある文書を既読にした場合は、テーブルからその文書の ID が削除され、最終更新日時が更新されます。

既に読んだ文書でも、他のクライアントから更新されると再度未読マークがつきます。これは更新日時が未読テーブルの最終更新日時よりも最新であるために、その文書の ID が未読 ID テーブルに付加されるためです。


GLOBALINSTANCEID (GIID)

Global Instance ID は複数のデータベースにわたって一つの文書を識別するためのグローバルな識別子です。IID と同じ構成ですが、異なる点は Database ID 情報も含まれていることです。詳細については nsfdata.h に定義されていますので、参照してください。

nsfdata.h 抜粋

typedef struct {
  DBID File;      /* database Creation time/date */
  TIMEDATE Note;    /* note Modification time/date */
  NOTEID NoteID;    /* note ID in database */
} GLOBALINSTANCEID;

#define GIID GLOBALINSTANCEID

クロスリファレンス情報
区分 製品 コンポーネント プラットフォーム バージョン エディション
Messaging Applications IBM Domino

Historical Number

722654

Document information

More support for: IBM Notes

Software version: 6.0, 6.5, 7.0, 8.0, 8.5, 9.0

Operating system(s): Linux, Windows

Reference #: 1467009

Modified date: 28 August 2012