Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5402481
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: DB2/Informix

2008-05-06 22:05:39

第四章 数据库服务器系统的管理
通过上一章的实践,用户可以建立起一个最初步的数据库服务器系统,它有一个数据库空间 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状态。
这样,数据库管理员完成了对损坏数据储存实体或数据镜像实体中数据的重构。
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~