Sun Java System Calendar Server 管理指南 |
第 14 章
管理 Calendar Server 数据库本章介绍如何管理 Sun Java System Calendar Server 数据库,包括以下各节:
有关备份和恢复日历数据库的信息,请参阅第 15 章“备份和恢复 Calendar Server 数据”。
Calendar Server 数据库文件默认情况下,会在以下目录中创建和维护 Calendar Server 数据库文件(以及 cld_cache 和 ldap_cache 目录):
cal_svr_base/var/opt/SUNWics5/csdb
如果需要,可以通过运行 Calendar Server 配置程序 (csconfigurator.sh) 指定一个不同的目录。有关配置程序的信息,请参阅第 3 章“配置 Calendar Server”。
表 14-1 介绍了日历数据库文件:
表 14-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
已删除的事件和待办事件(任务)。请参阅第 16 章“管理“删除记录”数据库”。
csdb 实用程序通过形成三种逻辑数据库来管理 Calendar Server 数据库文件:
使用 csdb 管理日历数据库本节介绍了如何使用 csdb 实用程序来执行以下功能:
要运行 csdb 实用程序,必须以管理员用户身份登录正在运行 Calendar Server 的系统。有关详细信息,请参阅附录 D“Calendar Server 命令行实用程序参考”。
指定目标数据库
csdb 实用程序的 -t 选项允许用户指定目标数据库:
如果没有包含 -t 选项,csdb 实用程序中除 check 和 rebuild 之外的其他命令将对所有三个数据库执行操作,这两个命令仅对日历数据库执行操作。
查看日历数据库状态
要查看日历数据库的状态,请使用 csdb 实用程序的 list 命令。Calendar Server 可以正在运行或已经停止。
请使用 -t 选项指定目标数据库(caldb、sessdb 或 statdb);否则,csdb 将对所有三个数据库执行操作。
例如,可使用以下命令查看所有数据库的数据库状态和统计信息:
csdb list
可使用以下命令查看当前目录中处于冗余模式的日历数据库的信息:
csdb -v -t caldb list
恢复已损坏的数据库
用于恢复已损坏的数据库的实用程序取决于数据库的类型:
- 要恢复已损坏的日历数据库 (caldb),请使用 csdb 实用程序的 check 和 rebuild 命令,如检测和重建日历数据库所述。
删除日历数据库
要删除日历数据库,请使用 csdb 实用程序的 delete 命令。必须停止 Calendar Server。
请使用 -t 选项指定目标数据库(caldb、sessdb 或 statdb);否则,csdb 将删除所有三个数据库。
例如,可使用以下命令删除日历数据库:
csdb -t caldb delete
删除数据库之前,csdb 实用程序将发出警告。
检测和恢复损坏的数据库导致日历数据库损坏的原因有多种:系统资源争用、硬件错误、应用程序错误和数据库错误,当然还有人为错误。本节介绍如何检测和恢复损坏的日历数据库,包括以下内容:
将数据损失减到最少
不管恢复程序的功能有多么强大,提前检测出数据库损坏以将数据损失减到最少总是会更好。要检测可能的数据库损坏,请遵循以下建议:
- 使用 csbackup 实用程序、Sun StorEdge Enterprise Backup 软件或 Legato Networker® 软件每天备份一次数据库。有关详细信息,请参阅第 15 章“备份和恢复 Calendar Server 数据”。
- 查看 Calendar Server 日志文件(包括警报日志)中的错误消息,这些消息可能会表明数据库受到损坏。有关日志文件的信息,请参阅监视 Calendar Server 日志文件。
- 使用 csmonitor 实用程序监视 Calendar Server,并在检测到问题(例如存在多个事务日志文件或日历数据库的磁盘空间不足)时通过电子邮件向管理员发出警报。有关详细信息,请参阅 csmonitor。
- 任何情况下都不要移除数据库目录中的任何事务日志文件。事务日志文件包含事务更新(添加、修改或删除),移除这些文件将损坏日历数据库,且无法恢复。
检测和重建日历数据库
csdb 实用程序包含以下命令,可以检测和重建(如果有必要)日历数据库 (caldb):
请在发生任何可能导致数据库问题的事件后运行 check 命令(必要时,运行 rebuild 命令)。例如,如果您的站点发生了断电事故,请运行 check 命令来确定是否发生了任何数据库损坏。
csdb 实用程序还包含 recover 命令,用于恢复已损坏的会话数据库或统计信息数据库。如果损坏的是日历数据库,请使用 check 和 rebuild,而不要使用 recover。
检测日历数据库的损坏
check 命令可以扫描日历数据库并检查日历特性 (calprops) 事件和待办事件(任务),以确定是否发生了损坏。如果 check 命令发现无法解决的冲突,它将在输出中报告该情况。
应定期运行 check 命令,检测日历数据库中是否发生了冲突。例如,请考虑在每次备份数据库后运行 check。但是,如果已经知道日历数据库被损坏,则不必运行 check 命令,而要直接重建损坏的数据库。
检测日历数据库的损坏
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。
- 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件。无需复制任何共享 (__db.*) 文件或日志 (log.*) 文件。
- 转到 cal_svr_base/opt/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 命令。
重建日历数据库
rebuild 命令可以扫描日历数据库并检查日历特性 (calprops) 事件和待办事件(任务),以确定是否发生了损坏。如果 rebuild 命令发现冲突,它将在 cal_svr_base/opt/SUNWics5/cal/sbin/rebuild_db 目录中生成一个重建的日历数据库(.db 文件)。
不带 -g 选项的 rebuild 命令将重建除组计划引擎 (GSE) 数据库之外的所有数据库。要同时重建 GSE 数据库,请包含 -g 选项。
要确定 GSE 数据库中是否存在任何条目,请运行 csschedule -v list 命令,然后在 GSE 处理完所有条目后再运行 rebuild 命令。
重建日历数据库
- 以系统管理员身份登录安装了 Calendar Server 的系统。
- 停止 Calendar Server。
- 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件和日志 (log.*) 文件。无需复制任何共享 (__db.*) 文件。
- 转到 cal_svr_base/opt/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:
cd /opt/SUNWics5/cal/sbin
注意:如果 sbin 目录的磁盘空间不足,请在另一个目录中运行 rebuild 命令。
- 对日历数据库副本运行 rebuild 命令:
./csdb rebuild /tmp/db /tmp/
如果没有指定数据库目录,rebuild 命令将使用当前目录中的数据库。/tmp/ 参数指定了重建数据库的目标目录。
要同时重建 GSE 数据库,请包含 -g 选项。
rebuild 命令会生成许多信息,所以请考虑将所有输出(包括 stdout 和 stderr)重定向到一个文件中。
- 运行 rebuild 命令后,查看 rebuild.out 文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:
日历数据库已重建
- 在上一步中验证重建成功后,将重建数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。
- 如果从损坏的数据库中恢复了任何共享 (__db.*) 文件或日志 (log.*) 文件,请将它们移到其他目录中。
- 重新启动 Calendar Server。
使用转储和装入过程来恢复日历数据库
如果 csdb rebuild 命令没有成功,下一步可以使用转储和装入过程来尝试恢复损坏的数据库。转储和装入过程使用 Berkeley 数据库 db_dump 和 db_load 实用程序,它们包含在 Calendar Server 的以下目录中:
cal_svr_base/opt/SUNWics5/cal/tools/unsupported/bin
db_dump 实用程序读取数据库文件并将数据库条目写入输出文件,使用的格式与 db_load 实用程序兼容。
要获得有关 db_dump 和 db_dump 实用程序的文档,请访问 Sleepycat Software 公司的 Web 站点:
http://www.sleepycat.com/docs/utility/index.html
使用 db_dump 和 db_load 实用程序恢复数据库能否成功取决于数据库损坏的程度。可能需要尝试多个 db_dump 选项才能成功恢复数据库。但如果数据库严重损坏,不可能再恢复,您可能需要恢复到上次数据库完好无损时的状态。
日历数据库版本
在执行转储和装入过程之前,您的日历数据库必须为 Berkeley DB version 3.2.9 版本或更高版本。如果使用的是早期版本,请首先运行 cs5migrate 实用程序升级日历数据库。
要获得 cs5migrate 的最新版本,请与 Sun 技术支持联系。
执行转储和装入过程
- 在 Solaris 操作系统上,必须以运行 Calendar Server 的用户和组(例如 icsuser 和 icsgroup)身份登录,或以超级用户 (root) 身份登录。
- 如果必要,请停止 Calendar Server。
- 使用 csbackup 实用程序、Sun StorEdge Enterprise Backup 软件或 Legato Networker® 等软件来备份损坏的数据库。有关详细信息,请参阅第 15 章“备份和恢复 Calendar Server 数据”。
- 使用 db_dump 实用程序转储每个损坏的数据库文件。数据库文件包括 ics50calprops.db、ics50journals.db、ics50alarms.db、ics50events.db、ics50todos.db 和 ics50gse.db。
依次使用以下选项运行 db_dump,直到数据库恢复(或确定数据库无法再恢复):
- 使用 db_load 实用程序将输出文件装入新数据库文件。例如:
db_load new.ics50events.db < ics50events.db.txt
注意:如果 db_load 报告一些关键字条目和数据条目中出现乱码,请编辑步骤 4 中的 db_dump 输出文件,删除出现乱码的关键字条目和数据条目。然后再次运行 db_load。
- 按照“重建日历数据库”中的说明,使用 csdb rebuild 命令重建已恢复的数据库文件。
重建完成后,再次查看输出文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:
日历数据库已重建
如果 csdb rebuild 命令失败,请返回步骤 4,使用下一个 db_dump 选项(-r 或 -R)来转储数据库。
如果 db_dump -R 选项没有恢复损坏的数据库,请与 Sun Microsystems 的技术支持或销售代表联系以获得帮助。您可能需要恢复到上次数据库完好无损时的状态。
最佳操作:日历存储的管理和维护每天运行以下预防措施: