Relica ID:
首先来看NSF DB的replicate ID, 这个ID可以从数据库的属性里得到,如下图
1. 什么是replica ID?
NSF数据库的不同副本(replica)之间共享相同的replica ID,Notes/Domino以此来确定数据库之间的复制关系. New copy一个数据库,可以看到他的replica id和原始数据库的是不同的;但新创建一个副本,则可以发现这个ID没有变化.
Replica ID在内部存储为一个时间戳(TIME DATE), 不过在数据库的属性里,则显示的是其两个16进制的值.
2. 使用C API得到数据库的Replica ID.
非常简单,只需要在打开的数据库上调用NSFDbReplicaInfoGet()即可,不过要注意的是起返回的是一个replica信息的结构体,Replica ID只是其内容的一部分.示例代码如下:
if ( error = NSFDbReplicaInfoGet( db_handle, &replInfo ) )
{
PrintAPIError (error);
NSFDbClose(db_handle);
NotesTerm();
return (1);
}printf("Replica ID is [%08X:%08X]/n", replInfo.ID.Innards[1], replInfo.ID.Innards[0] );
DB ID:
和Replica ID不一样, DB ID可以从数据库中文档属性(Data Note)中得到,如下图:
1. 什么是DB ID
概念很简单,就是数据库的内部标识. 和replica ID一样,是个时间戳(TIMEDATE); 不同的是这个ID在数据库产生时被唯一分配,并且不可被修改.同一个DB的各个副本之间,虽然共享replica ID,但其DBID是不一样的.
2. 使用C API得到DB ID
下面代码显示了如何得到数据库的DB ID,并以16进制的方式显示出来:
if (error = NSFDbIDGet (db_handle, &dbid))
{
PrintAPIError (error);
NSFDbClose(db_handle);
NotesTerm();
return (1);
}printf("DB ID is [%08X:%08X]/n", dbid.Innards[1], dbid.Innards[0] );
NOTE ID & UNID:
Note ID 和 UNID是用来标识Note的,在Notes UI中可以通过"文挡属性"获取这两个ID,如下图. 两副图分别表示了同一个数据文挡在互为replica的DB中的ID 信息
===>
1. Note ID & UNID
NOTE ID : 主要用来表示一条Note在当前DB中的位置. 使用Note ID,可以方便的通过NSFNoteOpen()打开一条Note记录. 这个ID在编程中非常重要. 可以注意到,Note ID仅仅表示在当前DB中的位置,在互为replica的DB中,同一条Note在不同DB中其Note ID一般是不同的.
UNID: 全称是 Universal Note ID . 从名字即可看出,这个UNID是个全局标识. 在整个Notes的环境中, UNID相同的两条Note互为replica.除了用在replica中,这个ID 也可以被用于回复文挡(Resonse)以及文挡链接(Document Links). UNID是由两部分组成的.如图的"OF"及"ON"部分的两行数.
另外,对于同一个UNID的文挡,Notes/Domino使用sequence number/sequence time来区分他的不同副本, 在上图中,即为,"SD"开头的一行数,他的后半部分为一个序列号;前半部分该Note最后修改的时间.通过这两部分的组合,即使同一时间打开同一个文挡,Notes也能正确标识他们的版本.
2. 使用C API取得UNID和Note ID
NSFNoteGetInfo(note_handle, _NOTE_OID, &oid);
printf( "OF is [%08X:%08X]/n", oid.File.Innards[1], oid.File.Innards[0] );
printf( "ON is [%08X:%08X]/n", oid.Note.Innards[1], oid.Note.Innards[0] );
printf( "Seq time is [%08X:%08X]/n", oid.SequenceTime.Innards[1], oid.Sequenc
eTime.Innards[0] );
printf( "Seq number is [%08X]/n", oid.Sequence);NSFNoteGetInfo(note_handle, _NOTE_ID, ¬e_id);
printf( "note id :[%010X]/n", note_id );