版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主流行式数据库评测:DB29.7企业版
ﻫ2011—05-1909:50:52
来源:IT168
编辑:wlx
作者:卢涛
评论:HYPERLINK”http://www.soft6。com/v9/2011/jcsj_0519/151745。html”\l”comment_iframe"0点击:27DB2拥有悠久的历史,70年代初,当时在IBM工作的埃德加·科德(E。F.Codd)博士描述了关系型数据库理论,DB2的前身SystemR和SQL语言就是基于此理论实现的,1983年,IBM发布了DATABASE2(DB2)forMVS,这是第一个以DB2命名的版本。DB2发展到现在,已经成为一个涵盖多个平台的数据库族。它主要的执行环境为UNIX、Linux、z/OS,以及Windows服务器操作系统.版本包括Express、Express-C、Workgroup和Enterprise版本.基于Linux/UNIX/Windows的最复杂的版本是DB2DataWarehouseEnterpriseEdition,缩写为DB2DWE.这个版本的偏重于混合工作负荷(在线事务处理和数据仓库)和商业智能的实现。DB2DWE包括一些商业智能的特性例如ETL、数据挖掘、OLAP加速以及in-lineanalytics。Express-C是免费版本,只能使用2个CPU内核和2GB的内存。2006年IBM发布DB29,和Oracle相比,DB2的版本进化较慢,目前最新的版本是10forz/OS和9.8pureScale,而官方网站上能下载到的最新的试用版本是9.7版。本文就是基于DB29。7版本展开评测!一、数据库安装IBM在其DB2官网上提供了各种版本DB2软件的下载,我们选择最新的IBMDB29.7DataServerTrial版本。和大多数试用软件一样,这个试用版有90天的试用期限制.通过版本说明我们了解到,企业版具有更多的高级功能,比如:分区、并行查询等,也具有更大的扩展性.因此我们采用9.7企业版来做评测,以最大限度地了解这个产品的全部功能。在上述网站注册一个免费用户就可以下载安装文件。这里有db2补丁下载,列出了目前仍然支持的所有版本,补丁也可以直接作为安装盘安装,没有lic文件自动变成90天评估版。这点比Oracle做得好,后者必须是付费用户才能下载补丁。有趣的是,虽然db29.8版没有提供下载,但它的补丁却可以下载,也可以进行安装,不过由于9。8版安装对软硬件有特殊要求,一般用户难以满足,因此暂不讨论。感兴趣的读者可阅读此文档了解更多信息。IBM提供了DB2文档在线浏览和英文文档下载地址、翻译文档地址,其中也包括简体中文版,但某些文档只有英文版本,如SQL说明书,另一个FTP方式的文档下载地址.DB29.7支持的操作平台有为Windows32位/64位,Linux,Solaris、HP-UX、AIX等。本次测试基于IntelXeon7550*8的PC服务器上用VMWareVSphere4。1管理的虚拟机,虚拟机的逻辑CPU个数是8,内存100GB,存储为8个300GBSAS本地磁盘,采用一块512M缓存RAID卡,按RAID5方式组成磁盘阵列。操作系统采用和RHEL5相同的核心级别的RedFlagAsianLinuxSever3.0x64。因此选用的安装文件是64位x86Linux版本,v9.7_linuxx64_server.tar.gz,安装文件大约700M,需解压缩到一个目录才能执行安装。DB2的安装过程比较复杂,虽然不像Oracle那样某些步骤不得不用到图形界面,基本都可以在命令行完成,但还是有不少陷阱,一不小心就会掉进去。因此本文在详细地介绍安装的每个步骤时,专门指出易错的关键步骤。更详细的步骤,参考官方安装文档。简体中文版是上述地址下的DB2InstallingServers-db2isc972.pdf。安装步骤如下:1。安装前准备工作将下载的安装文件上传到待安装的LINUX机器,解压缩到某个目录,产生了一个名为Server的子目录,进入子目录,可以看到有多个可执行的脚本,其中db2prereqcheck是先决条件检查,db2setup是图形界面安装程序,db2_install是命令行方式安装。还有一个db2目录,保存了需要安装的二进制文件.执行db2prereqcheck,如果没有返回任何结果,表明系统符合DB2安装的先决条件,可以进入下一步安装.如果返回信息,请按信息提示修改配置,然后再次运行,直到没有错误提示。[root@redflag11012601app]#llv*gz—rw-r--r-—1rootroot81057639205-0319:44v9.7_linuxx64_server.tar。gz[root@redflag11012601app]#tarxzfv9.7_linuxx64_server.tar。gz[root@redflag11012601app]#cdserver[root@redflag11012601server]#ll总计64drwxr-xr-x6binbin40962009—11-16db2-r-xr-xr-x1binbin53402009—11-16db2ckupgrade—r-xr-xr—x1binbin52932009-11—16db2_deinstall—r—xr—xr-x1binbin51632009-11-16db2_install-r-xr—xr—x1binbin51272009-11-16db2ls-r-xr-xr—x1binbin51452009—11—16db2prereqcheck—r—xr-xr-x1binbin51452009-11—16db2setupdrwxr-xr-x15binbin40962009-11-16doc-r-xr-xr-x1binbin51812009—11-16installFixPack[root@redflag11012601server]#。/db2prereqcheck2。安装DB2数据库软件以操作系统root用户执行db2_install,根据提示操作,设定安装目录和要安装的版本等以后,耐心等待安装任务完成.DB2用一个安装包包括了同一操作系统平台各个版本的功能,只要在安装类型选择企业版即可,这里我们输入ESE。要注意,由于操作系统默认语言为简体中文,安装界面也是中文提示的,而且,必须输入中文"是”才能更改安装目录。和大多数unix下的软件一样,软件安装只是整个安装过程很小的一步,要使软件能正常工作,大量的配置和管理任务还在后头.[root@redflag11012601server]#。/db2_install用于安装产品的缺省目录—/opt/ibm/db2/V9。7***********************************************************要选择另一个目录用于安装吗?[是/否]Y要选择另一个目录用于安装吗?[是/否]Yes要选择另一个目录用于安装吗?[是/否]是输入安装目录的完整路径名-—---—------—-—-—----—-------——-—----——-/user1/ibm/db2/V9。7指定下列其中一个关键字以安装DB2产品。ESE--企业版CONSVWSE--工作组版EXP—-易捷版PE-—个人版CLIENTRTCL按“帮助”以重新显示产品名称。按“退出"以退出.***********************************************************ESE正在初始化DB2安装。要执行的任务总数为:47要执行的所有任务的总估计时间为:2070任务#1启动描述:正在检查许可协议的接受情况估计时间1秒任务#1结束…任务#47启动描述:正在注册DB2更新服务估计时间30秒任务#47结束任务#48启动描述:正在更新全局概要文件注册表估计时间3秒任务#48结束已成功完成执行。有关更多信息,请参阅”/tmp/db2_install.log.27290”上的DB2安装日志。3。注册license本安装因为是评估版无须这一步。用户可以在90天内完全测试全部功能。对于购买了企业版等版本license的用户,需要注册license才能长期使用.4。创建DB2运行所需要的用户组和用户DB2没有独立的用户管理系统,必须借用OS用户来提供安全性认证,所以这里需要创建LINUX用户和组.一共创建了3个组,每个组一个用户。其作用和含义分别是:数据库管理服务器DAS用户dasusr1组名:dasadm1管理实例的用户db2inst1组名:db2iadm1受防护用户db2fenc1组名:db2fadm1其中管理实例的用户db2inst1是最常用的,我们为它设置口令db2,以便下面步骤的正常操作。创建完成后,执行如下命令查看/etc/group和/etc/passwd,检查用户组和用户是否创建成功。[root@redflag11012602server]#groupadd-g901db2grp[root@redflag11012602server]#groupadd-g902db2fgrp[root@redflag11012602server]#groupadd—g903db2agrp[root@redflag11012602server]#useradd—gdb2grp-u801-d/home/db2inst1-m-s/bin/shdb2inst1[root@redflag11012602server]#useradd-gdb2fgrp—u802-d/home/db2fenc-m—s/bin/shdb2fenc[root@redflag11012602server]#useradd-gdb2agrp-u803—d/home/db2das—m-s/bin/shdb2das[root@redflag11012602server]#passwddb2inst1Changingpasswordforuserdb2inst1.NewUNIXpassword:BADPASSWORD:itisWAYtooshortRetypenewUNIXpassword:passwd:allauthenticationtokensupdatedsuccessfully。[root@redflag11012602server]#more/etc/group|grepdb2db2grp:x:901:db2fgrp:x:902:db2agrp:x:903:[root@redflag11012602server]#more/etc/passwd|grepdb2db2inst1:x:801:901::/home/db2inst1:/bin/shdb2fenc:x:802:902::/home/db2fenc:/bin/shdb2das:x:803:903::/home/db2das:/bin/sh5。创建实例需要以root用户创建das和实例。分别用下面2个命令:dascrt创建的是DB2adminstrationserver,每台服务器只有一个这种server,为进行DB2管理(比如运行控制中心)所必须,同时指定其管理用户是db2das;db2icrt创建的是实例,其名字一般和管理用户名一样,这里均为db2inst1;创建成功以后,系统在db2das和db2inst1相应的home目录下产生了一个子目录./home/db2inst1/sqllib目录中包括了一个db2profile文件,包括了设定各个db2实例中用到的环境变量,如DB2INSTANCE和各种命令的搜索路径,库的路径等,必须执行它,才能进行各种操作,或者将.~/sqllib/db2profile一行加入/home/db2inst1/。profile文件(因为创建db2inst1用户时指定了shell类型是/bin/sh,如果是其他shell,则采用不同的profile文件,比如bash则采用.bash_profile),这样当切换到db2inst1用户时就会自动执行这个脚本。db2das用户的设置脚本文件位于/home/db2das/das/dasprofile,同样需要执行这个脚本,才能执行db2admin等命令。用db2ilist命令可以查出当前已创建的实例名。[root@redflag11012602server]#cd/user1/ibm/db2/V9。7/instance[root@redflag11012602instance]#./dascrt-udb2dasSQL4406WTheDB2AdministrationServerwasstartedsuccessfully.DBI1070IProgramdascrtcompletedsuccessfully.[root@redflag11012602instance]#。/db2icrt—udb2inst1db2inst1DBI1070IProgramdb2icrtcompletedsuccessfully。—sh-3。2$db2ilistdb2inst16.启动DB2实例切换到db2das用户,执行db2adminstart启动DB2管理服务器.切换到db2inst1用户,执行db2start启动数据库实例.root用户也可以执行db2adminstart命令。如果首次执行,则会提示如下横线以下信息。一般出现在刚刚用dascrt命令创建das之后。[root@redflag11012601das]#su—db2das—sh-3.2$.das/dasprofile—sh-3.2$db2adminstartSQL4406WTheDB2AdministrationServerwasstartedsuccessfully。[root@redflag11012602instance]#su—db2inst1—sh-3。2$lsDesktopsqllib-sh-3。2$.sqllib/db2profile-sh—3.2$db2start05/05/201120:13:0800SQL1063NDB2STARTprocessingwassuccessful。SQL1063NDB2STARTprocessingwassuccessful.--—-—--——-[root@redflag11012601bin]#./db2adminstartSQL4409WTheDB2AdministrationServerisalreadyactive。7.创建和访问数据库首先要启动数据库实例,切换到db2inst1用户,执行db2start命令启动数据库实例。若需要,首先用db2stop命令停止实例,如果db2stop命令不能成功执行,可运行下面的命令来关闭数据库实例。首先在db2inst1用户下强制关闭实例上的所有应用程序.$db2forceapplicationsall$db2stop关闭数据库实例。上述步骤也可以简化为改用db2stopforce命令。启动数据库实例后用db2createdatabase命令创建数据库,可以设定字符集、页大小等数据库选项.数据库创建成功后,可以用db2connectto命令连接数据库。然后就可以进行创建表、查询等操作了.如果要尽快测试db2数据库的功能,也可以用命令创建db2自带的sample数据库.-sh-3。2$db2stop2011-05-0911:01:5600SQL1025NThedatabasemanagerwasnotstoppedbecausedatabasesarestillactive.SQL1025NThedatabasemanagerwasnotstoppedbecausedatabasesarestillactive。—sh-3。2$db2forceapplicationsallDB20000ITheFORCEAPPLICATIONcommandcompletedsuccessfully。DB21024IThiscommandisasynchronousandmaynotbeeffectiveimmediately.-sh—3.2$db2stop2011-05-0911:06:0300SQL1064NDB2STOPprocessingwassuccessful。SQL1064NDB2STOPprocessingwassuccessful.—sh—3.2$db2start05/08/201111:14:2400SQL1063NDB2STARTprocessingwassuccessful.SQL1063NDB2STARTprocessingwassuccessful。-sh—3.2$db2"createdatabasetpchUSINGCODESETUTF—8TERRITORYCNpagesize32K”DB20000ITheCREATEDATABASEcommandcompletedsuccessfully.—sh-3。2$db2connecttotpch;DatabaseConnectionInformationDatabaseserver=DB2/LINUXX86649.7。4SQLauthorizationID=DB2INST1Localdatabasealias=TPCHdb2=>select*fromdual;DUMMY--———X1record(s)selected。---—-——-—-—--—-———-------—---—--——------—--——-—-——--——--——--—----—-sh-3.2$cd/user1/ibm/db2/V9。7/bin-sh-3。2$./db2samplStartingtheDB2instance。.。Creatingdatabase”SAMPLE".。。Connectingtodatabase"SAMPLE"...Creatingtablesanddatainschema”DB2INST1"。..CreatingtableswithXMLcolumnsandXMLdatainschema”DB2INST1”.。.StoppingtheDB2instance。。。’db2sampl'processingcomplete.注意:如果创建数据库时没有指定创建位置,默认创建在/home/db2inst1/实例名下,在此目录下包括系统表空间、用户表空间的数据文件,通常这个目录下的空间不会太大,当需要导入大量数据时,会发生磁盘空间不足的错误,解决方法是在其他目录创建表空间,然后在创建表时指定表空间,或者在数据库关闭状态下,将此目录移动到其他空间足够的目录,再用Linux的ln-s命令将其他位置映射到此目录下。更好的办法是在一开始做好容量规划,将数据库创建目录指定到大容量的目录,具体命令行写法参考文档。软连接的例子如下:[db2inst1@aix:/home/db2inst1]#〉cp—Rdb2inst1/arch/IBM/ts[db2inst1@aix:/home/db2inst1]#〉du-s/arch/IBM/ts/db2inst120111984/arch/IBM/ts/db2inst1[db2inst1@aix:/home/db2inst1]#>mvdb2inst1db2inst1ori[db2inst1@aix:/home/db2inst1]#>ls-ltotal8drwxrwxr-x3db2inst1db2iadm1256May1016:03db2inst1oridrwxrwsr-t23db2inst1db2iadm14096May1015:49sqllib[db2inst1@aix:/home/db2inst1]#〉ln—s/arch/IBM/ts/db2inst1db2inst18。设置DB2自启动使用root用户执行db2iauto命令,设置对db2inst1实例在LINUX启动时自动启动。这一步是可选的.用户应该按自己的实际需要决定是否设置。选项-on表示自动启动,-off表示不随操作系统启动自动启动.[root@redflag11012601das]#cd/user1/ibm/db2/V9.7/instance[root@redflag11012601instance]#。/db2iauto—ondb2inst19.配置网络DB2软件在创建实例的过程中,自动在操作系统中增加了相关的服务,并指定了相应的端口号。但db2并没有自动设定为通过TCP/IP协议访问,需要手工配置。首先查看/etc/services中db2各个服务的端口号,这里DB2_db2inst1默认端口就是60000。切换到db2inst1用户。修改DB2连接方式为TCPIP,然后可通过JDBC、ODBC等访问本DB2服务器上的数据库,安装了DB2客户端的其它机器也可访问数据库。$db2setDB2COMM=TCPIP,设定完成后,可以通过不带参数的db2set命令查看结果。修改DB2的服务端口为上述默认端口号。db2updatedbmcfgusingSVCENAME命令提示,需要重新启动实例,再用clpplus命令验证网络设置成功。-sh—3.2$db2setDB2COMM=TCPIP—sh—3.2$db2setDB2_COMPATIBILITY_VECTOR=ORADB2_EXTENDED_OPTIMIZATION=onDB2_LIKE_VARCHAR=y,yDB2_HASH_JOIN=YDB2MEMMAXFREE=8000000DB2MEMDISCLAIM=YDB2_MMAP_WRITE=NODB2_MMAP_READ=NODB2_RR_TO_RS=ONDB2COMM=TCPIP—sh-3。2$db2getdbmcfg|grepSVCENAMETCP/IPServicename(SVCENAME)=SSLservicename(SSL_SVCENAME)=-sh—3.2$tail/etc/servicescom—bardac-dw48556/udp#com—bardac-dwiqobject48619/tcp#iqobjectiqobject48619/udp#iqobject#Localservicescsync2005/tcp#CyrusIMAPReplicationDaemoncsync2005/udp#CyrusIMAPReplicationDaemonDB2_db2inst160000/tcpDB2_db2inst1_160001/tcpDB2_db2inst1_260002/tcpDB2_db2inst1_END60003/tcp-sh-3。2$db2updatedbmcfgusingSVCENAME60000DB20000ITheUPDATEDATABASEMANAGERCONFIGURATIONcommandcompletedsuccessfully.SQL1362WOneormoreoftheparameterssubmittedforimmediatemodificationwerenotchangeddynamically。ClientchangeswillnotbeeffectiveuntilthenexttimetheapplicationisstartedortheTERMINATEcommandhasbeenissued.ServerchangeswillnotbeeffectiveuntilthenextDB2STARTcommand.-sh—3.2$db2stopforce2011-05-0819:36:0000SQL1064NDB2STOPprocessingwassuccessful.SQL1064NDB2STOPprocessingwassuccessful.—sh-3。2$db2start05/08/201119:36:0600SQL1063NDB2STARTprocessingwassuccessful。SQL1063NDB2STARTprocessingwassuccessful.—sh—3.2$clpplusdb2inst1/db2@localhost/sample输入端口[50000]:60000数据库连接信息主机名=localhost数据库服务器=DB2/LINUXX8664SQL09071SQL授权标识=db2inst1本地数据库别名=SAMPLE端口=60000CLPPlus:版本1.1Copyright??2009,IBMCORPORATION.Allrightsreserved.SQL>这里的服务名和端口也可以不采用系统自动创建的值,但需要人工额外多一步操作,以root用户利用vi文本编辑器在/etc/services中按如下格式添加一行,保存修改。然后再执行上述步骤,同时db2updatedbmcfgusingSVCENAME命令后面要用自定义的服务名。tpch50000/tcp#DB2连接服务端口—sh—3.2$db2updatedbmcfgusingSVCENAMEtpch-sh-3.2$clpplusdb2inst1/db2@localhost:50000/tpchNoX11DISPLAYvariablewasset,butgramperformedanoperationwhichrequiresit.DB250006E:命令行处理器扩展器(CLPPlus)未能启动。-sh—3.2$clpplus-nwdb2inst1/db2@localhost:50000/tpchCLPPlus:版本1.4Copyright??2009,2011,IBMCORPORATION.Allrightsreserved.数据库连接信息:-—-—--——-—--—-—--—--—-----—主机名=localhost数据库服务器=DB2/LINUXX8664SQL09074SQL授权标识=db2inst1本地数据库别名=TPCH端口=50000SQL>settimionSQL>selectsysdatefromdual;1-—-—---——----—--—-2011-05—0815:32:36耗用时间为:71毫秒SQL>因为db29。74的clpplus修改了默认运行方式为图形方式,增加-nw参数用于文本方式。如果不加这个参数,则无法在文字终端中使用.注意:对于需要网络访问,包括jdbc方式访问数据库,这一步必不可少。否则,虽然不影响db2,db2batch等命令在服务器端本地执行,但不能用clpplus这类通过jdbc的命令访问db2数据库。至此,安装过程结束。二、DB2功能简介1.几个概念在前面安装配置过程中,我们已经接触到一些DB2数据库的概念,其中有些概念与其它数据库有所区别。下面着重解释一下系统、数据库软件、实例和数据库的关系。(1)数据库软件官方文档中称为DB2副本,也就是数据库软件的一个拷贝,包括软件安装的二进制可执行文件和其他文件.可以在单台机器上安装多个DB2产品.每个DB2副本可以处于相同代码级别,也可以处于不同代码级别,即不同版本。DB2产品的root用户安装可安装到您选择的安装路径中.缺省安装路径,对于Linux操作系统为:/opt/ibm/db2/V9。7当缺省安装路径已经在使用时,如果安装一个新的DB2副本,那么必须指定安装路径,比如/opt/ibm/db2/V9.7_1。仅在使用“DB2安装"向导安装DB2副本时,缺省路径的序号才会自动递增。无论使用哪种安装方法,都不能将另一个完整产品安装在另一个DB2副本所在的路径中(例如,/opt/ibm/db2/V9。7),也不支持安装到现有DB2副本的子目录中。可使用db2ls命令可帮助您跟踪已安装的DB2产品及其安装路径。运行db2ls命令以找到安装在系统上的DB2产品。(2)实例实例是逻辑数据库管理器环境,您可以在此环境中对数据库进行编目和设置配置参数.根据需要,可以在同一台物理服务器上创建多个实例,该服务器为每个实例提供唯一的数据库服务器环境。可使用多个实例优化每个实例的数据库管理器配置。并限制实例失败所带来的影响.如果一个实例失败,那么只影响一个实例。其他实例可继续正常运行.在Linux操作系统上以非root用户身份安装时,在安装DB2产品期间将创建单个实例。不能创建其他实例。对于多个实例来说:•每个实例都需要额外的系统资源(虚拟内存和磁盘空间).•由于要管理其他的实例,因此增加了管理工作量.•实例目录存储着与一个数据库实例相关的所有信息。实例目录一旦创建,就不能更改其位置.该目录包含:数据库管理器配置文件系统数据库目录节点目录节点配置文件(db2nodes.cfg)包含调试信息的其他文件可以在同一DB2副本或不同DB2副本中同时运行多个实例。要使用同一DB2副本中的多个实例,必须创建所有实例或者将它们升级到同一个DB2副本.在对要使用的实例发出命令之前,将DB2INSTANCE环境变量设置为该实例的名称。要阻止实例访问另一实例的数据库,可在与实例同名的目录下为实例创建数据库文件。有关更多信息,请参阅dftdbpath数据库管理器配置参数。要在具有多个DB2副本的系统中使用实例,要使用选择的特定DB2副本的正确环境变量设置该命令窗口。方法是从命令窗口中运行db2envar脚本文件。(3)数据库DB2数据库是关系数据库。数据库将所有数据存储在彼此相关的表中。在这些表之间建立关系,以便可以共享数据并使重复项最少。关系数据库是被视为一组表并按照关系数据模型操作的数据库。它包含一组用来存储、管理和访问数据的对象。这种对象示例包括表、视图、索引、函数、触发器和程序包。对象可以由系统(系统定义的对象)或用户(用户定义的对象)定义。分布式关系数据库包含一组表和其他对象,它们分布在不同但内部相连的计算机系统中。每个计算机系统都有一个关系数据库管理器,用于管理其环境中的表。数据库管理器相互间的通信和合作方式允许给定数据库管理器在另一个计算机系统上执行SQL语句.分区关系数据库是在多个数据库分区中管理其数据的关系数据库.这种将数据分布在多个数据库分区中的方式对大多数SQL语句来说是透明的。但是,某些数据定义语言(DDL)语句会考虑数据库分区信息,例如,CREATEDATABASEPARTITIONGROUP.联合数据库是其数据存储在多个数据源(例如,不同的关系数据库)中的关系数据库.这些数据看起来就像都位于单个大型数据库中一样,并且可以通过传统SQL查询来访问。对数据所作的更改可以显式定向至适当的数据源.从上边的描述可知,一个系统可以包括多个DB2副本,每个副本可以包括多个实例,每个实例可以有多个数据库,通过改变当前环境变量,可以访问某个副本的某个实例下的不同数据库。分布式和联合数据库则是跨数据库访问的。在我们的主测试环境中,目前只有一个DB2数据库软件,创建了一个实例,实例中创建了默认的sample数据库和兼容Oracle的oracle数据库。(4)用户和模式(Schema)和Oracle不同,DB2没有自己的用户管理系统,db2的用户就是操作系统下的用户。模式(schema)是用于在数据库中创建的数据库对象的一个高级限定符。它是数据库对象,例如表、视图、索引或触发器的一个集合。它提供了数据库对象的一个逻辑分类。模式是用来组织数据库中对象的一种方式,可以把它理解为目录。所有同一个目录下的内容属于一个模式,要访问某个对象,就需要同时指定模式名和对象名,可以设定当前目录,那么此目录下的所有对象可以不带模式名访问。在创建对象时,可以使用模式将这些对象进行分组。一个对象只能属于一种模式。使用CREATESCHEMA语句来创建模式.有关模式的信息保存在连接的数据库的系统目录表中。要创建模式,并且要使另一个用户成为该模式的所有者(可选),您需要DBADM权限。即使您不具有DBADM权限,也仍可以使用您自己的授权标识来创建模式.作为CREATESCHEMA语句的一部分创建的任何对象的定义者是模式所有者.此所有者可以授予和撤销其他用户的模式特权。2.功能与操作(1)对模式的操作要通过命令行来创建模式,请输入以下语句:CREATESCHEMA[AUTHORIZATION]其中是模式的名称。此名称在目录中已记录的模式内必须唯一,并且不能以SYS开头。如果指定了可选AUTHORIZATION子句,那么将成为模式所有者。如果未指定此子句,那么发出此命令的授权标识将成为模式所有者.在删除模式之前,必须删除该模式中的所有对象或将它们移至另一个模式。使用命令行来删除模式,输入:DROPSCHEMARESTRICT在以下示例中,删除了模式“joeschma”:DROPSCHEMAjoeschmaRESTRICT注意:模式默认和同名的用户相关联,比如创建了tpch模式,用tpch用户连接,则自动将当前模式设定为tpch,并自动有权在当前模式下创建对象,但如果用不是模式所有者的其他用户(比如db2inst1)创建了该模式下的对象,则模式所有者tpch无权访问这样的对象,除非tpch也拥有DBADM权限或者让有权限的用户显式授权,这点和Oracle的用户自动拥有模式下表权限有所不同。以下是一个简单的例子.-—切换到tpch用户-sh-3。2$su-tpch口令:[tpch@redflag11012601~]$db2connecttosampleDatabaseConnectionInformationDatabaseserver=DB2/LINUXX86649。7。1SQLauthorizationID=TPCHLocaldatabasealias=SAMPLE—-有创建表的权限[tpch@redflag11012601~]$db2"createtabletest1(avarchar(10))"DB20000ITheSQLcommapletedsuccessfully.[tpch@redflag11012601~]$db2"insertintotest1values('abc’)”DB20000ITheSQLcommandcompletedsuccessfully。[tpch@redflag11012601~]$db2”commit”DB20000ITheSQLcommandcompletedsuccessfully。[tpch@redflag11012601~]$db2-t(c)CopyrightIBMCorporation1993,2007CommandLineProcessorforDB2Client9.7.1--不指定模式db2=〉select*fromtest1;A——------——abc1record(s)selected。——指定模式db2=>select*fromtpch.test1;A——-—--—abc1record(s)selected。—-无权访问模式下db2inst1创建的nation表db2=>selectcount(*)fromtpch.nation;SQL0551N"TPCH"doesnothavetherequiredauthorizationorprivilegetoperformoperation"SELECT"onobject"TPCH.NATION"。SQLSTATE=42501-—不改变当前操作系统用户,用db2inst1连接sample数据库db2=〉connecttosampleuserdb2inst1usingdb2;DatabaseConnectionInformationDatabaseserver=DB2/LINUXX86649。7.1SQLauthorizationID=DB2INST1Localdatabasealias=SAMPLE--将nation表的所有权限赋予tpch用户db2=>grantallontpch。nationtotpch;DB20000ITheSQLcommandcompletedsuccessfully。-—用tpch连接sample数据库db2=>connecttosampleusertpchusingtpch;db2=>selectcount(*)fromtpch.nation;1—-—---—----251record(s)selected.—-用db2inst1用户创建另一个tpch模式下的test2表db2=>connecttosampleuserdb2inst1usingdb2;db2=>createtabletpch。test2(avarchar(10));DB20000ITheSQLcommandcompletedsuccessfully.db2=>insertintotpch.test2values('cde');DB20000ITheSQLcommandcompletedsuccessfully.db2=〉commit;DB20000ITheSQLcommandcompletedsuccessfully。db2=〉connecttosampleusertpchusingtpch;db2=〉selectcount(*)fromtpch。test2;SQL0551N”TPCH”doesnothavetherequiredauthorizationorprivilegetoperformoperation"SELECT"onobject"TPCH。TEST2".SQLSTATE=42501db2=〉connecttosampleuserdb2inst1usingdb2;—-将dbadm系统权限赋予tpch用户,但没有授予test2表的权限db2=〉grantdbadmondatabasetotpch;DB20000ITheSQLcommandcompletedsuccessfully。db2=〉connecttosampleusertpchusingtpch;db2=〉selectcount(*)fromtpch.test2;1-—--——---——11record(s)selected。(2)对实例和数据库的操作开始连接实例之前,必须存在多个实例.要使用命令行来与实例连接,输入:db2attachto例如,要连接至节点目录中先前编目的称为testdb2的实例:db2attachtotestdb2例如,在对testdb2实例执行维护活动后,要使用命令行从实例拆离,输入:db2detach对于数据库的操作,除了前面提到过的createdatabase和connectto,还有dropdatabase命令删除数据库,terminate命令断开和数据库的连接.(3)db2命令行工具(CLP)通过前面的描述,大家对于它已经很熟悉了。它包括单行命令方式和交互方式。在2种方式之间可以共享当前状态,比如db2connect连接了数据库,那么db2进入交互方式后不用再次connect,同样在交互方式下设置了setschema当前模式,那么退出交互以后仍然生效。利用db2工具除了能够执行SQL语句,还可以完成数据库管理参数和数据库参数的动态配置,前者是实例级,后者是数据库级的。方法是:db2updatedbmcfgusing参数名参数值和db2updatedbcfgusing参数名参数值比如可以设置分区内并行和增加日志文件的大小。--设置启用分区内并行功能sh—3.2$db2UPDATEDBMCFGUSINGINTRA_PARALLELYESDB20000ITheUPDATEDATABASEMANAGERCONFIGURATIONcommandcompletedsuccessfully.—sh—3。2$db2UPDATEDBMCFGUSINGMAX_QUERYDEGREE32DB20000ITheUPDATEDATABASEMANAGERCONFIGURATIONcommandcompletedsuccessfully。-sh—3。2$db2getdbmcfg|grepPARALLELEnableintra-partitionparallelism(INTRA_PARALLEL)=YES-sh—3.2$db2getdbmcfg|grepDEGREEMaximumquerydegreeofparallelism(MAX_QUERYDEGREE)=32-sh—3.2$db2getdbcfg|grepDEGREEDegreeofparallelism(DFT_DEGREE)=1—sh—3.2$db2updatedbcfgusingDFT_DEGREE4DB20000ITheUPDATEDATABASECONFIGURATIONcommandcompletedsuccessfully.--设置日志文件大小—sh—3.2$db2updatedbcfgusingLOGFILSIZ2000DB20000ITheUPDATEDATABASECONFIGURATIONcommandcompletedsuccessfully.SQL1363WOneormoreoftheparameterssubmittedforimmediatemodificationwerenotchangeddynamically.Fortheseconfigurationparameters,allapplicationsmustdisconnectfromthisdatabasebeforethechangesbecomeeffective.-sh-3.2$db2getdbcfg|grepLOGFILSIZLogfilesize(4KB)(LOGFILSIZ)=2000(4)db2batch批量测试工具这个是db2提供的专门用于基准测试的工具,基准测试是从各种不同方面(例如数据库响应时间、cpu和内存使用情况)对应用程序进行评测的一个过程。基准测试基于一个可重复的环境,以便能够在相同的条件下运行相同的测试。之后,对测试收集到的结果可以进行评估和比较。db2batch以一组SQL和/或XQuery语句作为输入,动态地准备语句和描述语句,依次执行每个语句并返回一个报告。取决于命令中的选项,结果集可返回这些语句的执行时间、从准备到查询完成中各个阶段所花费的具体时间,CPU时间,以及返回的记录关于内存使用情况(例如缓冲池)的数据库管理器快照和缓存信息。db2batch命令格式db2batch-d-a/-i-f-r对于执行db2batch时一些详细的设置可以通过-o参数指定,也可以在SQL文件中指定,譬如可以在1。sql文件中使用下面的配置参数:—-#SETROWS_FETCH-1ROWS_OUT5PERF_DETAIL1DELIMITER@TIMESTAMPselect*fromemployeewhereempno='000340'@—-#COMMENTQuery2--#BGBLK[重复次数](定义查询块的开始)select*fromemployeewhereempno='000350’@——#EOBLK(定义查询块的结束)其中ROWS_FETCH和ROWS_OUT定义了从查询的结果集中读取记录数和打印到输出文件中的记录数,PERF_DETAIL设置了收集性能信息的级别,DELIMITER则指定了多个查询间的间隔符。如果用--#BGBLK和--#EOBLK定义执行块,那么最后的总结报告用块为单位统计,因此,若需要将每个SQL语句重复执行,那么必须在每个语句前后定义块。执行命令:db2batch—dsample—icomplete-f1.sql-r1。outdb2batch还允许在输入文件中定义SQL程序块,并且可以定义这个块重复执行的次数,这个功能对于基准测试很有用,可以得出多次执行的平均值,消除一部分偶然性的影响。由于db2命令行没有提供类似Oracle的sqlplus的settimingon功能。利用显示系统时间,然后计算时间间隔的办法过于复杂,利用date;db2…;date命令来显示命令执行前后的时间存在着同样的问题。这个工具恰好满足了我们的要求,所以下面的TPCH测试就主要利用这个工具进行.(5)db2expln执行计划输出工具这个工具将指定语句的执行计划输出到终端屏幕或一个文件.下面举例说明db2expln命令格式和输出如下:-d指定数据库名,-q是一个SQL语句,也可以用-f指定某个保存了SQL的文件。-u可以指定用户名和口令。-t表示输出到终端,—o可以输出到文件.[db2inst1@aix:/home/db2inst1]#>db2expln-dtpch-q"selectcount(*)cntfromtpch.partwherep_size=30”—g—tIBMDB2UniversalDatabaseSQLandXQUERYExplainTool********************DYNAMIC***************************************====================STATEMENT==========================================IsolationLevel=CursorStabilityBlocking=BlockUnambiguousCursorsQueryOptimizationClass=5PartitionParallel=No—-分区间并行未开启Intra-PartitionParallel=No--分区内并行未开启SQLPath=”SYSIBM","SYSFUN","SYSPROC","SYSIBMADM",”DB2INST1”Statement:selectcount(*)cntfromtpch.partwherep_size=30SectionCodePage=1208EstimatedCost=11047。642578--估计的成本EstimatedCardinality=1.000000--估计的基数AccessTableName=TPCH。PARTID=4,9|#Columns=0|SkipInsertedRows|AvoidLockingCommittedData|CurrentlyCommittedforCursorStability|MayparticipateinScanSharingstructures|Scanmaystartanywhereandwrap,forcompletion|Fastscan,forpurposesofscansharingmanagement|Scancanbethrottledinscansharingmanagement|RelationScan||Prefetch:Eligible|LockIntents||Table:IntentShare||Row:NextKeyShare|SargablePredicate(s)||#Predicates=1||PredicateAggregation|||ColumnFunction(s)AggregationCompletion|ColumnFunction(s)ReturnDatatoApplication|#Columns=1Endofsection--图形化的执行计划OptimizerPlan:RowsOperator(ID)Cost1n/aRETURN(1)11047。6|1n/aGRPBY(2)11047。6|37482.7n/aTBSCAN(3)11043。7|2。00041e+06n/aTable:TPCHPART(6)db29。7兼容oracle的特性这是为了熟悉Oracle的用户向db2迁移而设计的功能,号称可以做到百分之几十的代码不需要修改就能在db2中运行原来的Oracle应用,但实际效果还是要亲自使用才知道。设置步骤首先要用db2set命令在注册变量中设定兼容模式,然后重新启动实例,再发出createdatabase命令,如果在db2set设定前创建的数据库,则不能完全用到db2兼容Oracle的功能,因为兼容不但需要提供模拟Oracle的命令,还需要创建一系列系统表,比如类似Oracle的dict等数据字典表.兼容oracle的数据库可以用到oracle的一些特有的命令,比如connectby语法.-sh—3.2$db2setdb2_compatibility_vector=ora-sh-3.2$db2stopforce2011-05-0616:23:5100SQL1064NDB2STOPprocessingwassuccessful.SQL1064NDB2STOPprocessingwassuccessful.—sh-3.2$db2start05/06/201116:24:1300SQL1063NDB2STARTprocessingwassuccessful.SQL1063NDB2STARTprocessingwassuccessful。-sh-3.2$db2"createdatabaseoraclepagesize32K"SQL1047NTheapplicationisalreadyconnectedtoanotherdatabase。—sh-3.2$db2terminateDB20000ITheTERMINATEcommapletedsuccessfully.-sh—3。2$db2"createdatabaseoraclepagesize32K"SQL0204N"SYSTEM_1392_CN"isanundefinedname.SQLSTATE=42704——支持oracle的connectby语法—sh-3.2$db2"withtas(select1afromdualunionallselect0fromdual)selectcast(sys_connect_by_path(a,’/’)asvarchar(30))fromtconnectbypriora=a-1"1--—--—-—-—-----—----———-—--/0/0/1/13record(s)selected。--不支持connectbyrownum和level语法-sh-3。2$db2”selectlevellfromdualconnectbylevel<=3"L--—-—-—---—SQL20451NCycledetectedinahierarchicalquery.SQLSTATE=560CO-sh—3.2$db2”selectrownumlfromdualconnectbyrownum<=3"SQL0120NInvaliduseofanaggregatefunctionorOLAPfunction.SQLSTATE=42903-—创建数据库后设置兼容模式[db2inst1@aix:/home/db2inst1]#>db2setdb2_compatibility_vector=ora[db2inst1@aix:/home/db2inst1]#>db2setDB2_COMPATIBILITY_VECTOR=ORADB2COMM=TCPIPSQL1025NThedatabasemanagerwasnotstoppedbecausedatabasesarestillactive。[db2inst1@aix:/home/db2inst1]#>db2stopforce05/10/201116:00:4900SQL1064NDB2STOPprocessingwassuccessful。SQL1064NDB2STOPprocessingwassuccessful.[db2inst1@aix:/home/db2inst1]#〉db2start05/10/201116:00:5800SQL1063NDB2STARTprocessingwassuccessful.SQL1063NDB2STARTprocessingwassuccessful。[db2inst1@aix:/home/db2inst1]#>clpplus-nwdb2inst1/db2@localhost:60000/tcphCLPPlus:Version1。4Copyright(c)2009,2011,IBMCORPORATION。Allrightsreserved.SQL>settimion--sysdate函数可以使用SQL>selectsysdatefromdual;1--———-——----—----—2011-05—1016:01:27Elapsedtime:59millisecond(s)--dict表不存在SQL〉descdictDB250211E:Thedatabaseobjectnamed’DICT'wasnotfoundinthedatabase.SQL>exit--删除数据库并重建[db2inst1@aix:/home/db2inst1]#>db2dropdatabasetcphDB20000ITheDROPDATABASEcommapletedsuccessfully。[db2inst1@aix:/home/db2inst1]#〉db2terminateDB20000ITheTERMINATEcommandcompletedsuccessfully.[db2inst1@aix:/home/db2inst1]#〉db2"createdatabasetpchusingCODESETUTF-8TERRiTORYCNpagesize32K”DB20000ITheCREATEDATABASEcommandcompletedsuccessfully.[db2inst1@aix:/home/db2inst1]#〉clpplus-nwdb2inst1/db2@localhost:60000/tpchCLPPlus:Version1.4Copyright(c)2009,2011,IBMCORPORATION.Allrightsreserved.--dict表存在了SQL〉descdictALIAS-DICT********************************************************************************OBJECTNAME:DICTIONARYOBJECTSCHEMA:SYSIBMADMOBJECTTYPE:VIEWNameDataTypeTypeschemaLengthScaleNullsHidden-———---——-———-———--—-———--—-———-————---—-------—-----—-----—-————------——TABLE_SCHEMAVARCHARSYSIBM1280NNotTABLE_NAMEVARCHARSYSIBM1280NNotCOMMENTSVARCHARSYSIBM2540YNot********************************************************************************—-查看执行计划SQL>setlines132SQL>setpages50000--创建索引前,执行计划是表扫描SQL>explainplanforselectcount(*)cntfromtpch.partwherep_size=30;IDTYPEOBJECT_SCHEMAOBJECT_NAMEPREDICATE_TEXT--—---——-—---------—---—----—---————---—-------—---—--—-—--—-—1RETURN2GRPBY3TBSCANTPCHPART(Q1.P_SIZE=30)--创建索引后,执行计划变成了索引扫描SQL>createindextpch.part_size_idxontpch。part(p_size);DB250000I:Thecommapletedsuccessfully。SQL>explainplanforselectcount(*)cntfromtpch.partwherep_size=30;IDTYPEOBJECT_SCHEMAOBJECT_NAMEPREDICATE_TEXT——----—-——-———------—-—————--———-——--——--—-—--—--—--—————-——-—-—-———-——-1RETURN2GRPBY3IXSCANTPCHPART_SIZE_IDX(Q1.P_SIZE=30)3IXSCANTPCHPART_SIZE_IDX(Q1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阴疮的病因病机分析
- 心梗急救资源配置
- 心力衰竭的护理工作压力管理
- 2025年广东深圳南山第二外国语学校初三一模物理试题含答案
- 2025年广东深圳多校初三6月质量检测道法试题含答案
- 骨科护理中的伦理问题与应对
- 行业风险评估与防范模板
- 2024-2025学年度贵州工贸职业学院单招《语文》每日一练试卷附答案详解
- 2024-2025学年度反射疗法师3级考试综合练习及完整答案详解(全优)
- 2024-2025学年度主管护师(中级)模拟试题重点附答案详解
- LY/T 2496-2015防护林经营技术规程
- GB/T 4025-2010人机界面标志标识的基本和安全规则指示器和操作器件的编码规则
- GB/T 30775-2014聚乙烯(PE)保护膜压敏胶粘带
- GB/T 24353-2009风险管理原则与实施指南
- 2023年AIGC发展趋势报告:迎接人工智能的下一个时代-腾讯研究院
- FZ/T 73038-2010涂胶尼龙手套
- 温敏型羟丁基壳聚糖护创敷料技术审评报告
- 分红险销售流程课件
- 轨道工程监理实施细则-
- 塔里木河流域的综合治理课件
- 肝豆状核变性指南 (1)课件
评论
0/150
提交评论