Sun Java System Calendar Server 6 2005Q4 管理指南

第 16 章 使用 csdb 管理 Calendar Server 数据库

Calendar Server 在多个目录中保留多个数据库文件。您必须实施第 10 章,配置自动备份 (csstored)中所述的自动备份过程或者亲自实施系统备份来保护数据库文件。可以使用 csdb 实用程序来管理数据库文件。

本章介绍了如何使用 csdb 管理 Calendar Server 数据库,并包含以下各节:

使用 csdb 管理日历数据库

要管理数据库文件,请使用 Calendar Server 实用程序 csdb。本节包含以下主题:

csdb 如何对数据库文件进行分组

日历数据库实用程序 csdb 将数据库文件视为以下三种逻辑数据库:

日历数据库 (caldb)

caldb 由数据库目录中的所有 .db 文件和 _db.* 文件组成。日历数据库文件(以及 cld_cacheldap_cache 子目录)的默认位置如下:

/var/opt/SUNWics5/csdb

如果需要,您可以在运行 Calendar Server 配置程序 (csconfigurator.sh) 时指定其他目录。有关配置程序的信息,请参阅第 3 章,Calendar Server 配置程序 (csconfigurator.sh)

下表介绍了日历数据库 (caldb) 文件:

表 16–1 Calendar Server 数据库文件

文件 

说明 

ics50calprops.db 

所有日历的日历属性。包括日历 ID (calid)、日历名称、访问控制列表 (Access Control List, 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 实用程序中除了使用 checkrebuild 两个命令仅对日历数据库执行操作外,使用其他命令均将对所有三个数据库执行操作。

csdb 管理任务

本节介绍了如何使用 csdb 实用程序执行以下管理任务:


注 –

要运行 csdb 实用程序,必须以具备管理权限的用户身份登录正在运行 Calendar Server 的系统。有关更多信息,请参见附录 D,Calendar Server 命令行实用程序参考


Procedure列出数据库组的状态

要查看数据库组(caldbsessdbstatdb)的状态,请使用 csdb 实用程序的 list 命令。

要列出数据库的状态,请执行以下步骤:

步骤
  1. 以具备管理权限的用户身份登录安装了 Calendar Server 的系统。

  2. Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。

  3. 转至 /sbin 目录。例如,在 Solaris 操作系统上输入以下内容:


    cd /opt/SUNWics5/cal/sbin
  4. 针对一个或所有数据库组运行 list 命令。例如,列出所有三种数据库组的状态和统计信息:

    ./csdb list

    以下代码显示了样例输出:


    Sleepycat Software: Berkeley DB 4.1.25: (December 19, 2002)
    
    Calendar database version: 3.0.0 [BerkeleyDB]
    Total database size in bytes: 57344
    
    Session database version: 1.0.0 [BerkeleyDB]
    Total database size in bytes: 0
    
    Counter database version: 1.0.0 [Memory Mapped Files]
    Total database size in bytes: 118792
    
                   

    您也可以选择使用详细模式。例如:

    ./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 选项来指定一个目标数据库组(caldbsessdbstatdb)。例如,只查看日历数据库的数据库状态和统计信息:

    csdb -t caldb list

Procedure检查日历数据库的损坏

使用 check 命令可以扫描日历数据库(包括日历属性 [calprops] 和事件及待办事件 [任务])中的损坏。如果使用 check 命令发现无法解决的冲突,则将在输出结果中报告该情况。

check 命令不检查警报或组调度引擎 (Group Scheduling Engine, GSE) 数据库中的损坏。

要检查数据库的损坏,请执行以下步骤:

步骤
  1. 以具备管理权限的用户身份登录安装了 Calendar Server 的系统。

  2. Calendar Server 可以正在运行或已经停止,但最好停止 Calendar Server。

  3. 如果尚未备份,请备份日历数据库。只需复制数据库 (.db) 文件。无需复制任何共享 (__db.*) 文件或日志 (log.*) 文件。

  4. 转至 cal_svr_base/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:


    cd /opt/SUNWics5/cal/sbin
  5. 针对日历数据库副本运行 check 命令:


    ./csdb check dbdir \> /tmp/check.out 2\>&1

    如果未指定 dbdir,则 check 命令将针对当前目录中的数据库。

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

  6. 运行完 check 命令后,查看输出文件。

    如果数据库遭受损坏,则可以选择用热备份副本进行替换。另外,您可以选择通过运行 rebuild 命令来尝试重新建立已损坏的数据库。

Procedure重新建立日历数据库 (caldb)(不包括 GSE 数据库)

要恢复已损坏的日历数据库 (caldb),请使用 csdb 实用程序的 rebuild 命令。rebuild 命令将扫描所有日历数据库以查看其中是否存在损坏。如果 rebuild 命令发现冲突,它将在 cal_svr_base/SUNWics5/cal/sbin/rebuild_db 目录中重新建立一个日历数据库(.db 文件)。

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

在以下说明中,rebuild 命令不会重新建立组调度引擎 (Group Scheduling Engine, GSE) 数据库。

要重新建立不包括 GSE 数据库的日历数据库,请执行以下步骤:

步骤
  1. 以具备管理权限的用户身份登录安装了 Calendar Server 的系统。

  2. 停止 Calendar Server。

  3. 如果尚未备份,请备份日历数据库。只需复制数据库 (.db) 文件和日志 (log.*) 文件。无需复制任何共享 (__db.*) 文件。

  4. 转至 cal_svr_base/SUNWics5/cal/sbin 目录。例如,在 Solaris 操作系统上输入以下内容:


    cd /opt/SUNWics5/cal/sbin

    如果 sbin 目录的磁盘空间不足,请在其他目录中运行 rebuild 命令。

  5. 针对日历数据库副本运行 rebuild 命令:


    ./csdb rebuild /tmp/db /tmp/

    如果未指定数据库目录,则 rebuild 命令将针对当前目录中的数据库。在上述示例中,/tmp/ 参数用于指定重新建立的数据库所在的目标目录。


    注 –

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

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

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

    1. ./csdb rebuild db_0629

      然后检查是否存在损坏。如果该备份副本已被损坏,则针对下一个备份副本运行 rebuild。

    2. ./csdb rebuild db_0615

      然后检查是否存在损坏。如果该备份副本已被损坏,则针对下一个备份副本运行 rebuild。

    3. ./csdb rebuild db_0601

      ... 等等。

    rebuild 命令将重新建立的数据库写入 cal_svr_base/SUNWics5/cal/sbin/rebuild_db 目录。


  6. 运行完 rebuild 命令后,查看rebuild.out 文件中的输出结果。如果重新建立成功,rebuild.out 文件中的最后一行应如下所示:


    Calendar database has been rebuilt
  7. 验证 rebuild 成功后,将重新建立的数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。

  8. 如果从损坏的数据库中恢复了任何共享 (__db.*) 文件,请将它们移到其他目录中。

  9. 重新启动 Calendar Server。

Procedure重新建立日历数据库(包括 GSE 数据库)

如果您已在您的站点中实现了组计划,则应在重新建立日历数据库时包括 GSE 数据库。

要重新建立日历数据库和 GSE 数据库,请执行以下步骤:

步骤
  1. 通过运行 csschedule -v list 命令确定 GSE 数据库是否具有任何条目,如果有,则让 GSE 处理完这些条目。

  2. 以具备管理权限的用户身份登录安装了 Calendar Server 的系统。

  3. 停止 Calendar Server。

  4. 如果尚未备份,请备份日历数据库。

    只需复制数据库 (.db) 文件和日志 (log.*) 文件。无需复制任何共享 (__db.*) 文件。

  5. 转至 cal_svr_base/SUNWics5/cal/sbin 目录。

    例如,在 Solaris 操作系统上输入以下内容:

    cd /opt/SUNWics5/cal/sbin

    如果 sbin 目录的磁盘空间不足,请在其他目录中运行 rebuild 命令。

  6. 针对日历数据库副本运行 rebuild 命令:

    ./csdb -g rebuild /tmp/db /tmp/

    如果未指定数据库目录,则 rebuild 命令将针对当前目录中的数据库。在上述示例中,/tmp/ 参数用于指定重新建立的数据库所在的目标目录。


    注 –

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

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

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


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

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


  7. 运行完 rebuild 命令后,查看rebuild.out 文件中的输出结果。

    如果重新建立成功,rebuild.out 文件中的最后一行应如下所示:


    Calendar database has been rebuilt
  8. 验证 rebuild 成功后,将重新建立的数据库 (.db) 文件从 rebuild_db 目录复制到您的生产数据库中。

  9. 如果从损坏的数据库中恢复了任何共享 (__db.*) 文件,请将它们移到其他目录中。

  10. 重新启动 Calendar Server。


示例 16–1 重建输出样例

通过以下输出结果样例可以看到事件和待办事件数据库均被扫描了两次。这不是错误。首次扫描是为了验证 calprops 数据库中的信息,再次扫描是为了确保可以从日历数据库访问 calprops

以下示例显示了此命令及其生成的输出:


# ./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 选项指定目标数据库(caldbsessdbstatdb);否则,csdb 将删除所有三个数据库。

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

csdb -t caldb delete

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