Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103753753
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-08 21:29:33

作者:satoni  出处:Unix爱好者家园unix-cd.com 
 
磁盘数据组织结构 
在INFORMIX-OnLine的磁盘数据组织结构中的最上层为逻辑概念上的数据库空间dbspace, 每一个数据库空间都有一个或若干个物理单位数据存储块chunk组成, 镜像数据存储块mirror保证 当根数据存储块故障时,OnLine 能够继续工作。每一个数据存储块都有若干个数据页 page 组成, 为了提高输入和输出效率,若干个连续的数据页组成数据连续页extent。用户的数据库 database 和 数据表 table 存储在缺省的或者指定的数据库空间中,数据表的逻辑概念上的存储空间数据表空间 tblspace 有 一个或若个安数据连续页 extent 组成,数据记录 row 存放在数据页 page 中。 


为更好的的支持多媒体应用,多媒体数据可以存放在二进制大对象数据页Blobpage中,若干个 二进制大对象数据页在此二进制大对象空间Blobspace。 
OnLine 使用逻辑日志 Logical log、物理日志 Physical log来管理数据库日志操作。 
1. 数据存储块 chunk 
INFORMIX-OnLine的数据存放在物理上连续的数据存储块 chunk中,数据存储块是 OnLine 数据存储的最大的物理单位。数据存储块可以有两种构造方法,其一是直接构造在系统的物理磁盘上, 其二是构造在操作系统的文件或者卷上。 
在第一种情况下,在操作系统上仅仅定义了这个 (块) 磁盘但没有格式化这个 (块)磁盘,因 此在这上面的所有数据操作都有 OnLine 来完成,操作系统对它不存在任何管理,数据空间在物理 磁盘上连续,这种数据的存储空间称为原始空间raw space。 
而在第二种情况下,操作系统不仅定义了这个数据存储空间(文件), 还管理这个数据存储 空间(文件),数据文件操作时的内存缓冲、输入与输出。数据空间的建立受操作系统的制约,在物理存储上不连续。我们称这种数据存储空间为非原始空间 cooked space。 
比较这两种数据的存储空间,原始空间在磁盘上连续,没有操作系统的缓存和制约,非原始空间在磁盘上不连续,存在着操作系统的缓存和操作系统的输入/输出的制约,因此在实际应用中, 采用 原始空间效率高于非原始空间,由于原始空间与系统设备有关, 同时不同操作系统对设备的 定义的不 一致性,定义非原始空间比定义原始空间来得简单。 我们将原始空间所对应的磁盘称原 始设 备 raw device,而将非原始空间所对应的操作系统文件称操作系统文件cooked file。 
为了进一步提高数据库运行的效率,我们通常选用字符设备作为存放实际的原始设备,这样在我们输入/输出数据时,可以充分发挥系统的DMA能力。 
当我们使用原始设备时,可以在同一个原始设备上建立多个数据存储块。通过对数据存储块的参数 OFFSET和 SIZE的定义,其单位为KB,我们可以定义多个数据存储块在同一个磁盘或磁盘块 上,参数OFFSET 定义数据存储块的起始位置,参数SIZE定义数据存储块的大小,用户在设置参数 OFFSET 和SIZE时 必须保证在物理磁盘上没有相互覆盖。 
在下图所示的原始设备/dev/rdsk/c0t1d1s0 上建立三个数据存储块 chunk1、 chunk2和 chunk 3,它们的大小分别为50MB、30MB和50MB,由于chunk 的SIZE单位为KB,因此 chunk1、chunk2 和chunk3的SIZE分别为50000、30000和50000。在通常情况下, 第一个数据存储块chunk1的OFFSET 为0,这样第二个数据存储块 chunk2 的OFFSET应为第一个数据存储块chunk1的SIZE,而第三个数 据存储块 chunk3的OFFSET则为第二个数据存储块chunk2的OFFSET加上第二个数据存储块chunk2 的SIZE。 为保证在两个数据存储块的相邻边界处不发生重叠,可以将后一个数据存储块的起始位 置稍 微挪后一点。 
如果采用操作系统文件作为数据存储空间时,一般不在一个文件中建立多个数据存储块。一个文件中建立多个数据存储块,操作系统对文件中数据的定位时间将更长。 
不管是原始设备还是非原始设备,OnLine的概念是一致的。在实际应用中,可以一部分数据存储块用原始设备而另一部分用非原始设备,只是原始设备采用OnLine的管理的I/O机制,而非原始设备采用操作系统 unix 的I/O机制。 


2. 数据页 page 
INFORMIX-OnLine在数据存储块中以数据页page为单位来组织存放数据,并以数据页为单 位来输入输出数据,它的大小与数据在共享内存中数据缓冲区相一致,所以 OnLine 的数据页的大小 是不可以改变的。数据页是OnLine 组织存放数据的最小的物理单位。 
根据不同从操作系统,OnLine的数据页的大小是不同的。例如在SCO、AT&T、UNISYS 和HP等操作系统平台上,每一个数据页的大小为2KB,而在IBM和SEQUENT等操作系统平台上, 每 一个数据页的大小则为4KB。同时数据在共享内存中的缓冲区的大小也是根据操作系统的不同 而不同,其值与数据页的大小一致。 

3. 数据连续页 extent 
为提高数据操作的效率,OnLine将若干个在物理磁盘上连续的数据页组成一个数据连续页 extent。当用户创建一个数据表时,OnLine以数据连续页为单位在数据存储块中分配一块连续的空 间,当用户的数据写满了这个数据连续页后,OnLine 将以数据连续页为单位在数据存储块中申请 一块连续空间,以存放更多的用户数据。在缺省情况下,初始化时第一个数据连续页为8个数据页。 
数据连续页不能跨越数据存储块,当OnLine需要申请较多的数据页构成数据连续页时,如 果 OnLine 找不到如数的在物理设备上连续的数据页时,OnLine将放弃这些不够构成一个数据连续页的数 据页,OnLine 将去下一个数据存储块去申请如数的在物理设备上连续的数据页。因此在实 际系 统中,过小的数据存储块将不利于数据操作性能和数据存取效率。 

4. 数据库空间 dbspace 
在INFORMIX-OnLine 的磁盘数据组织中,数据库空间 dbspace 处于一个比较上层的位置。 数 据库空间是数据库在逻辑概念上的存储空间,一个或若干个数据库空间组成OnLine数据实体。在 物理 磁盘上, 每一个数据库空间总对应于一个或几个数据存储块, 在这些与数据库空间对应的数 据存储块 中,一定有一个数据存储块是根数据存储块, 而其它的则是后继数据存储块。 从功能上来 看,根数据 存储块除了具有后继数据存储块能够存储用户数据外,它还具有管理本数据库空间的功 能;从数据存 储块的保留页来看,根数据存储块具有 56 个保留页,而后继数据存储块仅有3个保留 页。当然不同版 本的OnLine在主、后继数据存储块的保留页的数量可能不同,但是根数据存储块需 要更多的保留页来 保存本数据库空间的定义。 
在OnLine初始化后有一个称为根数据库空间rootdbs的数据库空间,它是OnLine系统的第一个 数据库空间。当建立根数据库空间时,它的根数据存储块将被建立,所有数据库的日志和所有的定 义信息都必须存放在该数据存储块中,它比所有其它根数据存储块的保留页更多。由于数据库日志 定义的需要,因此对根数据库空间的根数据存储块的定义尤其重要,关于如何正确地定义根数据库 空间的 根数据存储块将在后面详细介绍。 
为了提高数据库系统运行的效率,INFORMIX新的动态服务器OnLine Dynamic Server 7.1中 引入了临时数据库空间的概念。在没有临时数据库空间的系统中,临时数据将建立的缺省的根数据 库空间中,由于临时数据操作需要频繁的增加、删除,会给根数据库空间的数据存储块中造成很多 碎片,将导致数据库操作效率的降低;另外当数据库备份时,那些临时数据也一起作备份,从而增 加了数据备份量,降低了数据备份的效率。引入临时数据库空间后,用户的临时数据或者数据操作 的中间 结果 将被存放在临时数据库空间中, 同时当数据备份时临时数据库空间将不再被 备份。 

5. 数据存储块镜像 mirror 
为提高 OnLine 运行时的数据高可靠性,OnLine在数据存储上引入了数据存储块镜像的机 制。OnLine数据存储的镜像是对数据存储块而言的,但是其定义是对数据库空间的。当一个数据库 空间被定义为镜像时,它下面的所有数据存储块全部镜像;当一个数据库空间被定义成没有镜像的 时候, 它下面的所有数据存储块全部没有镜像。 
当 OnLine在运行时,一旦数据存储块所在的物理磁盘发生读写故障,对于没有数据库空间 没有镜像的系统,OnLine将自动关闭,并等待恢复。而对于具有镜像的数据库空间,OnLine将把存 在读写故障的数据存储块标识为Down,同时 OnLine 将继续运行,用户完全可以根据需要,在适当 的时候,恢复存在读写故障的数据存储块所在的磁盘,然后重构继续。因此一个具有镜像的数据库 空间,其运行时的可靠性将大大高于不具有镜像的数据库空间。 

6. 数据表空间 tblspace 
在逻辑上,数据库存放在数据库空间dbspace中,数据表存放在数据表空间tblspace中。数据 库空间是由数据存储块组成,数据表存在于这些数据存储块中,数据表空间是由连续存放该数据表 记录的数据连续页组成。
 
第二节 共享内存数据组织结构 
OnLine能高效地执行联机事务处理的第二个机制是数据库服务器系统的共享内存。在一些 不使用共享内存的数据管理系统中,管理进程只能在需要数据的时候,将该记录和索引的最新值读 入该进 程 所占有的私用数据缓存中进行操作,由于频繁的磁盘I/O,使系统的运行效率降低,同时 由于那些管 理进程都各占一份数据缓存,使得系统内存的有效使用率降低。因此使用共享内存 会有 以下三方面的 好处: 
(1)数据缓存不再属于某个进程,所有的数据库进程均共享这块内存,降低了磁盘的 I/O; 
(2)所有数据库进程访问相同的访问,它们的值和索引在内存中只有一份拷贝,提高了内 存的有效使用率; 
(3)操作的相关记录被预读进共享内存中,由于内存的I/O效率极高,因而系统并发除了数 据的能力得到提高。 

随着OnLine功能和性能的不断提高,OnLine的共享内存也有所不同。尤其是INFORMIX的动态服务器OnLine Dynamic Server (ODS)在其共享内存的结构上增加了两个功能模块。在OnLine5 中, 其共 享内存仅有一个区域,驻留区Resident portion;动态服务器ODS 7.1除了驻留区 Resident portion 外还增 加了虚拟区 Virtual portion 和通讯区 Communication portion。 

操作系统参数对数据库服务器共享内存的影响 
操作系统的共享内存参数对数据库服务器的共享内存的定义和建立会产生极大的影响。对 INFORMIX来说,数据库服务器的共享内存绝对不能超过操作系统共享内存定义的允许范围。一个 OnLine 动态服务器7.1的共享内存不能超过操作系统所定义的一个UNIX进程所允许访问共享内存的 极大值,由于操作系统对共享内存的定义往往不能满足OnLine动态服务器7.1的需要,因此,数据库 管理员通 常需要在建立其数据库应用系统以前,首先调谐操作系 统的共享内 存参数。 
对于OnLine动态服务器7.1来说,操作系统的参数对它们的影响,在共享内存锁资源管理方 面 和虚拟处理器对共享内存访问操作方面是不全部相同的。它们对操作系统参数的要求也是不一样 的, 因此需要数据库管理员根据产品来决定操作系统的参数,在决定这些操作系统的参数前,请先 阅读产 品说明文件。例如OnLine动态服务器7.1的$INFORMIXDIR/release/ONLINE_7.1,在这个文件 中它向数据库管理员阐述该INFORMIX产品在该机器平台上对操作系统参数的要求。同一种产品在 不同的平台上,对该平台操作系统参数的要求非常有可能是不一样的;在同一平台上,同一产品的 不同版本对操 作系统参数也很有可能是不同的。 


第三节 处理器资源组织结构 
OnLine 动态服务器7.1采用多进程 Multi-processes 多线索 Multi-treads 的数据库服务器机制 , 将每一个服务器进程根据用户定义分解成若干个线索,每一个线索响应一个用户的设计访 问的 请求。 INFORMIX将每一个 进程称作一个虚拟处理器Virtual process。 
在以前的多处理器系统中,往往将用户的应用程序和系统的处理器CPU对应起来,每一个处理器都分别处理一个用户的应用程序; 当应用程序数量多于处理器数目时,应用程序为争夺处理器 资源CPU,而引起应用程序在运行时间上的不平衡;同时当应用程序的数量少于处理器数目时,由 于一 些 处理器资源得不到运用而空闲,导致处理器资源运用上的不平衡。一种比较好的方法是将处 理器与应 用所需要的处理器分离开来,然后由数据库系统来平衡这种需求。 在 INFOR MIX 动态服 务器中,用 户应用程序发出的数据操作请求被称作虚拟处理器的服务器进程所接收, 然后 OnLine均 匀地将这些 服务器进程分配到系统实际的处理器CPU上。这样就较好地解决了上面 所提到的两种不 平 衡状态。 
在ODS 7.1中每一个数据库服务器进程都称作一个虚拟处理器 Virtual process,简称 VP。 若干个相同功能的虚拟处理器组成一个虚拟处理器类Virtual process Class,简称VP Class, 每一个 VP Class 都表示一种功能的虚拟处理器。OnLine 一共有七种虚拟处理器,它们是: 
处理器虚拟处理器 CPU VP,响应所有用户和OnLine系统对CPU资源的操作和协调。 
磁盘输入输出虚拟处理器 Disk I/O VP,响应用户和 OnLine系统的磁盘输入输出请求,磁 盘输 入输出处理器分三种,异步输入输出 Asynchronous I/O、物理日志输入输出 Physical-log I/O 和逻辑日志 输入输出Logical-log I/O。 
网络通讯虚拟处理器 Network VP,响应用户的网络联接的请求。 ODS 的网络虚拟处理器 有三种, 它们分别用于管理 tli、soc和ipc三种网络通讯接口。 
系统管理虚拟处理器Adminstration VP,运行OnLine 系统管理程序和一些专职程序。 
光盘虚拟处理器 Optical VP,当用户运行OnLine/Optical时管理光盘系统的运转。 
审计虚拟处理器 Audit VP,当用户系统需要一定的运行时数据安全性的时候,审计虚拟处 理器在后台帮助检查每一个用户操作的合法性。 
杂项管理虚拟处理器 Miscellaneous VP,用于管理所有以上虚拟处理器不作的工作。

第三章 数据库服务器的初始化 

第一节 数据库服务器初始化时的考虑 
用户在建立和初始化其数据的时候,最重要考虑的问题是:数据存储实体选用哪种方案,rawevice 还是cookedfile,是否对数据库空间建立镜像,怎样建立?对于OnLine动态服务器7.1的使用者 还可以考虑数据库系统是否需要数据复制的安全系统以及 如何建立数据复制等等问题。 
Raw device和cooked file对于OnLine来说其概念和管理是一致的,因此对较小的数据库系统 其效果相差无几,但对大数据库系统,由于cooked file采用unix的I/O机制,而raw device则采用On-Line自身的I/O机制,因此在效率上raw device会明显快于cooked file,且raw device的数据安全性也 高于cooked file,假设用户不小心删除数据储存实体chunk的文件名后,以cooked file方式定义的数 据库将被删除,而以raw device方式定义的数据储存实体 Chunk 只是描述它的设备文件名被删除, 作为真正的存储数据的数据库空间并没有受到影响, 通过重新建立设备文件名的方法,该数据储 存实体不难恢复,而 cooked file 则无法恢复。 
另外从效率上考虑,Raw device的使用在unix系统上还有块设备和字符设备之分,用unix命 令ls-l列设备目录,我们可以看到,有些设备文件名的标识为b而另一些则为c,其中标识为c的设备 为字符设备,作为OnLine数据储存实体来说,字符设备更有利于发挥主机服务器的DMA能力,所以 我们总是定义字符设备为数据储存实体。 
数据存储空间的镜像与数据库服务器的复制是OnLine的数据安全机制,我们将在数据安全的章节中给以详细的讲述。 

第二节 操作系统上的准备工作 
在建立和初始化数据库服务器系统的时候,需要作的准备工作有以下几点: 
1 为数据库所使用原始设备计划磁盘空间,并使得在UNIX操作系统上取得该原始设备的描 述。 
2 修改INFORMIX环境下的配置文件$INFORMIXDIR/etc/sqlhosts和计算机系统对网络节点、 网络端口的定义文件/etc/hosts、/etc/hosts.equiv和/etc/services。 
$ vi $INFORMIXDIR/etc/sqlhosts 
online7 ontlitcp changsha sqlexec7 
(虚拟服务器名) (网络协议类型) (主机名) (服务端口名) 
# vi /etc/hosts 
132.147.162.1 changsha 
(网络结点) (主机名) 
# vi /etc/hosts.equiv 
changsha 
(主机名) 
# vi /etc/services 
sqlexec7 8888/tcp 
(服务端口名) (端口号) 

3 调节操作系统的核心参数,以适应OnLine动态服务器7.1对unix在共享内存及信号量等方面 的需要。 
用系统提供的参数管理的工具 ( 例如SCO UNIX的sysadmsh)来进行调整。需要调整的参数也 因数据库产品的版本不同而有所不同,具体可以在成功地安装了数据库服务器后,查看$INFORMIX-DIR /release/ ONLINE_ 7.1中对操作系统参数要求的说明。 
例如对于在SCO UNIX 3.2.4.2平台上使用OnLine7的用户, 需要调整的核心参数有SHM- MAX、SHMSEG、SHMMNI、SEMMNI和SEMMSL。因此用户可注册到 root,然后运行 sysad- msh ,在菜单中选择System,然后选择Configure,再选择Kernel,在Kernel选项中选择Parameter, 然后调 整第9项Shared Data中的参数SHMMAX、SHMSEG和SHMMNI以及第8项Semphore中的参数 SEMMNI和 SEMMSL,设置完毕后在Kernel选项中选择 Rebuild,重新构造unix引导核心。 然后退 出sysadmsh,并重新启动 unix。同时需要注意的是,在重新构造核心后,数据库服务器存储 原始设 备名的属主和组定义的改变。 
第三节 建立数据在磁盘上组织实体 
数据在磁盘上以数据存储块的形式存在,但在逻辑上则是以数据库空间的形式存在。 每 一个数据库空间至少有一个数据存储块,其中最先定义的数据存储块为主数据存储块,而其它的 数据存储块则为附加数据存储块。同时在所有的数据库空间中必定有一个根数据库空间(rootdbs)。 建立数据在磁盘上的组织实体是建立与逻辑概念的数据库空间相对应的数据存储块。数据存储块 的组织方式 有两种:原始磁盘设备形式和 UNIX文件形式。相比起来,原始磁盘设备形式具有较 高的运行效率和可靠性,但是原始磁盘设备形式的数据存储块的建立需要数据库管理员对数据库 服务器所运行的系统的磁盘设备的描述具有足够的知识和经验。 
原始磁盘设备形式的数据存储实体的建立方法是将一个特定的原始磁盘 (或部分磁盘) 用 UNIX的链接命令ln链接到一个便于记忆和管理的设备文件。例如在 AT&T SVR4系统中, 有一个 磁盘/dev/rdsk/c0t1d1,而定义中的原始磁盘设备名为rootdbs1,因此数据库管理员以root用户注册, 然后用以下的命令来 构造数据存储实体, 
# cd $INFORMIXDIR 
# ln /dev/rdsk/c0t1d1 rootdbs1 
# chmod 660 rootdbs1 
# chown informix rootdbs1 
# chgrp informix rootdbs1 
UNIX文件形式的数据存储实体的建立方法是产生一个0字节的UNIX文件,使用命令如下: 
# cd $INFORMIXDIR 
# cat /dev/null > rootdbs1 
# chown informix rootdbs1 
# chgrp informix rootdbs1 
第四节 建立数据库服务器共享内存 
至此,我们可以开始初始化数据库服务器,以informix用户注册,用命令onmonitor命令。 在初始化前必须正确地定义了环境变量INFORMIXDIR、PATH和INFORMIXSERVER以及文件 $INFORMIXDIR/etc/sqlhosts、/etc/hosts、/etc/hosts.equiv和/etc/services。 
首先注册到 informix,运行 onmonitor,在菜单中选择 Parameter,然后选择Initialize,便进 入数据库空间初始化的屏幕。然后设置在屏幕上显示的参数。 
--------------------------------------------------------------------------- 
INTIALIZATION: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
DISK PARAMETERS 
Page Size [ 2] Kbytes Mirror [N] 

Tape Dev. [/dev/rct0 ] 
Block Size [ 16] Kbytes Total Tape Size [ 150000] Kbytes 
Log Tape Dev. [/dev/rct0 ] 
Block Size [ 16] Kbytes Total Tape Size [ 150000] Kbytes 

Boot Name [rootdbs ] Root Size [ 20000] Kbytes 
Primary Path [/usr/informix/rootdbs1 ] 
Offset [ 0] Kbytes 
Mirror Path [ ] 
Offset [ 0] Kbytes 

Phy. Log Size [ 1000] Kbytes Log. Log Size [ 500] Kbytes 
Number of Logical Logs [ 6] 
--------------------------------------------------------------------------- 

第一屏设置完成后按ESC,onmonitor在完成数据库空间初始化以后便接着要求用户设置共享内存。如果用户在以后需要调整共享内存时可以运行onmonitor,然后选择Parameters菜单,再选 择 Shared-Memory项。对于初次调整共享内存,用户需要注意的是Server Number是不可以重复的,并且 Server Name以小写为好,尤其是对于用户需要建立分布式数据库系统的情况更为重要。可以说对用 户影响最大的BUFFERS和LOCKS。 
--------------------------------------------------------------------------- 
SHARED MEMORY: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
SHARED MEMORY PARAMETERS 
Server Number [ 10] Server Name [online7 ] 
Server Aliases [ ] 
Dbspace Temp [ ] 
Deadlock Timeout [ 60] Secs Number of Page Cleaners [ 1] 
Forced Residency [N] Stack Size (Kbytes) [ 32] 
Non Res. SegSize (Kbytes) [8000] 

Physical Log Buffer Size [ 32] Kbytes 
Logical Log Buffer Size [ 32] Kbytes 
MAX # of Logical Logs [ 6] Transaction Timeout [ 300] 
MAX # of Transactions [ 20] Long TX HWM [ 50] 
MAX # of Userthreads [ 20] Long TX HWM Exclusive [ 60] 
MAX # of Locks [ 2000] Index Page Fill Factor [ 90] 
MAX # of Buffers [ 200] Add SegSize (Kbytes) [ 8192] 
MAX # of Chunks [ 8] Total Memory (Kbytes) [ 0] 
MAX # of Open Tblspaces [ 200] 
MAX # of Dbspaces [ 8] 
============ 
Shared memory size [ 864] Kbytes Page size [ 2] Kbytes 
Enter a unique value to be associated with this version of INFORMIX-OnLine. 
--------------------------------------------------------------------------- 
设置完共享内存后按ESC键,OnLine便初始化共享内存,当OnLine成功地初始化共享内存 后,OnLine便进入第三个屏幕数据库服务器性能参数调整。在这个屏幕中用户说明OnLine 动态服务 器 7.1所运行的计算机是否一个SMP体系结构的计算机,若是则置 Multiprocessor Machine 为 Y,否 则为N。当 Multiprocessor Machine 为Y时,用户可以进一步地设置有多少个服务器进程与 CPU 结合 (Num Procs to Affinity),并且从第几个CPU开始与数据库服务器进程结合 ( Proc num to start with)。 如果该 计算机为单处理器计算机系统,则设置 Single CPU VP为Y,否则为N。 怎样设置 CPU VP 和AIO VP,在“Informix ODS 性能指南”一书中有详细介绍。在屏幕的右下方是该数据库服务器 的网络 链接形式的定义,它必须与$INFORMIXDIR/etc/sqlhosts中的设置相符。例如在$INFORMIX- DIR /etc/sqlhosts中定义数据库服务器online的网络链接形式为onsoctcp,则在 NETTYPE settings中 设置Protocol 为soctcp ,其它项可先用其缺省 值。 










--------------------------------------------------------------------------- 
PERFORMANCE: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
PERFORMANCE TUNING PARAMETERS 

Multiprocessor Machine [N] LRU Max Dirty [ 60] 
Num Procs to Affinity [ 0] LRU Min Dirty [ 50] 
Procs num to start with [ 0] Checkpoint Interval [ 300] 
Num of Read Ahead Pages [ 4] 
CPU VPs [ 1] Read Ahead Threashold [ 2] 
AIO Vps [ 2] 
Single CPU VP [Y] NETTYPE settings: 
Use OS Time [N] Protocol Threads Users VP-class 
Disable Priority Aging [N] [soctcp] [ ] [ ] [ ] 
Off-Line Recovery Threads [ 10] [ ] [ ] [ ] [ ] 
On-Line Recovery Threads [ 1] [ ] [ ] [ ] [ ] 
Num of LRUS queues [ 8] [ ] [ ] [ ] [ ] 
--------------------------------------------------------------------------- 
设置完这一屏参数后,按ESC。 接下来我们将设置动态数据复制、运行监控和并行数据操 作等参数, 由于目前数据库系统处于初建阶段, 暂不考虑动态数据复制,当系统进入该屏幕后按 ESC。 

--------------------------------------------------------------------------- 
DATA REPLICATION: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
DATA REPLICATION PARAMETERS 

Interval [ 30] 
Timeout [ 30] 
Auto [0] 
Lost & Found [/usr/informix/etc/dr.lostfound ] 
--------------------------------------------------------------------------- 

这时系统进入运行监控屏幕,在这屏幕中我们将定义系统运行的信息日志文件以及当系统运行发现问题时,系统的运行状态将写到那一个目录下。 
--------------------------------------------------------------------------- 
DIAGNOSTICS: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
DIAGNOSTIC PARAMETERS 

Message Log [/usr/informix/online.log ] 
Console Msgs. [/dev/console ] 
Alam Program [ ] 

Dump Shared Memory [Y] 
Dump Gcore [N] 
Dump Core [N] 
Dump Count [ 2] 
Dump Directory [/tmp ] 
--------------------------------------------------------------------------- 

设置完运行监控参数后,按ESC键。这时系统进入最后一个设置屏幕,并行数据操作屏幕 , 由于我们刚开始建立数据库系统,暂不考虑并行数据操作参数的设置。 因此我们按ESC键来结束我 们的数据库服务器初始化操作过程。 
--------------------------------------------------------------------------- 
PDQ: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
PARALLEL DATABASE QUERIES PARAMETERS 

PDQ Priority [100] 
Maximun Priority [100] 
Decision Support Queries [ 10] 
Decision Support Memory (Kbytes) [ 8192] 
Maximun Decision Support Scans [ 4] 
Dataskip [ ] 
Optimizer Hint [0] 
--------------------------------------------------------------------------- 

当数据库服务器初始化成功时,系统处于quencent状态。这时用户可在菜单上选择Exit, 退出Parameters,然后选择Mode, 再选择 Online,INFORMIX-OnLine便进入online状态。 

第五节 初始化处理器资源 
OnLine动态服务器7.1采用多进程 多线索体系结构, 即用较少的数据库服务器进程来作所有 的数据库操作, 因此处理器资源的利用 将直接影响用户系统的运行性能。 处理器资源的初始化可以 的数据库系统初始化的过程中实现,也可以 在以后用onmonitor实用程序的Parameters菜单中的 Perf -ormance项来进行,参数调整以后需重新启动数据库服务器才能有效。同时在系统的运行过程中,用户可以根据自己的需要,通过 onmonitor 实用程序的Mode菜单中的 Add-proc和 Dropproc 随时调整系 统的处理器资源,而不需要重新启动数据库服务器。 

第六节 数据库服务器的状态 
INFORMIX-OnLine具有五个不同的状态,它们分别是online、quiesent、recovery、shut- down 和offline。这五个状态分别是为OnLine运行中不同目的而设计的。 
---------------------------------------------------------------------------- 
Mode: Startup On-line Graceful-shutdown Immediate-shutdown Take-offline ... 
---------------------------------------------------------------------------- 
online 状态是系统响应联机用户数据库访问的状态。 在这个状态下,用户可以查询、插入 、 修改和删除他们的数据,以及各种简单或复杂的事务处理。 
quiesent 状态是数据库管理员管理系统的状态。在这个状态下,除了数据库管理员,任何 普通用户都不能进入数据库系统,不能对数据库作任何的访问和操作。 通常在这个状态下,数据 库管理员进行数据备份、批量处理、调整 OnLine 参数以及其它各种数据 库系统的管理。 
recovery 状态是OnLine为保持数据库一致性而进行的内部事务处理状态,因此这个状态拒 绝任何人访问数据库系统,包括数据库管理员。 
shutdown 状态是 OnLine关闭前的一个等待联机退出的状态。在这个状态下,已经进入数 据库系统,并且正在进行数据库访问或操作的用户被要求尽快结束工作,退出数据库系统,而尚 未联机 和那些没有进行数据库访问和操作的用户将被拒绝进入数据库系统。 
offline 状态是 OnLine 处于关闭的状态。 
第七节 数据库服务器的启动与关闭 
启动和关闭OnLine最简单的方法 onmonitor,选择Mode,然后用Startup和Online来启动数据 库服务器。 或者用Take-offine来关闭 数据 库服务器。 
通过命令形式,oninit 启动数据库服务器;onmode -ky 关闭 数据 库服务器。 
从系统管理的角度来看,最好是在系统启动的最后自动启动数据库服务器和在系统关闭时最先关闭数据库服务器。这样便需要建立启动文件和关闭文件。 
以SCOUNIX为例,启动文件建立在/etc/rc2.d目录下,其名字可以是S99informix,启动文件 如下: 
INFORMIXSERVER=online7 
INFORMIXDIR=/usr/informix 
PATH=$PATH:$INFORMIXDIR/bin 
export INFORMIXSERVER INFORMIXDIR PATH 
exho "Start up OnLine Dynamic Server " 
oninit& 
ipcs -bm 

命令ipcs用于检查unix系统的共享内存和信号量,用这种方法可以很容易地知道数据库服 务器 是否正常地启动。 
关闭文件建立在/etc/rc0.d目录下,其名字可以是K01informix,关闭文件的内容如 下: 
INFORMIXSERVER=online7 
INFORMIXDIR=/usr/informix 
PATH=$PATH:$INFORMIXDIR/bin 
export INFORMIXSERVER INFORMIXDIR PATH 
echo "Stop OnLine Dynamic Server" 
onmode -ky& 
ipcs -bm

第四章 数据库服务器系统的管理 
通过上一章的实践,用户可以建立起一个最初步的数据库服务器系统,它有一个数据库空间 Dbspace,该数据库空间被称作rootdbs。rootdbs有一个数据存储块chunk。数据库服务器系统的定 义、用户数据库和数据库日志都存放在这个chunk中。然而对于一个实际的数据库应用系统,希望数据库服务器系统的定义、 用户数据库和数据库日志分别存放在不同的数据空间中, 以达到比较理 想的运行效率和方便简洁的数据库系统管理。 本章中我们将讨论如何为一个数据库服务器系统增 加 一个数据库空间Dbspace和如何为一个数据库空间增加一个数据存储块chunk。 

第一节 增加数据库空间 Dbspace 
在自定义Dbspace前,用户必须为用户自定义的Dbspace定义一个数据储存块Chunk,然后启 动 onmonitor,用Dbspaces中的Craete将该 Chunk赋予用户自定义的Dbspace。 
例如在一个 SCO UNIX 应用系统中, 用户需要为其应用数据库系统定义一个数据库空间 Dbspace, 其名字为 workdbs1,并且这个Dbspace的第一个Chunk的大小为100MB,其名字为 work dbs1_ primary。现在用户决定将 workdbs1_primary定义在/dev/rdsk/0sa所对应的磁盘空间上, 环境 变量 INFORMIXDIR=/usr/informix。步骤如下: 
1.1 注册到 root, 
# cd /usr/informix 
# ln /dev/rdsk/0sa workdbs1_primary 
# chown informix workdbs1_primary 
# chgrp informix workdbs1_primary 
# chmod 660 workdbs1_primary 
# exit 
1.2 注册到 informix, 
$ onmonitor 
选择Dbspaces后按Enter键,再选择Create,屏幕上显示出增加Dbspace的格式。 
用户在Dbspace Name中输入workdbs1,在Mirror中输入Y。在PRIMARY CHUNK INFORMATION下面的Full Pathname中输入/usr/informix/workdbs1_primary,在 Size 中输入 100000。MIRROR CHUNK INFORMATION下面的Full Pathname为镜像数据存储块的全路径名, 在这里没有输入。 然后按ESC键,数据库服务器系统就将用户自定义的数据库空间workdbs1 加入 rootdbs的管理区(保留页)中。 
OnLine动态服务器7.1允许用户定义临时数据库空间 Tempdbs,如果某一个数据库空间是临 时数据库空间则置Temp为Y,否则为N。当某一个数据库空间为临时数据库空间时,它同时需要在 共享内存的设置屏幕中的Temp Dbspace有正确的描述。 
Press ESC to build a new dbspace. 
Press Interrupt to cancel the option and return to the Dbspace menu. 
Press F2 or CTRL-F for field level help. 

CREATE DBSPACES 

Dbspace Name [workdbs1 ] Mirror [N] Temp [N] 

PRIMARY CHUNK INFORMATION: 

Full Pathname [/usr/informix/workdbs1_primary ] 

Offset [ ] Kbytes Size [ 100000] Kbytes 

MIRROR CHUNK INFORMATION: 

Full Pathname [ ] 

Offset [ ] 
--------------------------------------------------------------------------- 
或者通过命令形式增加Dbspace 
$ onspaces -c spacename [-t] -p pathname -o offset -s size [-m path offset] 


1.3 在用户自定义的数据库空间中建立数据库 
启动isql或dbaccess,选择Query-language后,再选择New项,输入 
CREATE DATABASE stores IN workdbs1 WITH BUFFERED LOG 
然后按ESC,运行这个SQL命令,一个带BUFFERED日志的数据库stores建立在数据库 空间workdbs1中。启动tbmonitor或onmonitor,用户可以在Status中的Database项中看到自己所定义 的数据库。 

第二节 增加数据储存实体 Chunck 
数据库空间 Dbspace 仅仅是数据库存在的逻辑空间,数据库存在于真正的物理空间是数据 储存块 Chunk, 因此它的空间总是有限的,当数据储存接近它的限度时,数据库管理员就要考虑 为这个数据库空间增加一个数据储存块 Chunk。 
增加一个数据存储块,其做法如下: 
2.1 注册到 root; 
# cd /usr/informix 
# ln /dev/rdsk/1sa workdbs2_primary 
# chown informix workdbs2_primary 
# chgrp informix workdbs2_primary 
# chmod 660 workdbs2_primary 
# exit 
2.2 注册到 informix, 
$ onmonitor 
选择 Dbspaces 菜单后,再选择 Add_chunk,屏幕上显示出当前系统中所有的数据库空间, 移动光标上下键,将选中项移到需要增加 Chunk 的Dbsapce 上,按 Ctrl-B 键,在屏幕的Full Path- name 中输 入/usr/informix/workdbs2_primary,并在Size项中输入100000,然后按ESC键。于是数据 库服务器系 统为数据库空间 workdbs1 增加一个数据存储块 workdbs2_primary的定义。我们可以在 Status 菜单的 Spaces 选项中看到自己刚才为 workdbs1 定义的数据存储块 workdbs2_primary。 















--------------------------------------------------------------------------- 
Press ESC to build a new dbspace. 
Press Interrupt to cancel the option and return to the Dbspace menu. 
Press F2 or CTRL-F for field level help. 

ADD CHUNKS 

Dbspace Name [workdbs1 ] Mirror [N] Temp[N] 

PRIMARY CHUNK INFORMATION: 

Full Pathname [/usr/informix/workdbs2_primary ] 

Offset [ ] Kbytes Size [ 100000] Kbytes 

MIRROR CHUNK INFORMATION: 

Full Pathname [ ] 

Offset [ ] 
--------------------------------------------------------------------------- 
或者通过命令形式增加chunk 
$ onspaces -a spacename -p pathname -o offset -s size [-m path offset] 

第三节 日志管理 
日志是数据库服务器保证当数据库或Unix或主机服务器系统故障恢复后,用户数据库快速复原的安全机制。数据库服务器的日志有两种:物理日志Physical Log和逻辑日志Logical Log。 当用户 需要取数据而该数据又不在共享内存时,数据库服务器将它从磁盘读出并放入共享内存。这时,如 果用户需要修改该记录,数据库服务器在该记录尚未被修改前,将该记录所在的数据页拷贝到物理 日志,然后数据库服务器响应用户的修改要求,并将数据修改的轨迹写入逻辑日志。 当用户想要滚 回操作时,并且在数据修改的过程中数据库服务器没有做过Checkpoint, 数据库服务器将物理日志拷 贝回该数据页,如果在数据修改的过程中数据库服务器已经做过Checkoint,数据库 服务器将根据数 据修改时记录在逻辑日志中的数据变化轨迹来恢复原来的数据。不过大家要知道 这种机制只有在用 户数据库是带日志的情形下才会起作用,由于需要比不带日志的数据库多写日志文件,因此它的效 率会低于不带日志的数据库。但是一旦数据库服务器非正常关闭, 在后一 次启动数据库服务器的时 候, 数据库服务器会根据上次系统非正常关闭时留下来的日志文件来 恢复 数据的一致性,这种安全 机 制是以牺牲数据库操作效率为代价的。 
物理日志保存数据在修改前的映像,一般情况下它占整个日志空间尺寸的1/4,当数据储存 实体空间增加后,日志空间的尺寸也需要调大。 改变物理日志空间的大小可使用onmonitor 工具包, 启动 onmonitor,选择 Parameters菜单项后,再选择 Physical-log, 按回车,将物理日志的尺寸设置成需要的值,同时也可以将物理日志移到指定数据库空间中。 









--------------------------------------------------------------------------- 
Press ESC to add physical log. 
Press Interrupt to cancel the option and return to the Parameters menu. 
Press F2 or CTRL-F for field level help. 

ADDING PHYSICAL LOG 

Physical Log Size [ 5000] Kbytes 

Dbspace Name [rootdbs ] 
--------------------------------------------------------------------------- 
或者通过命令形式改变物理日志文件的大小与位置: 
$ onparams -p -d dbspace_name -s phy_log_size 

逻辑日志保存数据在修改后的映像,一般情况下它占整个日志空间尺寸的3/4。逻辑日志空 间的尺寸为逻辑文件尺寸与逻辑日志文件个数的乘积。逻辑日志文件的个数不 得少于 3个。 
启动 onmonitor,如果需要增加逻辑日志文件数选择 Parameters菜单项后再选择 Add-log,如果需要减 少逻 辑日志文件数选择 Parameter 菜单项后再选择Drplog。增加逻辑日志时只需在 键盘上输入逻辑日志文件将加入的数据库空间名。如果用户需要将全部逻辑日志移到指定的数据库 空间中去,则需要现在指定的数据库空间中加入足够的逻辑日志文件,然后作一次实际的0级备份和逻辑日志的自动备份(这两项备份将在下一节中讲述),最后将原来的数据库空间中逻辑日志文件删 除。 
--------------------------------------------------------------------------- 
Press ESC to add a logical log. 
Press Interrupt to cancel the option and return to the Parameters menu. 
Press F2 or CTRL-F for field level help. 

ADDING A LOGICAL LOG 

Logical Log Size [ 5000] Kbytes 

Dbspace Name [rootdbs ] 
--------------------------------------------------------------------------- 

或者通过命令形式改变逻辑日志文件的大小,位置与个数: 
$ onparams -a -d dbspace_name -s log_size (增加逻辑日志) 
$ onparams -d -l log_id (删除逻辑日志) 

第四节 数据备份和恢复 
OnLine动态服务器7.1为数据库管理员提供一种联机的增量备份工具,在命令行时,数据库 管理员可以用ontape来作数据备份和逻辑日志备份。还提供了一个具有交互界面和菜单驱动数据库 备份工具onarchive。 
OnLine 动态服务器7.1提供的增量的数据备份,它分成三级,即0级 (Level 0)、1 级(Level 1)和2级(Level 2)。0级备份为数据库空间的全备份,1级备份是最近一次的0 级备份以来的被修改数 据备份,2级备份为最近一次0级备份或1级备份以来被修改数据的备份。在连续的两次同一级备份 中,后一个备份将备份前一个备份已经备份了的数据,例如昨天和今天都做2级备份,则今天的备份必然包含昨天备份的数据。 一次在同一个时候,数据库管理员所保留的数据备份磁盘最多应为三 个,即0级备份带、1级备份带和2级备份带。 一套完整系统备份还应该包括逻辑日志备份带。 


1 建立数据备份 
OnLine动态服务器7.1的命令行数据备份的方法使用ontape命令,数据备份的参数选项为-s, 
$ ontape -s 
这时数据库服务器会提示你将作哪一级的数据备份,你只需在键盘上输入0、1或2,然后按 回车即可。 
2 恢复数据备份 
OnLine 动态服务器7.1的数据恢复既可以在 offline 状态下进行也可以在 online 状态下进行。 
OnLine动态服务器7.1采用ontape来恢复数据,在命令行状态下,数据恢复的选项参数为-r, 
$ ontape -r 

3 数据备份计划 
有了一个良好的备份和恢复的工具以后,数据库管理员如何用好这个工具将是非常重要了。 能否用最少量的磁带、用最短的备份时间来保存最新的时间备份,其关键还在于数据备份的规划。 
例如这样一个数据备份规划,每月的第一天作0级数据备份,每周的第一天作1级数据备份,每天作2级数据备份,当一天中同时需要作多个数据备份时,只做等级较低一级的数据备份。 

第五节 数据储存实体镜象管理 
数据储存块Chunk的镜像为数据库服务器系统的高可靠性和高可用性提供了必要的条件。 数据储存块的镜像保证了数据库服务器系统在一部分数据磁盘或磁盘控制器故障的时候, 数据 不受损失和数据库服务器系统的继续运行。 
1 为数据储存实体增加镜像实体 
数据储存块Chunk的镜像必须首先在定义该实体所在的数据库空间Dbspace是镜像的,也就是说如果整个数据库空间Dbspace没有定义成镜像的话,那么组成这个Dbspace的数据存储块Chunk也就不能作镜像。 
1.1 数据库空间首先被定义为镜像 
这就需要在定义rootdbs和在增加Dbspace时将该Mirror定义成Y。那么对于那些在定义和在 增加数据库空间Dbspace时没有定义Mirror为Y的情况怎样改成允许Mirror呢?这时需要数据库管理员首先将数据库服务器系统关闭,修改$INFORMIXDIR/etc/onconfig中的MIRROR。当数据库服务器系 统没有被定义为镜像的系统中,该项为0,而被定义为镜像的系统中,该项为1,因此对于那些需要 为没有定义成镜像的数据库服务器系统作数据库 空间镜像时,数据库管理员必须首先将该项改成1。 


1.2 构造镜像 
启动onmonitor,选择Dbspace菜单中的Mirror项打开数据库服务器系统镜像的开关。再选择 同一菜单中的Status选项,这里列出了所有的数据库空间的镜像情况,刚才增加镜像的数据库空间的状态为X,说明这个数据库空间Dbspace增加了新的镜像数据存储块。移动上下光标键,将选中项移 到Mirror为X的行,按Ctrl-B,管理员可以看到原数据储存块的Status为PO,而刚才增加的镜像数据存储块的Status为MD,标识该镜像实体还没有激活。移动上下光标键,将选中项移到刚才增加的镜 像数据存储块上,按Ctrl-B,这时数据库服务器系统自动进入recovery状态,在这个状态下,数据库 服务器系统将完成将原数据存储块中信息拷贝到镜像数据存储块的操作。等到全部操作结束,数据 库管理员完成了为一个数据库服务 器系统增加镜像 的工作。 
或者通过命令形式构造镜像。 
$ onspaces -m spacename -p path -o offset -m path offset [-y] 

2 恢复损坏的数据储存实体和镜像实体 
当镜像中一对实体之一出现故障时,数据库服务器系统允许继续工作的,不必立即重构镜 像。 数据库管理员在一个适宜时候对这对实体重构镜像。 
恢复损坏的镜像,需要首先确认实体所对应的磁盘介质是否已经恢复。 
当更换了实体对应的磁盘介质后,需要操作系统上重新定义这个磁盘介质。在一般情况下,用户所定义的数据储存实体和镜像实体的名字是逻辑的, 因此只要重新将这个设备连接到原来 的逻 辑名字即可。对于那些在数据库服务器系统中直接定义物理设备名为数据存储块的用户,则必须把 新设备定义成原来损坏的设备名。 
启动onmonitor,在 Dbspaces 菜单中选择Status项,这里列出了所有在数据库服务器系统中 定义的数据库空间Dbspace 的状态,可以看到镜像损坏的数据库空间的Mirror项为M*。移动上下光 标键,将选中行移动改行 ,按Ctrl-B。 这时管理员可以看到有损坏的数据存储块的 Status项为PD 或MD, 前者表示原数据储存实体损坏, 而后者表示数据镜像实体损坏。 
--------------------------------------------------------------------------- 
Press ESC to return to the Status Menu. 
Move arrow keys to move the cursor 

CHUNKS FOR account 

Chunk Chunk Pages Pages Full Pathname of Chunk Status 
id Offset In Chunk used 

1 0 50000 25000 /usr/informix/workdbs1_primary PO 
2 0 50000 50000 /usr/informix/workdbs1_mirror MD 
--------------------------------------------------------------------------- 

移动上下光标键,将选中行移至损坏的数据存储块上(/usr/informix/workdbs1_mirror),按 Ctrl-B。这时数据库服务器系统自动进入recovery状态,Status为MR,在这个状态下,数据库服务 器将完成这个数据库空间表的两个数据存储块的镜像重构的操作。完成这个操作后,数据存储块 /usr/informix/workdbs1_mirror的状态便从MR变成MO状态。 
这样,数据库管理员完成了对损坏数据储存实体或数据镜像实体中数据的重构。

第五章 数据库服务器系统的安全机制 
在一个运行的数据库服务器系统中,有可能会出现以下三种数据库服务器系统故障: 
1. 由于主机服务器的非正常停机,例如断电等,而导致的数据库服务器系统异常; 
2. 由于主机服务器系统的存放数据磁盘故障,而导致的数据库服务器系统异常; 
3. 由于主机服务器的关键部件故障,而导致的数据库服务器系统异常。 
对于以上三种数据库服务器系统异常,OnLine采用如下四种方案来实现数据库服务器系统高可靠性: 
1.快速数据恢复机制使得主机服务器在非正常停机后的重启时,将未提交的事务滚回,以 恢复停机前的数据一致性; 
2.数据库空间镜像机制使得主机服务器在存放数据一个磁盘发生故障时,能借助镜像数据 空间继续工作,数据库系统管理员可以在适当的时候去恢复故障的磁盘; 
3.远程数据复制机制将一个主机服务器上数据库系统复制到远地的备份服务器上,当本主机 服务器故障时,数据库服务器系统借助远地的备份服务器继续工作; 
4.增量数据备份,使得数据库系统管理员可以在监控和联机状态下进行三个等级的数据备 份。当系统需要使用磁带数据备份恢复时,快速而有效。 OnLine 动态服务器 7.1不但支持数据库系 统的冷恢复,还支持数据库系统管理员的热恢复,即允许数据库管理员在联机状态下,恢复损坏的 数据库空间。 

远程数据复制 
镜像数据存储块是数据库服务器系统的高可用性的一种方案。 OnLine 动态服务器7.1为数 据 库系统提供的另一种高可用性方案是远程数据复制。 通过网络连接起来的计算机系统的互为备 份 来 提高数据库服务器系统的可用性。 

在这两个数据库服务器系统中,主数据库服务器Priamry Server可以接受数据的读写操作, 例如select、insert、update和delete,而备份数据库服务器Second Server仅可以接受读的操作,例如 select。 通常有主数据库服务器来承担企业事务处理的操作和批量数据修改的操作,备份数库据服 务 器承担企业内部的决策支持作业。为了提高主机服务器的利用率,可以在这两个主机服务器上 分别 建两个数据库服务器系统,使得一台主机服务器在作备份数据库服务器的同时作主数据库服务器, 或者在作主数据库服务器的同时作备份数据库服务器。两个数据库服务器必须通过TCP/IP网络协议 来联接,两台数据库服务器可以在同一个局域网上也可以在广域网上,两台数据库服务器的底层可 以用多种物理方法互联,例如以太网、X.25网等等。 
数据复制的原理是,当一个事务操作在主数据库服务器上进行的时候,将数据变化的轨迹从数据库服务器系统的逻辑日志缓冲区(Log. Log Buf )中复制到复制缓冲区(Data Replication Buffer, DR Buf)中,然后通过计算机网络送到远地的备份数据库服务器的逻辑日志缓冲区中, 再由备份数据 库服务器对其操作,写入备份数据库服务器的数据库系统中。因此数据复制 机制的前提是这两个数 据库必须带有日志。 平时,主数据库服务器处于online状态,而备份数据 库服务器则处于read only状态。当主数据库服务器非正常关闭时,备份数据库服务器进入 online 状态。 

两个数据库服务器系统的数据库空间组织、数据存储块结构、大小以及数据库日志必须完全一致。 由于两台主机服务器的硬件结构可能不一,因此在数据库服务器系统定义时,请不要直 接使 用设备 名。在建立数据库服务器系统时,将磁盘设备名联接到一个别名上,如 
# ln -s /dev/rdsk/1s0 online1 
这样可使两台数据库服务器具有相同数据库空间名和数据存储块名。 
两个数据库服务器系统的切换分手动 (MANUAL)和自动 (AUTO)两种方式,而自动切换又 分保留方式 (RETAIN TYPE)和对换方式 (REVERSE TYPE)。手动切换方式当主数据库服务器关闭 以后需要数据库管理员启动备份数据库服务器,使之进入online状态;自动切换方式当主数据库服务 器关闭以后,备份数据库服务器会自动进入online状态,当主数据库服务器系统恢复后,如果我们采用保留方式,那么备份数据库服务器通过 Shutdown 状态回到Read only状态,主数据库服务器启动 后进入Online状态,两个数据库服务器系统的责能不变;如果我们采用对换方式,那么备份数据库服务器保持Online状态不变,主数据库服务器启动后进入Read only状态,相当于原备份数据库服务器上 升为主数据库服务器,而原主数据库服务器降级为备份数据库服务器,两个数据库服务器的责能对 换。可以看到,手动方式需要管理员的控制才能切换,所以它不会因网络的不稳定而错误切换;自 动方式不需要管理员干预切换,如果主数据库服务器系统应答超时太小,可能会引起备份数据库服 务器错误地进入Online状态,因此那些预想的当主数据库服务器系统非正常关闭时,要求备份数据库服务器零时间(极短时间)等待启动在实际意义上是不可行的,通常数据库服务器系统的应答超时可为15秒至60秒。对自动方式的系统,当主数据库服务器系统恢复后,采用保留方式时,备份数据库服 务器需要经过Shutdown状态才能进入Read only状态,当有大量联机用户工作时,这个状态的时间也 许是比较常的;而采用对换方式时,备份数据库服务器系统保持Online状态不变,原主数据库服务器启动以后进入 Read only 状态,因此 相对于保留方 式,它对联机用户操作的影响较小。 
建立数据库复制系统的步骤是: 
首先使用 ln命令分别在两台主机服务器建立完全相同的数据存储块名; 
第二在Quiescant状态下对主数据库服务器系统作0级数据备份和逻辑日志备份; 
第三 将主数据库服务器系统定义为 Primary 并使之进入 Online 状态; 
第四将主数据 库服务器系统的 0级数据备份用冷恢复到备份数据库服务器上; 
第五经备份数据库服务器定义为 Secondary; 
第六将 主数据库 服 务 器系统的逻辑日志备份恢复到备份数据库服务器上并使之进入Read only 状 态。 
下面我通过一个例子来说明数据库服务器复制系统的建立过程。 
主数据库服务器和备份数据库服务器都建立在SCO UNIX 3.2.4.2的操作系统环境上, 它们 分 别名为server_A 和 server_B,它们的号分别为101和102。 
第一步:建立数据库服务器,有三个数据库空间,它们是rootdbs、workdbs和logdbs,分别 用于存放数据库系统的描述信息、用户数据和数据库日志。 每个数据库空间都只对应于一个数据存 储块,它们所对应的磁盘都分别被联接到别名rootchuck1、workchuck1和logchuck1。 将两个数据库 服务器系统关闭。在设定DATA REPLICATION的屏幕中,将Interval设置为15秒, 表示每 15 秒钟 将主 数据库服务器系统的数据传输至备份数据库服务器,将Timeout设置为15秒,表示应答时 间大 于15秒钟时,备份数据库服务器系统进入OnLine状态,同时将Auto设置为1,表示自动切换并取保留方式。 
--------------------------------------------------------------------------- 
DATA REPLICATION: Make desired changes and press ESC to record changes. 
Press Interrupt to abort changes. Press F2 or CTRL-F for field-level help. 
DATA REPLICATION PARAMETERS 

Interval [ 15] 
Timeout [ 15] 
Auto [1] 
Lost & Found [/usr/informix/etc/dr.lostfound ] 

第二步:启动主数据库服务器server_A,使之进入Quiescent状态。然后用ontape -s和ontape -a作0级数据备份和逻辑日志备份,逻辑日志备份时当前的逻辑日志文件也要备份。 
第三步:用onmode -d primary server_B设置该数据库服务器为server_B的主数据库服务 器, 然后使用命令 onmode -m 使server_A进入OnLine状态。 
第四步:将0级备份磁盘装入备份数据库服务器的驱动器中,用 ontape -p 命令将备份恢复到 备份数据库服务器上,当数据库服务器提示是否备份逻辑日志时,回答 N。 
第五步:用 onmode -d sercondary server_A 设置该数据库服务器为server_A 的备份数据 库服务 器。 
第六步:将逻辑日志备份磁盘插入备份数据库服务器的驱动器中,用命令 ontape -l 来滚回0 级数据备份以后的数据操作。全部操作结束后,备份数据库服务器便进入 Read only状态。 
接下来我们验证所做的数据库复制系统。取两台终端,1号终端登录server_A,2号终端登 录server_B。 
第七步:在1号终端上使用命令dbaccessdemo7-log建立演示数据库stores7。 在2号终端上, 在dbaccess中选择Database菜单,反复选择Select项,在15秒钟以后,屏幕上将出现stores7的数据库 名字。 
第八步:在1号终端上,在dbaccess中选择QueryLanguage菜单中的New项,输入 
insert into customer (fname,lname) values ("AA","BB"); 
然后再按ESC键,退出SQL的编辑状态。在2号终端上,也在dbaccess中选择QueryLanguage 菜单中的New项,输入 
select count(*) from customer where fname="AA" and lname="BB" 
然后再按ESC键,退出SQL的编辑状态。 
我们在1号终端上,按两下R,然后在2号终端上反复地按R,大约15秒钟,2号终端的屏幕会显示出计数为2。 
第九步:在1号终端上,退出dbaccess,然后输入命令onmode -ky, 关闭主数据库服务器系 统。 在2号终端上,我们现按!,然后输入onstat -ur,我们将先看到数据库服务器的状态为Read only, 然后变成 Recovery,最后变成Online,这时我们按DEL键。我们再次选择New,输入命令: 
insert into customer (fname,lname) values ("CC","DD"
然后再按ESC键,退出SQL编辑状态,按三次R,接着我们退出dbaccess。在命令行输入命令onstat -ur。 
现在我们在1号终端上输入命令oninit和onstat -ur。1号终端上马上显示数据库服务器系统为 Fast recovery。这时2号终端上显示数据库服务器系统的状态变为Shutdown。几分钟后,1号终端上 显示上显示主数据库服务器系统的状态回到 Online,而2号终端上则显示备份数据库服务器系统的 状态回到原先的Read only。 
第十步:我们在1号终端上,再次进入dbaccess,选择Query Language中的New项,输入 
select fname,lname from customer where fname="CC" 
运行该语句。终端屏幕上将显示出 数据“CC”和“DD”。 
至此我们的例子做完了。当关闭数据库服务器复制系统时,我们应该先备份数据库服务器后主数据库服务器。而启动时则应先主数据库服务器后备份数据库服务器。

第六章 数据库服务器的应用 
通常用户按缺省方式建立数据库和表,OnLine的这些概念和技术对他的影响是有限的。在确省情况下,用户的数据库和表都建立在rootdbs中,每个表的extent为8页,以后为4页,并且数据库不带日志,数据表的琐方式为页级琐。 
其实用户可以根据其系统的特点了建立其数据库和表,使得系统有较高的运行效率和易于管理的特点,下面将描述在建立用户系统时如何使用OnLine的概念和技术。 

第一节 建立用户数据库 
用户可根据自己的要求将他的数据库建立在指定的数据库空间中,当然该数据库空间必须首先存在。 
CREATE DATABASE employee IN company  
以上SQL命令将数据库employee建立在名为company的数据库空间中。 
CREATE DATABASE employee WITH LOG  
CREATE DATABASE employee WITH BUFFERED LOG  
以上两条SQL命令在建立数据库employee市分别要求带UNBUFFERED和BUFFERED日志。 
OnLine的日志除了满足事务的提交和滚回,同时还是一种数据库安全机制。当系统由于断电或其他的原因使数据库服务器系统停 止运行,但是当它下一次启动时,数据库服务器系统将会根据 前一次停止工作时留下的日志 来滚 回 没有完成的事务。 UNBUFFERED 日志要求数据库每当有事 务提交时,立即将数据从共享 内存写回磁盘;而BUFFERED日志则并不因为事务提交即将数据从共 享内存写回磁盘,它只是当共享内存中的 Logical log buffer空间满或者当OnLine的定时共享内存数据 写回磁盘操作 Checkpoint 来到时,才将数据从 Logical log buffer 写回到日志文件。如果一个事务已 经提交,但共享内存并没有满,同时 Checkpoint 也没有进行时,系统发生非正常停机,当数据库服 务器系统再次启动时,由于该提交的事务并没有被写回磁盘,OnLine将根据在其数据空间中的日志 来滚回该操作。因此,带UNBUFFERED日志的数据库对已经提交的事务来说安全性较好,而带BU-FFERED数据库则运行效率较高。不带日志的数据库虽然运行效率最高但它不具有在系统非正常停机后自动滚回失败事务的能力,只能用数据备份来恢复。 综合上面的SQL 命令就得到下面的建立数据库的命令: 
CREATE DATABASE employee IN company WITH LOG; 
CREATE DATABASE employee IN company WITH BUFFERED LOG. 
对于一个建立的不带日志数据库,希望使它带日志;或者一个带日志的数据库,希望改变它的日志类型,用户可通过onmonitor 实用工具来实现。运行 onmonitor后,选择 Logical-logs菜单, 然 后再选择Databases菜单,屏幕上显示出日志的四种类型,将选中项移到需要的日志类型上,按Contr- ol-B键,OnLine便将该数据库的日志修改成用户所需要的类型。 改变了数据库的日志类型 后, 用 户必须作数据库的0级备份。 

















----------------------------------------------------------------------- 
Press ESC to return to the Logical Logs Menu. 
Use arrow keys to select a logging option. 
Press F3 or CTRL-B to choose the type oflogging. 

Database Current Log Status 

accounting Unbuffered Logging 

OPTIONS FOR DATABASE LOGGING 

No Logging 

Unbuffered Logging 

Buffered Logging 

Unbuffered Logging, Mode ANSI 
----------------------------------------------------------------------- 

第二节 建立用户数据表 
用户也可以根据自己的需要,将一个或几个表将来在指定的数据库空间中,例如: 
CREATE TABLE employee 
( empno SMALLINT NOT NULL, 
fname CHAR(15), 
lname CHAR(15), 
.... 
resume TEXT IN multi, 
picture BYTE IN mutli, 
PRIMARY KEY (empno) 
) IN company; 
在该命令中表 employee 被建立在company 的数据库空间中,并且用户已经建立了二进制大 对象数据空间,resume和picture被建立在名为multi的二进制大对象数据空间中。根据这些命令和前 面已经叙述的 OnLine 概念,我们不难做到将一个或数个数据库或者表建立在指定的磁盘中,可以 按照 下面的指示将这些数据库和表联系起来。 
用户除了可以直接指定其数据库表存放的数据库空间,还可以定义数据存放时数据连续页 的大小和以后数据连续页以什么尺寸来增加, 
CREATE TABLE employee 
( empno SMALLINT NOT NULL, 
fname CHAR(15), 
lname CHAR(15), 
.... 
resume TEXT IN multi, 
picture BYTE IN mutli, 
PRIMARY KEY (empno) 
) IN company 
EXTENT SIZE 1024 
NEXT SIZE 16; 
上面的命令用户定义了employee的初始化数据连续页的大小为1024KB,比较大数据连续页 就意味着该表有初始化时有较多的数据页连续的存放在一起,有利于数据存取效率的提高, 该用 户希望初始化时有1024KB的连续空间来存放其单位现有的员工信息,而以后的员工信息的变化则 较小,因此他定义下一个的数据连续页为16KB。 
关于数据连续页需要量的准确计算可查阅INFORMIX数据库有关手册。 

第三节 建立分布式数据库访问 
假设在我们网络上有三个服务器,分别为account、warehouse和staff数据库服务器,它们对 应的service分别是sqlacc,sqlware和sqlsta, 网络选用tcp/ip协议。 
1 Server 端的设置: 
在Server设置三个文件/etc/hosts、/etc/hosts.equiv、/etc/services和$INFORMIXDIR/etc/sqlho-sts。/etc/hosts文件中描述了网络中所有的机器的名字和其地址, /etc/services 文件中描述了数据库的 service名字及其端口号,$INFORMIXDIR/etc/sqlhosts文件中描述了数据库名字、service名字和网络 服务器之间的关系,以及网络协议和数据库服务器的类型。因此对于我们的上述假设系统,在三 个网络服务器上的设置如下: 
在 /etc/hosts 设置网络节点 
132.147.160.1 beijing 
132.147.160.2 changsha 
132.147.160.3 guangzhou 
在 /etc/hosts.equiv 设置网络节点名 
beijing 
changsha 
guangzhou 
在 /etc/services 最后加上数据库服务的service名字 
sqlacc 2000/tcp 
sqlware 2001/tcp 
sqlsta 2002/tcp 
在该文件的设置时尤其要注意的是第二项service的网络端口号不能与文件中已经存在的重 复,tcp表示网络采用tcp/ip。 

在$INFORMIXDIR/etc/sqlhosts设置数据库服务器与网络服务器、service名字间的关系以及 所使用的网络协议。 
account ontlitcp beijing sqlacc 
warehouse ontlitcp changsha sqlware 
staff ontlitcp guangzhou sqlsta 
上面的设置中第二项由三部分组成:第一部分on表示数据库服务器采用OnLine,第二部分tli表示通讯协议为tli,第三部分tcp表示网络采用tcp/ip协议。 
2 分布式数据库的操作 
当位于网络服务器changsha的数据库服务器warehouse接收到一个SQL命令, 
INSERT acc@account:tab1 
SELECT * 
FROM ware@warehouse:tab1 
WHERE ware@warehouse:tab1.col1 IS NOT IN 
( SELECT acc@account:tab1.col1 
FROM acc@account:tab1) 
该命令将那些ware@warehouse:tab1中不存在于acc@account:tab1的记录插入到acc@account:tab1中。但是数据库ware@warehouse存放在网络服务器changsha上,而数据库acc@account存放在网络 服务器beijing,于是便要使用上面设置的文件来实现分布式的数据操作。首先位于 changsha的数 据库服务器warehouse接收到该SQL命令后,需要操作在数据库服务器account中的数据库acc,便查询 $INFORMIXDIR/etc/sqlhosts中有关数据库服务器account的描述,知道该数据库服务器位于网络 服 务器 beijing上,并且其 service名字为sqlacc,于是又从/etc/hosts和/etc/services中得到网络服务器 beijing 网络 地址为 132.147.160.1 和数据库服务器 account 对应的 sevicesqlacc对应的网络端口号为 2000, 便通过2000端口号向网络地址为132.147.160.0机器提出数据操作的请求。在通 常情况下, 当前的 数据库服 务器名字和数据库名字是可以省略的,因此上述命令也可以是: 
INSERT acc@account:tab1 
SELECT * 
FROM tab1 
WHERE col1 IS NOT IN 
( SELECT acc@account:tab1.col1 
FROM acc@account:tab1) 
不过后一种形式只能在 SQL 命令直接发到位于changsha 网络服务器上数据库服务器ware- house 时才是正确的,而前一种形式则在任何一个网络服务器上的都是正确的。为了简化操作命令 可以 通 过在这些数据库服务器中定义同义名表来实现,详细方法可参考CREATE SYNONYM。

阅读(673) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~