第 4 章 跟踪对目录条目的修改
在某些情况下,跟踪何时对条目进行更改非常有用。目录服务器跟踪条目修改有两个方面:
- 使用更改序列号来跟踪对数据库的更改。这与修改复制和同步中使用的序列号操作类似。每个普通目录操作都会触发序列号。
- 分配创建或修改信息。这些属性记录了创建和最近修改条目的用户的名称,以及创建和修改的时间戳。
注意
条目更新序列号(USN)、修改时间和名称,以及创建时间和名称都是操作属性,且不会在常规 ldapsearch 中返回。有关运行搜索操作属性的详情,请参考 第 14.4.7 节 “搜索过期属性”。
4.1. 通过更新序列号跟踪数据库修改
USN 插件使 LDAP 客户端和服务器能够识别是否更改了条目。
4.1.1. 条目序列号概述
启用 USN 插件后,更新序列号(USN)是对条目执行写入操作时分配给条目的序列号。(写操作包括 add、modify、modrdn 和 delete 操作。内部数据库操作(如导出操作)没有在更新序列中计算。 USN 计数器跟踪最近分配的 USN。
4.1.1.1. 本地和全球美国
USN 全局评估整个数据库,而不是单个条目。USN 与复制和同步的更改序列号类似,因此只需选择来跟踪数据库或目录中的任何更改。但是,条目 USN 独立于 CSNs 维护,而 USN 不会被复制。
条目显示在
entryUSN
操作属性中对该条目最后一次修改的更改号。有关操作属性的详情,请参考 第 14.4.7 节 “搜索过期属性”。
例 4.1. Entry USN 示例
要显示
uid=example,ou=People,dc=example,dc=com
用户条目的 entryusn
属性:
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com:389 -x -b "uid=example,ou=People,dc=example,dc=com" -s base -x entryusn
dn: uid=example,ou=People,dc=example,dc=com
entryusn: 17653
USN 插件有两种模式,本地模式和全局模式:
- 在本地模式中,每个后端数据库都有一个 USN 插件实例,它带有特定于该后端数据库的 USN 计数器。这是默认的设置。
- 在全局模式中,有 USN 插件的全局实例,其具有适用于整个目录进行的全局 USN 计数器。
当 USN 插件设置为 local 模式时,结果将限制为本地后端数据库。当 USN 插件设置为全局模式时,返回的结果将整个目录。
root DSE 显示分配给
lastusn
属性中数据库中任何条目的最新 USN。当 USN 插件被设置为 local 模式时,因此每个数据库都有自己的本地 USN 计数器,最后一个USN
会显示分配 USN 和 USN 的数据库:
lastusn;database_name:USN
例如:
lastusn;example1: 2130 lastusn;example2: 2070
在全局模式中,当数据库使用共享 USN 计数器时,
最后一个USN
属性仅显示最新的 USN :
lastusn: 4200
4.1.1.2. 导入 USN 条目
导入条目后,USN 插件使用
nsslapd-entryusn-import-initval
属性来检查条目是否分配了 USN。如果 nsslapd-entryusn-import-initval
的值为 number,导入的条目将使用这个数字值作为条目的 USN。如果 nsslapd-entryusn-import-initval
的值不是数字,则 USN 插件将使用 lastUSN
属性的值,并将它递增为导入条目的 USN。
4.1.2. 启用 USN 插件
这部分论述了如何启用 USN 插件来记录条目上的 USNs。
4.1.2.1. 使用命令行启用 USN 插件
使用命令行启用 USN 插件:
- 使用
dsconf
工具启用插件:# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn enable
- 重启实例:
# dsctl instance_name restart
4.1.2.2. 使用 Web 控制台启用 USN 插件
使用 Web 控制台启用 USN 插件:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 选择菜单。
- 选择 USN 插件。
- 将状态更改为 ON 以启用插件。
- 重启实例。请参阅 第 1.5.2 节 “使用 Web 控制台启动和停止目录服务器实例”。
4.1.3. Global USNs
使用默认设置时,Directory 服务器为每个后端数据库使用唯一的更新序列号(USN)。或者,您可以在所有后端数据库中启用唯一的 USN。
注意
必须启用 USN 插件才能使用此功能。请参阅 第 4.1.2 节 “启用 USN 插件”。
4.1.3.1. 确定是否启用全球美国
这部分论述了如何识别是否在所有后端数据库中启用 USN。
4.1.3.1.1. 使用命令行识别是否启用全局美国
使用命令行显示全局 USN 功能的当前状态:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global USN global mode is disabled
4.1.3.1.2. 确定是否通过 Web 控制台启用全局美国
使用 Web 控制台显示全局 USN 功能的当前状态:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 选择菜单。
- 选择 USN 插件。
- 验证 On。开关是否已设置为
4.1.3.2. 启用全球美国
4.1.3.2.1. 使用命令行启用全局 USN
使用命令行启用全局 USN :
- 启用全局 USN:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global on
- 重启实例:
# dsctl instance_name restart
4.1.3.2.2. 使用 Web 控制台启用全局 USN
使用 Web 控制台启用全局 USN:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择 USN 插件。
- 将插件的状态更改为 On。
- 将 USN Global 状态更改为 On。
- 重启实例。请参阅 第 1.5.2 节 “使用 Web 控制台启动和停止目录服务器实例”。
4.1.4. 清理 USN Tombstone 条目
当删除该条目时,USN 插件会将条目移到 tombstone 条目。如果启用了复制,则 USN 和 Replication 插件都会保留单独的 tombstone 条目。两个 tombstone 条目都由复制过程删除,但对于服务器性能,删除 USN tombstones 有助于:
- 在将服务器转换为副本前
- 为服务器可用内存
4.1.4.1. 使用命令行清理 USN Tombstone 条目
使用命令行从 dc=example,dc=com 后缀中删除所有 USN tombstone 条目:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn cleanup -s "dc=example,dc=com"
(可选)将
-o max_USN
选项传给命令,以删除到指定的值的 USN tombstone 条目。
4.1.4.2. 使用 Web 控制台清理 USN Tombstone 条目
使用 Web 控制台从 dc=example,dc=com 后缀中删除所有 USN tombstone 条目:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择 USN 插件。
- 按按钮。
- 填写字段,然后按。