您好,欢迎访问三七文档
DB2基本知识介绍认识DB2认识DB2DB2的版本–DB2UDBV7、V8、V9PE(PersonalEdition)EE(EnterpriseEdition)EEE(Enterprise-ExtendedEdition)其他IBM主机平台如AS/400上的DB2与DB2UDB有很大不同,老版本的主机DB2甚至不支持SQL。DB2在招行的应用情况AS/400DB2RS/6000–UDBV5V7V8V9数据仓库开发用:DB2UDBPEV8ForWindowsXP/2KDB2UDBvsSQLServer/SybaseSQLServer/Sybase是个黑盒子DB2是个相对透明的黑盒子DB2所支持的SQL语句更完整DB2对数据仓库所做的扩展支持非常好,如多分区,MDC技术等。DB2具有平台优势和体系优势,对高端应用有更好的支持。DB2UDB的CreateTable语句SQLServer的CreateTableCREATETABLE[database_name.[owner].|owner.]table_name({column_definition|column_nameAScomputed_column_expression|table_constraint}[,...n])[ON{filegroup|DEFAULT}][TEXTIMAGE_ON{filegroup|DEFAULT}]Windows下的安装、使用仅安装客户端DB2Connect安装服务器端DB2PEServer+DB2ConnectRS/6000下的安装、使用如RS/6000上已安装DB2,则只要在登录用户的profile中引用db2inst1的profile或手工添加相应环境变量,即可使用DB2,前提是DBA已授权此用户足够权限。DB2安装、使用相关的下载及文档URL:=UDB配置助手控制中心命令行工具–命令窗口、命令行处理器信息中心开发中心健康中心使用DB2工具-windows实例Instance数据库Database容器Container表空间Tablespace扩展区Extend表Table页PageDB2UDB中一些基本概念ViewSQL存储过程触发器事务处理索引DB2UDB中的标准SQL设施模式是一个标识符,如用户ID,它帮助分组表和其他数据库对象。模式可以归个人拥有,拥有者可以控制对数据以及其中的对象的存取。模式也可以是数据库中的对象。它可以在创建模式中的第一个对象时自动创建。这样的对象可以是任何可以由模式名限定的对象,如表、索引、视图、程序包、单值类型、函数或触发器。若要自动创建模式,则您必须拥有IMPLICIT_SCHEMA权限,也可以隐式地创建模式。模式名用作两部分对象名的第一部分。创建一个对象时,可将其分配给特定模式。若不指定模式,则它被分配给缺省模式,缺省模式通常是创建该对象的人员的用户ID。名称的第二部分是对象名。例如,名为Smith的用户可以有一个名为SMITH.PAYROLL的表。简单的比喻:假如DB等同于公司,模式相当一个部门名称。DB2数据库中的模式名-SCHEMADB2–专用存储器CURRENTDATEUSERCURRENTTIMESTAMPCURRENTTIMECURRENTTIMEZONECURRENTSERVER相当于SQLServer中的全局变量常用的DB2指令CREATE/DROPLIST/DESCRIBEFORCEGET/UPDATEIMPORT/EXPORT/LOADBIND/REBINDREORG/RUNSTATS……常用的DB2系统指令db2admindb2advidb2batchdb2cc/db2cmddb2cfexp/db2cfimpdb2start/db2stop……数据库分区与表空间数据库分区与表空间数据库分区一个数据库可以建立一个或多个分区(即节点),数据可以根据表所定义的分区键通过HASH算法存放于各个分区中。作为表格的分区键,建议使用高基数字段(拥有多个不同的值),这样可以使数据被均匀的分布,可以利用节点组中所有的节点资源来执行操作。也可以指定多个字段同时作为分区键来满足要求。二、数据库分区与表空间表空间的定义DB2是以表空间来定义数据库中存放数据的实体磁盘空间。一个数据库中至少需要具备3个表空间,分别是:SYSCATSPACE:存放数据库中的所有系统表TEMPSPACE1:存放DB2在执行SQL指令时所产生的临时数据表USERSPACE1:存放用户所建立的表二、数据库分区与表空间表空间的分类根据存储的数据种类区分规则表空间:存放系统表格过用户建立的表格的数据与索引。临时表空间:存放在执行SQL指令时产生的临时数据。大型表空间:存放LONGVARCHAR与LOB类型的字段数据。根据管理方式区分数据库管理空间:DMS,是由DB2直接格式化与管理的空间系统管理空间:SMS,是由DB2通过操作系统所管理的空间二、数据库分区与表空间数据库中的对象三、数据库中的对象对象名称:DB2的所有对象,都有其对象名称,DB2会将他全部转成大写,但如果把对象名称用双引号括起来,则就区分大小写。带引号的对象名称也可以包含SQL的保留字,但并不提倡。三、数据库中的对象表格•注意指定表空间和分区键•可增加字段,新增或删除限制•可更改VARCHAR类型的长度•可用LIKE定义同样的一张表,但除了字段类型和默认值外其他属性不继承索引视图•只读视图/可更新视图别名数据库中的对象限制•NOTNULLConstraints•ColumnDefaults•UniqueConstraints•CheckConstraints•PrimaryKeyConstraints•ForeignKeyConstraints触发器•前触发器/后触发器实例化查询表(MQT):•REFRESHDEFERRED•REFRESHIMMEDIATE三、数据库中的对象数据的锁四、数据的锁LOCKTABLE指令LOCKTABLEDB2.TABLENAMEINSHAREMODELOCKTABLEDB2.TABLENAMEINEXCLUSIVEMODE锁定的对象数据库/表空间/表格/记录锁定的模式(强度)写锁定,包括X、W、NW、Z等读锁定,包括S、NS、U等四、数据的锁锁定等待LOCKWAIT锁定超时LOCKTIMEOUT锁定升级LOCKLIST:定义数据库中预留多少空间存放锁定信息MAXLOCKS:定义每个事务可以使用多少LOCKLIST内存区四、数据的锁数据库系统效能五、数据库系统效能DB2Explain工具db2expln执行该语句可以查看Package中的SQL指令执行计划。这是从unix或是doc窗口执行的指令,如下:Db2expln-ddbname-cvicky-pcursor-oexpln.outdynexpln显示SQL指令的执行计划,如:dynexpln-dsample-s“sql指令”-oexpln.outDynexpln-dsample-fsql文件-oexpln.outVisualExplain从控制中心或命令行中心执行的explainsql五、数据库系统效能几张关键的系统表SYSCAT.TABLESSYSCAT.COLUMNSSYSCAT.COLDISTSYSCAT.INDEXESSYSCAT.TABLESPACESRUNSTATS索引建立索引的方法where条件的索引的顺序索引的副作用五、数据库系统效能五、数据库系统效能REORGMQT(物化视图)DATAINITIALLYDEFERREDREFRESHDEFERREDREFRESHIMMEDIATEENABLE/DISABLEQUERYOPTIMIZATIONCREATETABLEsch.mqt1AS(selectname,location,salaryfromsch.tab1a,sch.tab2wherea.dept=b.deptnumbanda.salary20000)DATAINITIALLYDEFERREDREFRESHDEFERRED;REFRESHTABLEsch.mqt1;程序包与BIND嵌入式SQLCLIJDBCSQLJDB2客户端程序开发实际应用六、实际应用SQL存储过程CREATEPROCEDUREDROPPROCEDUREIN/OUT参数调用CALL错误陷阱循环语句COMMITWORKBEGIN/END六、实际应用SQL存储过程C存储过程/函数Java存储过程其他:COBOL、OLE存储过程StoreProcedureBuilderDW:通过一个C函数写成的Function向调试文件写日志存储过程的调试方法–SQL存储过程的调试SQLCODE,SQLSTATE为什么要有ConditionHandling?固定写法:DeclareSQLSTATECHAR(5)DEFAULT‘00000’;DeclareSQLCODEINTDEFAULT0;必须要这么写才能得到SQLStatement执行情况,且只能写在存储过程的开头(OutermostScope)为什么?主机风格ConditionHandlingDeclarecontinuehandlerforsqlstate‘42774’beginendSQL存储过程的异常处理方法–ConditionHandlingCreateprocdurexx.xx(inxx,outxx)specificspecific-nameLanguageSQLbeginxxxendDB2允许定义同名但参数不同的存储过程,因此在删除存储过程时使用specific-name删除。假如调用存储过程的参数错误,db2只说找不到对应的存储过程,而不会说参数错误。这一点类似面向对象的参数重载。DB2SQL存储过程的specificspecific-name静态SQL静态SQL(staticSQL)语句嵌入到应用程序中,在应用运行之前,所有的嵌入静态SQL语句必须经过预编译并被绑定到程序包(package)中。DB2编译这些语句时,将基于编译和绑定这些语句时的系统表中的统计信息和数据库参数为每一个静态SQL语句生成一个访问计划(accessplan)。这些访问计划在运行时永远被使用;这些访问计划不会改变,除非程序包被重新绑定。EXECSQLSELECTd.deptname,count(e.empno),avg(e.salary)FROMdepartmentdleftouterjoinemployeeeon(e.workdept=d.deptno)WHEREe.salary=:salary_baselineORe.salaryISNULLGROUPBYd.deptname;六、实际应用动态SQL动态SQL(dynamicSQL)语句在程序运行时被prepare和执行。DB2运行动态SQL语句时,将基于当前的系统表中的统计信息和数据库参数为该语句生成一个访问计划(accessplan)。该访问计划在运行时可能会不断变化。stmt=“selectempno,salaryfromemployeewhereempno=?”;EXECSQLPREPAREs1FROM:stmt;EXECSQLEXECUTEs1;六、实际应用六、实际应用MERGESQL–UPSERT对目标表进行更新插入的过程,当存在满足条件的记录时就更新
本文标题:DB2入门培训讲义
链接地址:https://www.777doc.com/doc-957580 .html