配置数据库服务器

  通过本文的学习, 您将能够:

  • 为服务器磁盘存储创建cooked file或准备raw devices
  • 设置管理数据库服务器所需的环境变量
  • 解释配置文件的用途
  • 识别为启动一个简单数据库服务器所需的基本配置参数的设置
  • 修改onconfig配置文件
  • 使数据库服务器联机

1. 配置服务器

  配置要求执行以下任务:

  1. 为数据存储准备空间(分配chunk)。

  2. 设置适当的环境变量。

  3. 设置sqlhosts 文件。

  4. 使用 $SINODBMSDIR/etc 目录下的配置文件配置系统。

2. 为数据存储准备空间

  SinoDB数据库提供了两个用于数据存储的选项:

  • raw device (裸设备) 是使用 UNIX 实用程序创建的字符专用设备,它将设备路径名与设备驱动器关联起来。这个驱动器是操作系统的一部分,它将 I/O 请求转换为磁盘硬件指令;它是独立于 UNIX 文件系统的。

  • cooked file(熟文件) 是操作系统控制的常规文件。当数据库服务器控制文件的内容时,它必须向操作系统提出 I/O 请求。

2.1 准备raw device

步骤如下:

  1. <Create a new (or identify a free) partition on a disk>
  2. chmod 660 device_name
  3. chgrp sinodbms device_name
  4. chown sinodbms device_name

  关于如何要创建raw device,请参阅UNIX 系统的系统管理手册。
  如果要对现有的磁盘进行重新分区,请在在卸载和重新分区前将磁盘上的数据先进行存档。以 KB 为单位记录每个raw device的大小。为服务器分配chunk时,需要使用此信息。

  若准备在数据库服务器中使用raw device,请使用上面步骤 2 到 4 中所示的命令进行权限、所有者和组的设置。

  不要执行 mount 命令,该命令将装载设备并指示操作系统拦截设备的输入和输出。此外,请勿使用 mkfs 命令,该命令会在设备上构建文件系统。如果在SinoDB服务器当前使用的原始设备上运行 mkfs,则数据库信息可能会被销毁。

  当使用raw device做chunk时,请使用链接link为设备分配一个更具有描述性的名字(例如,/dev/ifmx-raw-001 )。这使得我们更容易记住每个chunk所使用的设备名称。它还允许您在磁盘设备发生故障时重新定义指向新设备的链接。

示例:
  这是一个准备将一个raw device用作动态服务器chunk的会话示例。

$ ln /dev/rxy0f /dev/ifmx-raw-001
<or: ln -s /dev/rxy0f /dev/ifmx-raw-001>
$ chmod 660 /dev/ifmx-raw-001
$ chgrp sinodbms /dev/ifmx-raw-001
$ chown sinodbms /dev/ifmx-raw-001
$ ls -lg /dev/ifmx-raw-001

crw-rw---- 2 sinodbms sinodbms 9, 5 Jan 1 12:00 /dev/ifmx-raw-001

  与cooked file不同,raw device的权限字段在第一个位置包括一个c ,专用于字符专用设备。此外,主要和次要设备号在文件长度域进行显示。

2.2 创建cooked file

步骤如下:

  1. touch filename
  2. chmod 660 filename
  3. chgrp sinodbms filename
  4. chown sinodbms filename

  不建议使用 UNIX 文件做chunk,尤其是当您的系统可以利用内核AIO的特性时。然而,cooked file很容易设置,无需查验磁盘设备的可用性。如果想要使用 UNIX(cooked)file做chunk,就必须设置一个用于chunk的文件。使用上面步骤 1 中所示的命令,用一个cooked file的名字替换 filename 。然后使用步骤 2 到 4 中所示的命令,更改文件的权限和所有者。

示例:

$ touch /dev/ifmx-cook-001
$ chmod 660 /dev/ifmx-cook-001
$ chgrp sinodbms /dev/ifmx-cook-001
$ chown sinodbms /dev/ifmx-cook-001
$ ls -lg /dev/ifmx-cook-001
-rw-rw---- 1 sinodbms sinodbms 0 Jan 1 12:00 /dev/ifmx-cook-001

  在chunk初始化之前,cooked file组名之后的长度字段值会显示为0

  先不需要在这一时刻为文件分配空间。当给服务器分配chunk且指定要使用的chunk的大小时,服务器就会通过增加所指定的cooked file的大小来为chunk分配空间。

注意:
  请确保在有足够空间的文件系统内为要使用的chunk创建cooked file。如果文件系统没有足够可用空间,将会收到报错信息,chunk也不会被添加成功。在 UNIX 文件系统中检查可用空间的常用方法是使用 df 命令。请查阅 UNIX 手册了解有关此命令的详细信息。尽量为文件选择一个可以很好地描述其用途的名字(例如 chunk1 或者 chunk2 )。

3. 设置环境变量

  在初始化服务器之前设置以下环境变量:

参数 说明
SINODBMSDIR 设置为SinoDB数据库产品所安装的目录(例如,/usr/sinodbms)
PATH 必须包含 $SINODBMSDIR/bin
SINODBMSSERVER 设置为配置参数中的DBSERVERNAME或 DBSERVERALIASES的值

  初始化服务器之前,需确保环境变量中包括上面列出的变量。在 UNIX 中使用 env 命令来检查当前的环境变量设置。

  这里是一个设置这些环境变量的示例脚本:

export SINODBMSDIR=/home/sinodbms/sinodb
export PATH=$PATH/$SINODBMSDIR/bin
export SINODBMSSERVER=myserver

4. sqlhost文件

#服务器名 连接类型 主机名或IP地址  服务名或端口号
server1  onipcshm  neptune  server1  
server1tcp  ontlitcp  neptune  server1tcp  
server2  onipcshm  saturn  server2  
server2soc  onsoctcp  55.55.2.100  3001  

  sqlhosts 文件包含系统管理工具和连接到数据库服务器的客户端应用程序所需的信息。对于已经在网络上配置的每个服务器,都有一个包含服务器名称的条目、连接到服务器所使用的连接类型、服务器所在主机的名称或IP地址、以及用于和数据库服务器传递信息的服务端口。

  缺省情况下,sqlhosts 文件位于 $SINODBMSDIR/etc 目录中,但也可以通过设置 SINODBMSSQLHOSTS 环境变量来配置一个不同的 sqlhosts 文件。将这个参数设置为您的sqlhosts 文件路径和文件名。

5. onconfig配置文件: Linux/UNIX

  服务器的配置参数存储在 $SINODBMSDIR/etc 目录的文件中。

  • 通过设置 ONCONFIG 环境变量来指定该文件的名称。不要 指定全路径,只指定文件名。

  • 如果没有定义 ONCONFIG 环境变量,就会使用缺省的文件名onconfig

  • 示例:
    export ONCONFIG=onconfig.server1

  当设置服务器时必须定义参数来配置该系统。为这些配置参数选择的值将存储在 $INFORMIXDIR/etc 目录下的一个 UNIX 文件中。文件名是通过设置 ONCONFIG 环境变量来定义的。要运行动态服务器管理程序,如onmode 或者 onstat 则必须设置此变量。

  要设置配置参数,可以使用 UNIX 服务器上的文本编辑器,对文件的更改只在数据库服务器重启后才会生效。

  如果没有设置 ONCONFIG 环境变量,那么就会使用缺省的文件名onconfig

访问数据库服务器

  为了从客户端应用程序,如 DBAccess 或者一个 4GL 程序,访问一个特定的服务器,无需设置 ONCONFIG。对本地共享内存的连接,客户端应用程序会从 /SINODBMSTMP目录下的文件中获取所连接到的共享内存段的信息。这文件名叫**.inf.** xxx ,这里 xxxsqlhosts 文件中用于共享内存连接的第四列的值。这个文件由root 用户拥有,不能被删除。

6. 环境变量检查

  • 仅在 Linux/UNIX 平台
  • 对 $SINODBMSDIR 及其子目录进行权限检查SINODBMS
  • $ONCONFIG 权限
  • $SINODBMSDIR/etc/sqlhosts 权限
  • $SINODBMSDIR/etc/onconfig.std 和$SINODBMSDIR/etc/$ONCONFIG 的文件名长度< 256 个字符

  当调用任何服务器实用程序时,都对sinodb环境变量进行检查。如果上述五项检查中任何一项失败的话,那么程序都会结束并返回一个错误消息。

  如果设置了$SINODBMSSQLHOSTS 环境变量,那么该变量所指定的 sqlhosts 文件将不会被检查。

7. 配置新服务器

  要创建新的配置文件,首先将配置文件模板(onconfig.std)复制到$INFORMIXDIR/etc目录中的一个新文件中。使用的文件名需要与设置ONCONFIG环境变量时指定的名称相同。用于命名配置文件的常见格式是onconfig.servername,其中servername是由$INFORMIXSERVER指示的服务器名称。以下是创建新配置文件的会话示例:

$ export ONCONFIG=onconfig.server1 
$ cd $SINODBMSDIR/etc 
$ cp onconfig.std onconfig.server1

8. 设置配置参数

  在初始化服务器之前,必须在配置文件中配置以下部分的参数︰

  • Root dbspace
  • 消息
  • 服务器信息

  配置文件包含许多不同的参数,允许为特定的需求配置服务器。有些参数是在第一次设置服务器时设置的,一旦服务器初始化后就不能被更改。而大多数参数是可以在服务器初始化后修改的。

  在此模块中,将学习使用最少的配置文件改动来初始化一个非常基本的数据库服务器。其他参数会在后面的章节中介绍。

8.1 配置根dbspace

参数 说明
ROOTNAME rootdbs #根 dbspace 名字
ROOTPATH /dev/online_root #包含根 dbspace 的设备路径
ROOTOFFSET 0 #根 dbspace 在设备中的偏移量(KB)
ROOTSIZE 20000 # 根 dbspace 的大小 (KB)

  因为根 dbspace(即root dbspace) 包含保留页、服务器上所有数据库的信息、以及跟踪服务器活动的数据库信息,因此每个服务器必须有一个根 dbspace。最初,根 dbspace 也包含物理日志和逻辑日志。而这些可以在以后移动到其它 dbspace 中。

  在初始化数据库服务器之前,必须设置以下参数︰

参数 说明
ROOTNAME 为根 dbspace 提供的名字。尽管可以提供任何名称,最好是使用缺省的名字:rootdbs
ROOTPATH 该参数设置为之前创建的raw device或者cooked file的全路径加文件名。如果创建了对相应设备或文件名上的链接,则设定为该链接的路径。
ROOTOFFSET 该参数指定了在 ROOTPATH 设备中用作根 dbspace 第一个chunk的起点以KB为单位的偏移量。通过使用偏移值,可以在相同的raw device上创建多个chunk。对于cooked file始终将 ROOTOFFSET 值置为 0。
ROOTSIZE 该参数指出分配给根 dbspace 第一个chunk的大小(KB)。如果 ROOTPATH 是raw device,会在初始化期间检查该设备,以确保有足够用于根chunk的空间。如果ROOTPATH 是一个cooked file,它将扩展到 ROOTSIZE 所指示的大小。对于建立一个简单的服务器来说,缺省值20000 KB是足够的。如果打算在根 dbspace 中创建数据库或不打算创建临时dbspace (缺省情况下临时文件会创建在根 dbspace 中),则可能要考虑使用更大的 ROOTSIZE。如果之后发现初始的根 dbspace chunk不够用,随后可以向根 dbspace 中添加更多的chunk。

  这些参数只能在服务器首次初始化之前进行修改。一旦在服务器初始化期间,根 dbspace 已经进行了空间分配,就不能再改变了。

  注: 一些磁盘硬件制造商使用物理磁盘设备中的初始块来记录有关设备的控制信息。如果ROOTPATH 是包含在磁盘上的第一柱面的磁盘分区,应该考虑修改 ROOTOFFSET 以避免root dbspace 页被覆盖的可能。32KB 的偏移值应该是充足的,但也应该参考磁盘制造商提供的文档来获取更详细的信息。

8.2 配置消息路径

参数 说明
MSGPATH /usr/sinodbms/online.log # 系统消息日志文件路径
CONSOLE /dev/console # 系统控制台消息路径

  SinoDB数据库为服务器消息提供两种不同的目的地:

参数 说明
MSGPATH 该参数指向所写入的所有服务器消息的文件的路径和名称。如果该文件不存在,则在服务器第一次初始化时创建。
CONSOLE 是服务器写控制台消息的路径。对于服务器所在计算机的管理员来讲控制台消息非常重要。例如,备份和恢复中需要变更磁带的请求将会发送到 CONSOLE上。缺省情况下,此参数设置为计算机的控制台设备,但它也可以设置为一个文件。

  事实上,配置和初始化一个数据库服务器的无需设置这些参数。监控服务器活动的能力对于数据库服务器管理员来讲非常重要,所以强烈建议将 MSGPATH 参数设置为一个有效的路径和文件。

8.3 配置服务器相关信息

  服务器相关参数必须进行设置,这样数据库服务器在主机上才能被唯一识别。

参数 说明
SERVERNUM 此参数决定了访问此服务器时应使用的共享内存段。当同一机器上运行了多个服务器时(这也称为多重驻留),每个服务器的号码必须是唯一的。值的范围可以从 0 到 255。
DBSERVERNAME 该参数用于客户端应用尝试连接服务器时唯一标识的名字。它用作 sqlhosts 文件中标识服务器的位置和客户端与服务器间的通信方法的键。它也对应于 SINODBMSSERVER 环境变量的值。
DBSERVERALIASES 这个可选参数用来指定允许使用与 DBSERVERNAME 定义的连接方法不同连接方式的附加服务器的名称。 DBSERVERALIASES 中列出的每个名字都必须对应于 sqlhosts 文件中的一个条目。当指定了多个名称时,用逗号分隔 (无空格)即可。

  对于DBSERVERNAME 和 DBSERVERALIASES 配置参数指定的每个服务器名称,必须在 sqlhosts 文件中有相应的条目。sqlhosts 文件中的条目决定了客户端连接到数据库服务器的方式。客户端应用程序根据 SINODBMSSERVER 环境变量的设置来决定所采用的连接方式。
1700119973229

  如上图所示,如果需要使用网络(TCP/IP)连接到数据库服务器,则必须设置SINODBMSSERVER为 munichsoc 。如果想要用共享内存进行客户端应用程序到服务器的连接,需将SINODBMSSERVER 设置为 munichshm

9. 服务器初始化

  有两种类型的服务器初始化:

  • root dbspace初始化是基于所定义的配置参数,首次设置根 dbspace 的过程。这种类型的初始化仅在服务器首次创建时发生。共享内存初始化也发生在这个过程中。

  • 共享内存初始化是基于服务器的配置来分配共享内存段、设置共享内存资源、并启动虚拟处理器的过程。共享内存初始化也用于在原始磁盘空间初始化后重新启动数据库服务器。共享内存初始化会在后面的模块中详细讨论。

9.1 数据库服务器:根Dbspace初始化

$ oninit -i

This action will initialize Sinodbms Dynamic Server;
any existing Informix Dynamic Server databases will NOT be accessible -
Do you wish to continue (y/n)?

  一旦完成了配置服务器的过程,即可对其进行初始化。

  在命令行中使用命令:

oninit -i

  然后,会收到警告:继续操作会导致所有已配置的磁盘空间被覆盖。输入y 来继续根 dbspace 的初始化。

  只有在首次初始化或者重新建立数据库服务器时使用上述的方法。如果已经初始化了服务器的磁盘空间并选择上述方法进行初始化,则根 dbspace会被重新初始化,已经创建的所有数据库都将丢失

9.2 根dbspace初始化期间会发生什么?

  • 初始化共享内存
  • 启动虚拟处理器
  • 验证和分配磁盘空间
  • 在根 dbspace 中创建磁盘结构
  • 启动第一个检查点(checkpoint)事件
  • 创建sysmaster,sysutils,sysusers以及sysadmin 数据库

  在动态服务器可以初始化根 dbspace 之前,必须先初始化共享内存、启动执行根 dbspace 初始化所需的虚拟处理器。当这些资源已经开始时,动态服务器会根据所配置的大小进行检查以确保有足够的根 dbspace空间。一旦分配了空间,就会在根 dbspace 中创建各种管理结构和表(包括保留页、tblspace tblspace、数据库 tblspace、物理日志和逻辑日志)。当所有这些页都到位时,服务器就绪将第一个检查点记录写入逻辑日志,来确保服务器的第一个一致性点。最后,服务器会在根 dbspace 中创建sysmaster,sysutils,sysusers以及sysadmin数据库,用以维护内部系统信息和数据库服务器管理。

9.3 查看服务器状态

  一旦初始化过程开始,可以用以下方式之一查看服务器的状态:

$ onstat -

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 -- On-Line -- Up 58 days 23:04:40 -- 1355616 Kbytes

状态行提供了以下信息:

  • SinoDB数据库服务器产品的名称和版本
  • 服务器的当前模式
  • 最近共享内存初始化以来的时间长度
  • 共享内存常驻部分的大小

9.4 查看消息日志

  可以使用onstat -m命令查看消息日志文件的最后几行:

onstat -m

$ onstat -m

Sinoregal SinoDB Dynamic Server Version 16.8.FC8U0X3 -- On-Line -- Up 58 days 23:11:33 -- 1355616 Kbytes

Message Log File: /home/sinodbms/sinodb/tmp/online.log
15:41:06  Checkpoint Statistics - Avg. Txn Block Time 0.002, # Txns blocked 0, Plog used 14, Llog used 10

15:46:07  Checkpoint Completed:  duration was 0 seconds.
15:46:07  Thu Nov 16 - loguniq 12, logpos 0x8ce4018, timestamp: 0x849b57 Interval: 7858

15:46:07  Maximum server connections 4 
15:46:07  Checkpoint Statistics - Avg. Txn Block Time 0.004, # Txns blocked 0, Plog used 8, Llog used 2

16:01:12  Checkpoint Completed:  duration was 0 seconds.
16:01:12  Thu Nov 16 - loguniq 12, logpos 0x8ce6018, timestamp: 0x849b68 Interval: 7859

以上是消息日志的内容的示例。