Sun ONE Calendar Server 6.0 管理员指南 |
第 5 章
管理 Calendar Server 数据库本章介绍如何管理 Sun ONE Calendar Server 数据库,包括以下各节:
有关备份和恢复日历数据库的信息,请参阅第 6 章“备份和恢复 Calendar Server 数据”。
Calendar Server 数据库文件默认情况下,会在以下目录中创建和维护 Calendar Server 数据库文件(以及 cld_cache 和 ldap_cache 目录):
cal_svr_base/var/opt/SUNWics5/csdb
如果需要,可以通过运行 Calendar Server 配置程序 (csconfigurator.sh) 指定一个不同的目录。有关配置程序的信息,请参阅《Sun ONE Calendar Server 6.0 安装指南(适用于 Solaris 操作系统)》。
表 5-1 介绍了日历数据库文件:
表 5-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
已删除的事件和待办事件(任务)。另请参阅第 7 章“管理“删除记录”数据库”。
使用 csdb 实用程序来管理数据库本节介绍了如何使用 csdb 实用程序来执行以下功能:
要运行 csdb 实用程序,必须以管理员用户身份登录正在运行 Calendar Server 的系统。有关详细信息,请参阅第 11 章“Calendar Server 命令行实用程序”
指定目标数据库
csdb 实用程序的 -t 选项允许用户指定目标数据库:
如果没有包含 -t 选项,csdb 实用程序中除 check 和 rebuild 之外的其他命令将对所有三个数据库执行操作,这两个命令仅对日历数据库执行操作。
查看日历数据库状态
要查看日历数据库的状态,请使用 csdb 实用程序的 list 命令。Calendar Server 可以正在运行或已经停止。
请使用 -t 选项指定目标数据库(caldb、sessdb 或 statdb);否则,csdb 将对所有三个数据库执行操作。
例如,可使用以下命令查看所有数据库的数据库状态和统计信息:
csdb list
可使用以下命令查看当前目录中处于冗余模式的日历数据库的信息:
csdb -v -t caldb list
导入和导出日历数据
要将日历数据导出到文件中,或从文件中导入日历数据,请使用 csexport 和 csimport 实用程序。日历数据可以是 iCalendar (.ics) 或 XML (.xml) 格式。
必须在已安装 Calendar Server 的本地计算机上运行 csexport 和 csimport。Calendar Server 可以正在运行或已经停止。
导出日历数据
要将日历数据导出到文件中,请使用 csexport。为输出文件指定的文件扩展名(.ics 或 .xml)决定了使用的格式。
例如,可使用以下命令以 iCalendar (text/calendar MIME) 格式将日历 ID (calid) 为 JSmithcal 的日历导出到名为 jsmith.ics 的文件中:
csexport -c JSmithcal calendar jsmith.ics
可使用以下命令以 XML (text/xml MIME) 格式将日历 JSmithcal 导出到名为 jsmith.xml 的文件中:
csexport -c JSmithcal calendar jsmith.xml
导入日历数据
要从以前使用 csexport 实用程序保存的文件中导入日历数据,请使用 csimport。导入文件的文件扩展名(.ics 或 .xml)表明了日历的保存格式。
例如,可使用以下命令从以 iCalendar (text/calendar MIME) 格式保存的文件 jsmith.ics 中将日历数据导入到日历 ID (calid) 为 JSmithcal 的日历中:
csimport -c JSmithcal calendar jsmith.ics
可使用以下命令从以 XML (text/xml MIME) 格式保存的文件 jsmith.xml 中将数据导入到日历 JSmithcal 中:
csimport -c JSmithcal calendar jsmith.xml
如果指定的日历 ID (calid) 已经存在,将在导入新数据之前清除该日历中的旧数据。
恢复已损坏的数据库
要恢复已损坏的会话数据库或统计信息数据库,请使用 csdb 实用程序的 recover 命令。使用 -t 选项指定目标数据库:sessdb(会话)或 statdb(统计信息)。
在运行 recover 命令之前,请使用 stop-cal 命令停止 Calendar Server。
例如,可使用以下命令恢复当前目录中已损坏的会话数据库:
csdb -t sessdb recover
注 要恢复已损坏的日历数据库 (caldb),请使用 csdb 实用程序的 check 和 rebuild 命令,而不要使用 recover 命令。
有关详细信息,请参阅检测和重建日历数据库。
删除日历数据库
要删除日历数据库,请使用 csdb 实用程序的 delete 命令。必须停止 Calendar Server。
请使用 -t 选项指定目标数据库(caldb、sessdb 或 statdb);否则,csdb 将删除所有三个数据库。
例如,可使用以下命令删除日历数据库:
csdb -t caldb delete
删除数据库之前,csdb 实用程序将发出警告。
检测和恢复损坏的数据库导致日历数据库损坏的原因有多种:系统资源争用、硬件错误、应用程序错误和数据库错误,当然还有人为错误。本节介绍如何检测和恢复损坏的日历数据库,包括以下内容:
最小化数据丢失
不管恢复程序的功能有多么强大,提前检测出数据库损坏以最小化数据丢失总是会更好。要检测可能的数据库损坏,请遵循以下建议:
- 使用 csbackup 实用程序、Sun StorEdge Enterprise Backup 软件或 Legato Networker® 软件每天备份一次数据库。有关详细信息,请参阅第 6 章“备份和恢复 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_name.share) 文件或日志 (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) 文件。无需复制任何共享 (__db_name.share) 文件或日志 (log.*) 文件。
- 转到 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_name.share) 文件或日志 (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 3.2.9 版。如果使用的是早期版本,请首先运行 cs5migrate 实用程序来升级日历数据库。
有关运行 cs5migrate 的信息,请参阅《Sun ONE Calendar Server 6.0 安装指南(适用于 Solaris 操作系统)》。
执行转储和装入过程
- 在 Solaris 系统上,必须以运行 Calendar Server 的用户和组(例如 icsuser 和 icsgroup)身份登录,或以超级用户 (root) 身份登录。
- 如果必要,请停止 Calendar Server。
- 使用 csbackup 实用程序、Sun StorEdge Enterprise Backup 软件或 Legato Networker® 软件备份损坏的数据库。有关详细信息,请参阅第 6 章“备份和恢复 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 的技术支持或销售代表联系以获得帮助。您可能需要恢复到上次数据库完好无损时的状态。