9. 其他主题

关于使用 Ingres 的更多提示。

9.1. 自动启动和关闭

如果您希望 Ingres 在 Linux 启动时自动启动,并在您关闭或重启系统时停止,请执行以下操作

以 root 用户身份登录。

检查您的 Linux 版本是否具有 System V 或 BSD 风格的 initinitman 手册页会说明这一点)。

如果您的系统符合 System V,则/etc/rc.d/init.d目录必须存在。在该目录下创建一个文件(将其命名为 ingres 或您希望的任何其他名称)。该文件应至少包含以下内容

#!/bin/sh

case $1 in
  start)
    echo "Starting Ingres"
    su - ingres -c "ingstart"
    ;;

  stop)
    echo "Stopping Ingres"
    su - ingres -c "ingstop"
    ;;

  *)
    echo "Usage: ingres {start|stop}"
    exit 1
    ;;
esac

exit 0
	

将该文件链接为K01ingres到与 Ingres停止运行的运行级别相对应的目录

# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc0.d/K01ingres
# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc1.d/K01ingres
# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc6.d/K01ingres
	

也将其链接为S99ingres到与 Ingres启动运行的运行级别相对应的目录

# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc2.d/S99ingres
# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc3.d/S99ingres
# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc4.d/S99ingres
# ln -s /etc/rc.d/init.d/ingres /etc/rc.d/rc5.d/S99ingres
	

调用链接K01ingresS99ingres并不重要,重点是名称以K开头的名称应包含一个较小的数字(以便在更改为较低的运行级别时 Ingres 尽早停止),而以S开头的名称应包含一个较大的数字(以便 Ingres 在所有其他程序启动后启动)。当然,文件名不得与现有文件的名称冲突。

如果您有 BSD 风格的 init,请将以下行放入/etc/rc.d/rc.local:

echo "Starting Ingres"
su - ingres -c "ingstart"
	

这将启动 Ingres。(实际上,即使您有 System V 风格的 init,也可以使用/etc/rc.d/rc.local)。

要自动停止 Ingres,请在/etc/shutdown.d中创建一个文件(例如,命名为 ingres),其中包含命令

echo "Stopping Ingres"
su - ingres -c "ingstop"
	

无论您的系统类型如何,您创建的文件都必须是 root 用户拥有的可执行文件。

当然,如果您的系统提供了用于配置程序自动启动和停止的实用程序(例如 RedHat 中的 chkconfig),如果您愿意,可以使用该实用程序。

9.2. ingmenu

访问 Ingres 数据库的最简单方法(至少对于初学者而言)是通过 ingmenu 程序。从 ingmenu,您可以访问 Ingres 基于表单的实用程序,通过这些实用程序,您可以创建、更新和查询表,创建、编辑和运行报表以及 ABFVision 应用程序。其用法是

$ ingmenu test
	

Test 是数据库的名称。

9.3. 绕过 Ingres Net

在没有 Ingres/Net 的情况下,理论上 Ingres 应用程序无法访问不同机器上的数据库。但是,存在一种未经 CA 支持的方法,有时您可以使用该方法来解决此问题。

假设您的应用程序在主机 ingdev 上运行,而您想要更新或查询的数据库(名为 test)位于主机 ingserv 上。您的首要任务是找出在 ingserv 上运行的相应 DBMS 服务器的端口号。您可以使用 ipm 来实现此目的:以 ingres 身份,在 ingserv 上启动 ipm 并选择 服务器列表。在服务器列表中,选择类型为INGRES并且处理 test 数据库的服务器(您必须在testALL列中看到连接到数据库)。您可以在第一列中找到 DBMS 服务器的端口号。假设它是 1259。

在机器 ingdev 上,以下列方式设置 shell 变量II_DBMS_SERVER

$ export II_DBMS_SERVER='ingserv::1259'
	

现在运行命令

$ sql test
	

如果它有效,您就可以访问主机 ingserv 上的 test 数据库。

此解决方案仅在两台机器具有相同的体系结构,运行相同的操作系统,两个 Ingres 安装中的字符集相同等等的情况下适用:我不知道必要条件的完整列表。因此,我不能保证此技巧会奏效。

另一方面,如果您在主机 ingserv 上重新启动 IngresDBMS 服务器进程将获得不同的 TCP/IP 端口,因此您可能需要自动化获取当前端口号到应用程序服务器的过程。您可以使用 iinamu 实用程序的 show 命令来实现此目的。如果只有一个服务器在运行,则以下命令行给出 DBMS 服务器的端口号

$ echo show | iinamu | grep INGRES | tr -s ' ' '\t' | cut -f4
	

9.4. 基于表单的开发工具

Ingres 安装包含一个示例应用程序,该应用程序由 Ingres 的传统开发工具 ABF 创建。您可以使用 abfdemo 命令加载它。遗憾的是,在 Ingres CD 或 CA 站点上都找不到 ABFVision 的手册。

在 glibc 2.1 下的 SDK 存在一个问题:由 ABFVision 创建的应用程序既无法编译也无法直接从数据库运行。此问题在完整 Ingres 版本中已解决。对于 SDK,请安装 RedHat glibc 2.0 兼容性软件包。如果您没有 RedHat,请从以下 URL (网址) 下载它们

除了兼容性软件包外,您还需要一个 Ingres 补丁。它于 1999 年 9 月发布在 Ingres 新闻组中。我有一个副本,如果您希望安装它,请给我发送电子邮件。

兼容性软件包和补丁程序可能不适用于所有 Linux 发行版。我仅在 RedHat 和 Caldera Open Linux 上测试了它们。

9.5. Ingperl 和 Perl DBI

以前的 Perl 版本(包括版本 4)通过称为 ingperl 的库使访问 Ingres 成为可能。您可以在 http://www.contrib.andrew.cmu.edu/~lfm/ingperl.html 找到有关 ingperl 的信息。

Perl 5 中,出现了一个新的统一数据库接口,称为 Perl DBI。它的站点是 http://www.symbolstone.org/technology/perl/DBI/index.html

您可以从该站点下载 DBIIngres 模块。

9.6. Ingres 链接

我为您提供一些指向重要 Ingres 站点的指针

玩得开心!