分类: DB2/Informix
2005-07-11 11:27:39
informix TRAIN文档(五)
第五章 数据库服务器系统的安全机制
在一个运行的数据库服务器系统中,有可能会出现以下三种数据库服务器系统故障:
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
第一步:建立数据库服务器,有三个数据库空间,它们是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”。
至此我们的例子做完了。当关闭数据库服务器复制系统时,我们应该先备份数据库服务器后主数据库服务器。而启动时则应先主数据库服务器后备份数据库服务器。
informix TRAIN文档(六)
第六章 数据库服务器的应用
通常用户按缺省方式建立数据库和表,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
132.147.160.2
132.147.160.3
在 /etc/hosts.equiv 设置网络节点名
在 /etc/services 最后加上数据库服务的service名字
sqlacc 2000/tcp
sqlware 2001/tcp
sqlsta 2002/tcp
在该文件的设置时尤其要注意的是第二项service的网络端口号不能与文件中已经存在的重
复,tcp表示网络采用tcp/ip。
在$INFORMIXDIR/etc/sqlhosts设置数据库服务器与网络服务器、service名字间的关系以及 所使用的网络协议。
account ontlitcp
warehouse ontlitcp
staff ontlitcp
上面的设置中第二项由三部分组成:第一部分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。