我的最新日志
-
hacmp介绍
2008-8-04
High Availability Cluster Multi-Processing
两台主机系统在整个运行过程中,通过 “心跳线”相互监测对方的运行情况 (包括系统的软硬件运行、网络通讯和应用运行情况等);
两台服务器的备份方式有三种 :
一台服务器运行应用,另外一台服务器做为备份
两台服务器除正常运行本机的应用外,同时又作为对方的备份主机;
两台服务器同时运行相同的应用,需要数据库的支持。
应用和资源的接管过程由 HACMP 软件自动完成,无需人工干预;
当两台主机正常工作时,也可以根据需要将其中一台机上的应用人为切换到另一台机 (备份机)上运行。
以下转自:http://blog.tom.com/blog/read.php?bloggerid=633329&blogid=47052
IBM HACMP双机服务器系统的解决方案
Hacmp(High Availability Cluster Multi-Processing)双机热备份软件的主要功能是提高客户计算机系统及其应用的可靠性,而不是单台主机的可靠性。
一、Hacmp双机系统的工作原理
HACMP的工作原理是利用LAN来监控主机及网络、网卡的状态。在一个HACMP环境中有TCP/IP网络和非TCP/IP网络。TCP/IP网络即应用客户端访问的公共网,该网可以是大多数AIX所支持的网络,如Ethernet,T.R.,FDDI,ATM,SOCC,SLIP,等等。非TCP/IP网络用来为HACMP对HA环境(Cluster)中的各节点进行监控而提供的一个替代TCP/IP的通讯路径,它可以是用RS232串口线将各节点连接起来,也可以是将各节点的SCSI卡或SSA卡设置成Target
Mode方式。
1、作为双机系统的两台服务器(主机A和B)同时运行Hacmp软件;
2、服务器除正常运行自机的应用外,同时又作为对方的备份主机;
3、两台主机系统(A和B)在整个运行过程中,通过 “心跳线”相互监测对方的运行情况(包括系统的软硬件运行、网络通讯和应用运行情况等);
4、一旦发现对方主机的运行不正常(出故障)时,故障机上的应用就会立即停止运行,本机(故障机的备份机)就会立即在自己的机器上启动故障机上的应用,把故障机的应用及其资源(包括用到的IP地址和磁盘空间等)接管过来,使故障机上的应用在本机继续运行;
5、应用和资源的接管过程由Ha软件自动完成,无需人工干预;
6、当两台主机正常工作时,也可以根据需要将其中一台机上的应用人为切换到另一台机(备份机)上运行。
二、Hacmp安装配置前需作的准备工作
1、划分清楚两台服务器主机各自要运行的应用(如A机运行应用,B机作为standby);
2、给每个应用(组)分配Service_ip、Standby_ip、boot_ip和心跳线tty,如:
主机A(运行应用):
Service_ip: 172.16.1.1
Standby_ip: 172.16.2.1
Boot_ip: 172.16.1.3
主机B(standby):
Service_ip: 172.16.1.2
Standby_ip: 172.16.2.2
Boot_ip: 172.16.1.4
3、按照各主机的应用的要求,建立好各自的磁盘组,并分配好磁盘空间;
4、根据Ha软件的要求,对服务器操作系统的参数作必要的修改。
三、IBM HACMP双机服务器系统的解决方案
HACMP的安装配置步骤如下:
(一)在两台服务器上分别安装HACMP软件
#smit installp
(二)分别检查两台主机上安装的软件是否成功
#/usr/sbin/cluster/diag/clverify
software
cluster
clverify>software
Valid Options are:
lpp
clverify.software> lpp
若没有error出现则安装成功。
(三)分别配置两台服务器的boot IP地址和Standby IP地址,保证boot 网和Standby网能ping通(用smit tcpip命令),用netstat命令检查配置是否正确:
#netstat -i
(四)利用smit tty在两台主机上增加一个TTY接口,配置心跳线(RS232):
#smitty tty
TTY tty0
TTY
type
tty
TTY
interface rs232
Descrīption
Asynchronous Terminal
Status Available
Location
20-70-01-00
Parent
adapter
sa2
PORT
number
[0]
Enable LOGIN
disable
BAUD
rate [9600]
PARITY
[none]
BITS per
character
[8]
Number of STOP
BITS
[1]
用lsdev –Cc tty查看tty是否配置好。
#lsdev –Cc tty
在两台上分别输入如下命令:
S85_1# cat /etc/hosts >/dev/tty0
S85_2# cat
如果在S85_2机能接收到信息,则表明心跳线已经配置好。
(五)具体配置及技巧
注:HACMP的配置(或修改配置)只需要在其中的一台主机上进行,当配置(或修改)完毕后使用同步命令将配置结果传到另外一台主机上。一般选S85_1在进行配置。
在S85_1上运行smit hacmp,然后按照下面的步骤进行配置:
#smit hacmp
1、 Cluster Configuration
1.1、配置Cluster Topology
配置Configure Cluster/ Add a Cluster
Definition
* Cluster
ID
[100]
#
* Cluster
Name
[sb_ha]
配置Configure
Nodes,增加两个Node
* Node
Names
[s85_a]
* Node
Names
[s85_b]
配置Configure
Adapters,分别配置两台机的service地址,boot地址,standby地址及tty(a_svc、b_svc、a_boot、b_boot、a_stdby、b_stdby、a_tty、b_tty)
* Adapter IP
Label
a_svc
Network
Type
[ether]
Network
Name
[ethnet]
Network Attribute
public
Adapter
Function
service
Adapter
Identifier
[172.16.1.1]
Adapter Hardware
Address
[ ]
Node
Name
[s85_a]
修改/etc/hosts及/.rhosts文件,如:修改/etc/hosts文件,增加以下内容:
172.16.1.1
a_svc
172.16.1.2
b_svc
172.16.1.3
a_boot
172.16.1.4
b_boot
172.16.2.1
a_stdby
172.16.2.2
b_stdby
修改/.rhosts文件,增加以下内容:
a_svc
b_svc
a_boot
b_boot
a_stdby
b_stdby
1.2、同步cluster(Cluster Configuration/
Cluster Topology/ Synchronize Cluster Topology)
在进行同步的时候可以先进行模拟(Emulate)同步,当模拟同步OK后再进行实际(actual)同步:
Synchronize Cluster Topology
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[TOP]
[Entry Fields]
Ignore Cluster Verification
Errors
[No]
+
* Emulate or
Actual
[Emulate]
+
2、配置Cluster Resources
2.1、定义一个资源组(Define Resource Groups)
注意,在定义资源组的时候,要注意Participating Node
Names的先后顺序。
Resource Group
Name
data_res
New Resource Group
Name
[]
Node Relationship
cascading
Participating Node
Names
[s85_a s85_b]
2.2、定义应用服务器(Define Application Servers)
Server
Name
ora_app
New Server
Name
[ ]
start
scrīpt
[/etc/start]
Stop
scrīpt
[/etc/stop]
2.3、修改资源组属性(Change/Show Resources for a
Resource Group)
data_res组:
Resource Group
Name
data_res
Node
Relationship
cascading
Participating Node
Names
s85_a s85_b
Service IP
label
[a_svc]
Filesystems(default is
all)
[]
Filesystems Consistency
Check
fsck
Filesystems Recovery
Method
sequential
Filesystems to
Export
[]
Filesystems to NFS
mount
[]
Volume Groups
[datavg logvg]
Concurrent Volume
groups
[]
Raw Disk
PVIDs
[]
Application
Servers
[ora_app]
2.4、同步资源组(Synchronize Cluster Resources)
在进行同步的时候可以先进行模拟(Emulate)同步,当模拟同步OK后再进行实际(actual)同步:
Synchronize Cluster Resources
Type or select values in entry fields.
Press Enter AFTER making all desired changes.
[TOP]
[Entry Fields]
Ignore Cluster Verification
Errors
[No]
+
* Emulate or
Actual
[Emulate]
+
3、HACMP的启动及关闭
(1)启动过程:
#smit
clstart
#tail –f
/tmp/hacmp.out
May 22
17:29:23 EVENT COMPLETED: node_up_complete
s85_a
如果/tmp/hacmp.out文件显示类似上述信息,则表明HACMP在本机上可以正常启动。
(2)关闭过程:
#smit clstop
4、HACMP功能的测试
在HACMP配置完成并检查没有错误后,即可按3的方法启动HACMP,进行功能测试。包括应用在同一台服务器的两个网卡能否切换,在两台服务器间能否切换等。可用命令:
#netstat-in来看地址的切换情况
四、HACMP常见的故障解决方法
HACMP将诊测并响应于三种类型的故障:1网卡故障,2网络工作,3节点故障。下面就这三种故障分别进行介绍。
1、网卡故障
HACMP的群集结构中,除了TCP/IP网络以外,还有一个非TCP/IP网络,它实际上是一根“心跳”线,专门用来诊测是节点死机还是仅仅网络发生
故障。如下图所示,一旦节点加入了 Cluster(即该节点上的HACMP已正常启动),该节点的各个网卡、非TCP/IP网络就会不断地接收并送Keep-Alive信号,K-A的参数
是可调的,HA在连续发送一定数量个包都丢失后就可确认对方网卡,或网络,或节点发生故障。因此,有了K-A后,HACMP可以很轻易地发现网卡故障,因 为一旦某块网卡发生故障发往该块网卡的K-A就会丢失。
此时node 1上的cluster manager( HACMP的“大脑”)会产生一个swap-adapter的事件,并执行该事件的scrīpt(HACMP中提供了大部分通用环境下的事件 scrīpts,它们是用标准AIX命令和HACMP工具来写的)。每个节点上都有至少两块网卡,一块是service adapter,提供对外服务,另一块是standby adapter,它的存在只有cluster manager知道,应用和client并不知道。
一旦发生swap-adapter事件后,cluster manager将原来service adapter的 IP地址转移到standby adapter上,而standby地址转移到故障网卡上,同时网络上其他节点进行ARP的刷新。网卡互换(swap-adapter)在几秒内就可完 成,以太网为3秒,并且这种转换对应用和client来说是透明的,只发生延迟但连接并不中断。
2、网络故障
如果发往node1上的service和standby网卡上的K-A包全都丢失,而非TCP/IP网络上的K-A仍然存在,那么HACMP判断node1仍然正常而网络发生故障。此时HACMP执行一个。
3 、节点故障
如果不仅TCP/IP网络上的K-A全部丢失,而且非TCP/IP网络上的K-A也丢失,那么HACMP断定该节点发生故障,并产生node-down事 件。此时将有资源接管,即放在共享磁盘陈列上的资源将由备份节点接管,接管包括一系列操作:Acquire disks,Varyon VG, Mount file systems,Export NFS file systems, Assume IP network Address, Restart highly
available applications,其中IP地址接管和重新启动应用由HACMP来实现,而其他是由AIX来完成。
当整个节点发生故障时,HACMP将故障节点的service IP address转移到备份节点上,使网络上的client仍然使用这个IP地址,这个过程称为IP地址接管(IPAT),当一个节点down掉后,如果设 置了IP地址接管,网络上的clients会自动连接到接管节点上;同样,如果设置了应用接管,该应用会在接管节点上自动重启,从而使系统能继续对外服 务。对于要实现接管的应用,只需在HACMP中把它们设置成application server,并告诉HACMP启动这个应用的start scrīpt的全路径名和停止该应用的stop scrīpt的全路径名。由此可见,应用接管的配置在HACMP中十分简单,重要的是start scrīpt和stop scrīpt的写作,这需要用户对自己应用的了解。
4、其他故障
HACMP只去检测网卡、网络和节点是否发生故障,并作出相应的转移、接管行为。对于其他故障,那么HACMP缺省不作任何动作。
a、硬盘故障
一般我们都将硬盘设置成RAID-5方式或mirror方式,从而提供硬盘的高可用性。RAID-5将奇偶较验位分散在硬盘组中,因此当一组内的一个硬盘 坏掉,组内的其他硬盘可以通过奇偶较验位将该硬盘上的数据恢复出来。RAID-5方式一般是由硬件实现的,如下7133的SSA适配器,而且如果同一组内 的两个硬盘坏掉,该组硬盘的数据很可能就会全部丢失。mirror方式是将同一个数据写到至少两个物理外置上,因此它的效率没有RAID-5好,而且用盘 量大,但安全性比RAID-5高,而且它易于实现,通过AIX中的(Logic Volume Management)可以很方便地设置。
b、硬盘控制卡
存储设备连接到主机上都必须通过一块控制卡,SCSI设备是SCSI
Adapter, SSA设备是SSA
Adapter,如果这块卡坏掉,与之连接的外设就无法利用。有几种办法可以解决这个问题。
一种办法是用多个adapter。每个主机上都有两块或两块以上adapter,分别连接mirror的数据,因此无论是硬盘坏掉,还是Adapter坏 掉,所有好数据还是可以被主机利用,不会出现单点故障。这种方法实现起来并不难,但必须配置多块adapter,而且必须采用数据mirror方式。这种 方法也不用通过HACMP来实现。
另一种方法仍只用一块adapter,利用HACMP中的Error Notification Facility( 错误通告机制)来解决。
Error Notification Facility是HACMP提供的对其他设备的监控工具,任何报告给AIX的错误(error)都能被捕获被采取相应措施。HACMP提供了smit界面,使配置简单化。
我们已知道,用LVM可实现硬盘镜像,当一个盘坏掉,仍有一份数据在镜像盘里,数据仍可进行读写,但此时数据不再有可用性,若镜像盘也坏掉则数据全部丢
失。所以在此例中,PV丢失(LVM_PVMISS)的信息会大幅显示在控制台面上,从而提醒用户去仔细查看error log找出故障并修复它。同样,此例中HACMP提供了界面,结合AIX的功能,从而监控故障的发生。
c.、应用故障
如果用户的应用有kernel
call调用,或以root身份来启动等,一旦应用发生故障,很容易导致操作系统down掉,发生死机,这时实际上等于节点故障,HACMP会采取相应接 管措施。如果只是应用自身死掉,AIX仍正常运行,HACMP最多利用Error Notification Facility来提供监控功能,对应用本身不采取任何动作。但如果应用中调用了AIX的SRC (System Resource Controller)机制所提供的API接口,就可以使应用在down掉后自动重新启动。除了SRC提供API接口外,HACMP中的clinfo也提 供这样的API。
clinfo是cluster Information daemon,它负责维护整个cluster的状态的信息,clinfo API允许应用程序利用这些状态信息来采取相应行动。
d.、HACMP故障
如果cluster中节点的HACMP进程down掉,HACMP将其升级为节点故障,从而发生资源接管。
如上所述,HACMP只全权负责诊断网卡故障、网络故障和节点故障这三类故障,并负责实现IP地址转换或接管,以及整个系统资源( 硬件、文件、系统、应用程序,等等)的接管。对于这三类故障外的其他故障,可以结合AIX基本功能和HACMP提供的一些机制,如Error Notification
Facility, clinfo API 等,同样可以实现对故障的监控并采取相应措施。 -
hba卡
2008-8-01
光纤存储卡,用于服务器与光纤阵列规的连接。
光纤通道是高性能的连接标准,用于服务器、海量存储子网络、外设间通过集线器、交换机和点对点连接进行双向、串行数据通讯。
对于需要有效地在服务器和存储介质之间传输大量资料而言,光纤信道提供远程连接和高速带宽。它是适于存储局域网、集群计算机和其它资料密集计算设施的理想技术。
光纤通道的优势
在一个arbitrated环路可连接最多126个设备
通过交换结构最多可连接1600万设备
低CPU占用
在服务器不关机就可增加和配置所连设备
易于扩展以加大存储容量
利用SCSI至光纤桥可实现对现有SCSI硬盘的高速连接
可实现光纤和铜缆的连接
全双工传输速率达2000兆/秒
无局域网的备份
通过将备份通讯由局域网迁出减少了服务器宕机时间
省掉专门的备份服务器
性能与直接附属磁带机相近(资料只复制一次)
存储共享
允许更好的资源管理(能动态迁移存储)
能与局域网释放备份共存
允许更强的容错性(服务器宕机但是接入的存储不会丢失)
集群
可在集群服务器间实现负载平衡
结合一个共享的文件系统
对用户和管理员都是单一的一个系统
作决定的关键因素
互操作性和兼容性-20年来Adaptec一直领导SCSI和RAID产品的I/O接口实现广泛的兼容性和可互操作性,在光纤通道产品领域会继续扮演领导者的角色。
支持-Adaptec提供无以伦比的技术帮助,包括每周7天每天24小时的电话和电子邮件技术支持。
解决方案-Adaptec与多个工业巨头合作提供完整的光纤信道解决方案。这些解决方案满足了当今大中型企业的关键业务应用。
词汇
主动铜缆
一种允许在相邻的设备间接30米铜缆的光纤通道物理连接。
仲裁环路
一种光纤通道网络,在此环路拓扑结构中最多有126个节点。
集群
一个相互连接的计算机集合,它能改善可靠性、可用性、服务能力和性能。集群计算机接入共同的存储池,并运行特殊的软件来协调各单元计算机的交织或交换拓扑结构-设备不是连在同一个环路中而是通过一个交换机相连。媒介是非共享的,从而允许许多设备同时通讯。这种交换式拓扑结构最多可支持1600万台设备。
全双工
在一条线路上同时接受和发送资料。
GBIC
千兆网接口转换器。
GLM
千兆连接模块,可插拔接口模块,能将并行的电信号转换成串行的光信号。
集线器
一种基本通讯设备,在多点总线和环路上的节点通过它来实现物理连接。
节点
一种连接到I/O总线或网络设备可编址的物理存在。
被动铜缆
一种低成本的光纤信道连接,最多能连接13米长的铜缆
点对点
最简单的拓扑结构,它包含两个光纤信道设备直接相连。设备间不共享媒介,能充分利用线路的带宽。
复用器
一种能够将输入信号放大产生输出信号的电路。
SAN
存储局域网,一种网络,它的主要功用是在计算机系统与存储单元以及存储单元相互之间传递数据。
交换机
和多个节点相连的基本网络设备。交换机包括内部带宽,它是线带宽的数倍,并能够迅速从一个节点切换到另一个节点。 -
磁盘阵列(Disk Array)
2008-8-01
1.为什么需要磁盘阵列
如何增加磁盘的存取(access)速度,如何防止数据因磁盘的故障而失落及如何有效的利用磁盘空间,一直是电脑专业人员和用户的困扰;而大容量磁盘的价格非常昂贵,对用户形成很大的负担。磁盘阵列技术的产生一举解决了这些问题。
过去十年来,CPU的处理速度增加了五十倍有多,内存(memory)的存取速度亦大幅增加,而数据储存装置--主要是磁盘(hard disk)--的存取速度只增加了三、四倍,形成电脑系统的瓶颈,拉低了电脑系统的整体性能(throughput),若不能有效的提升磁盘的存取速度,CPU、内存及磁盘间的不平衡将使CPU及内存的改进形成浪费。
目前改进磁盘存取速度的的方式主要有两种。一是磁盘快取控制(disk cache controller),它将从磁盘读取的数据存在快取内存(cache memory)中以减少磁盘存取的次数,数据的读写都在快取内存中进行,大幅增加存取的速度,如要读取的数据不在快取内存中,或要写数据到磁盘时,才做磁盘的存取动作。这种方式在单工环境(single-tasking environment)如DOS之下,对大量数据的存取有很好的性能(量小且频繁的存取则不然),但在多工(multi-tasking)环境之下(因为要不停的作数据交换(swapping)的动作)或数据库(database)的存取(因为每一记录都很小)就不能显示其性能。这种方式没有任何安全保障。其二是使用磁盘阵列的技术。磁盘阵列是把多个磁盘组成一个阵列,当作单一磁盘使用,它将数据以分段(striping)的方式储存在不同的磁盘中,存取数据时,阵列中的相关磁盘一起动作,大幅减低数据的存取时间,同时有更佳的空间利用率。磁盘阵列所利用的不同的技术,称为RAID level,不同的level针对不同的系统及应用,以解决数据安全的问题。
一般高性能的磁盘阵列都是以硬件的形式来达成,进一步的把磁盘快取控制及磁盘阵列结合在一个控制器(RAID controller) 或控制卡上,针对不同的用户解决人们对磁盘输出入系统的四大要求:
(1)增加存取速度,
(2)容错(fault tolerance),即安全性
(3)有效的利用磁盘空间;
(4)尽量的平衡CPU,内存及磁盘的性能差异,提高电脑的整体工作性能。2.磁盘阵列原理
磁盘阵列中针对不同的应用使用的不同技术,称为RAID level, RAID是Redundant Array of Inexpensive Disks的缩写,而每一level代表一种技术,目前业界公认的标准是RAID 0~RAID 5。这个level并不代表技术的高低,level 5并不高于level 3,level 1也不低过level 4,至于要选择那一种RAID level的产品,纯视用户的操作环境(operating environment)及应用(application)而定,与level的高低没有必然的关系。RAID 0及RAID 1适用于PC及PC相关的系统如小型的网络服务器(network server)及需要高磁盘容量与快速磁盘存取的工作站等,因为比较便宜,但因一般人对磁盘阵列不了解,没有看到磁盘阵列对他们价值,市场尚未打开;RAID 2及RAID 3适用于大型电脑及影像、CAD/CAM等处理;RAID 5多用于OLTP,因有金融机构及大型数据处理中心的迫切需要,故使用较多而较有名气,但也因此形成很多人对磁盘阵列的误解,以为磁盘阵列非要RAID 5不可;RAID 4较少使用,因为两者有其共同之处,而RAID 4有其先天的限制。其他如RAID 6,RAID 7,乃至RAID 10等,都是厂商各做各的,并无一致的标准,在此不作说明。介绍各个RAID level之前,先看看形成磁盘阵列的两个基本技术:
译为磁盘延伸,能确切的表示disk spanning这种技术的含义。如下图所示,DFTraid 磁盘阵列控制器,联接了四个磁盘:
这四个磁盘形成一个阵列(array),而磁盘阵列的控制器(RAID controller)是将此四个磁盘视为单一的磁盘,如DOS环境下的C:盘。这是disk spanning的意义,因为把小容量的磁盘延伸为大容量的单一磁盘,用户不必规划数据在各磁盘的分布,而且提高了磁盘空间的使用率。DFTraid的SCSI磁盘阵列更可连接几十个磁盘,形成数十GB到数百GB的阵列,使磁盘容量几乎可作无限的延伸;而各个磁盘一起作取存的动作,比单一磁盘更为快捷。很明显的,有此阵列的形成而产生RAID的各种技术。我们也可从上图看出inexpensive(便宜)的意义,因为四个250MBbytes的磁盘比一个1GBytes的磁盘要便宜,尤其以前大磁盘的价格非常昴贵,但在磁盘越来越便宜的今天,inexpensive已非磁盘阵列的重点,虽然对于需要大磁盘容量的系统,仍是考虑的要点。
磁盘 因为磁盘阵列是将同一阵列的多个磁盘视为单一的虚拟磁盘(virtual disk),所以其数据是以分段(block or segment)的方式顺序存放在磁盘阵列中,如下图:

数据按需要分段,从第一个磁盘开始放,放到最後一个磁盘再回到第一个磁盘放起,直到数据分布完毕。至于分段的大小视系统而定,有的系统或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非数据小于一个扇区(sector,即521bytes),否则其分段应是512byte的倍数。因为磁盘的读写是以一个扇区为单位,若数据小于512bytes,系统读取该扇区后,还要做组合或分组(视读或写而定)的动作,浪费时间。从上图我们可以看出,数据以分段于在不同的磁盘,整个阵列的各个磁盘可同时作读写,故数据分段使数据的存取有最好的效率,理论上本来读一个包含四个分段的数据所需要的时间约=(磁盘的access time +数据的transfer time)X4次,现在只要一次就可以完成。
若以N表示磁盘的数目,R表示读取,W表示写入,S表示可使用空间,则数据分段的性能为:
R:N(可同时读取所有磁盘)
W:N(可同时写入所有磁盘)
S:N(可利用所有的磁盘,并有最佳的使用率)Disk striping也称为RAID 0,很多人以为RAID 0没有甚么,其实这是非常错误的观念,因为RAID 0使磁盘的输出入有最高的效率。而磁盘阵列有更好效率的原因除数据分段外,它可以同时执行多个输出入的要求,因为阵列中的每一个磁盘都能独立动作,分段放在不同的磁盘,不同的磁盘可同时作读写,而且能在快取内存及磁盘作并行存取(parallel access)的动作,但只有硬件的磁盘阵列才有此性能表现。
从上面两点我们可以看出,disk spanning定义了RAID的基本形式,提供了一个便宜、灵活、高性能的系统结构,而disk striping解决了数据的存取效率和磁盘的利用率问题,RAID 1至RAID 5是在此基础上提供磁盘安全的方案。
RAID 1
RAID 1是使用磁盘镜像(disk mirroring)的技术。磁盘镜像应用在RAID 1之前就在很多系统中使用,它的方式是在工作磁盘(working disk)之外再加一额外的备份磁盘(backup disk),两个磁盘所储存的数据完全一样,数据写入工作磁盘的同时亦写入备份磁盘。磁盘镜像不见得就是RAID 1,如Novell NetWare亦有提供磁盘镜像的功能,但并不表示NetWare有了RAID 1的功能。一般磁盘镜像和RAID 1有二点最大的不同:
RAID 1无工作磁盘和备份磁盘之分,多个磁盘可同时动作而有重叠(overlapping)读取的功能,甚至不同的镜像磁盘可同时作写入的动作,这是一种最佳化的方式,称为负载平衡(load-balance)。例如有多个用户在同一时间要读取数据,系统能同时驱动互相镜像的磁盘,同时读取数据,以减轻系统的负载,增加I/O的性能。
RAID 1的磁盘是以磁盘延伸的方式形成阵列,而数据是以数据分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。从RAID的结构就可以很清楚的看出RAID 1和一般磁盘镜像的不同。
下图为RAID 1,每一笔数据都储存两份

从上图可以看出:
R:N(可同时读取所有磁盘)
W:N/2(同时写入磁盘数)
S:N/2(利用率)读取数据时可用到所有的磁盘,充分发挥数据分段的优点;写入数据时,因为有备份,所以要写入两个磁盘,其效率是N/2,磁盘空间的使用率也只有全部磁盘的一半。
很多人以为RAID 1要加一个额外的磁盘,形成浪费而不看好RAID 1,事实上磁盘越来越便宜,并不见得造成负担,况且RAID 1有最好的容错(fault tolerance)能力,其效率也是除RAID 0之外最好的。我们可视应用的不同,在同一磁盘阵列中使用不同的RAID level,如华艺科技公司的DFTraid系列都可同一磁盘阵列中定义八个逻辑磁盘(logic disk),分别使用不同的RAID level,分为C:,D:及E:三个逻辑磁盘(或LUN0,LUN1,LUN2).
RAID 1完全做到了容错包括不停机(non-stop),当某一磁盘发生故障,可将此磁盘拆下来而不影向其他磁盘的操作;待新的磁盘换上去之后,系统即时做镜像,将数据重新复上去,RAID 1在容错及存取的性能上是所有RAID level之冠。
在磁盘阵列的技术上,从RAID 1到RAID 5,不停机的意思表示在工作时如发生磁盘故障,系统能持续工作而不停顿,仍然可作磁盘的存取,正常的读写数据;而容错则表示即使磁盘故障,数据仍能保持完整,可让系统存取到正确的数据,而SCSI的磁盘阵列更可在工作中抽换磁盘,并可自动重建故障磁盘的数据。磁盘阵列之所以能做到容错及不停机,是因为它有冗余的磁盘空间可资利用,这也就是Redundant的意义。
RAID 2
RAID 2是把数据分散为位元(bit)或块(block),加入海明码Hamming Code,在磁盘阵列中作间隔写入(interleaving)到每个磁盘中,而且地址(address)都一样,也就是在各个磁盘中,其数据都在相同的磁道(cylinder or track)及扇区中。RAID 2的设计是使用共轴同步(spindle synchronize)的技术,存取数据时,整个磁盘阵列一起动作,在各作磁盘的相同位置作平行存取,所以有最好的存取时间(access time),其总线(bus)是特别的设计,以大带宽(band wide)并行传输所存取的数据,所以有最好的传输时间(transfer time)。在大型档案的存取应用,RAID 2有最好的性能,但如果档案太小,会将其性能拉下来,因为磁盘的存取是以扇区为单位,而RAID 2的存取是所有磁盘平行动作,而且是作单位元的存取,故小于一个扇区的数据量会使其性能大打折扣。RAID 2是设计给需要连续且大量数据的电脑使用的,如大型电脑(mainframe to supercomputer)、作影像处理或CAD/CAM的工作站(workstation)等,并不适用于一般的多用户环境、网络服务器(network server),小型机或PC。
RAID 2的安全采用内存阵列(memory array)的技术,使用多个额外的磁盘作单位错误校正(single-bit correction)及双位错误检测(double-bit detection);至于需要多少个额外的磁盘,则视其所采用的方法及结构而定,例如八个数据磁盘的阵列可能需要三个额外的磁盘,有三十二个数据磁盘的高档阵列可能需要七个额外的磁盘。
RAID 3
RAID 3的数据储存及存取方式都和RAID 2一样,但在安全方面以奇偶校验(parity check)取代海明码做错误校正及检测,所以只需要一个额外的校检磁盘(parity disk)。奇偶校验值的计算是以各个磁盘的相对应位作XOR的逻辑运算,然后将结果写入奇偶校验磁盘,任何数据的修改都要做奇偶校验计算,如下图:

如某一磁盘故障,换上新的磁盘后,整个磁盘阵列(包括奇偶校验磁盘)需重新计算一次,将故障磁盘的数据恢复并写入新磁盘中;如奇偶校验磁盘故障,则重新计算奇偶校验值,以达容错的要求.
较之RAID 1及RAID 2,RAID 3有85%的磁盘空间利用率,其性能比RAID 2稍差,因为要做奇偶校验计算;共轴同步的平行存取在读档案时有很好的性能,但在写入时较慢,需要重新计算及修改奇偶校验磁盘的内容。RAID 3和RAID 2有同样的应用方式,适用大档案及大量数据输出入的应用,并不适用于PC及网络服务器。
RAID 4
RAID 4也使用一个校验磁盘,但和RAID 3不一样,如下图:

RAID 4是以扇区作数据分段,各磁盘相同位置的分段形成一个校验磁盘分段(parity block),放在校验磁盘。这种方式可在不同的磁盘平行执行不同的读取命今,大幅提高磁盘阵列的读取性能;但写入数据时,因受限于校验磁盘,同一时间只能作一次,启动所有磁盘读取数据形成同一校验分段的所有数据分段,与要写入的数据做好校验计算再写入。即使如此,小型档案的写入仍然比RAID 3要快,因其校验计算较简单而非作位(bit level)的计算;但校验磁盘形成RAID 4的瓶颈,降低了性能,因有RAID 5而使得RAID 4较少使用。
RAID 5RAID5避免了RAID 4的瓶颈,方法是不用校验磁盘而将校验数据以循环的方式放在每一个磁盘中,如下图:

磁盘阵列的第一个磁盘分段是校验值,第二个磁盘至后一个磁盘再折回第一个磁盘的分段是数据,然后第二个磁盘的分段是校验值,从第三个磁盘再折回第二个磁盘的分段是数据,以此类推,直到放完为止。图中的第一个parity block是由A0,A1...,B1,B2计算出来,第二个parity block是由B3,B4,...,C4,D0计算出来,也就是校验值是由各磁盘同一位置的分段的数据所计算出来。这种方式能大幅增加小档案的存取性能,不但可同时读取,甚至有可能同时执行多个写入的动作,如可写入数据到磁盘1而其parity block在磁盘2,同时写入数据到磁盘4而其parity block在磁盘1,这对联机交易处理(OLTP, on-line Transaction Processing)如银行系统、金融、股市等或大型数据库的处理提供了最佳的解决方案(solution),因为这些应用的每一笔数据量小,磁盘输出入频繁而且必须容错。
事实上RAID 5的性能并无如此理想,因为任何数据的修改,都要把同一parity block的所有数据读出来修改后,做完校验计算再写回去,也就是RMW cycle(Read-Modify-Write cycle,这个cycle没有包括校验计算);正因为牵一而动全身,所以:
R:N(可同时读取所有磁盘)
W:1(可同时写入磁盘数)
S:N-1(利用率)RAID 5的控制比较复杂,尤其是利用硬件对磁盘阵列的控制,因为这种方式的应用比其他的RAID level要掌握更多的事情,有更多的输出入需求,既要速度快,又要处理数据,计算校验值,做错误校正等,所以价格较高;其应用最好是OLTP,至于用于PC等,不见得有最佳的性能。
3.RAID的对比:
下面几个表列是RAID的一些性质:


4.RAID的概述:
RAID 0
没有任何额外的磁盘或空间作安全准备,所以一般人不重视它,这是误解,其实它有最好的效率及空间利用率,对于追求效率的应用,非常理想,可同时用其他的RAID level或其他的备份方式以补其不足,保护重要的数据。RAID 1
有最佳的安全性,100%不停机,即使有一个磁盘损坏也能照常作业而不影向其效能(对能并行存取的系统稍有影响),因为数据是作重复储存。RAID1的并行读取几乎有RAID 0的性能,因为可同时读取相互镜像的磁盘;写入也只比RAID 0略逊,因为同时写入两个磁盘并没有增加多少工作。虽然RAID 1要增加一倍的磁盘做镜像,但作为采用磁盘阵列的进入点,它是最便宜的一个方案,是新设磁盘阵列的用户之最佳选择。RAID 5
在不停机及容错的表现都很好,但如有磁盘故障,对性能的影响较大,大容量的快取内存有助于维持性能,但在OLTP的应用上,因为每一笔数据或记录(record)都很小,对磁盘的存取频繁,故有一定程度的影响。某一磁盘故障时,读取该磁盘的数据需把共用同一parity block的所有数据及校验值读出来,再把故障磁盘的数据计算出来;写入时,除了要重覆读取的程序外,还要再做校验值的计算,然后再写入更新的数据及校验值;等换上新的磁盘,系统要计算整个磁盘阵列的数据以回复故障磁盘的数据,时间要很长,如系统的工作负载很重的话,有很多输出入的需求在排队等候时,会把系统的性能拉下来。但如使用硬件磁盘阵列的话,其性能就可以得到大幅度的改进,因为硬件磁盘阵列如DFTraid系列本身有内置的CPU与主机系统并行运作,所有存取磁盘的输出入工作都在磁盘阵列本身完成,不花费主机的时间,配合磁盘阵列的快取内存的使用,可以提高系统的整体性能,而优越的总线控制更能增加数据的传输速率,即使在磁盘故障的情况下,主机系统的性能也不会有明显的降低。RAID 5要做的事情太多,所以价格较贵,不适于小系统,但如果是大系统使用大的磁盘阵列的话,RAID 5却是最便宜的方案。总而言之,RAID 0及RAID 1最适合PC及图形工作站的用户,提供最佳的性能及最便宜的价格,所以RAID 0及RAID 1多是使用IDE界面,以低成本符合PC市埸的需求。RAID 2及RAID 3适用于大档案且输入输出需求不频繁的应用如影像处理及CAD/CAM等;而RAID 5则适用于银行、金融、股市、数据库等大型数据处理中心的OLTP应用;RAID 4与RAID 5有相同的特性及应用方式,但有其先天的限制,所以并不受推荐。
5.磁盘阵列的额外容错功能:Spare or Standby driver
事实上容错功能已成为磁盘阵列最受青睐的特性,为了加强容错的功能以及使系统在磁盘故障的情况下能迅速的重建数据,以维持系统的性能,一般的磁盘阵列系统都可使用热备份(hot spare or hot standby driver)的功能,所谓热备份是在建立(configure)磁盘阵列系统的时候,将其中一磁盘指定为后备磁盘,此一磁盘在平常并不操作,但若阵列中某一磁盘发生故障时,磁盘阵列即以后备磁盘取代故障磁盘,并自动将故障磁盘的数据重建(rebuild)在后备磁盘之上,因为反应快速,加上快取内存减少了磁盘的存取,所以数据重建很快即可完成,对系统的性能影响不大。对于要求不停机的大型数据处理中心或控制中心而言,热备份更是一项重要的功能,因为可避免晚间或无人持守时发生磁盘故障所引起的种种不便。
另一个额外的容错功能是坏扇区转移(bad sector reassignment)。坏扇区是磁盘故障的主要原因,通常磁盘在读写时发生坏扇区的情况即表示此磁盘故障,不能再作读写,甚至有很多系统会因为不能完成读写的动作而死机,但若因为某一扇区的损坏而使工作不能完成或要更换磁盘,则使得系统性能大打折扣,而系统的维护成本也未免太高了。坏扇区转移是当磁盘阵列系统发现磁盘有坏扇区时,以另一空白且无故障的扇区取代该扇区,以延长磁盘的使用寿命,减少坏磁盘的发生率以及系统的维护成本。所以坏扇区转移功能使磁盘阵列具有更好的容错性,同时使整个系统有最好的成本效益比。其他如可外接电池备援磁盘阵列的快取内存,以避免突然断电时数据尚未写回磁盘而损失;或在RAID 1时作写入一致性的检查等,虽是小技术,但亦不可忽视。
6.硬件磁盘阵列还是软件磁盘阵列
市面上有所谓硬件磁盘阵列与软件磁盘阵列之分,因为软件磁盘阵列是使用一块SCSI卡与磁盘连接,一般用户误以为是硬件磁盘阵列。以上所述主要是针对硬件磁盘阵列,其与软件磁盘阵列有几个最大的区别:
l 一个完整的磁盘阵列硬件与系统相接。
l 内置CPU,与主机并行运作,所有的I/O都在磁盘阵列中完成,减轻主机的工作负载,增加系统整体性能。
l 有卓越的总线主控(bus mastering)及DMA(Direct Memory Access)能力,加速数据的存取及传输性能。
l 与快取内存结合在一起,不但增加数据的存取及传输性能,更因减少对磁盘的存取而增加磁盘的寿命。
l 能充份利用硬件的特性,反应快速。软件磁盘阵列是一个程序,在主机执行,透过一块SCSI卡与磁盘相接形成阵列,它最大的优点是便宜,因为没有硬件成本(包括研发、生产、维护等),而SCSI卡很便宜(亦有的软件磁盘阵列使用指定的很贵的SCSI卡);它最大的缺点是使主机多了很多进程(process),增加了主机的负担,尤其是输出入需求量大的系统。目前市面上的磁盘阵列系统大部份是硬件磁盘阵列,软件磁盘阵列较少。
7.IDE磁盘阵列还是SCSI磁盘阵列目前使用在磁盘输出入的界面主要有两种:
1. IDE (Integrated Drive Electronics)
是广泛使用在PC上的磁盘驱动器界面,一般而言,其传输速度从磁盘到磁盘缓冲器(medium to drive buffer)是1.5-2.5MB/Sec,从缓冲器到界面(drive buffer to drive interface)约4.0-6.0MB/Sec,而且新的设计其速率有大幅的改进,如增强型IDE界面(mode 4)在PCI(Peripheral Component Interconnect)总线上的传输速率可达33MB/Sec。2. SCSI (Small Computer Standard Interface)
SCSI是较高级(high level)的界面,可用于主机,磁盘,磁带,打印机等,因为是高阶的界面,规格较为复杂,一般自带控制器,也较为复杂,这就是SCSI磁盘为什么比IDE磁盘费的原因。但SCSI界面能较有效的利用硬件特性而提高其速度。其控制器还能对主机发给SCSI磁盘的命令进行缓冲、排队,并进行优化处理(命令队列)。现在较流行的是标准SCSI-2和SCSI-3。有两种规格,FAST SCSI(SCSI-2)的同步传输速率为10MB/Sec,数据传输宽度为8 bit, WIDE SCSI的数据传输宽度可达16-bit。Ultra SCSI(SCSI-3)的同步传输速率为20MB/Sec,Ultra Wide SCSI的同步传输速率为40MB/Sec,数据传输宽度可达32-bit。SCSI磁盘有虽有较高的传输速度,但受限于磁盘的存取速度及磁盘至SCSI界面的传输速度而不能充分发挥其性能(因为磁盘的机械动作难于有大幅度的改进);其命令分析程序(command phase)也较复杂。对单机来言,磁盘数量越多,主机找到特定的数据的时间越长,但对磁盘阵列来言,由于是多个磁盘一起并行处理,则表现为磁盘数量越多,速度越快。以上界面的直接反应是单任务时IDE比SCSI快,多任务时SCSI较快,这可从用IDE盘和SCSI盘做多用户、多任务的操作系统(如UNIX、Windows/NT等)的系统盘时的启动时间的差别中明显看出。在单机时则不一定。我们看一个界面是否较快,不应只看其传崐输速度的高低而应就整个输入/输出的流程看,因为磁盘存取的机械动作比不上电脑的传输速率。IDE界面简单,反应快速,用于PC单机的小型的磁盘阵列其效果可能比SCSI为佳;但较大型的磁盘阵列就非SCSI界面莫属,因为阵列中的各个磁盘一起作存取的动作,能充分发挥SCSI的传输速率快及多工的特点。
此外IDE因为其配线规格的关系,不能作热插拔(hot swap),也就是不能在工作中带电插拔磁盘,而其线缆即使是增强型IDE也只有18寸,不能接在机箱之外,难于形成大的阵列,也就是只适用于PC低层次的用户。SCSI缆线在差分传输模式(differential transmission mode)下最大长度为25米,单端传输模式 (single-ended transmission mode)时最大长度为6米,而一条SCSI总线可连接8台系统或各种不同的装置,扩充性很强,可形成很大的磁盘阵列空间;SCSI规格完备,容错能力很好,可带电插拔磁盘,是外接式装置无可取代的界面。
8. 磁盘阵列卡还是磁盘阵列控制器
磁盘阵列控制卡一般用于小系统,供单机使用。与主机共用电源,在关闭主机电源时存在丢失Cache中的数据的的危险。磁盘阵列控制卡只有常用总线方式的接口,其驱动程序与主机、主机所用的操作系统都有关系,有软、硬件兼容性问题并潜在地增加了系统的不安定因素。在更换磁盘阵列卡时要冒磁盘损坏,资料失落,随时停机的风险。
独立式磁盘阵列控制一般用于较大型系统,可分为两种:
单通道磁盘阵列和多通道式磁盘阵列,单通道磁盘阵列只能接一台主机,有很大的扩充限制。多通道磁盘阵列可接多个系统同时使用,以群集(cluster)的方式共用磁盘阵列,这使内接式阵列控制及单接式磁盘阵列无用武之地。DFT数据容错公司的DFTraid Rack Mount和DFTraid Tower等系统,都是独立形式的磁盘阵列子系统,其本身与主机系统的硬件及操作环境无关,只通过SCSI线缆与主机相接,主机把它当作一般的磁盘,所有的输出入动作都在磁盘阵列上完成,与主机的操作无关,所以可接任何可使用SCSI界面的主机。DFTraid Rack Mount和DFTraid Tower两系统最多可有六个SCSI通道,可同时连接5台主机;而DFTraid 5000系列则有9个通道,可同时连接多达8台主机,使之一起共用磁盘阵列子系统。这种方式的磁盘阵列既可给单机使用,又可给群集多机使用,对用户对增加阵列中的磁盘数量限制较小,并可用于备援及并行的容错电脑系统,特别适合较大的系统用户,使这些用户可从封闭的环境中解放出来。9. RAID5建立过程







-
常见术语笔记
2008-8-01
oracle数据库中的ASM
自动存储管理 (ASM) automatism storage management
ASM 是 Oracle 数据库 10g 中一个非常出色的新特性,它以平台无关的方式提供了文件系统、逻辑卷管理器以及软件 RAID 等服务。ASM 可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡 I/O 以删除“热点”。它还支持直接和异步的 I/O 并使用 Oracle9i 中引入的 Oracle 数据管理器 API(简化的 I/O 系统调用接口)。
ASM 不是一个通用的文件系统,并只能用于 Oracle 数据文件、重做日志以及控制文件。ASM 中的文件既可以由数据库自动创建和命名(通过使用 Oracle 管理文件特性),也可以由 DBA 手动创建和命名。由于操作系统无法访问 ASM 中存储的文件,因此对使用 ASM 文件的数据库执行备份和恢复操作的唯一途径就是通过恢复管理器 (RMAN)。
ASM 作为单独的 Oracle 实例实施,只有它在运行时其他数据库才能访问它。在 Linux 上,只有运行 OCSSD 服务(由 Oracle 通用安装程序默认安装)才能使用 ASM。ASM 需要的内存不多:对大多数系统,只需 64 MB。
安装 ASM
在 Linux 平台上,ASM 可以使用原始设备,或通过 ASMLib 接口管理的设备。出于易于使用和性能方面的原因,Oracle 建议在原始设备上使用 ASMLib。ASMLib 现在可以从 OTN 免费下载。本部分逐步讲解使用 ASMLib 配置一个简单 ASM 实例和构建一个使用 ASM 进行磁盘存储的数据库的全过程。
确定所需的 ASMLib 版本
ASMLib 以三个 Linux 程序包组成的程序包集提供:
oracleasmlib - ASM 库
oracleasm-support - 用于管理 ASMLib 的实用程序
oracleasm - ASM 库的内核模块
每个 Linux 发行套件都有其自己的 ASMLib 程序包集。在每个发行套件中,每个内核版本都有一个相应的 oracleasm 程序包。 -
jdbc学习
2008-7-24
JDBC是Java的开发者——Sun的Javasoft公司制定的Java数据库连接(Java Data Base Connectivity)技术的简称,是为各种常用数据库提供无缝联接的技术。JDBC在Web和Internet应用程序中的作用和ODBC在Windows系列平台应用程序中的作用类似。ODBC(OpenData Base Connectivity),称为开放式数据库互联技术,是由Microsoft公司倡导并得到业界普遍响应的一门数据库连接技术,如果读者有使用ODBC编程的经验,就会发现JDBC与ODBC很类似。JDBC现在可以连接的数据库包括:xbase、Oracle、Sybase、Aceess以及Paradox等。
JDBC的工作机制
如果用户是从事软件领域工作的,不可能没有听说过SQL(Structure Query Language:结构化查询语言),它是一种标准化的关系型数据库访问语言。在SQL看来,数据库就是表的集合,其中包含了行和列。SQL标准虽然也还处在不断变革之中(任何一门标准如果已一成不变了,那只能说明这门学科已经停止发展了),但其基本内容相对稳定。JDBC定义了Java语言同SQL数据之间的程序设计接口。
JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。
JavaSoft公司开发了JDBC API,JDBC API是一个标准统一的SQL数据存取接口。 JDBC在Internet中的作用与ODBC在Windows系列中的作用类似。它为Java程序提供了一个统一缝地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性,而且在Internet上确实无法预料你的用户想访问什么类型的数据库。只要系统上安装了正确的驱动器组,JDBC应用程序就可以访问其相关的数据库。
用JDBC来实现访问数据库记录可以采用下面的几个步骤:
1、 通过驱动器管理器获取连接接口。
2、 获得Statement或它的子类。
3、 限制Statement中的参数。
4、 执行Statement。
5、 查看返回的行数是否超出范围。
6、 关闭Statement。
7、 处理其它的Statement
8、 关闭连接接口。
Java作为数据库前台
在信息时代,数据库是用于收集和处理数据的工具,数据库形成了许多公司基础结构的基础。尽管数据库系统非常适合数据的存储和取得,但人类需要某种前台应有程序以查阅和使用存放的数据。
Java对建立数据库服务器前台应用程序的开发人员提供了几个好处。Java是“一旦写成,到处运行”的语言,即Java程序不经改变即可部署到任何运行Java虚拟机的计算机结构和操作系统。对于大公司,有一个公用开发平台好处很大,编程人员可以不再为大公司中的各个平台分别编程。Java也很吸引第三方开发者,单个Java程序即可满足大公司客户的需求。
建立公司系统中基于Java的应用程序和小程序的动力是巨大的。公司对于将结构和操作系统相关模型变成针对网络的模型相当有兴趣。Java代表着节约资源成本的长期战略。
对于开发人员,Java代表巨大的市场机会。大中型企业很少不用数据库进行业务工作的,大部分公司将数据库应用到业务的各个方面,从人事资源到前线客户销售。
JDBC API
JDBC API使开发者不必不断重写程序而可以建立数据库前台。尽管ANSI委员会有个标准组,但每个数据库系统厂家的系统连接和通讯方法仍然五花八门。
为了建立健全独立于平台的应用程序和基于Web的小程序,开发人员应考虑用Java开发前台连接办法。从外部看,第三方软件开发者通过专用办法,通过本地方法集成客户机方库或通过建立第三层和新协议来满足这种需求。
JavaSoft是Sun公司负责开发Java产品的业务单位,和数据库与数据库工具厂家一起建立独立于DBMS的机制,使开发人员不必考虑所用的特定数据库而编写客户机方应用程序。产生的JDBC API第一版是核心JDK 2的一部分。
JDBC向应用程序开发者提供了独立于数据库的统一的API。这个API提供了编写的标准和考虑所有不同应用程序设计的标准。其奥秘是一组由驱动程序实现的Java接口。驱动程序负责标准JDBC调用向支持的数据库所要的具体调用转变。
应用程序编写一次并移植到各种驱动程序上。应用程序不变,驱动程序则各不相同。驱动程序可以用于开发多层数据库设计的中间层,也称中间件(middleware)。
除了向开发者提供统一的独立于DBMS的框架外,JDBC还提供了让开发者保持数据库厂家提供的特定功能的办法。JDBC驱动程序必须支持ANSI AQL-2项目层,但JDBC允许开发者直接将查询字符串传递到连接的驱动程序。这些字段可能是ANSI SQL也可能不是,或者根本不是AQL。这些字符串的使用是基础驱动程序的事。
JDBC不是Mincrosoft的ODBC(开放式数据库连接)规范派生的,JDBC完全是用Java编写的,而ODBC是个C接口。但是,JDBC和ODBC都是基于X/开放SQL命令层接口(CLI),相同的概念性基础使API工作进展更快,使API的接受更加容易。JavaSoft提供了将JDBC变成ODBC的JDBC-ODBC桥。这个用本地方法完成的版本很小很有效。
一般来说,JDBC API中有两层接口:应用程序层,开发人员用API通过SQL调用数据库和取得结果,驱动程序层,处理与具体驱动程序版本的所有通讯。
每个JDBC应用程序(或小程序)至少要有一个JDBC驱动程序,每个驱动程序是针对一种DBMS的。但驱动程序不必直接联到数据库。
利用JDBC代替CGI
迄今为止,通过Java访问数据库的唯一方法就是利用Java中的流调和访问Common Gateway Interface(CGI,公用网关接口)程序。通过Java调用CGI脚本其实是执行一个访问数据库并返回结果的独立程序。
使用这种方法速度很慢,而且会在应用程序中引入更多的错误。这是由于利用两种不同的开发语言开发程序,需要掌握两种不同的技术。使用JDBC,用户只要了解Java语言即可,而使用CGI,用户必须同时使用Java和另一种编程语言。
使用JDBC的另一个原因是它的速度比CGI方法更快。使用CGI方法通常要求计算机执行另一个独立的程序。这个独立的程序访问数据库,处理数据,并将结果返回给调用程序。这就需要多级处理,因而增加了等待时间和出错概率。
调用CGI脚本通常是通过Web服务器执行一个新的脚本,而执行JDBC的数据库命令只需要某种将SQL命令发送给数据库的服务器。这就大大缩短了执行SQL语句的时间,CGI脚本必须独立地连接数据库,处理执行结构,而JDBC的解决方案使应用程序直接与数据库相连,执行各种操作。
JDBC的优点和缺点
JDBC API用于连接Java应用程序与各种关系数据库。这使得人们在建立客户/服务器应用程序时,通常把Java作为编程语言,把任何一种浏览器作为应用程序的友好界面,把Internet或Intranet作为网络主干,把有关的数据库作为数据库后端。以下是使用JDBC的优缺点。
优点如下:
1.JDBC API与ODBC十分相似,有利于用户理解。
2.JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。
3.JDBC支持不同的关系数据库,使得程序的可移植性大大加强。
4.用户可以使用JDBC-ODBC桥驱动器将JDBC函数调用转换为ODBC。
5.JDBC API是面向对象的,可以让用户把常用的方法封装为一个类,备后用。
缺点如下:
1.使用JDBC,访问数据记录的速度会受到一定程度的影响。
2.JDBC结构中包含了不同厂家的产品,这就给更改数据源带来了很大的麻烦。
