informix5.x 以后 ,INFORMIX 公司推出新一代数据库引擎
ONLINE DYNAMIC SERVER
动态服务,一般我们简称 ONLINE7.X
ONLINE
是一个关系数据管理 (RDBMS) 它的任务是提供一个存
储、检索、修改和删除数据的环境 , 它的目标就是使具有多个
物理 CPU 和大容量内存的计算机创建高性能和高稳定性的操作
环境 , 所以 ONLINE7.X 广泛运用于银行、保险、电信、邮政等对
于速度和安全性较高的部门。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  INFORMIX-ONLINE 7.3 SCO OpenServer 5.0.X 系统上的
安装和配置。

一. Informix7.30 的安装

1. 建立 infomix 组和 informix 用户

1) root 用户登录

2) 使用 scoadmin 系统管理程序里面的 Account Manager
立一个组名为" informix , 用户名为" infomix "的用户 ,
"Home Directory"
缺省为 "/usr/informix", 不必修改。

2. 产品的安装

1) informix 用户登录系统 , 编辑 .profile 所需的环境变
:

INFORMIXDIR=/usr/informix

INFORMIXSERVER= 服务器名 ( 例如 post)

LD_LIBRARY=$INFORMIX/lib:$INFORMIXDIR/lib/esql

TERMCAP=$INFORMIXDIR/etc/termcap

CLIENT_LOCALE=zn_cn.gb

DB_LOCALE=zn_cn.gb

SERVER_LOCALE=zn_cn.gb

PATH=$INFORMIX/bin:$INFORMIX/lib:$PATH

export INFORMIXDIR INFORMIXSERVER LD_LIBRARY TERMCAP

export CLIENT_LOCALE DB_LOCALE SERVER_LOCALE PATH

2) 退出 informix 用户重新登录 , 使上述设置的环境变量生效。

3) 安装 INFORMIX-SQL INFORMIX-4GL INFORMIX-IDS7.3,
请严格按以上步骤安装 ( 否则 ONLINE 启动不了 , 而且报错也是莫名
其妙 ,"CAN'T FIND MESSAGE FILE AND DBLANG")

4) root 用户登录并插入 SQL 光盘

# mount -o lower /dev/cd0 /mnt

# cd /usr/informix

# tar xvf /mnt/sql.tar

# ./installsql

输入许可证提供的序列号,如: INF#Xxxxxxx

输入许可证提供的 KEY :如 AAABBB

注意必须是大写字母

# unmount /mnt

插入 4GL 光盘

# mount -o lower /dev/cd0 /mnt

# tar xvf /mnt/4gl.tar

# ./install4gl

输入许可证提供的序列号,如: INF#Xxxxxxx

输入许可证提供的 KEY :如 AAABBB

注意必须是大写字母

# unmount /mnt

插入 IDS7.30 光盘

# mount -o lower /dev/cd0 /mnt

# cpio -icvdumBI</mnt/ids.cpio

# ./installserver

输入许可证提供的序列号,如: INF#Xxxxxxx

输入许可证提供的 KEY :如 AAABBB

注意必须是大写字母

# unmount /mnt

至此安装完毕。

3 .准备 Informix 初始化环境。

1 编辑 /etc/hosts 文件,登记网络各机器的名字及网络地址

例如:

IP 地址 主机名

142.73.111.1 (本机) informix_server1

142.73.111.49 informix_clIEnt1

2 修改 /etc/services ,增加 informix 服务端口名

例如:

online_service 8000/tcp #informix

其中 ,online_service informix 服务名 ,8000 为端口号 ,tcp
为传输协议 , 该端口号必须唯一 , 如果和其它端口号有冲突 ,
可以修改。

3) 编辑 $INFORMIXDIR/etc/sqlhosts 文件

post onipcshm informix_server1 sqlexec

tcp ontlitcp informix_server1 online_service

第一行 post INFORMIX-ONLINE server 名, onlipcshm 是共享
内存方式连接(只限本地), informix_server1 是本地主机
(hostname),sqlexec 是服务名。

第二行 tcp 是增加的一个数据库服务器别名, ontlitcp 是使用
传输层 TCP/IP (本地或远程)访问数据库, online_service
2) /etc/services 中的 online_service

4 .准备数据库空间

   online 允许使用两种不同的磁盘空间类型:原始的(生设备)
磁盘空间和处理过的(熟设备)文件系统,使用处理过的文件
dbspace ,其性能不如原始空间。 使用处理过的文件不能利
DMA 功能(既直接内存访问), 将数据从共享内存直接传递
到磁盘 , 所以 , 为了充分发挥 ONLINE 的能力 , 建议使用原始空间。

1 )使用原始磁盘空间做 dbspaces

   原始磁盘空间的分配必须在安装 SCO OpenServer 5 操作系统
时完成。具体做法是:安装操作系统划分磁盘空间时,首先
计算出 Unix 系统所需要的磁盘空间,然后剩余的空间全部用
INFORMIX 数据库原始空间,将这部分作一个或多个磁盘分
区,如果磁盘空间有多个磁盘,建议做多个,可以单独分配
空间给物理日志空间、 逻辑日志空间及 tmp 空间以提高系统
的性能。

具体做法如:
分区名为 dbs (在安装系统时分的磁盘分区),将该分区设置
为裸设备( NON FS ),在 /dev 可以找到 dbs 的设备名 /dev/dbs
dbs 的属主和属组改为 “infomix” ,权限改为 "660", 该分
区即为 online 要求的原始空间, 有关 Online 原始磁盘空间的
信息可用命令 # divvy /dev/dbs 查看,同理, 用此方法可以
建立 dbs1 dbs2 等原始磁盘空间。

2 )使用处理过的文件做 dbspaces

由于在安装系统时没有分多个磁盘分区,可以用现有的磁盘空
间的文件系统 .

下面在 /dev/root 文件系统下创建 3 dbspaces, 分别为 workdbs
(
业务数据库 ) logdbs( 逻辑日志、物理日志 ) tmpdbs(tmp
据库 )

# cd

# >workdbs logdbs tmpdbs # 建立文件

# chown informix:informix workdbs # 改变属主和属组

# chown informix:informix logdbs

# chown informix:informix tmpdbs

# chmod 660 workdbs # 将权限改为 660

# chmod 660 logdbs

# chmod 660 tmpdbs

5. 修改 SCOUNIX5.05 内核参数

对于 SCO OpenServer 5 平台 ,INFORMIX-ONLINE7.30 需要调整下列
核心参数值 :( 参照 /usr/informix/release/en_us/0333 下的 IDS_7.3 文件 )

SHMMAX:409600000

SHMALL:512

SHMMNI:8192

SHMSEG:6

SEMMNI:8192

SEMMNS:8192

SEMMAP:8292

SEMMNU:100

SEMMSL:25

  具体做法:从 root 注册登录,运行 scoadmin 在菜单中逐层选择
Hardware/Kernel Manager
,然后选择 Tune Parameters ,根据
以上值设置核心参数,也可以直接修改 /etc/conf/cf.d/mtune
这个文件 , 注意修改前做一个拷贝 , 设置完重连核心,退出并重
新启动 UNIX

二.初始化 informix

方法一:配置 ONCONFIG 文件 (onconfig)

$ cd /usr/informix/etc( 配置文件所在目录 )

$ cp onconfig.std onconfig( 从标准配置文件中拷贝一份 ,
作为配置自己系统的基础 )

vi 编辑器修改 onconfig 文件中的值,由于文件中的参数多 ,
所以主要把重要的参数进行说明:

ROOTNAME=rootdbs # 这里取缺省 rootdbs

ROOTPATH=/dev/dbs #
rootdbs
的第一个 chunk 所在原始设备全路径名, dbs 为我们在
前面配置的原始 dbspaces

ROOTSIZE=1000000 (K) # root dbspace
第一个 Chunk 的大小,这些空间初始创建逻辑日志、物理日志、
sysmaster 数据库,当初始完毕后, 就应尽快将日志和临时
表从 rootdbs 中移到其它原始的 dbspaces 或处理过的文件中。

DBSERVER NAME(server name)=post
# Online
实例必须具有的唯一名, 这个名字也是环境变量
$INFORMIXSERVER
的值 , 还应当作为 $INFORMIXDIR/etc/sqlhosts
中的第一个字段。

DBSERVERALIASES(server aliases)=tcp
#Online
实例的别名,在网上是要唯一的,它是网络访问数据库
必须的,在前面配置 $INFORMIXDIR/etc/sqlhosts 中要用到它。

RESIDENT(Forced Residency)=1
#
该参数决定 Online 实例共享内存的常驻区是否允许从操作系统
的共享内存中交换出来,如果服务器的物理内存足够大( 512MB
以上),建议设置为 1 Y ),否则为 0 N )。

LOCKS Max of Locks =100000
#
该参数对共享内存的大小有影响 , 通常对于较忙的实例我们将它
设置为 100000

BUFFERS Max of buffers =100000
#
这些缓冲区是共享内存常驻区唯一的最大消耗者,对实例共享内
存的影响最大。

MULTIPROCESSOR=1
#
该参数打开或关闭多处理器封锁机制,如果系统是三个 CPU 以上,
将它设为 1(Y) ,如果是单 CPU 或双 CUP 建议设为 0(N)

NETTYPE=ipcshm,1,80,CUP # 共享内存数据库服务器通讯方式

NETTYPE=tlitcp,1,80,NET #tcp 数据库服务器通讯方式

配置 ONLINE 的参数很多,以上是只是其中最重要的一部分。

方法二:图形界面

  以 informix 用户登录,运行 onmonitor 命令,依次选择 Parameters,
Initialize
进入磁盘初始化菜单 , 配置的参数和方法一相同 , 建议第
一次配置 ONLINE 的用户用此方法。

  配置完 ONLINE 的参数,现在可以启动并初始化磁盘空间,以 informix
用户登录,执行 $ oninit -iy 注意 : 执行此命令后 , 所有在 Online
盘空间上的数据将被破坏, 也可用图形界面 onmonitor 命令初始化,
总之,这两种命令只能在第一次初始化 ONLINE 磁盘空间使用,提醒各
位读者谨慎使用 , 以后在启动数据库只需用 oninit 命令即可, 执行
$ onstat -
命令可以简单查看 online 是否正常启动 , 如果正常则显示
如下类似的提示信息 :

Informix Dynamic Server Version 7.30.UC2 -- On-Line -- Up 2
days 21:14:58 -- 163840 Kbytes

三. Informix-online7.30 的日常管理及维护

1 自动启动关闭 Informix-online 数据库

启动 ONLINE 的命令是: oninit

  但为了便于系统管理员的管理,将启动命令建立在
/etc/rc2.d
目录下 , 名字为 S90informix,

就象 Dos 中的批处理文件一样,当启动 SCO OpenServer 5
操作系统时 ,online 随之启动。

/etc/rc2.d/ 创建文件 S90informix, 内容如下 :

INFORMIXDIR=/usr/informix

INFORMIXSERVER=post

export INFORMIXDIR INFORMIXSERVER

$INFORMIXDIR/bin/oninit

修改文件属性使它用执行权利 :
# chmod +x /etc/rc2.d/S90informix

自动关闭 INFORMIX-ONLINE

关闭 ONLINE 的命令为 : onmode –ky

将关闭命令建立在 /etc/rc0.d 目录下 , 编辑文件名为
K01informix,
内容如下 :

INFORMIXDIR=/usr/informix

INFORMIXSERVER=post

export INFORMIXDIR INFORMIXSERVER

$INFORMIXDIR/bin/onmode -ky

修改文件属性使它用执行权利 :
#chmod +x /etc/rc2.d/K01informix

2. INFORMIX ONLINE 的常见工作模式

Off-line: 实例没有运行 , 没有分配或初始化共享内存。

QuIEscent: 实例已经完全启动,但不允许用户访问数据
库,有些管理任务,像增加删除 dbspaces 、逻辑日志,
必须在实例处于 Quiescent 状态时才能完成。

On-line: 实例完全启动,并且对所有有权访问它的用户
都是可用的。

Shutdown: 当实例从 On-line 状态到 Quiescent 时的一种过
渡状态,所有用户线索仍然可以继续完成他们的工作直到
正常结束,但这时所有新的数据库连接都会被拒绝。

下面介绍各个模式相互转换的命令:

oninit( 将一个配置好的实例从 Off-line 状态一直变为
On-line
状态 )

oninit -s (将一个配置好的实例从 Off-line 状态一直变
Quiescent 状态,现有的用户线索可以继续直到正常结
束,但所有新的数据库请求连接将被拒绝)

onmode –sy( 将实例从 On-line 状态经过 shutdown)

onmode –uy (立即终止现有的实例,使之成为 Quiescent
所有的用户线索和数据库请求都将被中断)

onmode –ky (实例从 on-line Quiescent 变为 off-line 状态)

介绍完 ONLINE 的几种常用工作模式后,下面就可以为 online
加工作区、逻辑日志、物理日志、临时文件数据库空间了。

3 .管理 Informix Online 磁盘空间

   Online 初始化时,自动建立了一个名为 rootdbs dbspace
rootdbs 存储 Online 的管理信息,包括物理日志、逻辑日
志等。当你建立一个数据库时,如果不指定 dbspace ,作为
缺省,该库建立在 rootdbs 中。所以,如果你想将库建立在
某个 dbspace 中,则必须指定 dbspace ,例如:
dbimport
数据库名 -d dbspace

  注意:在建 dbspace 时,要指定原始磁盘设备名路径,所需
磁盘空间大小, 以及该块磁盘空间在原始磁盘设备中的偏
移量,偏移量非常关键,要小心设置,否则容易造成 chunk
块之间空间上的重叠与覆盖。

1 onspaces 命令建立 dbspace

onspaces -c -d dbspaces -p 磁盘设备 -o 偏移量 -s 空间大小

其中: -c 表示建立新的 dbspace

-d dbspace 名字

-p 原始磁盘设备全路径名,如 /dev/dbs

-o 偏移量,以 K 字节为单位

-s dbspace 中第一个 chunk 的尺寸,以 K 字节为单位

例如: 假设原始磁盘设备 /dev/dbs <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> 1000M 空间 , 其中 rootdbs 100M
tmpdbs
100M workdbs 800M

$ onspaces -c -d tmpdbs -p /dev/dbs -o 100000 -s 100000

$ onspaces -c -d workdbs -p /dev/dbs -o 200000 -s 8000000


2)
onspaces 命令建立物理日志、逻辑日志空间

物理日志保存数据被修改前的映象,物理日志的位置和大小可以改变 ,
使用 onparams 命令可以改变日志的位置和大小, 必须在 ONLINDE
QuIEscent
(静态方式)后执行。

$ onparams   -p -s 大小 -d dbspace

大小是以 K 为单位 , 建议物理日志大小为 100M

  逻辑日志是保存数据在修改后的映象, ONLINE 初始化时,逻辑日志个数
最少为 3 个,所以在初始化前可以给逻辑日志个数为 3 ,大小可以少一点
例如 1000K ,等初始化完后,在添加新的逻辑日志,最后再将前面的 3
逻辑日志删除,总逻辑日志最好在 500M 左右。具体做法如下:

informix 用户登录,

$ onmode -uy ( Online 切换到 Quiescent 状态 )

$ onparams -a -d logdbs -s 100000

其中 logdbs dbspaces -s 100000 表示增加了 100M 空间。

  再连续执行 4 遍上述命令,这样新的逻辑日志空间总共为 500M , 可以用
onstat -l
查看逻辑日志情况,接下来就要删除前面 3 个旧逻辑日志,
删除前做一个 0 级备份

# ontape -s -L 0

$ onparams -d -l logid

logid 为逻辑日志 id 号,可以用 onstat -l 查看,然后就可根据 id 号删
3 个旧逻辑日志。

四. Informix Online 数据库备份及恢复。

1. 使用 ontape 工具备份

1.)ontape 有三个备份级别

0 实例中所用的页都被写到磁带上

1 备份从 0 级备份以后发生变化的数据

2 备份从 1 级备份以后发生变化的数据

$ ontape -s -L 0

执行该命令做 0 级备份,建议 : 如果允许可以每天在业务系统结束工作
后做一次 0 级备份,做完备份后管理好备份磁带,做好标记。

2.) 逻辑日志的备份

仅仅做 0 级备份还不够 , 还要做逻辑日志备份才能完整的恢复数据 ,
建议每天业务开始时 , 执行连续备份逻辑日志 (ontape -c), 业务结
束前停止 ontape -c , 换磁带 , 做一次 0 级备份 (ontape -s -L 0),
磁带再执行 ontape -c

3) 系统恢复

当系统出现错误 , 或你想把系统恢复到某一时间点的数据时 , 必须利
0(1,2) 备份带和逻辑日志备份来恢复系统 , 命令如下 :

# ontape -r

2. 使用 dbexport 命令备份数据

尽管 ontape 是一个安全性很高的备份工具 , 但操作比较烦琐 , 必须每天
要手动备份及换磁带 , 所以编写一个自动备份程序 , 这样大大解放了系
统管理员的工作。

具体实现方法如下:

/usr/backup 目录下用 vi 编写 backup.sh 文件 , 将文件的权限改为 "664",
内容如下 :

INFORMIXDIR=/usr/informix ( 设置 online 路径 )

PATH=$PATH:/usr/informix/bin

INFORMIXSERVER=post

export INFORMIXDIR INFORMIXSERVER PATH

wk=`date +20%y%m%d` # 设置变量 wk 代表当天日期例如 20010101

dir=/usr/backup/$wk # 设置数据存放目录

if test ! -d $dir # 检验目录是否存在

then

mkdir $dir

else

rm -r $dir/*

fi

# 由于使用 dbexport 命令时 , 所有正在使用数据库操作的用户必须退出 ,
所以用 fuser -k 命令先将所有用户的进程杀掉 , 然后再重新启动 Online.

fuser -k 用户注册目录 ( 例如 /u/motor)

sleep 10

onmode –uy # 关闭 online

sleep 10

onmode –m # 启动 online

sleep 10

cd /usr/backup

dbexport 数据库名 1 -o $dir # 将数据库卸到当天目录中

dbexport 数据库名 2 -o $dir

rm sjbf*

tar cvf sjbf.tar $dir # 将目录打包

compress -H sjbf.tar # 压缩打包文件

# 为了保证数据的安全性 , 将数据传送到另一台主机

da=`date +%m%d` # 创建传送文件名

da1=`date +%H`

da=$da.$da1.Z

ftp -nv 142.73.111.10<
user backup backup #10
主机上建立用户 backup 口令是 backup

put sjbf.tar.Z $da

quit

!

rm -r $dir/*

cd /usr/backup

mv sjbf.tar.Z $dir # 将压缩文件移到目录中

编辑 backup.cron 文件 , 内容如下

30 1 * * 1-6 /usr/backup/backup.sh

  在root用户下执行 crontab backup.cron ,就可以让系统自动 ,
由于白天业务比较忙,所以将备份时间定在每星期一到六凌晨
1:30,
具体crontab命令的用法请参考SCO OpenServer用户手册。