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