解析Informix TRAIN 文档
本期数据库教程精彩主要介绍了Informix TRAIN 文档,快来了解一下吧!
一、磁盘数据组织结构
在INFORMIX-OnLine的磁盘数据组织结构中的最上层为逻辑概念上的数据库空间dbspace,每一个数据库空间都有一个或若干个物理单位数据存储块chunk组成,镜像数据存储块mirror保证当根数据存储块故障时,OnLine能够继续工作。每一个数据存储块都有若干个数据页page组成,为了提高输入和输出效率,若干个连续的数据页组成数据连续页extent。用户的数据库database和数据表table存储在缺省的或者指定的数据库空间中,数据表的逻辑概念上的存储空间数据表空间tblspace有一个或若个安数据连续页extent组成,数据记录row存放在数据页page中。
为更好的的支持多媒体应用,多媒体数据可以存放在二进制大对象数据页Blobpage中,若干个二进制大对象数据页在此二进制大对象空间Blobspace。 OnLine使用逻辑日志Logicallog、物理日志Physicallog来管理数据库日志操作。
1.数据存储块chunk
INFORMIX-OnLine的数据存放在物理上连续的数据存储块chunk中,数据存储块是OnLine数据存储的最大的物理单位。数据存储块可以有两种构造方法,其一是直接构造在系统的物理磁盘上,其二是构造在操作系统的文件或者卷上。
在第一种情况下,在操作系统上仅仅定义了这个(块)磁盘但没有格式化这个(块)磁盘,因此在这上面的所有数据操作都有OnLine来完成,操作系统对它不存在任何管理,数据空间在物理磁盘上连续,这种数据的存储空间称为原始空间rawspace。
而在第二种情况下,操作系统不仅定义了这个数据存储空间(文件),还管理这个数据存储空间(文件),数据文件操作时的内存缓冲、输入与输出。数据空间的建立受操作系统的制约,在物理存储上不连续。我们称这种数据存储空间为非原始空间cookedspace。
比较这两种数据的存储空间,原始空间在磁盘上连续,没有操作系统的缓存和制约,非原始空间在磁盘上不连续,存在着操作系统的缓存和操作系统的输入/输出的制约,因此在实际应用中,采用原始空间效率高于非原始空间,由于原始空间与系统设备有关,同时不同操作系统对设备的定义的不一致性,定义非原始空间比定义原始空间来得简单。我们将原始空间所对应的磁盘称原始设备rawdevice,而将非原始空间所对应的操作系统文件称操作系统文件cookedfile。
为了进一步提高数据库运行的效率,我们通常选用字符设备作为存放实际的原始设备,这样在我们输入/输出数据时,可以充分发挥系统的DMA能力。当我们使用原始设备时,可以在同一个原始设备上建立多个数据存储块。通过对数据存储块的参数OFFSET和SIZE的定义,其单位为KB,我们可以定义多个数据存储块在同一个磁盘或磁盘块上,参数OFFSET定义数据存储块的起始位置,参数SIZE定义数据存储块的大小,用户在设置参数OFFSET和SIZE时必须保证在物理磁盘上没有相互覆盖。
在原始设备/dev/rdsk/c0t1d1s0上建立三个数据存储块chunk1、chunk2和chunk3,它们的大小分别为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新的动态服务器OnLineDynamicServer7.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的动态服务器OnLineDynamicServer(ODS)在其共享内存的结构上增加了两个功能模块。在OnLine5中,其共享内存仅有一个区域,驻留区Residentportion;动态服务器ODS7.1除了驻留区Residentportion外还增加了虚拟区Virtualportion和通讯区Communicationportion。
1、操作系统参数对数据库服务器共享内存的影响
操作系统的共享内存参数对数据库服务器的共享内存的定义和建立会产生极大的影响。对INFORMIX来说,数据库服务器的共享内存绝对不能超过操作系统共享内存定义的允许范围。一个OnLine动态服务器7.1的共享内存不能超过操作系统所定义的一个UNIX进程所允许访问共享内存的极大值,由于操作系统对共享内存的定义往往不能满足OnLine动态服务器7.1的需要,因此,数据库管理员通常需要在建立其数据库应用系统以前,首先调谐操作系统的共享内存参数。
对于OnLine动态服务器7.1来说,操作系统的参数对它们的影响,在共享内存锁资源管理方面和虚拟处理器对共享内存访问操作方面是不全部相同的。它们对操作系统参数的要求也是不一样的,因此需要数据库管理员根据产品来决定操作系统的参数,在决定这些操作系统的参数前,请先阅读产品说明文件。例如OnLine动态服务器7.1的$INFORMIXDIR/release/ONLINE_7.1,在这个文件中它向数据库管理员阐述该INFORMIX产品在该机器平台上对操作系统参数的要求。同一种产品在不同的平台上,对该平台操作系统参数的要求非常有可能是不一样的;在同一平台上,同一产品的不同版本对操作系统参数也很有可能是不同的。
2、处理器资源组织结构
OnLine动态服务器7.1采用多进程Multi-processes多线索Multi-treads的数据库服务器机制,将每一个服务器进程根据用户定义分解成若干个线索,每一个线索响应一个用户的设计访问的请求。INFORMIX将每一个进程称作一个虚拟处理器Virtualprocess。
在以前的多处理器系统中,往往将用户的应用程序和系统的处理器CPU对应起来,每一个处理器都分别处理一个用户的应用程序;当应用程序数量多于处理器数目时,应用程序为争夺处理器资源CPU,而引起应用程序在运行时间上的不平衡;同时当应用程序的数量少于处理器数目时,由于一些处理器资源得不到运用而空闲,导致处理器资源运用上的不平衡。一种比较好的方法是将处理器与应用所需要的处理器分离开来,然后由数据库系统来平衡这种需求。在INFORMIX动态服务器中,用户应用程序发出的数据操作请求被称作虚拟处理器的服务器进程所接收,然后OnLine均匀地将这些服务器进程分配到系统实际的处理器CPU上。这样就较好地解决了上面所提到的两种不平衡状态。
在ODS7.1中每一个数据库服务器进程都称作一个虚拟处理器Virtualprocess,简称VP。若干个相同功能的虚拟处理器组成一个虚拟处理器类VirtualprocessClass,简称VPClass,每一个VPClass都表示一种功能的虚拟处理器。OnLine一共有七种虚拟处理器,它们是:
处理器虚拟处理器CPUVP,响应所有用户和OnLine系统对CPU资源的操作和协调。
磁盘输入输出虚拟处理器DiskI/OVP,响应用户和OnLine系统的磁盘输入输出请求,磁盘输入输出处理器分三种,异步输入输出AsynchronousI/O、物理日志输入输出Physical-logI/O和逻辑日志输入输出Logical-logI/O。
网络通讯虚拟处理器NetworkVP,响应用户的网络联接的请求。ODS的网络虚拟处理器有三种,它们分别用于管理tli、soc和ipc三种网络通讯接口。
系统管理虚拟处理器AdminstrationVP,运行OnLine系统管理程序和一些专职程序。
光盘虚拟处理器OpticalVP,当用户运行OnLine/Optical时管理光盘系统的运转。
审计虚拟处理器AuditVP,当用户系统需要一定的运行时数据安全性的时候,审计虚拟处理器在后台帮助检查每一个用户操作的合法性。
杂项管理虚拟处理器MiscellaneousVP,用于管理所有以上虚拟处理器不作的工作。 三、数据库服务器的初始化
1、数据库服务器初始化时的考虑
用户在建立和初始化其数据的时候,最重要考虑的问题是:数据存储实体选用哪种方案,rawevice还是cookedfile,是否对数据库空间建立镜像,怎样建立?对于OnLine动态服务器7.1的使用者还可以考虑数据库系统是否需要数据复制的安全系统以及如何建立数据复制等等问题。
Rawdevice和cookedfile对于OnLine来说其概念和管理是一致的,因此对较小的数据库系统其效果相差无几,但对大数据库系统,由于cookedfile采用unix的I/O机制,而rawdevice则采用On-Line自身的I/O机制,因此在效率上rawdevice会明显快于cookedfile,且rawdevice的数据安全性也高于cookedfile,假设用户不小心删除数据储存实体chunk的文件名后,以cookedfile方式定义的数据库将被删除,而以rawdevice方式定义的数据储存实体Chunk只是描述它的设备文件名被删除,作为真正的存储数据的数据库空间并没有受到影响,通过重新建立设备文件名的方法,该数据储存实体不难恢复,而cookedfile则无法恢复。
另外从效率上考虑,Rawdevice的使用在unix系统上还有块设备和字符设备之分,用unix命令ls-l列设备目录,我们可以看到,有些设备文件名的标识为b而另一些则为c,其中标识为c的设备为字符设备,作为OnLine数据储存实体来说,字符设备更有利于发挥主机服务器的DMA能力,所以我们总是定义字符设备为数据储存实体。
数据存储空间的镜像与数据库服务器的复制是OnLine的数据安全机制,我们将在数据安全的章节中给以详细的讲述。
2、操作系统上的准备工作
在建立和初始化数据库服务器系统的时候,需要作的准备工作有以下几点:
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在共享内存及信号量等方面的需要。
用系统提供的参数管理的工具(例如SCOUNIX的sysadmsh)来进行调整。需要调整的参数也因数据库产品的版本不同而有所不同,具体可以在成功地安装了数据库服务器后,查看$INFORMIX-DIR/release/ONLINE_7.1中对操作系统参数要求的说明。
例如对于在SCOUNIX3.2.4.2平台上使用OnLine7的用户,需要调整的核心参数有SHM-MAX、SHMSEG、SHMMNI、SEMMNI和SEMMSL。因此用户可注册到root,然后运行sysad-msh,在菜单中选择System,然后选择Configure,再选择Kernel,在Kernel选项中选择Parameter,然后调整第9项SharedData中的参数SHMMAX、SHMSEG和SHMMNI以及第8项Semphore中的参数SEMMNI和SEMMSL,设置完毕后在Kernel选项中选择Rebuild,重新构造unix引导核心。然后退出sysadmsh,并重新启动unix。同时需要注意的是,在重新构造核心后,数据库服务器存储原始设备名的属主和组定义的改变。
3、建立数据在磁盘上组织实体
数据在磁盘上以数据存储块的形式存在,但在逻辑上则是以数据库空间的形式存在。每一个数据库空间至少有一个数据存储块,其中最先定义的数据存储块为主数据存储块,而其它的数据存储块则为附加数据存储块。同时在所有的数据库空间中必定有一个根数据库空间(rootdbs)。建立数据在磁盘上的组织实体是建立与逻辑概念的数据库空间相对应的数据存储块。数据存储块的组织方式有两种:原始磁盘设备形式和UNIX文件形式。相比起来,原始磁盘设备形式具有较高的运行效率和可靠性,但是原始磁盘设备形式的数据存储块的建立需要数据库管理员对数据库服务器所运行的系统的磁盘设备的描述具有足够的知识和经验。
原始磁盘设备形式的数据存储实体的建立方法是将一个特定的原始磁盘(或部分磁盘)用UNIX的链接命令ln链接到一个便于记忆和管理的设备文件。例如在AT&TSVR4系统中,有一个磁盘/dev/rdsk/c0t1d1,而定义中的原始磁盘设备名为rootdbs1,因此数据库管理员以root用户注册,然后用以下的命令来构造数据存储实体:
#cd$INFORMIXDIR
#ln/dev/rdsk/c0t1d1rootdbs1
#chmod660rootdbs1
#chowninformixrootdbs1
#chgrpinformixrootdbs1
UNIX文件形式的数据存储实体的建立方法是产生一个0字节的UNIX文件,使用命令如下:
#cd$INFORMIXDIR
#cat/dev/null>rootdbs1
#chowninformixrootdbs1
#chgrpinformixrootdbs1
4、建立数据库服务器共享内存
至此,我们可以开始初始化数据库服务器,以informix用户注册,用命令onmonitor命令。在初始化前必须正确地定义了环境变量INFORMIXDIR、PATH和INFORMIXSERVER以及文件$INFORMIXDIR/etc/sqlhosts、/etc/hosts、/etc/hosts.equiv和/etc/services。
首先注册到informix,运行onmonitor,在菜单中选择Parameter,然后选择Initialize,便进入数据库空间初始化的屏幕。然后设置在屏幕上显示的参数。
INTIALIZATION:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
DISKPARAMETERS
PageSize[2]KbytesMirror[N]
TapeDev.[/dev/rct0]
BlockSize[16]KbytesTotalTapeSize[150000]Kbytes
LogTapeDev.[/dev/rct0]
BlockSize[16]KbytesTotalTapeSize[150000]Kbytes
BootName[rootdbs]RootSize[20000]Kbytes
PrimaryPath[/usr/informix/rootdbs1]
Offset[0]Kbytes
MirrorPath[]
Offset[0]Kbytes
Phy.LogSize[1000]KbytesLog.LogSize[500]Kbytes
NumberofLogicalLogs[6]
第一屏设置完成后按ESC,onmonitor在完成数据库空间初始化以后便接着要求用户设置共享内存。如果用户在以后需要调整共享内存时可以运行onmonitor,然后选择Parameters菜单,再选择Shared-Memory项。对于初次调整共享内存,用户需要注意的是ServerNumber是不可以重复的,并且ServerName以小写为好,尤其是对于用户需要建立分布式数据库系统的情况更为重要。可以说对用户影响最大的BUFFERS和LOCKS。
SHAREDMEMORY:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
SHAREDMEMORYPARAMETERS
ServerNumber[10]ServerName[online7]
ServerAliases[]
DbspaceTemp[]
DeadlockTimeout[60]SecsNumberofPageCleaners[1]
ForcedResidency[N]StackSize(Kbytes)[32]
NonRes.SegSize(Kbytes)[8000]
PhysicalLogBufferSize[32]Kbytes
LogicalLogBufferSize[32]Kbytes
MAX#ofLogicalLogs[6]TransactionTimeout[300]
MAX#ofTransactions[20]LongTXHWM[50]
MAX#ofUserthreads[20]LongTXHWMExclusive[60]
MAX#ofLocks[2000]IndexPageFillFactor[90]
MAX#ofBuffers[200]AddSegSize(Kbytes)[8192]
MAX#ofChunks[8]TotalMemory(Kbytes)[0]
MAX#ofOpenTblspaces[200]
MAX#ofDbspaces[8]
============
Sharedmemorysize[864]KbytesPagesize[2]Kbytes
EnterauniquevaluetobeassociatedwiththisversionofINFORMIX-OnLine.
设置完共享内存后按ESC键,OnLine便初始化共享内存,当OnLine成功地初始化共享内存后,OnLine便进入第三个屏幕数据库服务器性能参数调整。在这个屏幕中用户说明OnLine动态服务器7.1所运行的计算机是否一个SMP体系结构的计算机,若是则置MultiprocessorMachine为Y,否则为N。当MultiprocessorMachine为Y时,用户可以进一步地设置有多少个服务器进程与CPU结合(NumProcstoAffinity),并且从第几个CPU开始与数据库服务器进程结合(Procnumtostartwith)。如果该计算机为单处理器计算机系统,则设置SingleCPUVP为Y,否则为N。怎样设置CPUVP和AIOVP,在“InformixODS性能指南”一书中有详细介绍。在屏幕的右下方是该数据库服务器的网络链接形式的定义,它必须与$INFORMIXDIR/etc/sqlhosts中的设置相符。例如在$INFORMIX-DIR/etc/sqlhosts中定义数据库服务器online的网络链接形式为onsoctcp,则在NETTYPEsettings中设置Protocol为soctcp,其它项可先用其缺省值。
PERFORMANCE:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
PERFORMANCETUNINGPARAMETERS
MultiprocessorMachine[N]LRUMaxDirty[60]
NumProcstoAffinity[0]LRUMinDirty[50]
Procsnumtostartwith[0]CheckpointInterval[300]
NumofReadAheadPages[4]
CPUVPS[1]ReadAheadThreashold[2]
AIOVps[2]
SingleCPUVP[Y]NETTYPEsettings:
UseOSTime[N]ProtocolThreadsUsersVP-class
DisablePriorityAging[N][soctcp][][][]
Off-LineRecoveryThreads[10][][][][]
On-LineRecoveryThreads[1][][][][]
NumofLRUSqueues[8][][][][]
设置完这一屏参数后,按ESC。接下来我们将设置动态数据复制、运行监控和并行数据操作等参数,由于目前数据库系统处于初建阶段,暂不考虑动态数据复制,当系统进入该屏幕后按ESC。
DATAREPLICATION:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
DATAREPLICATIONPARAMETERS
Interval[30]
Timeout[30]
Auto[0]
Lost&Found[/usr/informix/etc/dr.lostfound]
这时系统进入运行监控屏幕,在这屏幕中我们将定义系统运行的信息日志文件以及当系统运行发现问题时,系统的运行状态将写到那一个目录下。
DIAGNOSTICS:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
DIAGNOSTICPARAMETERS
MessageLog[/usr/informix/online.log]
ConsoleMsgs.[/dev/console]
AlamProgram[]
DumpSharedMemory[Y]
DumpGcore[N]
DumpCore[N]
DumpCount[2]
DumpDirectory[/tmp]
设置完运行监控参数后,按ESC键。这时系统进入最后一个设置屏幕,并行数据操作屏幕,由于我们刚开始建立数据库系统,暂不考虑并行数据操作参数的设置。因此我们按ESC键来结束我们的数据库服务器初始化操作过程。
PDQ:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
PARALLELDATABASEQUERIESPARAMETERS
PDQPriority[100]
MaximunPriority[100]
DecisionSupportQueries[10]
DecisionSupportMemory(Kbytes)[8192]
MaximunDecisionSupportScans[4]
Dataskip[]
OptimizerHint[0]
当数据库服务器初始化成功时,系统处于quencent状态。这时用户可在菜单上选择Exit,退出Parameters,然后选择Mode,再选择Online,INFORMIX-OnLine便进入online状态。
5、初始化处理器资源
OnLine动态服务器7.1采用多进程多线索体系结构,即用较少的数据库服务器进程来作所有的数据库操作,因此处理器资源的利用将直接影响用户系统的运行性能。处理器资源的初始化可以的数据库系统初始化的过程中实现,也可以在以后用onmonitor实用程序的Parameters菜单中的Perf-ormance项来进行,参数调整以后需重新启动数据库服务器才能有效。同时在系统的运行过程中,用户可以根据自己的需要,通过onmonitor实用程序的Mode菜单中的Add-proc和Dropproc随时调整系统的处理器资源,而不需要重新启动数据库服务器。
6、数据库服务器的状态
INFORMIX-OnLine具有五个不同的状态,它们分别是online、quiesent、recovery、shut-down和offline。这五个状态分别是为OnLine运行中不同目的而设计的。
Mode:StartupOn-lineGraceful-shutdownImmediate-shutdownTake-offline…
online状态是系统响应联机用户数据库访问的状态。在这个状态下,用户可以查询、插入、修改和删除他们的数据,以及各种简单或复杂的事务处理。
quiesent状态是数据库管理员管理系统的状态。在这个状态下,除了数据库管理员,任何普通用户都不能进入数据库系统,不能对数据库作任何的访问和操作。通常在这个状态下,数据库管理员进行数据备份、批量处理、调整OnLine参数以及其它各种数据库系统的管理。
recovery状态是OnLine为保持数据库一致性而进行的内部事务处理状态,因此这个状态拒绝任何人访问数据库系统,包括数据库管理员。
shutdown状态是OnLine关闭前的一个等待联机退出的状态。在这个状态下,已经进入数据库系统,并且正在进行数据库访问或操作的用户被要求尽快结束工作,退出数据库系统,而尚未联机和那些没有进行数据库访问和操作的用户将被拒绝进入数据库系统。
offline状态是OnLine处于关闭的状态。
7、数据库服务器的启动与关闭
启动和关闭OnLine最简单的方法onmonitor,选择Mode,然后用Startup和Online来启动数据库服务器。或者用Take-offine来关闭数据库服务器。
通过命令形式,oninit启动数据库服务器;onmode-ky关闭数据库服务器。
从系统管理的角度来看,最好是在系统启动的最后自动启动数据库服务器和在系统关闭时最先关闭数据库服务器。这样便需要建立启动文件和关闭文件。
以SCOUNIX为例,启动文件建立在/etc/rc2.d目录下,其名字可以是S99informix,启动文件如下:
INFORMIXSERVER=online7
INFORMIXDIR=/usr/informix
PATH=$PATH:$INFORMIXDIR/bin
exportINFORMIXSERVERINFORMIXDIRPATH
exho”StartupOnLineDynamicServer”
oninit&
ipcs-bm
命令ipcs用于检查unix系统的共享内存和信号量,用这种方法可以很容易地知道数据库服务器是否正常地启动。
关闭文件建立在/etc/rc0.d目录下,其名字可以是K01informix,关闭文件的内容如下:
INFORMIXSERVER=online7
INFORMIXDIR=/usr/informix
PATH=$PATH:$INFORMIXDIR/bin
exportINFORMIXSERVERINFORMIXDIRPATH
echo”StopOnLineDynamicServer”
onmode-ky&
ipcs-bm
四、数据库服务器系统的管理
通过三中的实践,用户可以建立起一个最初步的数据库服务器系统,它有一个数据库空间Dbspace,该数据库空间被称作rootdbs。rootdbs有一个数据存储块chunk。数据库服务器系统的定义、用户数据库和数据库日志都存放在这个chunk中。然而对于一个实际的数据库应用系统,希望数据库服务器系统的定义、用户数据库和数据库日志分别存放在不同的数据空间中,以达到比较理想的运行效率和方便简洁的数据库系统管理。本章中我们将讨论如何为一个数据库服务器系统增加一个数据库空间Dbspace和如何为一个数据库空间增加一个数据存储块chunk。
1、增加数据库空间Dbspace
在自定义Dbspace前,用户必须为用户自定义的Dbspace定义一个数据储存块Chunk,然后启动onmonitor,用Dbspaces中的Craete将该Chunk赋予用户自定义的Dbspace。
例如在一个SCOUNIX应用系统中,用户需要为其应用数据库系统定义一个数据库空间Dbspace,其名字为workdbs1,并且这个Dbspace的第一个Chunk的大小为100MB,其名字为workdbs1_primary。现在用户决定将workdbs1_primary定义在/dev/rdsk/0sa所对应的磁盘空间上,环境变量INFORMIXDIR=/usr/informix。步骤如下:
1.1注册到root,
#cd/usr/informix
#ln/dev/rdsk/0saworkdbs1_primary
#chowninformixworkdbs1_primary
#chgrpinformixworkdbs1_primary
#chmod660workdbs1_primary
#exit
1.2注册到informix,
$onmonitor
选择Dbspaces后按Enter键,再选择Create,屏幕上显示出增加Dbspace的格式。
用户在DbspaceName中输入workdbs1,在Mirror中输入Y。在PRIMARYCHUNKINFORMATION下面的FullPathname中输入/usr/informix/workdbs1_primary,在Size中输入100000。MIRRORCHUNKINFORMATION下面的FullPathname为镜像数据存储块的全路径名,在这里没有输入。然后按ESC键,数据库服务器系统就将用户自定义的数据库空间workdbs1加入rootdbs的管理区(保留页)中。OnLine动态服务器7.1允许用户定义临时数据库空间Tempdbs,如果某一个数据库空间是临时数据库空间则置Temp为Y,否则为N。当某一个数据库空间为临时数据库空间时,它同时需要在共享内存的设置屏幕中的TempDbspace有正确的描述。
PressESCtobuildanewdbspace.
PressInterrupttocanceltheoptionandreturntotheDbspacemenu.
PressF2orCTRL-Fforfieldlevelhelp.
CREATEDBSPACES
DbspaceName[workdbs1]Mirror[N]Temp[N]
PRIMARYCHUNKINFORMATION:
FullPathname[/usr/informix/workdbs1_primary]
Offset[]KbytesSize[100000]Kbytes
MIRRORCHUNKINFORMATION:
FullPathname[]
Offset[]
或者通过命令形式增加Dbspace
$onspaces-cspacename[-t]-ppathname-ooffset-ssize[-mpathoffset]
1.3 在用户自定义的数据库空间中建立数据库
启动isql或dbAccess,选择Query-language后,再选择New项,输入
CREATEDATABASEstoresINworkdbs1WITHBUFFEREDLOG
然后按ESC,运行这个SQL命令,一个带BUFFERED日志的数据库stores建立在数据库空间workdbs1中。启动tbmonitor或onmonitor,用户可以在Status中的Database项中看到自己所定义的数据库。
2、增加数据储存实体Chunck
数据库空间Dbspace仅仅是数据库存在的逻辑空间,数据库存在于真正的物理空间是数据储存块Chunk,因此它的空间总是有限的,当数据储存接近它的限度时,数据库管理员就要考虑为这个数据库空间增加一个数据储存块Chunk。增加一个数据存储块,其做法如下:
2.1注册到root;
#cd/usr/informix
#ln/dev/rdsk/1saworkdbs2_primary
#chowninformixworkdbs2_primary
#chgrpinformixworkdbs2_primary
#chmod660workdbs2_primary
#exit
2.2注册到informix,
$onmonitor
选择Dbspaces菜单后,再选择Add_chunk,屏幕上显示出当前系统中所有的数据库空间,移动光标上下键,将选中项移到需要增加Chunk的Dbsapce上,按Ctrl-B键,在屏幕的FullPath-name中输入/usr/informix/workdbs2_primary,并在Size项中输入100000,然后按ESC键。于是数据库服务器系统为数据库空间workdbs1增加一个数据存储块workdbs2_primary的定义。我们可以在Status菜单的Spaces选项中看到自己刚才为workdbs1定义的数据存储块workdbs2_primary。
PressESCtobuildanewdbspace.
PressInterrupttocanceltheoptionandreturntotheDbspacemenu.
PressF2orCTRL-Fforfieldlevelhelp.
ADDCHUNKS
DbspaceName[workdbs1]Mirror[N]Temp[N]
PRIMARYCHUNKINFORMATION:
FullPathname[/usr/informix/workdbs2_primary]
Offset[]KbytesSize[100000]Kbytes
MIRRORCHUNKINFORMATION:
FullPathname[]
Offset[]
或者通过命令形式增加chunk
$onspaces-ASPacename-ppathname-ooffset-ssize[-mpathoffset]
3、日志管理
日志是数据库服务器保证当数据库或Unix或主机服务器系统故障恢复后,用户数据库快速复原的安全机制。数据库服务器的日志有两种:物理日志PhysicalLog和逻辑日志LogicalLog。当用户需要取数据而该数据又不在共享内存时,数据库服务器将它从磁盘读出并放入共享内存。这时,如果用户需要修改该记录,数据库服务器在该记录尚未被修改前,将该记录所在的数据页拷贝到物理日志,然后数据库服务器响应用户的修改要求,并将数据修改的轨迹写入逻辑日志。当用户想要滚回操作时,并且在数据修改的过程中数据库服务器没有做过Checkpoint,数据库服务器将物理日志拷贝回该数据页,如果在数据修改的过程中数据库服务器已经做过Checkoint,数据库服务器将根据数据修改时记录在逻辑日志中的数据变化轨迹来恢复原来的数据。不过大家要知道这种机制只有在用户数据库是带日志的情形下才会起作用,由于需要比不带日志的数据库多写日志文件,因此它的效率会低于不带日志的数据库。但是一旦数据库服务器非正常关闭,在后一次启动数据库服务器的时候,数据库服务器会根据上次系统非正常关闭时留下来的日志文件来恢复数据的一致性,这种安全机制是以牺牲数据库操作效率为代价的。
物理日志保存数据在修改前的映像,一般情况下它占整个日志空间尺寸的1/4,当数据储存实体空间增加后,日志空间的尺寸也需要调大。改变物理日志空间的大小可使用onmonitor工具包,启动onmonitor,选择Parameters菜单项后,再选择Physical-log,按回车,将物理日志的尺寸设置成需要的值,同时也可以将物理日志移到指定数据库空间中。
PressESCtoaddphysicallog.
PressInterrupttocanceltheoptionandreturntotheParametersmenu.
PressF2orCTRL-Fforfieldlevelhelp.
ADDINGPHYSICALLOG
PhysicalLogSize[5000]Kbytes
DbspaceName[rootdbs]
或者通过命令形式改变物理日志文件的大小与位置:
$onparams-p-ddbspace_name-sphy_log_size
逻辑日志保存数据在修改后的映像,一般情况下它占整个日志空间尺寸的3/4。逻辑日志空间的尺寸为逻辑文件尺寸与逻辑日志文件个数的乘积。逻辑日志文件的个数不得少于3个。
启动onmonitor,如果需要增加逻辑日志文件数选择Parameters菜单项后再选择Add-log,如果需要减少逻辑日志文件数选择Parameter菜单项后再选择Drplog。增加逻辑日志时只需在键盘上输入逻辑日志文件将加入的数据库空间名。如果用户需要将全部逻辑日志移到指定的数据库空间中去,则需要现在指定的数据库空间中加入足够的逻辑日志文件,然后作一次实际的0级备份和逻辑日志的自动备份(这两项备份将在下一节中讲述),最后将原来的数据库空间中逻辑日志文件删除。
PressESCtoaddalogicallog.
PressInterrupttocanceltheoptionandreturntotheParametersmenu.
PressF2orCTRL-Fforfieldlevelhelp.
ADDINGALOGICALLOG
LogicalLogSize[5000]Kbytes
DbspaceName[rootdbs]
或者通过命令形式改变逻辑日志文件的大小,位置与个数:
$onparams-a-ddbspace_name-slog_size(增加逻辑日志)
$onparams-d-llog_id(删除逻辑日志)
4、数据备份和恢复
OnLine动态服务器7.1为数据库管理员提供一种联机的增量备份工具,在命令行时,数据库管理员可以用ontape来作数据备份和逻辑日志备份。还提供了一个具有交互界面和菜单驱动数据库备份工具onarcHive。
OnLine动态服务器7.1提供的增量的数据备份,它分成**,即0级(Level0)、1级(Level1)和2级(Level2)。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级数据备份,当一天中同时需要作多个数据备份时,只做等级较低一级的数据备份。
5、数据储存实体镜象管理
数据储存块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-mspacename-ppath-ooffset-mpathoffset[-y]
2 恢复损坏的数据储存实体和镜像实体
当镜像中一对实体之一出现故障时,数据库服务器系统允许继续工作的,不必立即重构镜像。数据库管理员在一个适宜时候对这对实体重构镜像。恢复损坏的镜像,需要首先确认实体所对应的磁盘介质是否已经恢复。
当更换了实体对应的磁盘介质后,需要操作系统上重新定义这个磁盘介质。在一般情况下,用户所定义的数据储存实体和镜像实体的名字是逻辑的,因此只要重新将这个设备连接到原来的逻辑名字即可。对于那些在数据库服务器系统中直接定义物理设备名为数据存储块的用户,则必须把新设备定义成原来损坏的设备名。
启动onmonitor,在Dbspaces菜单中选择Status项,这里列出了所有在数据库服务器系统中定义的数据库空间Dbspace的状态,可以看到镜像损坏的数据库空间的Mirror项为M*。移动上下光标键,将选中行移动改行,按Ctrl-B。这时管理员可以看到有损坏的数据存储块的Status项为PD或MD,前者表示原数据储存实体损坏,而后者表示数据镜像实体损坏。
PressESCtoreturntotheStatusMenu.
Movearrowkeystomovethecursor
CHUNKSFORaccount
ChunkChunkPagesPagesFullPathnameofChunkStatus
idOffsetInChunkused
105000025000/usr/informix/workdbs1_primaryPO
205000050000/usr/informix/workdbs1_mirrorMD
移动上下光标键,将选中行移至损坏的数据存储块上(/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为数据库系统提供的另一种高可用性方案是远程数据复制。通过网络连接起来的计算机系统的互为备份来提高数据库服务器系统的可用性。
在这两个数据库服务器系统中,主数据库服务器PRIAmryServer可以接受数据的读写操作,例如select、insert、update和delete,而备份数据库服务器SecondServer仅可以接受读的操作,例如select。通常有主数据库服务器来承担企业事务处理的操作和批量数据修改的操作,备份数库据服务器承担企业内部的决策支持作业。为了提高主机服务器的利用率,可以在这两个主机服务器上分别建两个数据库服务器系统,使得一台主机服务器在作备份数据库服务器的同时作主数据库服务器,或者在作主数据库服务器的同时作备份数据库服务器。两个数据库服务器必须通过TCP/IP网络协议来联接,两台数据库服务器可以在同一个局域网上也可以在广域网上,两台数据库服务器的底层可以用多种物理方法互联,例如以太网、X.25网等等。
数据复制的原理是,当一个事务操作在主数据库服务器上进行的时候,将数据变化的轨迹从数据库服务器系统的逻辑日志缓冲区(Log.LogBuf)中复制到复制缓冲区(DataReplicationBuffer,DRBuf)中,然后通过计算机网络送到远地的备份数据库服务器的逻辑日志缓冲区中,再由备份数据库服务器对其操作,写入备份数据库服务器的数据库系统中。因此数据复制机制的前提是这两个数据库必须带有日志。平时,主数据库服务器处于online状态,而备份数据库服务器则处于readonly状态。当主数据库服务器非正常关闭时,备份数据库服务器进入online状态。
两个数据库服务器系统的数据库空间组织、数据存储块结构、大小以及数据库日志必须完全一致。由于两台主机服务器的硬件结构可能不一,因此在数据库服务器系统定义时,请不要直接使用设备名。在建立数据库服务器系统时,将磁盘设备名联接到一个别名上,如#ln-s/dev/rdsk/1s0online1
这样可使两台数据库服务器具有相同数据库空间名和数据存储块名。
两个数据库服务器系统的切换分手动(MANUAL)和自动(AUTO)两种方式,而自动切换又分保留方式(RETAINTYPE)和对换方式(REVERSETYPE)。手动切换方式当主数据库服务器关闭以后需要数据库管理员启动备份数据库服务器,使之进入online状态;自动切换方式当主数据库服务器关闭以后,备份数据库服务器会自动进入online状态,当主数据库服务器系统恢复后,如果我们采用保留方式,那么备份数据库服务器通过Shutdown状态回到Readonly状态,主数据库服务器启动后进入Online状态,两个数据库服务器系统的责能不变;如果我们采用对换方式,那么备份数据库服务器保持Online状态不变,主数据库服务器启动后进入Readonly状态,相当于原备份数据库服务器上升为主数据库服务器,而原主数据库服务器降级为备份数据库服务器,两个数据库服务器的责能对换。可以看到,手动方式需要管理员的控制才能切换,所以它不会因网络的不稳定而错误切换;自动方式不需要管理员干预切换,如果主数据库服务器系统应答超时太小,可能会引起备份数据库服务器错误地进入Online状态,因此那些预想的当主数据库服务器系统非正常关闭时,要求备份数据库服务器零时间(极短时间)等待启动在实际意义上是不可行的,通常数据库服务器系统的应答超时可为15秒至60秒。对自动方式的系统,当主数据库服务器系统恢复后,采用保留方式时,备份数据库服务器需要经过Shutdown状态才能进入Readonly状态,当有大量联机用户工作时,这个状态的时间也许是比较常的;而采用对换方式时,备份数据库服务器系统保持Online状态不变,原主数据库服务器启动以后进入Readonly状态,因此相对于保留方式,它对联机用户操作的影响较小。
建立数据库复制系统的步骤是:
首先使用ln命令分别在两台主机服务器建立完全相同的数据存储块名;
第二在Quiescant状态下对主数据库服务器系统作0级数据备份和逻辑日志备份;
第三将主数据库服务器系统定义为Primary并使之进入Online状态;
第四将主数据库服务器系统的0级数据备份用冷恢复到备份数据库服务器上;
第五经备份数据库服务器定义为Secondary;
第六将主数据库服务器系统的逻辑日志备份恢复到备份数据库服务器上并使之进入Readonly状态。
下面我通过一个例子来说明数据库服务器复制系统的建立过程。
主数据库服务器和备份数据库服务器都建立在SCOUNIX3.2.4.2的操作系统环境上,它们分别名为server_A和server_B,它们的号分别为101和102。
第一步:建立数据库服务器,有三个数据库空间,它们是rootdbs、workdbs和logdbs,分别用于存放数据库系统的描述信息、用户数据和数据库日志。每个数据库空间都只对应于一个数据存储块,它们所对应的磁盘都分别被联接到别名rootchuck1、workchuck1和logchuck1。将两个数据库服务器系统关闭。在设定DATAREPLICATION的屏幕中,将Interval设置为15秒,表示每15秒钟将主数据库服务器系统的数据传输至备份数据库服务器,将Timeout设置为15秒,表示应答时间大于15秒钟时,备份数据库服务器系统进入OnLine状态,同时将Auto设置为1,表示自动切换并取保留方式。
DATAREPLICATION:MakedesiredchangesandpressESCtorecordchanges.
PressInterrupttoabortchanges.PressF2orCTRL-Fforfield-levelhelp.
DATAREPLICATIONPARAMETERS
Interval[15]
Timeout[15]
Auto[1]
Lost&Found[/usr/informix/etc/dr.lostfound]
第二步:启动主数据库服务器server_A,使之进入Quiescent状态。然后用ontape-s和ontape-a作0级数据备份和逻辑日志备份,逻辑日志备份时当前的逻辑日志文件也要备份。
第三步:用onmode-dprimaryserver_B设置该数据库服务器为server_B的主数据库服务器,然后使用命令onmode-m使server_A进入OnLine状态。
第四步:将0级备份磁盘装入备份数据库服务器的驱动器中,用ontape-p命令将备份恢复到备份数据库服务器上,当数据库服务器提示是否备份逻辑日志时,回答N。
第五步:用onmode-dsercondaryserver_A设置该数据库服务器为server_A的备份数据库服务器。
第六步:将逻辑日志备份磁盘插入备份数据库服务器的驱动器中,用命令ontape-l来滚回0级数据备份以后的数据操作。全部操作结束后,备份数据库服务器便进入Readonly状态。
接下来我们验证所做的数据库复制系统。取两台终端,1号终端登录server_A,2号终端登录server_B。
第七步:在1号终端上使用命令dbaccessdemo7-log建立演示数据库stores7。在2号终端上,在dbaccess中选择Database菜单,反复选择Select项,在15秒钟以后,屏幕上将出现stores7的数据库名字。
第八步:在1号终端上,在dbaccess中选择QueryLanguage菜单中的New项,输入
insertintocustomer(fname,lname)values(“AA”,”BB”);
然后再按ESC键,退出SQL的编辑状态。在2号终端上,也在dbaccess中选择QueryLanguage菜单中的New项,输入
selectcount(*)fromcustomerwherefname=”AA”andlname=”BB” 。然后再按ESC键,退出SQL的编辑状态。
我们在1号终端上,按两下R,然后在2号终端上反复地按R,大约15秒钟,2号终端的屏幕会显示出计数为2。
第九步:在1号终端上,退出dbaccess,然后输入命令onmode-ky,关闭主数据库服务器系统。在2号终端上,我们现按!,然后输入onstat-ur,我们将先看到数据库服务器的状态为Readonly,然后变成Recovery,最后变成Online,这时我们按DEL键。我们再次选择New,输入命令:insertintocustomer(fname,lname)values(“CC”,”DD”)
然后再按ESC键,退出SQL编辑状态,按三次R,接着我们退出dbaccess。在命令行输入命令onstat-ur。
现在我们在1号终端上输入命令oninit和onstat-ur。1号终端上马上显示数据库服务器系统为Fastrecovery。这时2号终端上显示数据库服务器系统的状态变为Shutdown。几分钟后,1号终端上显示上显示主数据库服务器系统的状态回到Online,而2号终端上则显示备份数据库服务器系统的状态回到原先的Readonly。
第十步:我们在1号终端上,再次进入dbaccess,选择QueryLanguage中的New项,输入 selectfname,lnamefromcustomerwherefname=”CC” 运行该语句。终端屏幕上将显示出数据“CC”和“DD”。
至此我们的例子做完了。当关闭数据库服务器复制系统时,我们应该先备份数据库服务器后主数据库服务器。而启动时则应先主数据库服务器后备份数据库服务器。 六、数据库服务器的应用
通常用户按缺省方式建立数据库和表,OnLine的这些概念和技术对他的影响是有限的。在确省情况下,用户的数据库和表都建立在rootdbs中,每个表的extent为8页,以后为4页,并且数据库不带日志,数据表的琐方式为页级琐。
其实用户可以根据其系统的特点了建立其数据库和表,使得系统有较高的运行效率和易于管理的特点,下面将描述在建立用户系统时如何使用OnLine的概念和技术。
1、建立用户数据库
用户可根据自己的要求将他的数据库建立在指定的数据库空间中,当然该数据库空间必须首先存在。
CREATEDATABASEemployeeINcompany;
以上SQL命令将数据库employee建立在名为company的数据库空间中。
CREATEDATABASEemployeeWITHLOG;
CREATEDATABASEemployeeWITHBUFFEREDLOG;
以上两条SQL命令在建立数据库employee市分别要求带UNBUFFERED和BUFFERED日志。
OnLine的日志除了满足事务的提交和滚回,同时还是一种数据库安全机制。当系统由于断电或其他的原因使数据库服务器系统停止运行,但是当它下一次启动时,数据库服务器系统将会根据前一次停止工作时留下的日志来滚回没有完成的事务。UNBUFFERED日志要求数据库每当有事务提交时,立即将数据从共享内存写回磁盘;而BUFFERED日志则并不因为事务提交即将数据从共享内存写回磁盘,它只是当共享内存中的Logicallogbuffer空间满或者当OnLine的定时共享内存数据写回磁盘操作Checkpoint来到时,才将数据从Logicallogbuffer写回到日志文件。如果一个事务已经提交,但共享内存并没有满,同时Checkpoint也没有进行时,系统发生非正常停机,当数据库服务器系统再次启动时,由于该提交的事务并没有被写回磁盘,OnLine将根据在其数据空间中的日志来滚回该操作。因此,带UNBUFFERED日志的数据库对已经提交的事务来说安全性较好,而带BU-FFERED数据库则运行效率较高。不带日志的数据库虽然运行效率最高但它不具有在系统非正常停机后自动滚回失败事务的能力,只能用数据备份来恢复。综合上面的SQL命令就得到下面的建立数据库的命令:
CREATEDATABASEemployeeINcompanyWITHLOG;
CREATEDATABASEemployeeINcompanyWITHBUFFEREDLOG.
对于一个建立的不带日志数据库,希望使它带日志;或者一个带日志的数据库,希望改变它的日志类型,用户可通过onmonitor实用工具来实现。运行onmonitor后,选择Logical-logs菜单,然后再选择Databases菜单,屏幕上显示出日志的四种类型,将选中项移到需要的日志类型上,按Contr-ol-B键,OnLine便将该数据库的日志修改成用户所需要的类型。改变了数据库的日志类型后,用户必须作数据库的0级备份。
PressESCtoreturntotheLogicalLogsMenu.
Usearrowkeystoselectaloggingoption.
PressF3orCTRL-Btochoosethetypeoflogging.
DatabaseCurrentLogStatus
accountingUnbufferedLogging
OPTIONSFORDATABASELOGGING
NoLogging
UnbufferedLogging
BufferedLogging
UnbufferedLogging,ModeANSI
2、建立用户数据表
用户也可以根据自己的需要,将一个或几个表将来在指定的数据库空间中,例如:
CREATETABLEemployee
(empno SMALLINTNOTNULL,
fname CHAR(15),
lname CHAR(15),
….
resume TEXTINmulti,
picture BYTEINmutli,
PRIMARYKEY(empno)
)INcompany;
在该命令中表employee被建立在company的数据库空间中,并且用户已经建立了二进制大对象数据空间,resume和picture被建立在名为multi的二进制大对象数据空间中。根据这些命令和前面已经叙述的OnLine概念,我们不难做到将一个或数个数据库或者表建立在指定的磁盘中,可以按照下面的指示将这些数据库和表联系起来。
用户除了可以直接指定其数据库表存放的数据库空间,还可以定义数据存放时数据连续页的大小和以后数据连续页以什么尺寸来增加,
CREATETABLEemployee
(empno SMALLINTNOTNULL,
fname CHAR(15),
lname CHAR(15),
….
resume TEXTINmulti,
picture BYTEINmutli,
PRIMARYKEY(empno)
)INcompany
EXTENTSIZE1024
NEXTSIZE16;
上面的命令用户定义了employee的初始化数据连续页的大小为1024KB,比较大数据连续页就意味着该表有初始化时有较多的数据页连续的存放在一起,有利于数据存取效率的提高,该用户希望初始化时有1024KB的连续空间来存放其单位现有的员工信息,而以后的员工信息的变化则较小,因此他定义下一个的数据连续页为16KB。
关于数据连续页需要量的准确计算可查阅INFORMIX数据库有关手册。
3、建立分布式数据库访问
假设在我们网络上有三个服务器,分别为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命令,
[email protected]:tab1
SELECT*
[email protected]:tab1
[email protected]:tab1.col1ISNOTIN
([email protected]:tab1.col1 [email protected]:tab1)
该命令将那些[email protected]:tab1中不存在于[email protected]:tab1的记录插入到[email protected]:tab1中。但是数据库[email protected]存放在网络服务器changsha上,而数据库[email protected]存放在网络服务器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机器提出数据操作的请求。在通常情况下,当前的数据库服务器名字和数据库名字是可