db2的博客
===========================================================
自写脚本,让DB2命令行安装变得更轻松
===========================================================
在Linux平台下DB2 UDB V8.1图形界面的安装过程需要人工干预,耗时相对较长,并且在内核较新的Linux版本下还存在无法启动GUI安装界面的问题,虽然可以通过设置环境变量进行解决,还是显得有些麻烦。如果你用命令行方式手动安装,需要完成很多步骤,在安装或卸载比较频繁的情况下,就不如把整个安装过程写入shell脚本执行方便。

  在Linux平台下DB2 UDB V8.1提供了命令行和图形界面两种安装方式,图形界面虽然通过交互简化了安装的复杂性,但安装过程需要人工干预,耗时相对较长,并且在内核较新的Linux版本下还存在无法启动GUI安装界面的问题,虽然可以通过设置环境变量进行解决,还是显得有些麻烦。

  当然如果你用命令行方式手动安装就不存在这个问题,不过需要手动完成很多步骤,如果安装或卸载比较频繁的情况下,就不如把整个安装过程写入shell脚本执行方便。

  下面是我完成的一个用于安装和卸载的shell脚本,在数据库安装时,只需指定安装文件的源路径,即可完成全部安装。包括创建必要的用户和组,创建DAS服务以及实例,在系统注册服务名和服务端口,设置注册表变量,设置自动启动等。

  另外可以通过三个可选的参数指定忽略拷贝安装文件,或者忽略创建用户或者组,以节约安装时间。

  卸载功能可以用于卸载使用本安装脚本安装的数据库,包括删除实例和DAS服务,清除前面创建的用户和组,恢复系统的配置文件等,可通过可选的参数指定同时删除安装时拷贝的package文件。
  
  在脚本的开始部分,有一些参数可以自行根据实际环境修改,比如要创建的实例名、用于DAS的用户名及组名、数据库的默认建立路径等,在使用本脚本之前可以先进行修改。

  将本脚本保存为文件,本例存为instdb.sh,添加可执行属性,在root权限下运行,例如:

  使用源路径'/mnt/DB2UDB8FORLINUX' 进行安装;

# ./instdb2 -d /mnt/DB2UDB8FORLINUX

  删除已经进行的DB2安装,同时删除所有已经拷贝到安装目录的package文件。

# ./instdb2 -d /mnt/DB2UDB8FORLINUX -remove -all

  本文中脚本在如下环境测试通过:RedHat Enterprise Linux 3.0、DB2 V8.1 for Linux

  参考资源

  IBM DB2 开发者园地
  http://www-128.ibm.com/developerworks/cn/db2/

  IBM DB2 信息中心
  http://publib.boulder.ibm.com/infocenter/db2help/index.jsp

  《DB2 UDB v8.1 for Linux, UNIX, Windows 数据库管理》George Baklarz, Bill Wong 合著,机械工业出版社出版

  《DB2数据库管理与应用教程》庄济诚 著,清华大学出版社出版


db2 发表于:2006.07.18 05:46 ::分类: ( 一般分类 ) ::阅读:(13135次) :: 评论 (4)
===========================================================
SQL Server与Oracle、DB2的比较
===========================================================

  开放性   SQL Server
  只能在Windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且Windows平台的可靠性,安全性和伸缩性是非常有限的。它不象Unix那样久经考验,尤其是在处理大数据量的关键业务时。
  Oracle
  能在所有主流平台上运行(包括 Windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
  DB2
  能在所有主流平台上运行(包括Windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%。

  可伸缩性,并行性   SQL Server
  并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。Oracle
平行服务器通过使一组结点共享同一簇中的工作来扩展Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果WindowsNT不能满足需要, 用户可以把数据库移到UNIX中。
  DB2
  DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日志。数据库分区有时被称为节点或数据库节点。

  安全性
  SQL server
  没有获得任何安全证书。
  Oracle Server
  获得最高认证级别的ISO标准认证。
  DB2
  获得最高认证级别的ISO标准认证。

  性能
  SQL Server
  多用户时性能不佳
  Oracle
  性能最高, 保持WindowsNT下的TPC-D和TPC-C的世界记录。
  DB2
  适用于数据仓库和在线事物处理,性能较高。

  客户端支持及应用模式
  SQL Server
  C/S结构,只支持Windows客户,可以用ADO,DAO,OLEDB,ODBC连接。
  Oracle
  多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接。
  DB2
  跨平台,多层结构,支持ODBC,JDBC等客户。

  操作简便
  SQL Server
  操作简单,但只有图形界面。
  Oracle
  较复杂, 同时提供GUI和命令行,在Windows NT和Unix下操作相同。
  DB2
  操作简单,同时提供GUI和命令行,在Windows NT和Unix下操作相同。

  使用风险

  SQL Server
  完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
  Oracle
  长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
  DB2
  在巨型企业得到广泛的应用,向下兼容性好。风险小。


db2 发表于:2006.07.18 05:46 ::分类: ( 一般分类 ) ::阅读:(47709次) :: 评论 (5)
===========================================================
提高DB2 Web程序性能5条规则
===========================================================
速度和可升级性是网络开发重要的性能要求,而且它们也不难达到。应用一些简单的规则会提高网络应用的性能。在本文中,您将了解到使用Borland C#Builder和IBM DB2通用数据库(UDB)8.1开发快速Microsoft® ASP.NET Web应用程序的5条规则。

  分析Web应用程序的性能需要利用一些手段来检测每个操作的性能。为此,我创建了一个TimeDiff类(见程序清单1),它可以计算数据库操作的用时。你可以利用TimeDiff类的检测结果作为衡量数据库操作性能的基准,来观察哪些操作最为有效。我还创建了一个配合TimeDiff 类使用的LOTSOFRECORDS表(见程序清单2),它包含10,000条记录,你可以通过对它的操作来观察不同技术之间的性能差异。DB2具有内部缓冲池,一旦运行一个查询,内部缓冲池启用,因此二次查询的速度较快。在检测查询速度时,请忽略缓冲池启用前的结果而采用启用后的结果。

  程序清单1. TimeDiff类

  using System;   namespace Effeciency   {    ///    /// 这个类用于时间计算。在例子中,    /// 我们将利用它检测数据库操作的速度,    /// 以便作性能上的比较。    ///   public class TimeDiff   {    DateTime StartTime;    DateTime EndTime;    public TimeDiff() {}    public void Start()    {    StartTime = DateTime.Now;    }    public void Stop()    {    EndTime = DateTime.Now;    }    public string TimeDifferenceText    {    get    {    TimeSpan TimeDifference = EndTime - StartTime;    return TimeDifference.ToString();    }    }   }   }   程序清单2. LOTSOFRECORDS的表定义   CREATE TABLE "GLENN "."LOTSOFRECORDS" (   "KEYCOL" INTEGER NOT NULL ,   "COL1" CHAR(50) ,   "COL2" CHAR(50) ,   "COL3" CHAR(50) ,   "COL4" CHAR(50) ,   "COL5" CHAR(50) ,   "COL6" CHAR(50) ,   "COL7" CHAR(50) ,   "COL8" CHAR(50) , "COL9" CHAR(50) , "COL10" CHAR(50) ) IN "USERSPACE1" ;   COMMENT ON TABLE "GLENN "."LOTSOFRECORDS" IS 'Table designed to Contain Lots of Records';   -- DDL Statements for primary key on Table "GLENN "."LOTSOFRECORDS"   ALTER TABLE "GLENN "."LOTSOFRECORDS" ADD CONSTRAINT "CC1058255334652" PRIMARY KEY ("KEYCOL");

  下面,我们就开始介绍这些提高DB2 UDB Web 应用程序性能的规则。我会先介绍提高数据库性能的基本规则,然后列出一些适合以Borland Data Provider开发ASP.NET应用时的性能规则。

  规则1:按需检索

  如果你只能记得住一条规则,那一定要记住这一条:按需检索。如果你是“幸存者”电视节目的忠实观众,您会记得其中的参赛者通过限额分配来保证每个人都有充足的食物。这种做法对于数据库开发同样适用。如果你的应用程序能够按需运行,那么就会合理地将数据库和网络资源留给其他应用。这听起来很简单,但我们还是来看一个例子。

  假设有一个包含10,000 行记录和10 个字段的表,以及一个需要显示所有记录但只显示3个字段的Web页。很多开发者经常图省事而使用"select *"语句选择所有的字段:

  select * from GLENN.LOTSOFRECORDS

  这种做法应当避免,而应力求只检索需要的字段。可以在SQL 语句中定义要检索的字段,例如:

select KEYCOL, COL1, COL2, COL7 from GLENN.LOTSOFRECORDS

  在本文附带的源程序中,有两个ASP.NET页面:一个是RetrievingAllFields.aspx,它执行第一个查询;另一个是RetrievingLimitedFields.aspx ,它执行第二个查询,即只检索需要的字段。

  用TimeDiff类进行检测,执行第一个查询用了1.622 秒,执行第二个查询用了1.311秒。后者用时只是前者的80%,不仅用时少,而且还减少了Web应用程序和数据库服务器之间的网络数据堵塞。

  这个例子只限制了检索的字段,你还可以使用WHERE语句限制检索的记录数。WHERE 语句可以限制服务器返回的记录数(见程序清单3)。要记住,通过网络发送的记录数据越少,对应用程序、数据库、用户和网络越有好处。

  规则2:优化数据库

  有时候你的Web应用程序可能运行得不错,但你想让它更好。一个简单的减少搜索时间的方法是为特定字段创建索引。如果有一个查询是要搜索某个价格范围内的产品(见程序清单3),但你没有为价格字段定义索引,那么返回数据就会多花一些时间。而一旦建立了索引,DB2会很快返回你想要的结果。

  程序清单3. 利用索引进行数据库搜索

  SELECT PRODUCTCODE, PRODUCTNAME, DESCRIPTION, UNITPRICE   FROM    GLENN.PRODUCTLIST   WHERE    UNITPRICE > 20.00

  优化数据库不只是为搜索字段创建索引这么一条,你应当尽可能多地搜集相关的DB2信息以使应用程序运行得更好。经常访问IBM发者园地(IBM DB2 Developer Domain)和comp.databases.ibm-db2(comp.databases.ibm-db2)等一些相关的Web站点或新闻组,对于保持DB2开发技巧不断更新是一个很好的办法。

  你还应当努力熟悉DB2附带的工具,例如DB2索引建议器(Index Advisor)。DB2索引建议器可以根据你递交的查询和所连接的数据库返回最佳索引列表。


db2 发表于:2006.07.18 05:45 ::分类: ( 一般分类 ) ::阅读:(1559次) :: 评论 (6)
===========================================================
使用DB2数据库临时表的注意事项
===========================================================

  在使用DB2的临时表时, 以下几点需要注意:

  1. DB2的临时表需要用命令Declare Temporary Table来创建, 并且需要创建在用户临时表空间上;

  2. DB2在数据库创建时, 缺省并不创建用户临时表空间, 如果需要使用临时表, 则需要用户在创建临时表之前创建用户临时表空间;

  3. 临时表的模式为SESSION;

  4. 缺省情况下, 在Commit命令执行时, 临时表中的所有记录将被删除; 这可以通过创建临时表时指定不同的参数来控制;

  5. 运行ROLLBACK命令时, 用户临时表将被删除;

  6. 在DB2版本8中, 可以对临时表纪录日志。


db2 发表于:2006.07.18 05:44 ::分类: ( 一般分类 ) ::阅读:(1429次) :: 评论 (5)
===========================================================
了解DB2数据库优化的几条策略
===========================================================

  1、 对后续用到的表建立索引(注意在插入数据之前建立或者在插入后建立但是要runstats)

   说明:插入之前建立的话,在表插入数据的过程中,索引也随着更新,这样的话需要较大的日志空间,因此速度会比较慢,可以采用不计日志的方式插入;数据差完之后再建立索引的话,该表的日志统计信息没有更新,因此执行计划会很差,用不到索引,runstats on tabble asiainfo.aaaa and indexes all之后,索引统计信息就会更新,这样执行计划会考虑到使用索引,因此速度快。

  2、将比较大的表建在多节点的表空间上,同时建好索引

   说明:现有的db2数据仓库每个节点使用2个CPU,4G内存,DIM表空间计划是存放维表的表空间,因此是单节点的。在使用这个表空间的中的表的时候,最多只会用到2个CPU,4G内存,加上其他的表空间也都要用到这两个CPU和这4G内存,因此资源比较有限。建议较大的表不要放在这个表空间中,而是建立好分区键,放在多节点的表空间中,这样检索这个表的时候32个节点同时检索,最后汇总到0节点上进行展现,速度当然会非常的快。另外,虽然32节点并行性好,但是如果建立好索引的话,速度会更快!!

  3、将插入的表使用不计日志的方式插入

   说明:数据库为了保证数据的一致性和可回退性,插入、更新或者删除数据的时候要计日志,这样在失败的时候可以回退,但是如果并发较多或者操作非常大的话,会导致争抢日志的情况,导致操作非常缓慢。如果使用不计日志的方式进行插入、更新或者删除操作的话,日志使用极少,但是如果操作失败的话是无法回退的,这样一致性得不到保证,这个表只能删除重建!!!!

  4、将表建立表级锁,减少锁数量的使用

   说明:数据库的锁的最大数量是有限制的,并且每个锁都要占一定的内存,因此如果锁的数量非常多,使用的内存也就多,导致资源紧张。

  5、建立临时表的时候尽量只插入用的到的数据,不插用不到的数据。

   说明:程序中好多地方为了提高速度,将用到的数据先插入到一个临时表中,但是插入了非常多的没有使用的数据,这样导致临时表也非常大,所以尽可能的只向临时表中插入用的到的数据,并且尽可能的使用索引,可以大大的提高速度。

  6、关于左关联的一点使用心得

  在on的条件里面尽量的只写关联条件和对左关联的表作限制,而对主表的限制不要写在这里。如果写在里面的话,不但速度非常慢,而且可能会出现莫名其妙的结果。


db2 发表于:2006.07.18 05:44 ::分类: ( 一般分类 ) ::阅读:(1381次) :: 评论 (3)
===========================================================
IBM 数据库 DB2 9 的九大新特性
===========================================================
IBM DB2 9是IBM在数据库领域五年开发项目的最重要成果,它将传统的静态数据库技术转变为交互式的动态数据服务器,使用户能够更好地管理所有类型的信息,例如文档、视频和音频文件、图片、网页等。这款新型数据服务器率先实现了可扩展标记语言(XML)和关系数据间无缝交互,而无需考虑数据的格式、平台或位置。
来自8个国家的750多名软件开发人员为“Viper”的问世做出了努力,他们进行了精心设计和调试,力求将其打造成SOA环境下的首选信息引擎.

IBM DB2 9取得了十项重大进步,包括已获得专利的“pureXML”技术、突破性的“Venom”存储压缩以及增强的自动化数据管理能力等。

1、新的XML特性:

在无需重新定义XML数据的格式,或将其置于数据库大型对象中的前提下,IBM DB2 9允许用户无缝管理普通关系数据和纯XML数据。此项能力是Viper所独有的,它将有助于客户增加其信息的实用性、速度和多功能性,同时大大降低与现有数据管理技术相关的管理成本。它还将显著降低复杂性,并减少普通开发商创建“同时访问关系数据和XML数据的应用”所花费的时间。

新的XML数据类型,允许客户在分层的表格栏中存储规范的XML文档。

支持SQL语句及SQL/XML函数中的XML数据类型。

支持由万维网联盟(W3C)开发的新XQuery语言。IBM DB2 9允许客户直接调用XQuery语言,调用功能可以从DB2表格与视图中提取XML数据。

支持XML数据的检索功能,提高了针对XML文档的查询效率。

为支持DB2的编程程序语言中的XML提供支持,允许应用整合对XML及关系型数据的访问和存储。

2、新的应用与开发特性:

对应用开发工具和原生XML数据存储新特性的支持,允许应用访问和存储XML及相关数据。

DB2 Developer Workbench是一种综合开发环境,可用于创建、编辑、调试、测试和部署DB2存储流程和用户自定义的功能。客户还可以使用Developer Workbench开发SQL应用,创建、编辑和运行SQL语句与XML查询。

面向JDBC和SQLJ的增强型DB2驱动程序符合JDBC 3.0规范,它还同时支持SQLJ语句。SQLJ语句的功能特性与大多数JDBC方法相似。

此外,还包括其它重要特性:支持众多新数据类型、DB2独有的支持到面向z/OS® 数据服务器IBM DB2 9版可靠连接的方式、异构组合、连接重用等。

除支持Visual Studio 2005以外,还包括对Web服务的支持,对本地XML数据存储的全面支持,以及无需编写代码就可以构建应用及Web站点的能力。

增强型DB2 Runtime Client支持64位计算,还可在同一台计算机上与其它DB2产品共存。

3、新增自动数据库管理功能:

适应性、自调式内存分配,通过不断更新配置参数、调整缓冲池大小和动态分配可用的内存资源,帮助用户简化或排除DB2服务器的配置工作。

面向z/OS对象的DB2 UDB自动状态检测功能,允许客户通过控制中心的创建和变更对象策略向导,使面向z/OS对象的DB2 UDB实现对象维护策略评估自动化。

自动存储支持,可以自动扩充磁盘和文件系统中数据库的大小,现在可用于多分区数据库。

自动统计数据收集,创建新数据库时会自动启动。

根据DB2数据库系统的环境特点,自动配置prefetchers进程与页清洁器。

面向自动表格与索引重组的新策略选项,为数据库管理员提供更多管理表格与索引重组的功能。

4、性能与可扩展性增强(存储压缩等):

利用数据行压缩技术压缩数据对象的功能,可以帮助客户节省磁盘存储空间,并加快数据访问速度。

统计数据视图,为改进查询功能提供更出色的访问计划。

使用定制的脚本或程序加快数据载入速度。

增强型物化查询表(MQT)可为设计MQT提供更强大地支持,更出色的查询性能和更完善的MQT维护。

更大的记录标识符(RID)允许每个对象拥有更多数据页,系统中每页拥有更多记录,一方面为数据库管理员使用系统和用户的临时表格提供了便利,另一方面也便于执行分类和登录操作。

索引的关键字最多可达64组,大小可以扩充至8 KB。

5、新的安全特性与增强:

使用基于标签的访问控制(LBAC),改进行、列级别的数据访问控制功能。

新安全管理器(SECADM)的授权级别,将若干个与安全性相关的优先权集中到一项优先权名下,提高了对于访问信息资产的控制。

“创建数据库”语句中新增的“限制”选项,增强了对进入数据库的控制。

SETSESSIONUSER优先权加强了对拥有转换会话用户身份权力的人的控制。它允许掌握该项权力的人转换为任何被赋予权利的授权ID。

TRANSFER OWNERSHIP SQL语句,提供了改变数据库对象的归属权的能力。

6、使用表格分区改进大型数据库管理:

表格分区是一种数据组织计划,在该计划中,表格数据根据多个表格列,被划分到多个被称为表格分区或范围的存储对象中。这些存储对象可能存放在不同的表空间或相同的表空间中,或两种情况兼而有之。此项新特性的优势包括:

能够创建非常大的表格。分区表格包含的数据远远超过了普通表格。将表格数据划分到众多存储对象中,有助于显著增加表格尺寸。

更灵活的管理能力。现在,客户可以在个别数据分区中完成管理工作,将消耗时间的维护操作分成一系列小型操作。

更加精确地控制索引位置。客户可以将索引放置在不同的表空间,分别对其进行管理。

快速、轻松地访问数据或转出数据。这一功能在数据仓库环境中尤为有用,客户经常在此环境中移入或移出数据,运行支持决策的查询。

改进的查询功能。通过表格分区分离数据,避免对不相关数据进行扫描,从而改进查询处理的功能。

7、数据恢复增强:

重新启动中断的恢复操作,可以在数据库恢复时节省宝贵的时间,同时简化恢复工作。

支持重定向恢复操作,在现有备份镜像中自动生成脚本。

能够从表空间备份镜像中重新构建数据库。此项功能让DB2的恢复更加灵活和多样化,同时为客户提供更全面的恢复解决方案。

8、自动管理性增强:

使用适应性、自调内存分配简化了内存管理。自调内存提供动态配置,能对工作负载特性的重大变化做出积极响应。

客户创建数据库时,自动统计数据收集功能会自动启动。凭借自动统计数据收集,IBM DB2 9版自动在后台运行RUNSTATS实用程序,确保收集到正确的统计数据,并进行维护。

面向多分区数据库的自动存储支持。这一功能可以按照需求,自动扩大磁盘和文件系统中数据库的容量。

ALTER TABLE语句增强允许客户无需停止或重新创建表格,就可以改变部分表格的属性。

新的策略选项为数据库管理员提供了新的表格和索引自动重组功能。

可以拷贝数据库计划,创建模块方案。一旦数据库管理员创建了模块方案,他们就可将其作为创建新视图的模板。

新的管理SQL例程和视图提供了基本、易用的可编程界面,便于借助SQL来管理DB2。

动态快速通信管理器(FCM)缓冲和新的配置参数,可通过DB2数据库管理器进行自动调节。

新的CLI驱动程序(面向ODBC和CLI的IBM® DB2驱动程序),客户可以在不安装DB2客户端软件的情况下安装此驱动程序。

更加灵活、有效的产品授权管理

可以在同一台计算机上安装多个DB2版本和修补包。

新的响应文件关键字允许IT员工无需与最终用户交互安装DB2产品。

9、自动演进 — 从STINGER到VIPER

基于第8.2版推出的增强功能,IBM DB2 9版中新的自动数据管理特性将继续帮助提高数据库管理员的生产效率和效用。

其中一些关键特性包括:

适应性、自调内存分配功能 此项新功能通过不断更新配置参数和重新调整缓冲池的大小,简化或排除了DB2服务器的配置工作。一旦启动,该功能可在不同内存消耗点之间,动态分配可用的内存资源。在Windows和AIX® 操作系统中,自调内存功能也可以确定数据库内存总体需求,并会自动调节数据库共享内存。

面向z/OS对象的DB2 UDB自动状态监测功能 通过控制中心的创建和变更对象策略向导,客户可以实现面向z/OS对象的DB2 UDB对象维护策略评估的自动化,从而可使其按照预定次数和时间间隔运行。对创建了策略警报的对象而言,警报通知会发送至对象维护策略指定的状况警报联系处。

自动存储支持 自动存储可以自动扩大磁盘与文件系统中数据库的容量。它消除了对管理存储器的需求,同时利用了数据库管理存储的性能和灵活性。在IBM DB2 9版中,已经添加了面向多分区数据库的自动存储功能。此外,在创建新数据库时,自动存储会自动启动。

自动统计数据收集 在IBM DB2 9版中,当创建新数据库时,使用RUNSTATS命令的自动统计数据收集功能会自动启动。必要时,DB2服务器会在后台处理中收集数据的统计信息。DB2优化器(DB2 optimizer)利用这些信息对数据库中的信息最有效地恢复。

prefetchers进程和页清洁器的自动配置 在IBM DB2 9版中,prefetchers进程与页清洁器的数量可由DB2数据库系统根据某些环境特性,如CPU的数量、数据库分区的数量和数据库表空间的并行设置,自动确定。

表格与索引自动重组功能增强 表格与索引重组的新策略选项,为数据库管理员提供了更丰富的表格与索引重组管理功能。


db2 发表于:2006.07.18 05:43 ::分类: ( 一般分类 ) ::阅读:(1423次) :: 评论 (8)
===========================================================
IBM DB2 的数据复制、迁移方法
===========================================================
以下方法经测试,在环境IBM x346,3.2G×2,4G,RAID 1,DB2 V8.2.4,Win2000 Adv Server,DMS表空间中,数据的load速度在60-100万条/min左右。

背景:需要更改数据库表空间,或者需要将数据库中所有表的数据迁移到一个新的数据库中。

步骤:

1.通过db2控制台(db2cc)选中源数据库中的所有表,将其导出成DDL脚本;

2.根据需要对脚本进行必要的修改,譬如更改表空间为GATHER;

3.新建数据库,新建DMS表空间:GATHER;

4.将DDL脚本在此数据库中执行;

5.编写代码查询源数据库中的所有表,自动生成export脚本;

6.编写代码查询源数据库中的所有表,自动生成import脚本;

7.连接源数据库执行export脚本;

8.连接目标数据库执行import脚本;

附录1:生成export脚本代码示例:

/** * 创建导出脚本 * @param conn * @param creator 表创建者 * @param filePath */ public void createExportFile(Connection conn,String creator,String filePath) throws Exception { DBBase dbBase = new DBBase(conn); String selectTableSql = "select name from sysibm.systables where creator = '" + creator + "' and type='T'"; try { dbBase.executeQuery(selectTableSql); } catch (Exception ex) { throw ex; } finally { dbBase.close(); } DBResult result = dbBase.getSelectDBResult(); List list = new ArrayList(); while (result.next()) { String table = result.getString(1); list.add(table); } StringBuffer sb = new StringBuffer(); String enterFlag = "rn"; for (int i = 0; i < list.size();i++) { String tableName = (String)list.get(i); sb.append("db2 "export to aa" + String.valueOf(i+1)+ ".ixf of ixf select * from " + tableName + """); sb.append(enterFlag); } String str = sb.toString(); FileUtility.saveStringToFile(filePath, str, false); } 附录2:生成import脚本代码示例: /** * 创建装载脚本 * @param conn * @param creator 表创建者 * @param filePath */ public void createLoadFile(Connection conn,String creator,String filePath) throws Exception { DBBase dbBase = new DBBase(conn); String selectTableSql = "select name from sysibm.systables where creator = '" + creator + "' and type='T'"; try { dbBase.executeQuery(selectTableSql); } catch (Exception ex) { throw ex; } finally { dbBase.close(); } DBResult result = dbBase.getSelectDBResult(); List list = new ArrayList(); while (result.next()) { String table = result.getString(1); list.add(table); } StringBuffer sb = new StringBuffer(); String enterFlag = "rn"; for (int i = 0; i < list.size();i++) { String tableName = (String)list.get(i); sb.append("db2 "load from aa" + String.valueOf(i+1)+ ".ixf of ixf into " + tableName + " COPY NO without prompting ""); sb.append(enterFlag); } String str = sb.toString(); FileUtility.saveStringToFile(filePath, str, false); } 附录3:export脚本示例 db2 connect to testdb user test password test db2 "export to aa1.ixf of ixf select * from table1" db2 "export to aa2.ixf of ixf select * from table2" db2 connect reset 附录4:import脚本示例 db2 connect to testdb user test password test db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting " db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting " db2 connect reset

db2 发表于:2006.07.18 05:42 ::分类: ( 一般分类 ) ::阅读:(1157次) :: 评论 (3)
===========================================================
创建一个空的IBM DB2 ECO数据库
===========================================================
通常需要一个空数据库作为存储 EcoSpace 的容器。Delphi 2005 提供了一张光盘,其中包括 IBM DB2 UDB 开发人员版。您可以使用 Control Center(可在 IBM DB2 General Administrator Tool 中找到)。在 Control Center 中,可以使用树型视图来查看系统、DB2 实例和数据库。使用向导创建一个新的数据库,这将为您提供一个分为 7 步的向导,在那里只需指定新的空数据库的名称即可(有些类似于 ECO2ASP)。

  用来创建数据库的 SQL DDL 如下所示:

CREATE DATABASE ECO2 ON C: USING CODESET IBM-1252 TERRITORY US COLLATE USING SYSTEM;

  在创建空 IBM DB2 UDB ECO2 数据库之后,需要切换到 Data Explorer 并添加一个新的 DB2 Connection 到 ECO2 数据库。确保指定了正确的数据库名 (ECO2) ,并指定了正确的连接到该数据库的有效用户名和口令。


db2 发表于:2006.07.18 05:41 ::分类: ( 一般分类 ) ::阅读:(1198次) :: 评论 (6)
===========================================================
小议执行DB2的命令的方式
===========================================================

  环境 产品:DB2 UDB

  平台:z/OS

  版本:v8

  问题 执行DB2的命令有哪些方式?

  解答 执行DB2命令可以通过如下的方式:

  1、通过z/OS的控制台或者z/OS的应用程序,对于包含多个DB2子系统的环境。如果要在特定的一个DB2系统执行DB2命令,需要通过命令前缀的方式,例如:-DSN1 DIS GROUP DETAILS。可以执行所有的DB2命令

  2、通过IMS控制台或者应用程序,可以运行除Start DB2之外的所有DB2命令。同样需要特定的命令限定符。

  3、通过CICS控制台,可以运行除Start DB2之外的所有DB2命令。由于CICS只能连接到一个DB2系统上,所以执行DB2命令,不需要特定的前缀符号。

  4、通过TSO的控制台或者DB2I,可以利用如下命令打开DB2命令控制台:TSO DSN SYSTEM (subsystem-name)。同样是可以运行除了Start DB2之外的所有DB2命令。

  5、通过APF-authorized的应用程序执行DB2命令,可以执行所有DB2命令

  6、通过IFI(instrumentation facility interface)应用程序。可以执行所有的DB2命令


db2 发表于:2006.07.18 05:41 ::分类: ( 一般分类 ) ::阅读:(1254次) :: 评论 (3)
===========================================================
DB2跨数据库访问表的方法
===========================================================
本文说明的是在同一个数据库实例中,在源数据库dbsrc中访问目标库dbtarget的表table1的方法。

用户名:usr,密码:pwd

db2 版本: UDB FOR AIX 8.2.2

技术领域:db2 联合数据库

进入命令行:

1. db2 2. db2 =>update dbm cfg using Federated YES 3. db2 =>db2stop force 4. db2 =>db2start 5. db2 =>conncet dbsrc user user using pwd 6. db2 =>create wrapper drda library 'libdb2drda.a' 7. db2 =>create server FP type db2/AIX version 8 wrapper drda authorization "usr" password "pwd" options(dbname 'dbtarget')" 8. db2 =>CREATE USER MAPPING FOR "usr" SERVER "FP" OPTIONS (REMOTE_AUTHID 'usr' , REMOTE_PASSWORD 'pwd') 9. db2 =>create nickname FP_TABLE1 for FP.USR.table

这样就建好了跨库访问环境,

可以使用"select * from FP_TABLE1 " 来访问dbtarget里头的表table1了。


db2 发表于:2006.07.18 05:40 ::分类: ( 一般分类 ) ::阅读:(1977次) :: 评论 (3)
===========================================================
DB2数据库功能及性能使用心得
===========================================================

  1.安装DB2后可以通过命令窗口这样的命令行方式或控制中心这样的图形界面方式来操作,而如果你的数据库服务端不在本机,则还需要在“客户机配置辅助程序”中做一个客户端连接的配置。

  2.控制中心中无法增删改数据,只能编写sql语句来实现而quest提供的工具虽然能增加数据,但居然无法用复制、粘贴和Tab键,必须逐个输入,然后用鼠标点击切换现存数据看来可以在单元格中编辑修改,但实际却无法commit,呵呵,还是老老实实写update语句,至于删除数据,更是非写delete语句不可。不过可以用pb以单元格方式编辑数据,相应的一个缺点是编辑数据的按钮和删除表的按钮太近,万一点错了删除表的按钮,pb可是不作提示就把表给删了的,faint

  3.DB2的视图里不能直接用order by语句,必须这样写 select × from(select a,b,c from table1 order by a)as tab

  这种写法的前提是你已经打过补丁了

  4.存储过程的问题:

  DB2提供ltrim函数和rtrim函数,但偏偏不提供trim函数,如果你希望去除字符两端的空格,对不起,必须用ltrim(rtrim()) 的方式调用insert 语句里面居然不能用表达式赋值,必须把值先赋给一个变量调用其他存储过程时竟然不能用常量做参数,必须把这个常量的值赋给一个变量,再以这个变量为参数

  select * from table fetch first n rows only 语句居然在存储过程里不可用

  5.存储过程里可以使用动态sql,但函数里却不可以使用

  6. 遇到commit或rollback时自动关闭游标,所以需要慎重使用单独提交。

  proc builder老是在调试中内存不足,屏幕花掉。而如果断点调试时暂停不进行下去的时间稍微长一点就会提示超时,受不了。

  7.开发中遇到的一个问题

  在使用日期变量+1 MONTHS OR 日期变量-1 MONTHS 的方式取日期时,比如日期变量值为 2004-02-29时,存储过程里将日期变量+1 MONTHS 赋值给另一

  日期变量时会出错。相应SQLSTATE为01506(db2 ? 01506): 对 DATE 或TIMESTAMP值进行了调整,以校正算术运算得出的无效日期。

  如果要获取的只是下一月份,可采用的替代方法是获取当前日期所在月份的第一天作为基准后+1 MONTHS OR -1 MONTHS

8.哈哈,今天帮别人弄存储过程的经验

  搞了半天搞不定,一查原来的文档才了,原来tmd该死的DB2的存储过程,是转换为C后,进行编译的。因此在数据库服务器上要安装一个C编译器才能完成存储过程的编译。并且需要使用DB2SET命令,设置DB2_SQLROUTINE_COMPILER_PATH指向C编译器的安装路径。如:db2set

  DB2_SQLROUTINE_COMPILER_PATH=E:ProgramFilesMicrosoftVisualStudioVC98Binvcvars32.bat

  9.对变量的赋值不能用select ..into ..方式而要用set v=(select ..)的方式,代码示例如下。

drop function SXFM.ISORDERSUBMITDATE;
CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0))
RETURNS DATE
LANGUAGE SQL
BEGIN ATOMIC
DECLARE V_SUBMIT_DATE DATE;
DECLARE V_SELL_ID DECIMAL(16, 0);
DECLARE V_BUY_ID DECIMAL(16, 0);

set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
set V_BUY_ID = (SELECT COALESCE(PAY_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID);
set V_SUBMIT_DATE = (SELECT DATE(MAX(A.SUBMIT_DATE)) FROM AM_AUDIT_QUEUE A,SM_USER B,SM_USER C
WHERE A.TABLE_CODE='IS_ORDER' AND A.TABLE_ROW_ID=IN_ROW_ID
AND A.AUDIT_EMP_ID=C.ROW_ID AND C.BRANCH_ID=V_BUY_ID --审核方为付款方
AND A.SUBMIT_EMP_ID=B.ROW_ID AND B.BRANCH_ID=V_SELL_ID); --提交方为收款方

RETURN V_SUBMIT_DATE;
END;
#SYNC 10;

  10.DB2的游标打开后遇到commit和rollback默认是会关闭的。保持游标打开的方法是在定义游标时加上with hold选项

  11.F:导出某张表的数据,且该表包含long varchar型数据,该如何操作Q:Export:db2 connect to [dbname] user [user] using [password]db2move [dbname] export -tn [tablename] -u [user] -p[password] (单表)db2move [dbname] export -tn [tablename1,tablename2,...] -u [user] -p [password] (多表)Import:db2move [dbname] import


db2 发表于:2006.07.18 05:39 ::分类: ( 一般分类 ) ::阅读:(4326次) :: 评论 (6)
===========================================================
让DB2数据库使用所有内存的方法
===========================================================

  简介

  曾听说过创造性压力吗?它属于那些伪精神哲学之一,它宣称互相作用的力会创造出作为斗争副产品的事物。这有点象小人书里面善与恶之间的斗争。现在,我不想说所有软件工程师都是好人,或者所有硬件工程师都是坏人,但是在他们之间存在着创造性压力。正如 Joseph Campbell 所说的,“不要让您对科学不切实际的憎恶迷惑了您的双眼,以至看不到计算机芯片中的光辉境界。”如果整个表象浪潮一样涌出磁盘并冲入内存,那还能有什么比这更浪漫呢?

  有时侯,软件工程师会哀叹硬件发展的步伐太缓慢了:机器磁盘速度太慢、内存组太小并且时钟速度象蜗牛爬行。(当硬件发展赶上的时候,可能我们会忘记 Java™ 应用程序曾经是那么慢。)当新一代硬件出现时,操作系统首先适应,但留给用户的却是,它们只能用 32 位体系架构运行 16 位或(气喘吁吁的)8 位 DOS 应用程序的痛苦。现在压力转到了软件工程师头上:他们什么时候才会重新编译应用程序并利用新硬件所提供的新数据类型和内存可寻址能力呢?在最终的分析中,您将在 8086 上运行的 BASIC 与在 24 路 SMP 上运行的 C++ 进行比较时,运行“Hello World”程序所花费的时间大约与编写该程序所花费的时间一样长。

  但是,数据库所要做的远不止是要向显示器输出“Hello World”。与 Web服务器软件期望更高速线路一样,数据库软件期望从磁盘速度、容量、可寻址内存的每次升级中尽可能获得好处。尽管应用程序程序员可能会抱怨必须为 32 位机器重新编译 16 位程序(它已经运行良好了),但是数据库工程师喜欢这样的想法:在将数据排序、聚集或发送给用户之前把它保存在内存中而不是磁盘上。I/O 是如此众多要求过高工作负载的杀手 — 这正是您将 1 TB 的数据分散到 5 TB 的磁盘上的原因(更多的磁盘 = 更多的轴,这意味着更多并行的 I/O,至少在基准测试世界中是这样)。

  现在,在 RISC 和 Sparc 世界中,64 位体系架构正逐步成为标准,它允许商业性 UNIX®(如 AIX®、HP-UX 和 Solaris 等)为您喜爱的关系数据库提供大量内存。32 位内存的可寻址能力大约等于 4 GB,而许多 UNIX 机器装有 20 到 100 GB 内存,您肯定希望使用这样大的内存。Intel 世界也不落后多少:现在,操作系统、编译器和数据库软件实验室里,正在 64 位 Intel 芯片上运行的 Linux 和 Windows 2000 是一个现实,而且不久会在您周围的网站上销售。

  那么,如果硬件和操作系统都已经为使用巨大的内存做好了准备,并且数据库也能够利用大内存,那么您如何将它们结合起来并使之工作呢?使用 DB2® 版本 7,首先要弄清楚的是,在内部,DB2 假设使用 32 位内存和硬件。要利用更大的内存,必须告诉 DB2 可以使用它以及如何使用它。请勿责备 DB2 — 大多数 DB2 客户机和许多 DB2服务器在未来数年中将运行在 32 位 Intel 机器上。并且即使 DB2 在您机器上检测到有 96 GB 内存,谁又能肯定您希望 DB2 使用所有内存,而不是与其它应用程序共享这个内存呢?

  当使用这种大内存时,您有几种选择。最显而易见的选择是创建 64 位 DB2 实例。现在,AIX、Solaris 和 HP-UX 上的 DB2 版本 7 都支持这种操作。如果您拥有版本 7.1,则必须下载修订包 1 以安装 64 位 DB2 库。如果您拥有版本 7.2 或更新版本,则不必为了创建 64 位 DB2 实例而安装修订包。要创建 64 位 DB2 实例,可以使用 db2icrt 命令,并指定参数 -w 的值为 64。例如:

db2icrt -w 64 -u db2fenc1 db2inst1

  描述 64 位环境中 DB2 使用的手册位于:

http://www-4.ibm.com/cgi-bin/db2www/data/db2/udb/winos2unix/support/document.d2w/report?fn=db2q9e71frm3toc.htm

  1 + 1 = 2。
  2 的 32 次方 = 极大的数。

  每个 32 位 DB2 实例能够对 4 GB 内存寻址。通常,您希望将大部分内存给缓冲池专用。但是,AIX、HP-UX 和 Windows 上的内存分段会将最大缓冲池的大小限制在 4 GB 以内。即使是在 32 位世界中拥有十分干净的内存模型的 Solaris 上,用于 DB2 缓冲池的内存也不能超过 3.35 GB;4 GB 内存空间的其余内存必须专用于 DB2 的其它共享内存用途。(幸运的是,对于 64 位世界中的所有操作系统,内存模型都更干净。)在 HP-UX 上,32 位 DB2 实例所能够创建的最大缓冲池大约是 800 MB。在 HP-UX 上,只有通过使用 32 位 HP-UX 上的 Memory Windows 来运行多个实例,才能使用 1 GB 以上的缓冲池。(DB2 发行说明(Release Notes)中描述了 HP Memory Windows。)在 Windows 上,缓冲池被限制为 3 GB,AIX 上是 1.75 GB,而 Linux 上大约是 1 GB。

  在运行 32 位 DB2 的大内存系统上,要将大量内存给予缓冲池,最简单方式就是在一个 DB2 企业扩展版(Enterprise-Extended Edition (EEE))配置中运行多个逻辑 DB2 实例。只需要运行操作系统的一个实例,这将有助于节省开销和允许多个 DB2 实例之间通过共享内存而不是通过 TCP/IP 或通信交换机来彼此通信。使用 DB2 的无共享体系结构,每个实例可以在它自己的数据库分区之内愉快地对 4 GB 内存寻址。在大多数 DB2 TPC-H 基准测试中 — 它通常让 DB2 EEE 在规模达 300 GB 或更大的数据库上运行决策支持查询 — 一个大型 SMP 为每个 DB2 节点划分多至 4 GB 内存(每个节点都是一个运行它自己的 DB2 实例的数据库分区)。

  DB2 还可以使用其它三种方法来利用大内存机器。在 AIX、Solaris 和 Windows 上,DB2 支持扩充存储器(Extended Storage)(也称为 ESTORE)。这允许 DB2 将超过 32 位内存模型中最大可用内存的内存用于系统临时表(用于排序)和只读用户数据。在 DB2 从磁盘获取数据时就由 DB2 判断哪些数据是可以认为是只读,但是需要配置 DB2 以使用扩充存储器。

  让我们考虑一种典型情况:您正在设计一个数据库,在其中希望将一个表尽可能多地放入内存。首先,更新数据库管理器配置并告诉它要使用多少扩充存储段(num_estore_segs)。这个值的缺省设置为零。n 取多大值将取决于表有多大、可用的内存有多少以及您希望这个特定表用多少内存。假定我们正在使用 Solaris,它有 6 GB 内存 — 在 4 GB 内存空间之上的 2GB 内存用于扩充存储器(也称为 estore):

update db cfg for sample using num_estore_segs n

  用“扩充存储器存储段大小”(estore_seg_sz)数据库配置参数来定义 estore 段的大小:

update db cfg for sample using estore_seg_sz 32000

  在您创建了一个缓冲池。对于本示例,我们将使用 8K 页面大小,尽管 16K 和 32K 页面大小也是允许的。(如果是在 Windows 上,要使用 2GB 以上的内存,则必须使用大于 4K 的页面大小。)必须为扩充存储器启用缓冲池,可以使用 EXTENDED STORAGE 关键字做到。 highmem 是我为这个缓冲池选择的名称。其大小 n 取决于您希望这个缓冲池占用的内存数量:

CREATE BUFFERPOOL highmem SIZE n

PAGESIZE 8K EXTENDED STORAGE

  现在创建一个表空间,并将它分配到这个缓冲池:

CREATE TABLESPACE highmem_tbsp PAGESIZE 8K

MANAGED BY SYSTEM

USING ('C:highmemdir)

BUFFERPOOL highmem

  注:表空间的页面大小必须与该缓冲池的页面大小相匹配,并且该缓冲池由名称来标识。如果您只在这个表空间中创建一个表,而这个表空间又是该缓冲池中唯一的表空间,那么当访问这个表中的数据时,就增大了数据留在内存中的机会。但对表进行排序时仍可能会溢出,因此请确保有一个已创建了相匹配的页面大小的系统临时表空间:

CREATE SYSTEM TEMPORARY TABLESPACE highmem_temp PAGESIZE 8K

MANAGED BY SYSTEM

USING ('C:highmemtemp') BUFFERPOOL highmem

  现在准备在该表空间中创建表:

create table memory_hog (col1 int) in highmem_tbsp

  部分还是全部 AWE?由您来判断。

  Windows 2000 能够通过 Microsoft Address Windowing Extensions(AWE)在 32 位世界中映射越过 4 GB 内存界线的数据。DB2 版本 7.2(或带有修订包 3 的版本 7.1)支持这个特性。Windows 2000 Advanced Server 最多支持 8 GB 内存,而 Windows 2000 Data Center Server 最多支持 64 GB 内存。

  在最终的分析中,您可能需要做一个选择,这个选择与高性能数据库设计所需的颗粒度是背道而驰的。可以假定,您将考虑的用于上述技术的数据库需要最佳性能 — 最终,如果性能不重要,为什么要将数据库放到拥有大量内存的机器上?此类数据库倾向于将用户数据存储在数据库管理存储器(Database Managed Storage (DMS))中,将原始设备(raw device)用作容器。按照大多数人的意见:如果您管理一个具有众多概要文件和用户要求很高的数据库,那么,需要投入大量时间对数据库进行调整和计划,这样才能预测数据的增长并在原始设备容器上分配足够的空间。用这种思想,可以知道系统管理存储器(SMS)表空间只适于系统数据(临时表空间和目录表空间)和必须对其进行少量维护的数据库,因为,这两者数量太多,因而无法保证对其设计和维护进行大量投资。

   假定您同时面临两种最糟糕的情况:一方面数据库必须迅速,另一方面您又无法预测其中的数据增长或去花费大量时间对其进行维护,那怎么办呢?您可能会问:如果有些事情很重要,为什么不将 DBA 资源用于它呢?但老板并不总是理性的。幸运的是,关系数据库架构设计师们并不是仅有的花费大量时间决定如何使用大内存机器的人:操作系统专家也在研究这个问题。您将需要做一个信念上的飞跃,将所有数据放置到 SMS 表空间,并将文件系统用作容器。(也可以使用 DMS 来做这件事,但是在为容器定义文件大小时,还必须计划数据增长)。现在,查看所有 4 GB 内存地址以上的空间并将它用于文件系统高速缓存,是操作系统的任务。幸运的是,由于大多数数据库运行在大型 SMP 上,并且能够通过利用应用程序来达到其性能目标,这推动了系统设计师们挖掘出大内存机器的潜能,以将频繁访问的数据保存在内存中。而这正是人们希望数据库缓冲池所做的:将经常访问的数据保存在内存中,而其余的仅留在磁盘上。

  别在家里尝试这个操作!(在工作中、在老板的系统上尝试。)

  也许在结束关于内存的文章之前,有必要提醒您不要忘记系统里的其余部分。毕竟,如果您有 96 GB 内存,而磁盘上就可能有不止 96 GB 的数据 — 正等着吞没您的系统并将它送入页面调度的痛苦状态。本文的重点是尽可能多地使用内存。毕竟,您为它花了钱,那么为什么不使用它并使之物有所值呢?按照这种思想,不要忘记您购买的其余硬件。您希望软件使用所有的内存,但也希望所有处理器做它们的那部分工作 — 对所有的磁盘也是如此。正如在 1 MB PC 上将应用程序限制到 640 K 内存不能充分利用可用资源一样(因此比它应有的速度要慢),如果您的一个处理器以 100% 运行,而其它以 25% 运行,这时,您的处境就很尴尬了 — 一个处理器的工作负载已达到了极限,而其余处理器什么也不做。(这种情景就好象您在建筑工地上看到一个人正在拿铁锹工作,而他的同事却袖手旁观。)这正是 DB2 EEE 可以帮助您的地方;它的无共享体系结构被设计成简洁地将所有工作和数据公平地划分给可以使用的内存、CPU 和磁盘。出于这个原因,对于决策支持无共享体系结构是很理想的。对于那些事务型工作负载,您必须监视热点:如果发生了 CPU 或磁盘中的一个子集工作过重的现象,为什么会发生这种现象呢?是因为所有任务繁重的客户机都连接到同一节点了吗?幸运的是,EEE 允许您将客户机连接分布到所有节点。是否应该将数据移到这些节点上的许多小表中,这样在进行更新操作时,就避免了对分布在所有节点的一个大表进行操作的情况。小表的缺点在于:当您希望得到一个需要来自每个节点上行的结果集时,必须进行 UNION 操作。还有,不要怕在无共享体系结构上运行 OLTP。在撰写本文时(2001 年 4 月),TPC-C 测试结果表明:前六名都是集群的无共享数据库。

  工作负载平衡还意味着将表空间分布到多个磁盘,这样多个磁盘可以同时返回数据,因而也就启用了并行 I/O。这里,在三个变量之间存在创造性压力:磁盘、内存和处理器。运气好的话,您的每种资源都充足,并且可以在它们之间进行工作负载平衡来构建一个系统,对于您所花费的时间和投资的金钱,这个系统是物有所值的。至于还没有使用的硬件呢?唔,至少它使硬件销售代表挣得大笔佣金可以到夏威夷度假。而且,如果没有其它原因,那么您是否曾发现自己在夏威夷钓鱼而您的小艇和海浪搏斗时,这些额外的硬件和一根绳索就会形成一个可靠的锚。

  关于作者

  Blair Adamache 是 IBM多伦多实验室里有十七年工作经验的老手。他相信如果从 1970 年到 1995 年的每次棒球赛都统计到一个关系表而每次投掷都占一行的话,那么我们将可以证明 Dwight Evans 和 Bobby Grich 应当进棒球名人堂(Baseball Hall of Fame)。 本文最初发表于 DB2 开发者园地。本文所表达的是作者的观点,而非 IBM 观点。


db2 发表于:2006.07.18 05:39 ::分类: ( 一般分类 ) ::阅读:(4298次) :: 评论 (0)
===========================================================
IBM DB2 数据库使用小技巧
===========================================================

  1. 查看本地节点目录
  命令窗口中输入:db2 list node directory

  2. 编目一个TCP/IP节点
  命令窗口:db2 catalog tcpip node <node_name> remote <hostname|ip_address> server <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>

  3. 取消节点编目
  db2 uncatalog node <node_name>

  4. 查看系统数据库目录
  db2 list database directory

  5. 查看本地数据库目录
  db2 list database directory on <盘符>
  在本地数据库目录中有而系统数据库目录中没有的数据库不能访问,可以在控制中心中选中<数据库>右键单击选择添加,然后输入需要添加的数据库名称或者点击刷新按钮选择数据库,加入数据库后即可以访问。

  6. 编目数据库
  db2 catalog database <db_name> as <db_alias> at node <node_name>

  7. 取消数据库编目
  db2 uncatalog database <db_name>

  8. 测试远程数据库的连接
  db2 connect to <db_alias> user <user_id> using <password>

  9. 任何用户均可通过设置Current Schema专用寄存器为特定的数据库连接设置默认模式,初始默认值为当前会话用户的权限ID。
  set schema = <schema name>
  可以由用户交互式的使用,也可在应用程序中使用,如果用Dynamicrules Bind选项绑定包,这个语句就没有作用。此语句不在事务控制之下。

  10. 代码页的设置
  在创建数据库时设置字符集
  create database <db_name> using codeset <codeset> territory <territiry>
  例:
  create database dbtest using codeset IBM-437 territory US
  也可以设置整个数据库的代码页,在win2000/NT/xp中,在我的电脑-->属性-->高级-->环境变量中添加变量DB2CODEPAGE = <codepage>,例:DB2CODEPAGE = 437 或 DB2CODEPAGE = 1386。或者在IBM DB2命令窗口输入 db2set DB2CODEPAGE=1386,设置后需要重新启动DB2生效。

  11. DB2低版本数据到高版本的迁移
  先将低版本数据备份使用恢复功能导入高版本数据库,然后在命令窗口输入 db2 migrate database <db_name>。

  12. 表名或模式中含有引号时访问表
  命令窗口:db2 select * from "tabschema"."tabname"
  命令行处理器:db2=> select * from "tabschema"."tabname"

  13. 导出数据库的表结构生成DDL文件
  命令窗口:db2look -d <db_name> -e -c -o <file_name>

  14. 执行脚本文件
  命令窗口:db2 -tvf <file_name>

  15. 代码页的转换

  16. 获取当前DB2的版本
  select * from sysibm.sysversions

  17. DB2表的字段的修改限制?
  只能修改VARCHAR2类型的并且只能增加不能减少
  alter table <tb_name> alter column <col_name> set data type varchar(SIZE)

  18. 如何查看表的结构?
  describe table <tb_name>
  or
  describe select * from <schema>.<tb_name>

  19. 如何快速清除一个大表?
  ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INITALLY WITH EMPTY TABLE

  20. 如何查看数据库的存储过程?
  SELECT * FROM SYSCAT.PROCEDURES

  21. 如何查看表的约束?
  SELECT * FROM SYSCAT.CHECKS WHERE TABNAME = <tb_name>

  22. 如何查看表的引用完整约束?
  SELECT * FROM SYSCAT.REFERENCES WHERE TABNAME = <tb_name>

  23. 如何知道BUFFERPOOLS状况?
  select * from SYSCAT.BUFFERPOOLS

  24. 如何在命令行下查看修改实例和数据库配置参数?
  查看实例配置参数: db2 get dbm cfg
  修改实例配置参数: db2 update dbm cfg using 参数名 新值

  查看数据库配置参数: db2 get db cfg for <db_name>
  修改数据库配置参数: db2 update db cfg for <db_name> using 参数名 新值

  25. 如何修改缓冲区?
  增加缓冲区: create bufferpool <buf_name> size <number of pages> [pagesize 4096] {[not] EXTENDED STORAGE}
  修改缓冲区: alter bufferpool <buf_name> size <number of pages> {[not] EXTENDED STORAGE}
  删除缓冲区: drop bufferpool <buf_name>

  如果缓冲区大小设置为 -1 表示缓冲池的页面数目由数据库配置参数buffpage决定。
  注意: 数据库配置参数buffpage仅对缓冲区大小设置为 -1 的缓冲池起作用。

  26. 多个字段时如何不通过使用select子句使用in/not in
  select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))

  27. 查看当前连接到数据库的应用
  db2 list application [show detail]

  28. 如何确认DB2数据库的一致性
  db2dart <db_name> /DB
  /DB表示检查整个数据库的一致性

  29. 测试SQL语句的性能
  db2batch -d <db_name> -f <file_name> [-a userid/passwd] [-r <outfile_name>]
  -r 选项表示将查询结果输出到一个文件中。
  30. 导出某个表的数据
  export to <Derectry><filme>
  如:导出用户表
  export to c:user.ixf of ixf select * from user

  31. 导入数据
  import from
  如:导入用户表。导入时可以直接建立新表。如果有该表存在也可以用INSERT 插入,或者用UPDATE更新
  import from c:user.ixf of ixf [Create/Insert into / update] tablename
  


db2 发表于:2006.07.18 05:38 ::分类: ( 一般分类 ) ::阅读:(1460次) :: 评论 (9)
===========================================================
用Visual C#访问DB2数据库
===========================================================

  在Visual Studio.NET Beta 1版本中访问IBM DB2等非SQL Server数据库通常是使用ADO.NET的ODBC方法,而在Beta 2中则改用OLE DB方式存取数据库。

  Beta1中连接字符串主要需声明数据库的ODBC的DNS名字,但Beta 2中的OLE DB连接的字符串就较复杂了,使用的类也不相同。由于DB2等数据库在大型机等应用中使用非常广泛,.NET自然会全力支持此类编程开发,为此,本文将逐步阐述OLE DB的DB2开发。

  OLE DB for DB2驱动

  Visual Studio.NET和Windows 2000 Server中并未直接提供DB2的OLE DB驱动,因此需下载Microsoft Host Integration Server 2000软件,该软件包中含OLE DB Provider and ODBC driver for DB2,需下载Server端软件包,并在安装时选择安装Data Integration,安装完成后就可使用其OLE DB的DB2驱动了。

  设置数据库连接

  首先,我们需配置好DB2的客户端设置,打开视图选单项中的服务器资源管理器,在其数据连接中新增一个连接,指定程序选项时选择Microsoft OLE DB Provider for DB2,下一步连接选项中,填写如下信息:

  Data Source: QCDB(请酌情修改)

  Network:TCP/IP

  IP Address:数据库服务器地址

  Network Port:DB2服务端口

  Username:数据库访问权限的用户名

  Password:该用户口令

  Database initial Catalog:QCDB

  Package collection:QCDB

  default schema:Userid

  下一步高级选项中选各自国家语言对应的code page及CCSID,最后按确认键完成创建连接。

  假设QCDB这个DB2数据库中有一名为address的新数据表,其包含四个字段:name、email、age和address,我们可用服务器资源管理器打开上述连接及该数据表,可输入数条中文记录,确定中文字符能否正常显示。

  为项目增加数据库连接

  用Visual Studio新建一个ASP.NET项目,激活服务器资源管理器的上述连接,用鼠标将该连接拖至新建的Web Form上,则OLE DB需要的连接字符参数全部自动写入Web Form程序中,上述连接生成的语句如下:

  this.oleDbConnection1.ConnectionString = @"Provider=DB2OLEDB;

  Cache Authentication=False;

  Integrated Security="""";

  Password=freebsd9;

  Persist Security Info=True;

  User ID=userid;Initial Catalog=qcdb;

  Data Source=qcdb;Mode=ReadWrite;

  Extended Properties="""";

  APPC Remote LU Alias="""";

  APPC Local LU Alias="""";

  APPC Mode Name=QPCSUPP;

  Network Transport Library=TCPIP;

  Host CCSID=37;PC Code Page=1282;

  Network Address=172.23.169.1;

  Network Port=4444;Package Collection=qcdb;

  Default Schema=userid;Alternate TP Name="""";

  Process Binary as Character=False;

  Units of Work=RUW"

  用服务器资源管理器工具生成连接可避免错写各种参数,从而可快速地实现数据库连接。

  Web Form显示数据库数据

  为Web Form新增一个OleDbDataAdapter类的对象oleDbDataAdapter1,为其选择数据连接时选上面建立的连接如:qcdb.qcdb.userid,选择使用SQL语句,生成SQL语句如:Selectfrom address,最后提示完成。再为Web Form新增一个DataSet并命名为dataSet1用来放查询得到的数据。新增一个显示数据用的DataGrid命名为DataGird1,最后在Web Form的程序段中的Page_Init部分中增加如下代码:

  oleDbConnection1.Open();

  //打开数据库连接

  oleDbDataAdapter1.Fill(dataSet1,"Address");

  //将得来的数据填入dataSet

  DataGrid1.DataBind();

  //绑定数据

  oleDbConnection1.Close();

  //关闭连接

  编译运行后,可见address表中内容被显示于Web Form的DataBrid中。OleDbConnection1等属性设置都在生成的Web Form设计代码中。

  增加数据库数据

  在Web Form上新增对应字段数量个数的TextBox,及一个button,为该按键增加Click响应事件代码如下:

  this.oleDbInsertCommand1.CommandText = "INSERTsintosADDRESS(NAME,

  EMAIL, AGE, ADDRESS) VALUES

  ('"+TextBox1.Text+"','"+TextBox2.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"')";

  oleDbInsertCommand1.Connection.Open();

  //打开连接

  oleDbInsertCommand1.ExecuteNonQuery();

  //执行该SQL语句

  oleDbInsertCommand1.Connection.Close();

  //关闭连接

  实际编程中,我们需注意SQL语句的单引号问题以及数字和字符串处理问题。

  删除数据库数据

  在Web Form上新增一个TextBox5及一个按键,要执行删除时,在TextBox5中填入要删除记录的name字段的值,然后按该按键执行删除。该按键代码如下:

  System.Data.OleDb.OleDbCommand oleDeleteCommand1 = new

  System.Data.OleDb.OleDbCommand();

  this.oleDbDataAdapter1.DeleteCommand = oleDeleteCommand1;

  //声明为oleDb命令

  oleDeleteCommand1.CommandText="DELETE FROM

  ADDRESSswheresNAME='"+TextBox5.Text+"'";

  oleDeleteCommand1.Connection = this.oleDbConnection1;

  //指明连接

  oleDeleteCommand1.Connection.Open();

  //打开连接

  oleDeleteCommand1.ExecuteNonQuery();

  //执行SQL语句

  oleDeleteCommand1.Connection.Close();

  //关闭连接

  对于增加、更新和删除操作后的DataGrid刷新,可执行类似的Select SQL语句即可。

  上述代码可供各种非SQL Server数据库编程参考和使用,微软为此提供了如OLE DB Provider for Oracle、AS/400和VSAM等众多驱动,OLE DB方式确实提供了较ODBC方式更为广泛的数据存取范围,如可存取Access库中的数据、邮件系统中的数据、Web上的文本及图形、目录服务等等,符合ODBC标准的数据源就是符合OLE DB标准的数据存储的子集,而且OLE DB的API是符合COM标准和基于对象的API,这些都是较原ODBC方式有大幅改进,从而为综合的数据集成处理提供了更广泛的支持。

  上述程序在中文Windows 2000 Server、IBM DB2和Visual Studio.NET Beta 2环境中编译并正常运行。


db2 发表于:2006.07.18 05:37 ::分类: ( 一般分类 ) ::阅读:(1209次) :: 评论 (12)
===========================================================
恭喜您成功申请ITPUB BLOG
===========================================================
恭喜您成功申请ITPUB BLOG。 查看全文
db2 发表于:2006.07.17 13:24 ::分类: ( 一般分类 ) ::阅读:(2705次) :: 评论 (0)
切换风格
新闻聚合
博客日历
文章归档...
最新发表...
博客统计...
网站链接...