![]() | |
Sun Java System Calendar Server 6 2005Q1 管理指南 |
第 16 章
使用 csdb 管理 Calendar Server
数据库Calendar Server 在多个目录中保留多个数据库文件。您必须通过实现第 10 章“配置自动备份 (csstored)”中所述的自动备份进程或者实现您自己的系统备份来保护数据库文件。可以使用 csdb 实用程序来管理数据库文件。
本章介绍了如何使用 csdb 管理 Calendar Server 数据库,并包含以下各节:
使用 csdb 管理日历数据库要管理数据库文件,请使用 Calendar Server 实用程序 csdb。本节包含以下主题:
csdb 如何对数据库文件进行分组
日历数据库实用程序 csdb 将数据库文件视为三种逻辑数据库:
日历数据库 (caldb)
caldb 由数据库目录中的所有 .db 文件和 _db.* 文件组成。以下是日历数据库文件(以及 cld_cache 和 ldap_cache 子目录)的默认位置:
/var/opt/SUNWics5/csdb
如果需要,可以在运行 Calendar Server 配置程序 (csconfigurator.sh) 时指定一个不同的目录。有关配置程序的信息,请参阅第 3 章“Calendar Server 配置程序 (csconfigurator.sh)”。
表 16-1 介绍了日历数据库 (caldb) 文件:
表 16-1 Calendar Server 数据库文件
文件
说明
ics50calprops.db
所有日历的日历属性。包括日历 ID (calid)、日历名称、访问控制列表 (ACL) 和属主。
ics50events.db
所有日历的事件。
ics50todos.db
所有日历的待办事件(任务)。
ics50alarms.db
所有事件和待办事件(任务)的警报。
ics50gse.db
组计划引擎 (GSE) 的计划请求队列。
ics50journals.db
日历的日志。当前发行版中尚未实现日志功能。
ics50caldb.conf
数据库版本标识符。
ics50recurring.db
重复性事件。
ics50deletelog.db
已删除的事件和待办事件(任务)。请参阅 第 18 章“管理“删除日志”数据库”。
会话数据库 (sessdb)
会话数据库由以下目录中的所有文件组成:/opt/SUNWics5/cal/lib/admin/session/ 和
/opt/SUNWics5/cal/lib/http/session/统计信息数据库 (statdb)
统计信息数据库由 counter 目录中的所有文件组成:
/opt/SUNWics5/cal/lib/counter/
csdb 可以将特定数据库作为目标
csdb 实用程序的 -t 选项允许用户指定目标数据库:
如果没有包含 -t 选项,csdb 实用程序中除 check 和 rebuild 之外的其他命令将对所有三个数据库执行操作,这两个命令仅对日历数据库执行操作。
csdb 管理任务本节介绍了如何使用 csdb 实用程序来执行以下管理任务:
注
要运行 csdb 实用程序,必须以具备管理权限的用户身份登录正在运行 Calendar Server 的系统。有关更多信息,请参见附录 D“Calendar Server 命令行实用程序参考”。
列出数据库组的状态
要查看数据库组(caldb、sessdb 和 statdb)的状态,请使用 csdb 实用程序的 list 命令。
要列出数据库的状态,请执行以下步骤:
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。
- 转至 /sbin 目录。例如,在 Solaris 操作系统上输入以下内容:
cd /opt/SUNWics5/cal/sbin
- 针对一个或所有数据库组运行 list 命令。例如,列出所有三种数据库组的状态和统计信息:
./csdb list
以下代码显示了样例输出:
您也可以选择使用详细模式。例如:
./csdb -v list
以下样例代码显示了详细输出:
Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002)
Calendar database version: 3.0.0 [BerkeleyDB]
Total database size in bytes: 57344
Total number of calendars: 2
Total number of events: 0
Total number of tasks: 0
Total number of alarms: 0
Total number of gse entries: 0
Total number of master component entries: 0
Total number of deletelog entries: 0
Total logfile size in bytes: 5779919
Session database version: 1.0.0 [BerkeleyDB]
Total database size in bytes: 0
Total logfile size in bytes: 0
Counter database version: 1.0.0 [Memory Mapped Files]
Total database size in bytes: 118792
或者,使用 -t 选项来指定一个目标数据库组(caldb、sessdb 或 statdb)。例如,只查看日历数据库的数据库状态和统计信息:
csdb -t caldb list
检查日历数据库的损坏
使用 check 命令可以扫描日历数据库中的损坏,包括日历属性 (calprops) 和事件及待办事件(任务)。如果 check 命令发现无法解决的冲突,它将在输出中报告该情况。
check 命令不检查警报或组计划引擎 (GSE) 数据库的损坏。
要检查数据库的损坏,请执行以下步骤:
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。
- 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件。无需复制任何共享 (__db.*) 文件或日志 (log.*) 文件。
- 转到 cal_svr_base/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:
cd /opt/SUNWics5/cal/sbin
- 对日历数据库副本运行 check 命令:
./csdb check dbdir > /tmp/check.out 2>&1
如果没有指定 dbdir,check 将使用当前目录中的数据库。
check 命令会生成许多信息,所以请考虑将所有输出(包括 stdout 和 stderr)重定向到一个文件中(如示例中所示)。
- 运行 check 命令后,查看输出文件。
如果数据库已损坏,则可以选择用热备份副本替换它。另外,您可以选择通过运行 rebuild 命令来尝试重新建立已损坏的数据库。请参阅后面的重新建立日历数据库 (caldb)(不包括 GSE 数据库)。
重新建立日历数据库 (caldb)(不包括 GSE 数据库)
要恢复已损坏的日历数据库 (caldb),请使用 csdb 实用程序的 rebuild 命令。rebuild 命令将扫描出所有日历数据库中的损坏。如果 rebuild 命令发现冲突,它将在 cal_svr_base/SUNWics5/cal/sbin/rebuild_db 目录中生成一个重新建立的日历数据库(.db 文件)。
rebuild 命令会生成许多信息,所以请考虑将所有输出(包括 stdout 和 stderr)重定向到一个文件中。
在以下说明中,rebuild 命令不会重新建立组计划引擎 (GSE) 数据库。有关将 GSE 数据库包括到重新建立中的说明,请参见重新建立日历数据库(包括 GSE 数据库)。
要重新建立不包括 GSE 数据库的日历数据库,请执行以下步骤:
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- 停止 Calendar Server。
- 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件和日志 (log.*) 文件。无需复制任何共享 (__db.*) 文件。
- 转到 cal_svr_base/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:
cd /opt/SUNWics5/cal/sbin
如果 sbin 目录的磁盘空间不足,请在另一个目录中运行 rebuild 命令。
- 对日历数据库副本运行 rebuild 命令:
./csdb rebuild /tmp/db /tmp/
如果没有指定数据库目录,rebuild 将使用当前目录中的数据库。在上述示例中,/tmp/ 参数指定重新建立的数据库的目标目录。
注
请始终使用最新的备份副本重建日历数据库。
但是,如果曾丢失大量数据,同时由于定期备份数据库而创建了多个副本,请从最新副本向最旧副本进行重建。(这样做的唯一缺点是已删除的日历组件将重新出现在重建数据库中。)
例如,如果目录 db_0601、db_0615 和 db_0629 中有三组备份日历数据库文件,请按以下顺序运行 rebuild 命令:
然后检查是否损坏。如果此备份副本也已损坏,则在下一个备份副本上运行 rebuild。
然后检查是否损坏。如果此备份副本也已损坏,则在下一个备份副本上运行 rebuild。
... 等等。
rebuild 命令将重新建立的数据库写入 cal_svr_base/SUNWics5/cal/sbin/rebuild_db 目录。
- 运行 rebuild 命令后,查看 rebuild.out 文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:
日历数据库已重建
- 验证 rebuild 成功后,将重新建立的数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。
- 如果从损坏的数据库中恢复了任何共享 (__db.*) 文件或日志 (log.*) 文件,请将它们移到其他目录中。
- 重新启动 Calendar Server。
重新建立日历数据库(包括 GSE 数据库)
如果您已在您的站点中实现了组计划,则应在重新建立日历数据库时包括 GSE 数据库。
要重新建立日历数据库和 GSE 数据库,请执行以下步骤:
- 通过运行 csschedule -v list 命令确定 GSE 数据库是否具有任何条目,如果有,则让 GSE 先处理完这些条目。
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- 停止 Calendar Server。
- 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件和日志 (log.*) 文件。无需复制任何共享 (__db.*) 文件。
- 转到 cal_svr_base/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:
cd /opt/SUNWics5/cal/sbin
如果 sbin 目录的磁盘空间不足,请在另一个目录中运行 rebuild 命令。
- 对日历数据库副本运行 rebuild 命令:
./csdb -g rebuild /tmp/db /tmp/
如果没有指定数据库目录,rebuild 将使用当前目录中的数据库。在上述示例中,/tmp/ 参数指定重新建立的数据库的目标目录。
注
请始终使用最新的备份副本重建日历数据库。
但是,如果曾丢失大量数据,同时由于定期备份数据库而创建了多个副本,请从最新副本向最旧副本进行重建。(这样做的唯一缺点是已删除的日历组件将重新出现在重建数据库中。)
例如,如果目录 db_0601、db_0615 和 db_0629 中有三组备份日历数据库文件,请按以下顺序运行 rebuild 命令:
./csdb rebuild db_0629
./csdb rebuild db_0615
./csdb rebuild db_0601
rebuild 命令然后会将重建数据库写入 cal_svr_base/SUNWics5/cal/sbin/rebuild_db 目录。
- 运行 rebuild 命令后,查看 rebuild.out 文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:
日历数据库已重建
- 验证 rebuild 成功后,将重新建立的数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。
- 如果从损坏的数据库中恢复了任何共享 (__db.*) 文件或日志 (log.*) 文件,请将它们移到其他目录中。
- 重新启动 Calendar Server。
重建输出样例
以下示例显示了此命令及其生成的输出:
# ./csdb -g rebuild
Building calprops based on component information.
Please be patient, this may take a while...
Scanning events database...
512 events scanned
Scanning todos database...
34 todos scanned
Scanning events database...
512 events scanned
Scanning todos database...
34 todos scanned
Scanning deletelog database...
15 deletelog entries scanned
Scanning gse database...
21 gse entries scanned
Scanning recurring database...
12 recurring entries scanned
Successful components db scan
Calendar database has been rebuilt
Building components based on calprops information.
Please be patient, this may take a while...
Scanning calprops database to uncover events...
25 calendars scanned
Scanning calprops database to uncover todos...
25 calendars scanned
Successful calprops db scan
Calendar database has been rebuilt
删除数据库组
要删除日历数据库,请使用 csdb 实用程序的 delete 命令。必须停止 Calendar Server。
请使用 -t 选项指定目标数据库(caldb、sessdb 或 statdb);否则,csdb 将删除所有三个数据库。
例如,可使用以下命令删除日历数据库:
csdb -t caldb delete
删除数据库之前,csdb 实用程序将发出警告。