Informix Dynamic Server 11.50 第 1 部分: IDS 计划和安装

Informix Dynamic Server 11.50

1 部分: IDS 计划和安装

Jeffrey S. Bohm, 软件工程师, EMC

Jeff 从事关系数据库管理系统 (RDBMS) 产品已经超过 16 年了。他曾经以各种身份接触数据库:作为客户、顾问、讲师和开发人员。他于 1994 年加入 Informix Software,一直工作至今。他在 Informix 的工作包括高级技术支持、性能调优和故障排除顾问以及客户教育专家。他当前在 IBM Informix Dynamic Server Stress QA 团队担任软件工程师。

Jeff 曾经为许多 IDS 客户提供服务,从最小型的企业到最大型的企业,包括几家大型零售商、百货商和电信公司。他帮助这些企业尽可能挖掘 IDS 的潜力、满足最基本的 SQL 需求、产生最佳性能和提供丰富的实现。

Jeff 参与开发了 IDS 9 认证考试,当前拥有 IDS 57910 11 的认证证书。

Jeff 还帮助编写了 IBM 的几个 IDS RDBMS 课程。

简介:  本教程是 系列教程 的第一篇,本系列帮助您熟悉 IBM® Informix® Dynamic Server (IDS) 的各个方面和准备 IDS 基础认证考试。第一个教程讨论 IDS 的计划和安装,这是成功地了解和使用 IDS 的好起点。

计划

有许多人影响了我,包括我的父母、高中老师、大学教授、业务指导等等;但是他们实际上都告诉我同一个道理:要想取得成功,就需要制定计划。对于成功的数据库部署,同样如此 — 您需要计划。尽管您可能不情愿花时间制定计划,但是要记住计划在日后会为您节省大量时间。

因此,本教程的第一部分讨论计划。在制定计划时,需要问自己一些问题:

  • 我需要数据库软件中的哪些功能?
  • 我希望连接什么类型的应用程序?
  • 会有多少用户?这些用户从哪里连接数据库?
  • 我要存储什么类型的数据?数据量有多大?
  • 我希望应用程序的响应时间是多少?
  • 要使用现有硬件,还是购买新硬件?
  • 是由一个人维护数据的所有方面,还是让一个团队分担责任?

还可以列出更多问题,但是我们先就此打住。本节的目标并不是深入讨论这些问题,而是促使您思考它们并讨论与它们相关的一些高层主题。

IDS 版本

Informix Dynamic Server 提供四个不同的版本:

  • Developer
  • Express
  • Workgroup
  • Enterprise

IDS Developer Edition 是一个免费产品,只能用于应用程序开发和测试。它包含 Workgroup Edition 的大多数功能,但是没有 IBM 技术支持。它还在处理器数量、内存和存储方面有可伸缩性限制。

Express Edition 适用于中小型企业,只能在 Linux Windows 操作系统上运行。它也包含 Workgroup Edition 的大多数功能并有可伸缩性限制。

Workgroup Edition 适用于中型企业或作为大企业的部门服务器。它可以在各种 Unix/Linux 操作系统以及 Windows Mac OS X 上运行。Workgroup Edition 增加了额外功能,比如有限的 Enterprise Replication (ER) High-Availability Data Replication (HDR)Workgroup Edition 也有可伸缩性限制。

Enterprise Edition 包含 Workgroup Edition 的所有功能,而且没有可伸缩性限制。Enterprise Edition 包含完整的 HDR ER 功能,还增加了 Continuous Availability FeatureStorage OptimizationLBAC 等功能。

制定计划的首要步骤之一是判断需要用哪个 IDS 版本支持您的业务需求。


回页首

应用程序类型

连接数据库的应用程序通常分为两类:

  • 联机事务处理,即 OLTP
  • 决策支持系统,即 DSS,有时候也称为数据仓库

您会问,“它们有什么不同?” 我们来看一个示例。

OLTP

OLTP 型处理的示例是呼叫中心应用程序。当您打电话给信用卡公司(或任何形式的服务台)时,电话那头的服务人员通常会询问某些能够惟一地标识您账户的信息,比如账户号。使用这个账户号搜索数据库,找到只与您相关联的几个记录。可能只有一个记录(可能是您的账户信息),也可能有几十个记录,比如您的账户信息加上最近 15 次交易的信息。无论是哪种情况,这应该是快速的搜索,可以在一两秒或更少时间内返回数据。尽管它可以返回来自多个表的几十个数据行,但是它返回的行只占数据库中行的很小一部分。应用程序可能返回 20 行,这与表中的 2 亿行相比微不足道。我这么说并不是想让您觉得渺小;只是想指出 OLTP 型系统的关键特征:

  • 它通过查询返回很少几行
  • 它具有非常短的响应时间 — 通常是一两秒或更少
  • 它使用惟一标识和索引获取行集
  • 它是一个读写型环境
  • 支持大量用户

OLTP 系统设计为读写系统。信用卡服务台等用户应用程序不但会从数据库中选择数据,还会频繁地更新和插入新数据。

DSS 或数据仓库

DSS 型查询是报告型的查询。它们是运行时间更长,更深入的查询。继续以上面的信用卡公司为例,公司的 CEO 希望:

  • 查明上一个月发生了多少次信用卡交易
  • 生成所有拖欠信用卡债务的客户的报告

注意,这些查询并不与某一客户相关联。第一个查询可能只使用一个表获取数据(也可能使用几个表),但是为了获得一个月的结果,它必须搜索很大的数据范围,然后对数据进行聚合(计数)以获得最终结果。第二个查询与第一个相似,但是返回更多数据。

许多人认为 DSS 型查询都会返回大量数据。但是,事实并非如此。在前面的示例中,第一个查询是 DSS 查询,但是它只返回一行(实际上只有一个总数值)。第二个查询返回大量数据,具体数量取决于拖欠信用卡债务的客户数量。

DSS 查询的关键特征包括:

  • 长时间运行;可能需要几分钟到几小时
  • 资源消耗量更大
  • 与查询条件匹配的行很多
  • 可能要聚合大量数据(求总和、最小值、最大值、总数等等)
  • 因为涉及很大的数据集,需要对表进行连续的扫描

DSS 环境更接近只读环境。尽管有时候必须把数据装载到系统中,但是通常采用批量装载,在此之后系统不进行更新,至少不会频繁地更新。

因此,不要根据查询返回的数据量判断它的类别,而是应该根据查询本身的关键特征来判断。

在设计数据库时使用的数据模型也非常重要。IDS 可以使用三种数据模型:

  • 关系数据模型 —— 典型的 OLTP 模型
  • 对象-关系数据模型 —— 通过使用 IDS 的可扩展性选项(扩展的数据类型、用户定义例程、用户定义类型、用户定义聚合等等),在关系数据模型中添加对象
  • 维数据模型 —— 典型的 DSS 数据模型,支持联机分析处理 (OLAP)

尽管在当今的环境中一个数据库不一定是纯粹的 OLTP DSS,但是查明数据库的主要应用程序类型总是有好处的,有助于采用与之相匹配的设计路径。

许多数据库有两种类型的应用程序同时连接它们,为了适应这种情况,IDS 提供了可配置的参数,帮助提高在同一数据库上运行的 OLTP DSS 查询的性能。


回页首

用户

计划的另一部分是考虑用户需求。

基本问题包括:

  • 需要为这个软件建立任何特殊用户或组吗?
  • 用户从哪里连接数据库?
  • 预计会有多少个用户同时连接数据库?

回答这三个问题不仅有助于数据库计划,还有助于确定硬件需求。

Unix/Linux 上的 IDS 要求在安装机器上设置 “informix” 用户账户和 “informix” 组。Windows 上的需求要宽松一些,允许使用 “informix” 用户或一个本地系统用户和 “Informix-Admin” 组。在 Windows 上安装时,可以选择要使用的用户账户。

在默认情况下,“informix” 用户是 IDS 软件的 “超级用户”。它有权访问所有内容,可以用 IDS 软件做任何事。

IDS 11.50 使用外部用户身份验证,这意味着它不在软件内部设置用户,而是依靠其他软件验证用户的身份。这个外部软件可以是运行 IDS 的机器上的操作系统身份验证机制、LDAPMS Active Directory Pluggable Authentication Module (PAM)

注意:无论采用哪种身份验证方式,都必须记住一点:需要访问数据库的所有用户都必须通过外部身份验证机制设置账户和密码,这样数据库才能对他们进行身份验证并允许他们访问数据。连接的用户账户数量对于制定计划很重要。

正如前面提到的,在默认情况下,“informix” 用户是 IDS 系统的 “超级用户”。但是,某些规范要求把管理员权力划分给多个用户,每个用户只具有一部分管理权限。这称为角色隔离。角色隔离是一种权力制衡机制。IDS 角色隔离把管理员权力划分为两类:

  • 运行实例的人要执行的管理任务
  • 审计实例活动的人要执行的审计任务

必须在安装软件时启用角色隔离,启用方法是在启动安装过程之前设置 INF_ROLE_SEP 环境变量,或者在交互式安装过程中启用它。只能通过卸载/重新安装 IDS 软件禁用角色隔离。角色隔离在 Windows 上使用用户账户,在 Unix/Linux 上使用组账户。如果已经启用了角色隔离,安装过程会询问这些用户和组账户的信息。

角色隔离把管理员权力划分给三个用户:

  • Database System Administrator (DBSA) —— 控制实例的一般操作
  • Database System Security Office (DBSSO) —— 决定要审计什么
  • Audit Analysis Officer (AAO) —— 监视审计记录

还有几个用户虽然不属于角色隔离,但是可能需要为它们制定计划:

  • Database Administrator (DBA) —— 管理实例上的数据库
  • Operating-System Administrator (OSA) —— 满足操作系统需求
  • System Users —— 需要获得数据的任何用户

回页首

数据类型

在制定数据库计划时,应该熟悉可以用来存储数据的数据类型。描述数据在数据库中的存储方式的最简单方法是用电子表格做类比。您很可能使用过或见过某种电子表格程序(例如 Microsoft® Excel®)。电子表格组织为行和列。同一列中的所有数据(垂直数据)通常是相似的,比如都是日期或金额。列标题描述数据的含义。

同一行中的所有数据(水平数据)共同描述电子表格表示的一个对象。在下面的示例(表 1)中,电子表格描述 XYZ Shoe Store 的客户。每一行描述一个客户的相关信息,每一列描述所有客户的某一概念。对于每个客户,要存储姓名、年龄、鞋码、最后一次从店里买鞋的时间和这次交易中购买的数量。


1. 数据示例

Name

Age

Shoesize

Last Trans Date

Last Trans Amt

Fred Flintstone

29

11.5

3/29/2009

$79.35

Barney Rubble

31

9

1/15/2009

$103.75

Dino Flintstone

7

16

11/26/2008

$129.95

数据库并不在电子表格中保存数据,而是在表中保存数据。与电子表格一样,表也由行和列组成。在定义表时,指定要保存什么样的列数据和每个列使用的数据类型。数据类型限制列可以包含的数据的类型。如果把列定义为整数数据类型,那么这个列就不能包含字母;它只能包含整数。当应用程序开始在表列中存储数据时,添加表行。每次存储一行数据。表 1 中的示例有 5 列 — 第一列 Name 的数据类型是字符/字符串;Age 是整数;Shoesize 是小数;LastTransDate 是日期;LastTransAmt 是货币值。

既然已经了解了在什么地方使用数据类型,现在看看 IDS 中可用的数据类型。

可用的数据类型

  • 内置数据类型
    • BIGINT —— 从 -(263-1) 263-1 的整数
    • BIGSERIAL —— 从 -(263-1) 263-1 的整数,由服务器自动地递增;有时候作为代理主键
    • BLOB —— 二进制大对象,最大大小为 4TB,用于以原生格式存储对象
    • BOOLEAN —— 't' 'f' 值;可以在表达式中测试
    • BYTE —— BLOB 的老版本,理论大小限制为 231 字节,实际限制由磁盘容量决定
    • CHAR(n) —— 存储 n 个字符;如果长度小于 n,那么用空格填充至 n 个字符
    • CHARACTERVARYING(m,r) —— 与 ANSI 兼容的 VARCHAR
    • CLOB —— 字符大对象,最大大小为 4TB,用于字符数据
    • DATE —— 日历日期;默认格式为 MM/DD/YYYY;可以通过 DBDATE 环境变量修改格式;指定一个时间点
    • DATETIME —— 日历日期和时间;默认格式为 YYYY-MM-DD HH:MM:SS.FFF;可以通过 DBTIME 环境变量修改格式;指定一个时间点
    • DECIMAL(p,s) —— 小数值,其中的 'p' 是总位数,'s' 是小数点右边的位数。
    • NUMERIC(p,s) —— 与 DECIMAL 相同
    • DOUBLE PRECISION —— 与 FLOAT 相同
    • FLOAT —— 双精度浮点数,最多 17 个有效位
    • IDSSECURITYLABEL —— 只由 Label Based Access Control (LBAC) 使用的 VARCHAR(128)
    • INTEGER —— 从 -(231 -1) 231 -1 的整数
    • INT8 —— 从 -(263 -1) 263 -1 的整数
    • INTERVAL —— 格式与 DATETIME 相同,但是指定一个时间范围
    • LVARCHAR(m) —— 长度可变的字符字段,最大长度为 m;只使用存储数据所需的空间,而且不超过 m;在使用 UDT 时最大大小限制为 2GB,否则限制为 32K
    • MONEY(p,s) —— 与 DECIMAL 相似,但是用货币字符进行格式化;默认字符是 $ .,但是可以通过 DBMONEY 环境变量修改
    • NCHAR(n) —— 存储固定长度的字符数据,但是包括使用 Global Language Support (GLS) 存储由数据库地区决定的单字节和多字节字符集;还允许使用本地的整理次序
    • NVARCHAR(m,r) —— 与 VARCHAR 相同,但是具有与 NCHAR 相似的特殊性质
    • REAL —— 与 SMALLFLOAT 相同
    • SMALLFLOAT —— 单精度浮点数,大约 9 个有效位
    • SERIAL —— 从 –(231 -1) 231-1 的整数,由服务器自动地递增;有时候作为主键
    • SERIAL8 —— 与 SERIAL 相同,但是数值范围为 –(263 -1) 263-1
    • SMALLINT —— 从 -32767 32767 的整数
    • TEXT —— CLOB 的老版本,最大大小为 2GB
    • VARCHAR(m,r) —— 长度可变的字符字段,最大长度为 mm 不超过 255),r 是最小保留空间;如果存储的值的长度小于 r,那么用空格填充至 r 个字符;如果存储的值的长度大于 r 但小于 m,那么只使用存储数据所需的空间
  • 扩展数据类型
    • 复合数据类型
      • ROW
      • COLLECTION
    • 用户定义数据类型
      • 独特类型(Distinct types
      • Opaque 类型

内置数据类型被认为是原子的,也就是说它们无法分割为更小的块。每个内置数据类型都有独特的性质。

清单 1 给出一个使用内置数据类型创建 customer 表的示例(数据来自 表 1):


清单 1. 使用内置数据类型

                                             

CREATE TABLE customer

        (       Name CHAR(55),

               Age INTEGER,

               Shoesize DECIMAL(3,1),

               LastTransDate DATE,

               LastTransAmt MONEY(5,2)

        );

 

数据类型的可扩展性

因为内置数据类型不可能覆盖用户可能希望存储的所有数据的类型,IDS 提供了扩展数据类型的功能,可以把内置数据类型组合在一起,也可以添加新的用户定义数据类型。复合数据类型包含两类:ROW COLLECTION

ROW 数据类型就像是表中的一行,但是把这一整行放在一个列中。因此,它包含多个由内置数据类型组成的部分。它不是原子的。可以为 ROW 数据类型指定名称,也可以不指定。

示例:
仍然以前面的 XYZ Shoe Store 为例,您希望存储客户的完整姓名 — 名、中间名和姓。不必创建三个列,分别保存这三个部分,而是可以创建一个包含三部分的列。

COLLECTION 数据类型实际上包括三种数据类型:SETMULTISET LISTCOLLECTION 数据类型允许把相同数据类型的数据组一起存储在单一列中。

示例:
仍然以前面的 XYZ Shoe Store 为例,您希望存储客户喜欢的鞋子品牌。不希望为此创建多个列,因为不知道需要多少个列。一些人只喜欢一个品牌,而有的人喜欢四五个品牌。所有品牌名都只是字符串,所以它们的数据类型相同。对于这种情况,可以创建一个名为 FavBrands SET 类型的列,它存储字符串数据。这个列可以存储客户喜欢的任意数量的品牌。然后,可以使用 SQL 选择在 FavBrands 列中包含 Nike 的所有客户。这里选用 SET 类型是因为 SET 不允许集合中有重复的数据。'Nike','Keds','Nike' 这样的值是没有意义的。MULTISET LIST 都允许重复的数据。COLLECTION 不允许 Null 元素,所以在定义 COLLECTION 时必须指定 NOT NULL 约束。

清单 2 给出一个使用 ROW COLLECTION 类型创建 customer 表的示例:


清单 2. 使用 ROW COLLECTION

                                             

CREATE TABLE customer

        (       Name ROW( fname CHAR(15), mi CHAR(1), lname CHAR(35)),

               Age INTEGER,

               Shoesize DECIMAL(3,1),

               LastTransDate DATE,

               LastTransAmt MONEY(5,2)

               FavBrands SET(CHAR(10) NOT NULL)

        );

                

 

修改之后,表数据像下面这样:


2. 示例使用的数据

Name

Age

Shoesize

Last Trans Date

Last Trans Amt

FavBrands

FName

MI

LName

 

 

 

 

 

Fred

F

Flintstone

29

11.5

3/29/2009

$79.35

Rockers, Nike

Barney

 

Rubble

31

9

1/15/2009

$103.75

Treadwear

Dino

T

Flintstone

7

16

11/26/2008

$129.95

Doggear

用户定义类型

尽管内置类型和复合类型能够覆盖用户可能希望存储的大多数数据,但是仍然有可能需要新的数据类型。新的应用程序和技术带来新的东西,可能需要新的数据类型。因此,IDS 并不负责决定什么时候应该添加新的数据类型,而是让用户能够在需要时添加新的数据类型。这些数据类型称为用户定义类型(UDT)。用户定义它,告诉 IDS 如何与它交互。这是一个非常棒的功能。

如果生活中的所有事情都这么容易,就好了。实际上,这确实不太难;只需完成几个步骤。本教程后面会详细讨论 UDT UDT 的支持函数。这里先简要介绍一下。

正如在前面的可用数据类型列表中看到的,第一种 UDT 类型称为独特类型(distinct type)。简单地说,独特类型只是对一个内置数据类型的重新命名。它继承内置类型的基本性质,但是不包括支持函数。

示例:Create distinct type Shoesize as DECIMAL(3,1)

因为 shoesize 定义为小数,所以它具有小数类型的存储性质。但是,可以对小数值执行的操作对于 shoesize 值不一定都有意义。例如,把两个 shoesize 相加求出另一个 shoesize 是没有意义的。加函数 (+) IDS 中是一个支持函数。因为 IDS 不知道支持函数对于新定义的独特类型是否有意义,它会自动地在独特类型上禁用所有支持函数。因此,也不能比较 shoesize 值和小数值。值的比较也是支持函数。尽管 shoesize 定义为小数,但是它们是两个不同(独特)的类型,不能相互比较。如果要比较小数值和 shoesize 值,就必须先把其中一个值转换为另一个值的数据类型,然后才能进行比较。

所以您会问,“如果在这个新的 ‘独特’ 数据类型上不支持支持函数,那么它对我还有什么用呢?” 您想对 shoesize 执行一些特殊的操作,比如检查一个 shoesize 是否比另一个大。这是一个不合适的例子,因为这里的 shoesize 是像一般小数值那样的递增值。但是,假设 shoesize 中还要加入 XSSMLXL XXL 值。必须把 shoesize 由小数类型改为字符类型。但是在这种情况下,如果要比较两个 shoesize 值,就不能再依靠一般的次序(在这里是字母表次序)。如果依靠字母表次序,那么 shoesize 的次序会是 LMSXLXSXXL。但是这不对,因为 XS 实际上是最小的。无法依靠 IDS 的内置函数解决这个问题,所以需要一种替代方法。IDS 的替代方法是允许编写外部例程,然后可以在一般的 SQL 中调用它们。因此可以编写一个例程来执行 shoesize 的比较。这些新例程称为用户定义例程 (UDRuser define routine)。本教程后面会进一步讨论 UDR

另一种 UDT 称为 OPAQUE 数据类型。顾名思义,opaque 类型是 IDS 完全不了解的新类型。必须向 IDS 描述这个数据类型,这有点像 C 结构。还必须告诉 IDS 其他信息,包括这个结构应该如何保存在磁盘上、如何在磁盘格式和显示格式之间进行转换、如何为它编制索引以及要使用的支持函数。您一定会问,“如果必须做这么多工作,我为什么要使用 IDS,我可以编写自己的应用程序?” 尽管 OPAQUE 数据类型需要做许多工作,但是有很大的回报,因为可以自动地利用所有其他数据库功能。定义了支持函数之后,IDS 就可以在一般 SQL 语句中的任何地方使用它们,就像内置类型一样。因此,可以利用关系数据库管理系统 (RDBMS) 中已有的所有功能,包括事务完整性、备份和恢复、存储、用户功能、与其他数据类型的集成等等。

使用 OPAQUE 类型的例子是 GeoSpatial Datablade,它定义了一个 GeoPoint 数据类型,用来存储四维的地理坐标。这个数据类型的支持函数帮助分析距离、接近程度、交汇,提供基于地理位置的其他功能。这些函数可以包含在一般 SQL 语句中,所以字符数据、geopoint 数据和其他数据类型的数据可以出现在同一结果集中。

用户定义例程

可以用 CJava Stored Procedure Language (SPL) 编写 UDT 的支持函数。实际上,不仅可以为 UDT 编写支持函数,DBA 还可以创建 UDR 来支持内置数据类型。

示例:
内置数字数据类型的平均值(AVG)聚合函数(例程)在执行计算时完全忽略 NULL 值。但是,您的数据分析可能需要考虑 NULL 值,所以需要编写一个 AVG 例程,它把 NULL 值转换为零并在计算中包含它们。可以编写一个重载内置 AVG 函数的 UDR,然后对内置数据类型或 UDT 使用这个新例程。

注意,在这个示例中,“函数” 和 “例程” 这两个词是同义的。这是因为例程只是一个类别,它包含两个实际元素:函数和过程。因此,在创建例程时,实际上使用 CREATE FUNCTION CREATE PROCEDURE SQL 语句。

您会问,“函数和过程有什么区别?” 根据 ANSI 标准定义,函数可以接收值,也可以返回值;而过程可以接收值,但不应该返回任何值。例如,向 SUM 函数传递 2 2,它会返回 4。但是,对于更新职员工资的过程,把新的工资值传递给它,它不需要向用户返回任何东西。从 11.50 开始,IDS 不完全符合 ANSI 标准,因为它仍然允许从过程返回值。这是为了保持向后兼容性。在以后编写例程时,一定要牢记 ANSI 标准。

datablade

在结束对 UDT UDR 的讨论之前,看看另一个概念 datablade。因为我们已经讨论了 UDT UDR 是什么,datablade 概念应该容易理解。datablade 是由于某种原因打包在一起的 UDT UDR。原因往往是它们具有某些共同点,比如都具有某一功能。datablade 的例子是 Geodetic DatabladeGeodetic Datablade 中包含执行地理空间数据存储、获取、索引和各种分析所需的所有 UDT UDR


回页首

版本说明

假设您需要为计算机买一台新打印机。您会跑到本地的计算机外设商店,挑选一台自己喜欢的打印机,然后带回家。回家之后,您打开包装盒,首先做的就是拿出用户手册,从头到尾读一遍,然后再取出包装盒中的其他东西。对吗?但是实际上,绝大多数人会拿出用户手册,但是把它丢在一边,因为他们太兴奋了,想早点把打印机接到计算机上。外设生产商考虑到了这种现象,为此,他们会在包装盒内最上面放上某种资料 — 可能名为 “Read Me First” 文件,其中说明让打印机开始工作的简易步骤。

IDS 也采用这种做法,它把用户指南分为两部分。第一个部分是 README.html 文件,这个文件放在从安装介质解压软件时生成的顶级目录中。README 文件包含非常基本的安装说明,还有其他几个文档文件(称为 “版本说明”)的链接。(本教程的 “安装” 一节详细讨论安装)。这些版本说明描述新特性、支持的版本、内核参数值、已经废弃的特性和已知问题及其解决方法。如果您从 IDS 的一个版本升级到另一个版本,版本说明对于了解版本之间的差异很有帮助。如果您是安装全新的系统,也可以在版本说明中找到关于这个版本和其他信息来源的信息。如果您得到一个已经安装好的 IDS,仍然可以在安装 IDS 的目录中的一个子目录下找到版本说明。让我们把安装 IDS 的目录称为 INFORMIXDIR。版本说明的位置是 /INFORMIXDIR/releaseUnix/Linux)或 C:/INFORMIXDIR/releaseWindows)。实际上,它们在这个目录下的一系列本地化目录中。这些本地化目录采用 Global Language Support (GLS) 约定。如果在 Unix/Linux 上安装这个产品的 US English 版本,完整的目录路径是 /INFORMIXDIR/release/en_us/0333

最后两个子目录名取决于您的国家和语言,但是结构是相似的。在最内层的目录中会找到这台机器上安装的所有 IBM Informix 产品的版本说明,包括 HTML 和文本两种格式。


回页首

地区

前一节的最后一部分提到了 Global Language Support (GLS) 的概念。世界上的各个国家并不使用相同的语言、相同的字母表或相同的货币。因此,软件也不应该只使用一种语言。这就引出了本地化问题。“本地化” 过程对产品进行转换以满足特定的文化环境。在本地化过程中,要创建与文化相关联的资源文件,翻译用来生成产品用户界面、消息和错误的文件,设置日期、时间和货币格式。

还可以进一步定义地区;它使用本地化的文件,但是还指定编码集(字符映射)和整理次序(词典排序次序)。这种划分允许相同的本地化有多个地区。一个国家可能有多个地区,所有地区说同一种语言,但是每个地区略有差异。在创建数据库时,产品和硬件类型将决定使用的默认地区。这称为 DB_LOCALE。对于在美国购买并安装在 Unix/Linux 上的 IDS 产品,默认的 DB_LOCALE en_us.8859-1(也称为 en_us.819)。如果安装在 Windows 上,默认的 DB_LOCALE en_us.1252。如果想修改 DB_LOCALE,必须在创建数据库时在运行 CREATE DATABASE SQL 语句的会话中设置 DB_LOCALE 环境变量。

ISO 8859-1 字符编码针对拉丁字母表,适用于许多国家。

尽管 DB_LOCALE 指定数据库的默认地区,但是连接数据库的客户机可以使用不同的地区。客户机的 CLIENT_LOCALE 环境变量指定客户机的地区。要想让数据库和客户机能够交换信息,它们的地区必须是相同或者兼容的(可相互转换)。

在为 GLS 存储字符数据时,一定要使用 NCHAR NVARCHAR 数据类型,而不是 CHAR VARCHAR 数据类型。以 “N” 开头的数据类型允许根据 CLIENT_LOCALE 决定排序次序,而不只是根据 DB_LOCALE。客户机可以使用 SET COLLATION SQL 语句在当前会话中动态地修改排序次序。

清单 3 给出 GLS 地区的示例。因为许多国家使用拉丁字母表,这些国家的许多编码集是兼容的。创建 Shoe store 表(见 表 1)并在其中填充一行之后,我多次运行了下面的 SELECT SQL 语句,但是每次都把 CLIENT_LOCALE 环境变量设置为与 DB_LOCALE 不同但兼容的另一个地区。


清单 3. GLS 地区

                                     

SELECT name.fname, SUBSTR(TO_CHAR(lasttransdate,"%B %d %Y"),1,15), lasttransamt

FROM customer;

 

$ export CLIENT_LOCALE=en_us.8859-1           --(setting for US English)

 

fname           (expression)      lasttransamt

 

Fred           March 21 2009             $85.43

 

$ export CLIENT_LOCALE=nl_nl.8859-1           --(setting for Dutch Netherlands)

 

fname           (expression)      lasttransamt

 

Fred            maart 21 2009            F 85,43

 

$ export CLIENT_LOCALE=de_de.ASCII            --(setting for Germany German)

 

fname           (expression)       lasttransamt

 

Fred            Mrz 21 2009             85,43DM

 

$ export CLIENT_LOCALE=pt_br.8859-1           --(setting for Brazil Portuguese)

 

fname           (expression)        lasttransamt

 

Fred            Março 21 2009          (85,43)R$

 

                

 

注意,修改 CLIENT_LOCALE 之后,数据格式也发生了变化。(是格式,不是数据本身)。在使用这种方法时,一定要小心,因为尽管日期在任何国家都是日期,但是 85 美元并不等于 85 巴西雷亚尔。另外,所有日期都采用 Month Day Year 格式,这是因为调用了 TO_CHAR 函数并把格式设置为 %B %d %Y

清单 4 显示删除 TO_CHAR 函数调用并用指定的 CLIENT_LOCALE 重新运行这个 SQL 语句的输出:


清单 4. 输出

                                     

$ export CLIENT_LOCALE=pt_br.8859-1

 

fname           (expression)         lasttransamt

 

Fred                  21/03/09               (85,43)R$                       

                        

 

总之,GLS 库让应用程序能够满足数据的文化期望,而不需要修改应用程序。通过使用特殊的数据类型、环境变量和 SQL 语句,GLS 支持动态地调整数据格式和排序次序,从而满足客户机标准。不需要针对可能使用客户机应用程序的每个国家/地区编写不同的版本。

安装

在为 IDS 制定计划之后,下一步是实际安装产品。IDS 可以在 Unix/LinuxWindows Mac OS X 上运行。可用的安装选择取决于使用的操作系统。

Unix/Linux

IDS 的安装通常分为两个步骤:

  • 从包介质(CD、磁带或下载文件)解压软件
  • 运行安装脚本

通常使用 tar xf 命令从介质中解压软件。产品应该解压到要安装它的目录位置。

IDS 产品套件包含多个产品,可以同时安装所有产品,也可以分别安装。运行 ids_install 命令,安装脚本会安装 IDS 服务器以及相同目录中的其他相关产品。installserver 命令只安装 IDS 服务器,忽略其他产品。

运行安装脚本需要根权限。

作为根用户登录之后,可以以多种方式完成安装:

  • 控制台模式(默认):这种模式使用默认的纯文本终端响应安装程序,包括接受许可协议、指定安装位置、指定安装模式、启用角色隔离和初始化演示服务器。回答这些问题并检查汇总信息之后,开始执行安装。

    安装模式选项包括典型安装和定制安装。

    可定制安装的特性包括:
    • 可扩展性特性
    • GLS
    • 备份和恢复实用程序
    • 企业复制
    • 数据装载实用程序



演示服务器初始化会创建、设置和初始化一个 IDS 实例,这个实例基于指定的配置文件或默认配置文件。

初始化命令的示例:
install_ids

  • GUI 模式:当在安装命令中指定 –gui 选项时,进入这种模式。GUI 模式与控制台模式相似,但是使用一个 Java 图形界面与安装程序交互。

    安装命令的示例:
    installserver -gui
  • 静默模式:这种模式支持非交互式安装。静默模式使用一个 .ini 文件提供响应信息,这些信息在控制台模式和 GUI 模式中是通过键盘或鼠标提供的。IDS 提供两个默认的 .ini 文件,您也可以创建自己的 .ini 文件。在交互式安装期间,在安装命令中指定 -record < filename > 选项,就可以自动地创建 .ini 文件。

    示例:
    installserver -record myresponses.ini

    要想使用自己创建的 .ini 文件,必须在安装命令中指定 -options < filename > 选项。

    示例:
    install_ids -silent -options myresponses.ini

    如果使用默认的 .ini 文件(bundle.ini server.ini),必须在安装命令中指定 –acceptlicense=yes 选项;否则,安装不会成功。

    示例:
    installserver -silent -acceptlicense=yes

在安装期间还可以指定其他选项,包括:

  • -javahome <javadir>,使用已经安装的 JRE
  • -P installLocation=<installdir>,指定不同的安装目录
  • -log <logfilename>,指定非默认的日志文件名

可以在同一个系统上同时存在 IDS 的多个版本。只需把它们安装在不同的目录中即可。环境变量 INFORMIXDIR 指向在启动 IDS 实例时应该使用的产品目录。


回页首

Windows

Windows 上,可以以图形模式或静默模式安装 IDS

如果安装介质是下载文件,那么必须按文件类型选用适当的工具,把文件解压为文件夹结构。如果安装介质是 CD,那么可以从 CD 直接启动安装过程。

通过运行 Launch.exe setup.exe 启动安装。

Launch.exe 启动 GUI 安装过程,这会带领您完成以下步骤:

  • 选择要安装的产品
  • 接受许可协议
  • 选择安装模式(典型或定制)
  • 设置 informix 用户账户和密码(如果还没有这个账户的话)
  • 选择安装目录
  • 确认汇总信息

典型或定制安装模式与前面 “Unix/Linux” 小节中描述的相似,但是还支持以下操作:

  • 指定本地 ‘informix’ 用户之外的另一个用户账户
  • 启用角色隔离
  • 创建演示服务器,选择是否初始化
  • 启动 Instance Configuration Wizard
  • 启动 ClusterIT 实用程序

要想在 Windows 上以静默模式执行安装,应该在命令行环境中使用 setup.exe 命令。与 Unix/Linux 环境中一样,静默模式在安装期间使用 .ini 文件提供响应信息。可以使用默认的 server.ini 文件,也可以创建定制的文件。

下面的安装命令示例使用默认的 server.ini 文件:
setup.exe
s f1"C:/IIF/server.ini"

在安装期间使用定制的 .ini 文件的方法是,在上面的命令中修改 –f1 选项中的文件名。

要想根据 GUI 安装期间做出的响应创建定制的 .ini 文件,必须在启动 GUI 安装之前在命令提示上运行命令 setup.exe r fl"C:/temp/mysilent.ini"

当然,可以根据自己的环境修改路径和文件名。

安装完成之后,会创建一个新的 .ini 文件,可以在以后的所有静默安装中使用它以提供相同的配置。

Windows 安装会在 $INFORMIXDIR%/logs/ 中创建一个日志文件,其中记录所有安装活动。在使用静默安装时,可以通过 –f2"<filename>" 选项修改日志文件位置。

Windows 允许使用 –multiple 选项在计算机上安装 IDS 的多个版本。


回页首

Mac OS X

Mac OS X 安装与 Unix/Linux 安装相似。它有 GUI 和无人值守(静默)两种安装方法。执行无人值守安装需要根特权。

启动 GUI 安装的方法是打开 iif 包,在出现提示时输入系统管理员密码。安装过程提示指定以下信息:

  • informix 用户账户信息(如果还没有这个账户的话)
  • 接受许可协议
  • 安装目录
  • 要安装的产品
  • 安装模式(典型或定制)
  • 角色隔离
  • 创建演示数据库服务器
  • 自动内核调优
  • 确认汇总信息

Unix/Linux 安装过程一样,定制安装模式允许选择要安装的特性。

无人值守(静默)安装与 Unix/Linux 上的静默安装相似。在 Mac OS X 上,必须使用 bundle.ini 文件,也可以根据自己的安装需求定制它。

注意:在安装之前,一定要在 .ini 文件中把 –G licenseaccepted=false 改为 true

定制 bundle.ini 文件之后,打开一个终端窗口,进入 iif 文件所在的目录,作为根用户运行以下命令:
Installer
pkg iif.11.50.FC#.macosx64.pkg target /

一定要把上面命令中的 # 符号替换为适当的数字。


回页首

保护安装路径

在安装 IDS 11.50 时,可以通过一个选项自动地保护安装路径。保护安装路径会检查安装路径中的目录是否设置了合适的所有者、组和权限。

如果在安装时选择不保护安装路径,可以在任何时候手工地设置保护。

注意:如果安装路径没有受到保护,IDS 不会初始化。

手工保护路径的步骤如下:

  1. 运行 $INFORMIXDIR/bin/onsecurity r $INFORMIXDIR 创建一个 shell 脚本。
  2. 运行 $INFORMIXDIR/tmp/secure.sh 以保护路径。

如果通过这个手工过程保护路径,系统管理员可以看到将分配给安装路径中任何目录的权限,可以对路径中不属于 IDS 的任何目录采取适当的措施。


回页首

配置

安装产品之后,下一步是配置操作系统、运行 IDS 的环境和 IDS 服务器实例本身。

在开始配置之前,您应该了解两个术语的定义:

  • IDS 实例 —— 可由一个或多个数据库使用的一组固定的操作系统资源。有时候,实例也被称为数据库服务器或数据库引擎。这组资源包括磁盘空间、处理器和内存。
  • 关系数据库 —— 组织成表的数据集合,支持快速的搜索、获取和存储。

因此,在阅读本教程余下的内容时,要记住实例、引擎和数据库服务器是同义词。

操作系统

因为配置 OS 通常是系统管理员 (SA) 的工作,您可能需要 SA 帮助完成这个任务。

IDS 附带一个称为机器说明(machine notes)的文件。这个文件位于与版本说明相同的位置(见前面的 “版本说明” 小节)。这个文件提供根据安装 IDS 的机器类型设置适当 OS 内核配置参数值的建议。可调整的配置参数直接取决于 OS 生产商。

Unix/Linux 上,要调整的最重要的内核参数是共享内存、信号量、文件和用户的数量。还可能需要调整内核中的特殊 I/O

清单 5 给出一个针对 HP-UX OS 的机器¯´明示例:


清单 5. 针对 HP-UX OS 的机器说明

                                             

On HP-UX, these entries are in /stand/system.

 

    nfile: 5000

    semmni: 3000

    semmns: 3000

    semmnu: 1400

    shmmax: 4294967296

    shmmni: 500

    shmseg: 500

 

注意:机器说明中提供的值只是根据产品测试推荐的值。如果这些值与内核中已经设置的值差异很大,那么一定要向系统管理员咨询,了解修改这些值会对系统产生什么影响。

Windows 上,最重要的配置参数是内存。必须在 boot.ini 文件中启用访问超过默认内存地址空间量的内存的功能。通过修改这个值,可以把可访问的内存从大约 2GB 提高到大约 3GB。尽管没有可调参数,但一定要注意,Windows IDS 实例中的所有数据必须存储在 NTFS 分区、物理驱动器或逻辑磁盘分区上。

环境

IDS 非常依赖运行它的环境。因此,正确地理解和设置环境变量非常重要。IDS 实例有五个主要的环境变量:

  • INFORMIXDIR —— 安装产品的目录位置的完整路径。
  • INFORMIXSERVER —— 启动的实例的名称。
  • PATH(可选) —— 为了方便,其中应该包含 $INFORMIXDIR/bin
  • ONCONFIG(可选) —— 配置文件名。
  • INFORMIXSQLHOSTS(可选) —— 指向连接信息文件。

在这五个环境变量中,只有两个是必需的;另外三个是可选的。本教程详细讨论其原因。

设置环境变量的命令和位置直接取决于使用的 OS

下面是一个使用 Unix Korn shell 的示例:
export INFORMIXDIR=/usr/informix

Windows 有多个可以设置环境变量的地方,采用的优先次序规则如下:

  • Setnet 32 应用程序中的设置
  • 运行应用程序之前命令行上的设置
  • Windows 中用户变量形式的设置
  • Windows 中系统变量形式的设置
  • 默认值

INFORMIXDIR 环境变量指向安装产品的位置。这很重要,因为该路径包含一些在 IDS 可执行程序中使用的值。如果不设置这个路径,IDS 就不知道在哪里寻找成功运行所需的某些文件。

INFORMIXSERVER 环境变量是环境在默认情况下启动的 IDS 实例的名称。这个环境变量对于试图访问 IDS 实例的每个客户机连接都很重要,无论客户机是内部的还是外部的。内部客户机是 IDS 软件附带的实用程序。外部客户机是使用 SQL 访问数据库的任何应用程序。您会问,“IDS 实例应该如何命名?” 这个问题留到后面的 “配置文件” 小节中讨论。

应该修改 PATH 环境变量,在其中包含 $INFORMIXDIR/bin。尽管这是可选的,但是非常方便。输入 oninit 比不得不输入 /usr/informix/bin/oninit(假设 IDS 产品安装在 /usr/informix)容易得多。

ONCONFIG 环境变量设置为 IDS 实例使用的配置文件名。每个实例在任何时候只使用一个配置文件。可以使用另一个配置文件,但是这需要停止软件运行,把 ONCONFIG 环境变量改为另一个文件名,然后重新启动软件。

注意:ONCONFIG 环境变量只设置为文件名, 设置为文件的路径。示例:
export ONCONFIG=onconfig.production

onconfig 文件必须 位于 $INFORMIXDIR/etc,所以不需要知道文件位置,只需知道这个目录中要使用的文件。onconfig 文件可以改名为您喜欢的任何名称;但是,标准命名约定是把它命名为 onconfig.something,把其中的 “something” 替换为有意义的单词,比如上面示例中的 “production”。如果愿意的话,也可以使用名为 onconfig 的文件。那么 ONCONFIG 环境变量就变成可选的。ONCONFIG 环境变量只对 DBA 的工作有用(例如启动和停止实例)。一般的 SQL 客户机活动不需要设置 ONCONFIG 环境变量。

INFORMIXSQLHOSTS 环境变量设置为用来提供连接信息的文件的完整路径名和文件名示例:
export INFORMIXSQLHOSTS=/work/jbohm/mysqlhosts

这个参数是可选的,如果不设置它,IDS 会在 $INFORMIXDIR/etc/sqlhosts 文件中寻找所需的信息。“包括哪些信息?” 后面的 “SQLHOSTS” 小节讨论这个问题。

一定要注意,每个客户机连接(包括内部和外部的)都需要连接信息。因此,每个客户机都要从默认文件或 INFORMIXSQLHOSTS 环境变量指定的文件中获取连接信息。

IDS 不只使用上面列出的五个环境变量。实际上,IDS 100 多个环境变量,用来控制软件的各个方面。本教程前面提到过两个 — DB_LOCALE CLIENT_LOCALE,它们控制 GLS 设置。请记住,上面列出的五个环境变量是最重要的,其中两个是必需的。

SQLHOSTS

sqlhosts 文件用来提供连接信息。它对于设置数据库非常重要,因为连接实例的每个客户机(内部或外部)都要使用它。如果设置不正确,所有客户机都无法连接数据库和获取数据。

IDS 可以在客户机本地或远程位置(分布式环境)运行。因此,要想成功地连接 IDS,客户机需要知道 IDS 实例在哪里以及如何访问它。可以把 sqlhosts 文件看作 IDS 的电话簿。一般的电话簿是人的列表,包括姓名、居住的地方(地址)以及如何联系他们(电话号码);同样,sqlhosts 文件是所有可用 IDS 实例的列表,包括实例名称、它们所在的位置(计算机的主机名或 IP 地址)以及发送请求时使用的服务端口。sqlhosts 的服务端口部分指定 IDS 接收来自客户机的 SQL 语句的端口。就像 telnet 在默认情况下使用端口 23http 使用端口 80IDS 也要使用某个端口接收请求。IDS 使用的端口号不是标准的,而是由 DBA sqlhosts 文件中配置。

sqlhosts文件的一般形式有五列,如表 3 所示:


3. SQLHOSTS 文件示例

DBSERVERNAME DBSERVERALIASES

NETTYPE

Hostname IP address

ServiceName port number

Options

HR_prod

onsoctcp

barney

1543

k=0,...

前一节提到,每个 IDS 实例都有一个名称。这个名称在 sqlhosts 文件的第一列中。实例的位置在第三列 hostname 中。IDS 监听 SQL 请求的端口号在第四列中。

可以在第二列 NETTYPE 中指定客户机是使用网络协议与 IDS 实例通信,还是使用本地协议。这直接与运行客户机的位置相关,而不是 IDS 实例的位置。

如果客户机和服务器在同一台物理机器上运行,那么可以采用以下通信方式之一:

  • 共享内存(称为进程间通信,即 ipc
  • 网络接口(套接字或 TLI
  • 本地管道(命名的或无命名的)
  • DRDADistributed Relational Database Architecture

但是,如果客户机和服务器在不同的机器上运行,那么必须依靠网络,所以可用的通信方式受到限制。在这种情况下,只能使用:

  • 网络接口(套接字或 TLI
  • DRDA

管理员通过 NETTYPE 列指定在连接第一列中指定的实例时客户机应该使用哪种通信路由。

第五列 Options 是可选的,可以用它配置各种选项。在上面的示例中,这一列的值包含 k=0。“k” 代表 keep-alive,“0” 表示在使用这个 DBSERVERNAME 连接服务器时禁用这个特性。keep-alive 特性让网络服务定期检查连接的接收端,从而确保它仍然存在。如果接收端没有及时地返回响应,网络服务就认为出问题了,因此中断连接并释放资源。keep-alive 特性在默认情况下是打开的,通常应该打开。

4 给出另一个示例:


4. SQLHOSTS 文件示例

DBSERVERNAME DBSERVERALIASES

NETTYPE

Hostname IP address

ServiceName port number

Options

HR_prod

onsoctcp

192.168.12.234

1543

b=8192

Acct_devel

onipcshm

dino

dummyvalue

 

对于上面示例中的第一行,如果客户机的 INFORMIXSERVER 环境变量设置为 HR_prod,那么 onsoctcp 让客户机使用 TCP 协议的套接字实现进行网络通信。客户机把所有 SQL 请求发送到 IP 地址为 192.168.12.234 的机器的端口 1543hostname 字段可以使用机器的 IP 地址,也可以使用主机名,只要能够通过适当的系统调用把主机名解析为 IP 地址即可。选项为 b=8192,这让客户机在与服务器通信时使用 8192 字节的缓冲区大小。默认的连接使用 4096 字节的缓冲区大小。

如果客户机的 INFORMIXSERVER 环境变量设置为 Acct_devel,那么 onipcshm 告诉客户机服务器在本地,应该使用称为共享内存连接的特殊机制。IDS 定义和维护的这种特殊机制用于本地连接,能够使用一块全局的 Unix 共享内存连接实例。客户机连接这块共享内存,把它的 SQL 请求写到其中,从其中读取结果集。正如前面提到的,只有当客户机应用程序和 IDS 实例在同一台机器上运行时,才能使用这种机制。

ServiceName 列可以使用端口号或服务名。如果使用服务名,值必须能够根据 /etc/servicesUnix/Linux/Mac)或 system32/drivers/etc/servicesWindows)文件解析为有效的端口号。

配置文件

在配置时,常常同时打开 ONCONFIG 文件和 sqlhosts 文件,因为一些字段必须是匹配的。正如前面提到的,每个实例有一个名称,这个名称在 sqlhosts 文件的第一列中使用。实例怎么知道自己的名称呢?这是在 IDS 配置文件中设置的众多参数之一。在安装 IDS 时,在安装路径的 etc 子目录中提供一个名为 onconfig.std 的文件。这个文件应该作为创建实际配置文件的模板。把 nfig.std 文件复制为另一个文件(例如 onconfig.prod)。尽管文件名的 onconfig 部分不是必需的,但这是标准做法。复制文件之后,应该把 ONCONFIG 环境变量设置为指向这个文件。

注意:ONCONFIG 环境变量只是 文件名,不包含文件位置,因为配置文件必须放在 $INFORMIXDIR/etc(在 Windows 上是 %INFORMIXDIR%/etc)中。

配置文件看起来有点吓人,其中有超过 180 个配置参数,加上注释长度超过 1100 行。但是,不必担心;利用大量注释,再运用一些经验,就可以理解配置文件。实际上,在超过 180 个配置参数中,只有九个是设置和运行 IDS 实例所需的。其他参数用于性能、可扩展性和特性支持。

我们先看看这九个参数,然后讨论几个比较有意思的参数。

运行实例所需的九个配置参数是:

  • ROOTNAME
  • ROOTPATH
  • ROOTOFFSET
  • ROOTSIZE
  • MSGPATH
  • CONSOLE
  • DBSERVERNAME
  • DBSERVERALIASES
  • SERVERNUM

前四个参数处理磁盘空间。不必事前配置实例使用的所有磁盘空间。可以在需要时增加更多磁盘空间;但是,在最初需要有一定量的磁盘空间。配置文件为磁盘空间指定名称 (ROOTNAME)、位置 (ROOTPATH)、启始位置 (ROOTOFFSET) 和大小 (ROOTSIZE)。在第一次启动使用这个配置文件的 IDS 实例时,会对定义的空间进行格式化和初始化。因此,必须确保没有别的程序使用同一磁盘空间。ROOTPATH 可以指向现有的文件或原始设备。

第五个和第六个参数处理日志消息。因为 IDS 实例在后台运行,它需要在某个位置写信息性消息、警告和错误消息。MSGPATH 定义一个文件的路径和文件名,消息会写到这个文件中。如果使用控制台屏幕的话,可以使用 CONSOLE 向控制台屏幕发送特殊消息。因为消息会同时发送到这两个位置,标准做法是把 CONSOLE 发送到 /dev/null

本教程前面提到过第七个和第八个参数。每个 IDS 实例都有一个名称 (DBSERVERNAME)如果需要不同类型的连接,它可以有多个别名 (DBSERVERALIASES)。请这样考虑:假设您出生时起的名字是 Jeffrey,但是您可能还会有其他名字(别名),比如 Jeff。对于不认识您的人,可以使用 Jeffrey 这个名字;但是,您的朋友叫您 Jeff。您听到这两个名字时都会做出反应,但是根据听到的名字不同,反应方式不一样。IDS 也是如此 — 它只能有一个名称,但是可以有许多别名。在 SQLHOSTS 文件中,必须在单独的行上列出名称和每个别名。请记住,SQLHOSTS 文件根据使用的名称或别名(SQLHOSTS 文件中的第一列)告诉客户机如何连接实例。

第九个参数 (SERVERNUM) 是一个零到 255 的整数,它对于在相同机器上运行的每个 IDS 实例是惟一。简单地说,它用于帮助生成 UNIX 共享内存所需的一个值。因为在相同机器上可以启动多个 IDS 实例,SERVERNUM 指定的值对于每个实例必须是不同的,从而帮助 IDS 计算出一个提供给 UNIX 的惟一数字。

下面简要介绍其他几个有意思的参数:

  • PHYSFILE,帮助确定物理日志的大小
  • LOGFILES LOGSIZE,帮助配置逻辑日志
  • ADMIN_MODE_USERS,指定当实例处于 Administrative 模式时哪些用户可以连接;用户 informix 总是可以连接
  • DBCREATE_PERMISSION,指定可以运行 CREATE DATABASE SQL 语句的用户
  • BUFFERPOOL,配置缓冲区池的大小和调优参数

尽管配置文件很大,但是把它分解成片段有助于您理解它。请记住,设置和运行 IDS 实例并不需要了解配置文件中的所有参数。

注意:除了少数例外情况,只在启动时读取 onconfig 文件;对 onconfig 文件直接做的任何修改要到停止并重新启动实例之后才会生效。可以通过 onmode 命令动态地修改一些 onconfig 参数(本教程后面讨论这个命令)。

配置反射

注意:既然已经学习了配置的三个部分 — 环境变量、sqlhosts 文件和 onconfig 文件,我们来谈谈这三个部分如何相互配合,让客户机连接能够正常工作。

下面是一个示例:

  • 环境变量:

INFORMIXSERVER=HR_Prod

  •  
  • SQLHOSTS 文件:


5. SQLHOSTS 文件示例

DBSERVERNAME DBSERVERALIASES

NETTYPE

Hostname IP address

ServiceName port number

Options

HR_prod

onsoctcp

barney

1543

 

HR_Devel

onipcshm

barney

dummyplaceholder

 

 

  • onconfig 文件:

DBSERVERNAME      HR_Prod
DBSERVERALIASES   HR_Devel

  •  

注意,这三个部分中都有相同的 “名称” (HR_Prod)onconfig 文件告诉实例它的名称是什么。sqlhosts 文件指出在哪里可以找到使用这个名称的实例。客户机通过环境变量指定它要访问的实例。

因此,当客户机开始运行时,它获取 INFORMIXSERVER 环境变量的值,在 sqlhosts 文件中搜索它,找到 SQL 请求应该发送到的目标位置,然后发送请求。在另一端,DBA onconfig 文件中指定实例的名称,当实例启动时,它在 sqlhosts 文件中搜索自己,查明它应该对哪个服务名(端口号)监听请求。

启动

在结束本教程之前,我想确认您掌握了如何完成配置和运行 IDS

到目前为止完成的工作包括:

  • 为安装制定计划
  • 根据计划,安装需要的产品
  • 配置产品的实例,设置环境、sqlhosts 文件和 onconfig 文件
  • 确保 ROOTPATH 指向的磁盘空间存在

现在该做最后的工作了。本节讨论如何启动和停止 IDS 实例。

oninit

IDS 实例仅仅是一组由数据库使用的 OS 资源,需要有办法在必要时分配和释放这些资源。使用的工具是 oninit onmode 命令。尽管这些命令在 Windows 上也是有效的,但是因为 IDS 实例作为服务运行,更好的方法是启动和停止服务,或使用 starts 命令帮助启动服务。

在讨论这个软件的启动之前,我们先考虑另外一个问题。IDS 实例可以处于几个状态。表 6 列出一些状态和它们的含义:


6. IDS 状态

状态

说明

Offline

实例停止;软件没有在运行。

Fast-Recovery

实例正在启动,正在从停止状态进入一个一致的状态。

Quiescent

实例已经启动,但是用户不能连接;不能运行 SQL

Administrative

实例已经启动;只有 Admin 用户可以连接并运行 SQL。也称为 single-user 模式。

On-Line

正常运行状态;所有用户都可以连接并运行 SQL

Shutting-down

实例正在停止;用户不能连接;不能运行 SQL

oninit 命令只用于启动实例。请把实例想成汽车。在发动汽车时,需要转动车钥匙;如果汽车处于熄火之外的任何状态,转动车钥匙只能制造点噪音。IDS 实例也是如此。oninit 命令只能在实例处于停止(offline)状态时使用。如果实例处于任何其他状态,那么执行 oninit 命令完全没作用。这么做没有什么害处,但是也没有什么好处。

oninit 命令提供一些选项,见表 7


7. oninit 选项

选项

说明

-i

初始化磁盘空间。这有点像硬盘格式化,只应该在第一次启动实例时使用。

-y

对所有问题自动地回答 “yes”

-j

Administrative 模式启动实例。也称为 single-user 模式。

-v

详细模式;在启动时向 stdout 输出更多消息。

-s

quiescent 模式启动实例。

还有一些用于特殊特性的选项。


onmode

onmode 命令用于停止实例和其他许多工作。

onmode 命令可以改变实例的状态、动态地修改 onconfig 文件中的一些参数、增加和释放内存、配置 B-tree 扫描器、配置 HDR Mach11 特性、实施检查点等。

本教程只讨论其中两个主题:改变实例的状态和动态地修改 onconfig 文件参数。

在使用 onmode 命令改变实例的状态时,使用以下选项:


8. onmode 选项

选项

说明

-m

让实例从 single-user quiescent 状态转到 on-line 状态。

-s

执行平稳 关机,让实例从 single-user on-line 状态转到 quiescent 状态。

-j

只对非管理员用户执行立即 关机,让实例从 quiescent on-line 状态转到 single-user 状态。

-u

执行立即 关机,让实例从 single-user on-line 状态转到 quiescent 状态。

-k

执行立即 关机,让实例从任何其他状态转到 off-line 状态。

-y

对所有问题自动地回答 “yes”

正如上表中的斜体字 所示,IDS 有两种关机形式:平稳(graceful 关机和立即 关机。

平稳关机不允许任何新连接,但是允许当前连接的用户继续操作,直到他们自己断开连接。当最后一个用户断开连接时,实例变成 onmode 命令选项指定的状态。

立即关机停止数据库上的所有活动,立即让实例转为 onmode 命令选项指定的状态。

图 1 给出运行 oninit onmode 命令的示例。在每个命令之间,运行 onstat - 显示实例的状态。消息 “Shared memory not initialized for INFORMIXSERVER 'xxx'” 意味着这个实例没有运行。


1. 使用 oninit onmode 命令

onmode -wf/-wm

正如前面提到的,onmode 命令也可以用于其他操作,包括动态地修改一些 onconfig 参数。这需要使用 onmode wf onmode wm 命令。“f” 代表文件,“m” 代表内存。因此,onmode wf 命令修改内存中的当前设置并修改 onconfig 文件中的值。onmode wm 命令只修改内存中的当前设置。

注意: IDS 11.50 开始,只能动态地修改一部分 onconfig 参数。

语法是 onmode wf <onconfig parameter>=<value> onmode wm <onconfig parameter>=<value>

示例:

onmode -wf AUTO_CKPTS=0

 

onmode -wm RESIDENT=1

 

如果试图修改 onmode wf/wm 命令不支持的值,会看到下面的错误:
Configuration Parameter to be changed is not valid or not supported with this option.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为在Linux环境中安装Informix,您需要按照以下步骤进行操作: 1. 首先,您需要在informix用户下配置环境变量。请切换到informix用户,并进入Informix安装路径目录。 ``` su informix cd /home/informix ``` 2. 配置环境变量。使用vi编辑器打开文件~/.bash_profile,并添加以下内容: ``` export INFORMIXDIR=/home/informix安装路径) export INFORMIXSERVER=demo (服务名) export ONCONFIG=onconfig.demo (onconfig_服务名) export PATH=/home/informix/bin:$PATH (安装路径目录下的bin) ``` 3. 保存并退出文件。使用命令:wq 4. 使配置的环境变量生效。使用命令:source ~/.bash_profile 5. 将Informix安装包放入Linux中,并解压安装。使用tar命令解压安装包,并执行安装文件。 ``` tar -xvf iif.11.50.UC4E.Linux-RHEL4.tar ./installserver ``` 在CentOS 8.0、CentOS 7.4 或 CentOS 6.8 的Linux版本上进行环境搭建。Informix安装包可以是11.5或12.1版本。您可以随意选择一个Informix服务名,比如"demo_on"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [informix安装步骤](https://blog.csdn.net/xcyan1995/article/details/110867919)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值