Sun logo      上一个      目录      索引      下一个     

Sun ONE Calendar Server 6.0 管理员指南

第 5 章
管理 Calendar Server 数据库

本章介绍如何管理 Sun ONE Calendar Server 数据库,包括以下各节:

有关备份和恢复日历数据库的信息,请参阅第 6 章“备份和恢复 Calendar Server 数据”


Calendar Server 数据库文件

默认情况下,会在以下目录中创建和维护 Calendar Server 数据库文件(以及 cld_cacheldap_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 实用程序中除 checkrebuild 之外的其他命令将对所有三个数据库执行操作,这两个命令仅对日历数据库执行操作。

查看日历数据库状态

要查看日历数据库的状态,请使用 csdb 实用程序的 list 命令。Calendar Server 可以正在运行或已经停止。

请使用 -t 选项指定目标数据库(caldbsessdbstatdb);否则,csdb 将对所有三个数据库执行操作。

例如,可使用以下命令查看所有数据库的数据库状态和统计信息:

csdb list

可使用以下命令查看当前目录中处于冗余模式的日历数据库的信息:

csdb -v -t caldb list

导入和导出日历数据

要将日历数据导出到文件中,或从文件中导入日历数据,请使用 csexportcsimport 实用程序。日历数据可以是 iCalendar (.ics) 或 XML (.xml) 格式。

必须在已安装 Calendar Server 的本地计算机上运行 csexportcsimport。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 实用程序的 checkrebuild 命令,而不要使用 recover 命令。

有关详细信息,请参阅检测和重建日历数据库


 

删除日历数据库

要删除日历数据库,请使用 csdb 实用程序的 delete 命令。必须停止 Calendar Server。

请使用 -t 选项指定目标数据库(caldbsessdbstatdb);否则,csdb 将删除所有三个数据库。

例如,可使用以下命令删除日历数据库:

csdb -t caldb delete

删除数据库之前,csdb 实用程序将发出警告。


检测和恢复损坏的数据库

导致日历数据库损坏的原因有多种:系统资源争用、硬件错误、应用程序错误和数据库错误,当然还有人为错误。本节介绍如何检测和恢复损坏的日历数据库,包括以下内容:

 

最小化数据丢失

不管恢复程序的功能有多么强大,提前检测出数据库损坏以最小化数据丢失总是会更好。要检测可能的数据库损坏,请遵循以下建议:

 

检测和重建日历数据库

csdb 实用程序包含以下命令,可以检测和重建(如果有必要)日历数据库 (caldb):

请在发生任何可能导致数据库问题的事件后运行 check 命令(必要时,运行 rebuild 命令)。例如,如果您的站点发生了断电事故,请运行 check 命令来确定是否发生了任何数据库损坏。

csdb 实用程序还包含 recover 命令,用于恢复已损坏的会话数据库或统计信息数据库。如果损坏的是日历数据库,请使用 checkrebuild,而不要使用 recover


注意

运行这些命令之前,请使用 csbackup 实用程序(或其他备份实用程序)备份日历数据库。


检测日历数据库的损坏

check 命令可以扫描日历数据库并检查日历特性 (calprops) 事件和待办事件(任务),以确定是否发生了损坏。如果 check 命令发现无法解决的冲突,它将在输出中报告该情况。

应定期运行 check 命令,检测日历数据库中是否发生了冲突。例如,请考虑在每次备份数据库后运行 check。但是,如果已经知道日历数据库被损坏,则不必运行 check 命令,而要直接重建损坏的数据库。

检测日历数据库的损坏

  1. 以系统管理员身份登录安装了 Calendar Server 的系统。
  2. Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。
  3. 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件。无需复制任何共享 (__db_name.share) 文件或日志 (log.*) 文件。
  4. 转到 cal_svr_base/opt/SUNWics5/cal/sbin 目录。例如,在 Solaris 系统上输入以下内容:
  5. cd /opt/SUNWics5/cal/sbin

  6. 对日历数据库副本运行 check 命令:
  7. ./csdb check dbdir > /tmp/check.out 2>&1

    如果没有指定 dbdircheck 将使用当前目录中的数据库。

    check 命令会生成许多信息,所以请考虑将所有输出(包括 stdoutstderr)重定向到一个文件中(如示例中所示)。

  8. 运行 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 命令。

重建日历数据库

  1. 以系统管理员身份登录安装了 Calendar Server 的系统。
  2. 停止 Calendar Server。
  3. 备份日历数据库(如果尚未备份)。只需复制数据库 (.db) 文件。无需复制任何共享 (__db_name.share) 文件或日志 (log.*) 文件。
  4. 转到 cal_svr_base/opt/SUNWics5/cal/sbin 目录。例如,在 Solaris 系统上输入以下内容:
  5. cd /opt/SUNWics5/cal/sbin

    注意:如果 sbin 目录的磁盘空间不足,请在另一个目录中运行 rebuild 命令。

  6. 对日历数据库副本运行 rebuild 命令:
  7. ./csdb rebuild /tmp/db /tmp/

    如果没有指定数据库目录,rebuild 命令将使用当前目录中的数据库。/tmp/ 参数指定了重建数据库的目标目录。

    要同时重建 GSE 数据库,请包含 -g 选项。

    rebuild 命令会生成许多信息,所以请考虑将所有输出(包括 stdoutstderr)重定向到一个文件中。


    请始终使用最新的备份副本重建日历数据库。

    但是,如果曾丢失大量数据,同时由于定期备份数据库而创建了多个副本,请从最新副本向最旧副本进行重建。(这样做的唯一缺点是已删除的日历组件将重新出现在重建数据库中。)

    例如,如果目录 db_0601db_0615db_0629 中有三组备份日历数据库文件,请按以下顺序运行 rebuild 命令:

    ./csdb rebuild db_0629
    ./csdb rebuild db_0615
    ./csdb rebuild db_0601

    rebuild 命令然后会将重建数据库写入 cal_svr_base/opt/SUNWics5/cal/sbin/rebuild_db 目录。


  8. 运行 rebuild 命令后,查看 rebuild.out 文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:
  9. 日历数据库已重建

  10. 在上一步中验证重建成功后,将重建数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。
  11. 如果从损坏的数据库中恢复了任何共享 (__db_name.share) 文件或日志 (log.*) 文件,请将它们移到其他目录中。
  12. 重新启动 Calendar Server。

使用转储和装入过程来恢复数据库

如果 csdb rebuild 命令没有成功,下一步可以使用转储和装入过程来尝试恢复损坏的数据库。转储和装入过程使用 Berkeley 数据库 db_dumpdb_load 实用程序,它们包含在 Calendar Server 的以下目录中:

cal_svr_base/opt/SUNWics5/cal/tools/unsupported/bin

db_dump 实用程序读取数据库文件并将数据库条目写入输出文件,使用的格式与 db_load 实用程序兼容。

要获得有关 db_dumpdb_dump 实用程序的文档,请访问 Sleepycat Software 公司的 Web 站点:

http://www.sleepycat.com/docs/utility/index.html

使用 db_dumpdb_load 实用程序恢复数据库能否成功取决于数据库损坏的程度。可能需要尝试多个 db_dump 选项才能成功恢复数据库。但如果数据库严重损坏,不可能再恢复,您可能需要恢复到上次数据库完好无损时的状态。

日历数据库版本

执行转储和装入过程之前,日历数据库必须是 Berkeley DB 3.2.9 版。如果使用的是早期版本,请首先运行 cs5migrate 实用程序来升级日历数据库。

有关运行 cs5migrate 的信息,请参阅《Sun ONE Calendar Server 6.0 安装指南(适用于 Solaris 操作系统)》

执行转储和装入过程

  1. 在 Solaris 系统上,必须以运行 Calendar Server 的用户和组(例如 icsusericsgroup)身份登录,或以超级用户 (root) 身份登录。
  2. 如果必要,请停止 Calendar Server。
  3. 使用 csbackup 实用程序、Sun StorEdge Enterprise Backup™ 软件或 Legato Networker® 软件备份损坏的数据库。有关详细信息,请参阅第 6 章“备份和恢复 Calendar Server 数据”
  4. 使用 db_dump 实用程序转储每个损坏的数据库文件。数据库文件包括 ics50calprops.dbics50journals.dbics50alarms.dbics50events.dbics50todos.dbics50gse.db
  5. 依次使用以下选项运行 db_dump,直到数据库恢复(或确定数据库无法再恢复):

    • 没有用于数据库稍微损坏的选项。
    • 对于中等程度的数据库损坏,请使用 -r 选项
    • 对于严重程度的数据库损坏,请使用 -R 选项-R 选项从损坏的数据库中转储的数据(包括不完整的记录和已删除的记录)比 -r 选项要多。
    • 例如,可使用 -r 选项运行 db_dump

      db_dump -r ics50events.db > ics50events.db.txt

  6. 使用 db_load 实用程序将输出文件装入新数据库文件。例如:
  7. db_load new.ics50events.db < ics50events.db.txt

    注意:如果 db_load 报告一些关键字条目和数据条目中出现乱码,请编辑步骤 4 中的 db_dump 输出文件,删除出现乱码的关键字条目和数据条目。然后再次运行 db_load

  8. 对其他损坏的数据库文件重复步骤 4步骤 5
  9. 按照重建日历数据库中的说明,使用 csdb rebuild 命令重建已恢复的数据库文件。
  10. 重建完成后,再次查看输出文件中的输出。如果重建成功,rebuild.out 文件中的最后一行应如下所示:

    日历数据库已重建

如果 csdb rebuild 命令失败,请返回步骤 4,使用下一个 db_dump 选项(-r-R)来转储数据库。

如果 db_dump -R 选项没有恢复损坏的数据库,请与 Sun Microsystems 的技术支持或销售代表联系以获得帮助。您可能需要恢复到上次数据库完好无损时的状态。



上一个      目录      索引      下一个     


版权所有 2003 Sun Microsystems, Inc.。保留所有权利。