DB2 UDB V8.1 管理

在DB2中有关实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)等概念:

在一个操做系统中,DB2数据服务能够同时运行多个实例(有别于Oracle在一个系统内只能起一个实例),数据库定义在实例中,一个实例能够包含多个数据库。在同一个实例中的不一样数据库是彻底独立的,分别拥有本身独立的系统编目表。

表空间分为DMS方式和SMS(System manegement Space)方式,定义在数据库中,一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间(SysCatSpace)与系统临时表空间(SysTempSpace)。在数据库中建立的任何对象都以在系统编目表空间中增长记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用状况动态伸缩的,即仅在须要时才分配磁盘空间,并在使用后进行回收。此外,若用户须要建立表,则须要建立用户表空间(UserSpace),若须要使用临时表,则须要建立用户临时表空间(UserTempSpace)。

DMS与SMS类型在表空间创建时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只可以指定一个目录,不可以增长。

容器分为三种类型,前两种是文件与设备,用于DMS方式的表空间;还有一种是目录,用于SMS方式的表空间,此种方式不须要人工管理数据存储文件,DB2可根据状况在目录中自动增长存储文件,只要磁盘空间容许。实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。


影响一个数据库的性能主要有如下因素:磁盘(Disk), 内存(Memory), 处理器(CPU), 网络(Network)。其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;其次是内存,一方面是指物理内存的总量要知足需求,另外一方面是指与内存相关的配置参数应正确配置;固然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输形成影响。如下列出一些对于提升数据库性能有效的方法:

对于运行数据库服务的服务器能够尽量的配置多块物理磁盘,每块的容量没必要太大,这样能够有效的分担数据存储与读取操做过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。

若是条件容许,尽可能使数据存储服务与操做系统分别运行在物理分开的磁盘上。

采用DMS(Database Management Space)管理方式的表空间。

在物理不一样的磁盘上建立多个表空间。而后能够将数据和索引分别存放在不一样的表空间,这样能够显著的提升性能。还能够把一个使用频繁的大表纵向拆成多个小表,分别存放在不一样的表空间中,而后用一个视图进行联合。

DB2服务器能够管理裸设备,即除系统以及DB2服务运行磁盘之外,为DB2数据存放单独准备磁盘,能够是多块,分区后不须要格式化,建立裸设备后直接交给DB2进行管理,用于存储数据。

系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能知足数据库操做的须要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,而且这种状况会常常发生。

尽可能在磁盘靠近最内层磁道的位置安放数据,由于此处磁盘的访问速度较快。


DB2的参数配置分为两个级别,一个是实例级别,另外一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。如下是三个比较重要的内存配置参数:

bufferpage: 由同一个数据库中的全部对象共享。

sortheap: 用于排序的内存交换区,非共享,不宜设置太大,不然,很容易引发内存耗尽,由于每个事务都会申请独立的内存用于排序。

locklist: 共享内存,用于记录数据服务运行中创建的锁。建议设置20Mb左右,须要时根据实际状况进行调整。DB2默认使用行级锁,若是设置过小,当锁的记录太多时,则会致使内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大下降应用程序的并发性能。若是设置太大,则多分配的内存不多会被用到,致使浪费。

其余的一些配置参数:

numdb: 同时能够启动的实例数目


DB2的经常使用命令:

db2ilist 列出当前系统中定义的DB2实例
daslist 列出系统中的DAS
db2 list database directory 列出当前实例中定义的数据库
db2 list tablespaces 列出当前数据库中定义的表空间
db2 list tabses [for all] 列出当前数据库中的表
db2 list active db 列出活动的数据库

db2 get dbm config
get db cfg for databasename
db2 update db cfg for databasename using bufferpage 600M
db2 alter bufferpool IABMDEFAULTBP size =1
db2 list applications show detail

以上命令能够在后面加 " show detail" 参数,显示详细信息。


DB2数据存储的页大小只能在表空间级别统一指定(区别于Oracle,能够定义在表级别), 而且建好后不能修改。

能够手工创建一个页大小为4K的DMS用户临时表空间,而后把系统默认的SMS系统临时表空间删除。为知足应用需求,通常还应再创建一个页大小在8K以上的用户临时表空间。

DB2 UDB V8.1 对RedHat Linux 9 的支持很差,默认状况下没法启动GUI安装程序(能够经过设置环境LD_ASSUME_KERNEL=2.2.5解决),而且不会安装Sample数据库,控制中心也没法正常启动。 


当使用COUNT()函数时,若是表中的记录数 > 2 147 483 647行,则函数可能返回错误的结果,这时可使用返回类型为DECIMAL(31, 0)的COUNT_BIG()函数。

DISTINCT 关键字能够用在COUNT()函数中,如:SELECT COUNT(DISTINCT id) FROM TABLE,这表明将不对id列的重复值进行计数。

ORDER BY子句后面若是写了多个列名,须要分别指定升序或是降序。

能够在load大量数据时,暂时关闭表的日志选项。使用:ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY

DB2的几个特殊寄存器:CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP, USER(用户ID).

有关日期的操做:CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.)

case 语句的使用:case when 条件一 then 动做一 else 动做二 end; 能够欠套使用。

在视图的建立语句中没法使用order by 子句与 fetch n rows 子句。但对于order by能够用以下方法替代实现,不过会影响效率。
create view v_name1(c1, c2, c3) as
select * from ( 
select column1, column2, column3
from t1
order by column1 ) as t1;
java

表空间类型分为SMS和DMS,分别是system management space, database management space. SMS使用方便,简单,无需手工建立和维护数据存储文件。DMS须要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。
对于一个数据库,至少存在一个page size为4K的系统临时表空间,能够额外创建具备更大page size的用户临时表空间,系统会自动进行使用。

没法用alter语句更改一个字段的数据类型,对某些字段能够更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。
可使用: select 表达式 from sysibm.sysdummy; 替代的,如下语句是等价的:values 表达式;


表和视图的建立、更新、删除操做,都写日志,所以能够commit或rollback。

在update语句中,若是没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会从新执行默认值中定义的表达式。为了让其从新执行默认值定义的表达式,能够采用如下方式:
create table t1 (c1 varchar(32), lastupdatetime with default current timpstamp);
update t1 set c1 = 'new string', lastupdatetime = default;


对于DB2数据库能够在建立时指定codepage参数,建立后不可修改。当应用程序访问数据库时,DB2会比较二者的codepage是否一致,不一致则进行代码页的自动转换。为了减小转换所带来的开销,应尽可能保证应用程序所采用的代码页与数据库一致。

能够对DB2 CLP工具的codepage进行设置,使用:db2set DB2CODEPAGE= 1386,本例中设置的是中文GBK字符集在Windows平台对应的值。注意,这个数字值是由DB2本身定义的。有关各类字符集在相应平台所对应的代码页值可在IBM网站查找。

在DB2 CLP中,对远程数据库编目的操做:
DB2 CATALOG TCPIP NODE local_node_name REMOTE hostname|ip SERVER service_name 首先把远程主机映射为本地节点,节点名本身指定,本例采用TCPIP链接。service_name通常定义在远程主机的/etc/services文件中。
DB2 CATALOG DATABASE db_name AS local_alias AT local_node_name USER username USING password 而后把已知的远程主机的数据库映射到本地别名,注意本地别名在主机级别不能重复。节点名指定上面刚编目的节点。
DB2 CONNECT TO local_alias USER username USING password 用刚才编目中定义的别名链接远程主机数据库
DB2 GET CONFIGURATION SHOW DETAIL 获取数据库详细配置信息

对于DB2返回的错误号,能够用如下方法查阅说明(以sql 10008为例):
db2 ? sql10008


数据库的备份与恢复:

使用备份与恢复工具能够完成在不一样的服务器见完整的转移数据库的工做,命令行方式以下:

备份
DB2 BACKUP DATABASE db_name USER user_name USING password to backup_dir_name
DB2 BACKUP DATABASE dlhdb USER dlh USING admindlh TO d:/backups

恢复
DB2 RESTORE DATABASE source_db_name USER user_name USING password FROM backup_dir_name TAKEN AT backup_file_create_time TO driver_letter INTO new_db_name
DB2 RESTORE DATABASE dlhdb USER dlh USING admindlh FROM d:/backups TAKEN AT 20031209141056 TO d: INTO newdb

有关实例的操做:
设置默认实例环境变量
DB2 SET DB2INSTANCE=inst_name
启动当前实例
DB2START 
中止当前实例
DB2STOP [FORCE]
链接到某个实例
DB2 ATTACH TO ANSTANCE inst_name
获取实例的配置参数
DB2 GET DBM CFG SHOW DETAIL


导出数据库完整的定义到脚本文件,包括表,视图,函数,数据库参数等
db2look -d sample(数据库) -a -e -l -x -m -f -o(参数)samplesql.out(输出文件) 


load 一个表的数据时,有可能致使表空间处于backup pending(0x0020)状态。好比把整形数据load到double型的字段中。
处于backup pending状态的表空间不能被访问。
能够经过对此表空间运行一次backup操做,恢复到正常状态(0x0)。

对于自增字段,能够经过两种方式指定:
generated by default as identity
generated always as identity
区别是,第一种方式在插入数据时容许手工指定自增字段的值,只要不重复便可,而且数据库会自动设置下一个值;
第二种方式则不容许指定,只能由数据库自动分配并插入。


DB2 sql语句中转义符的使用:
select * from t1 where a like '%abc/%def' escape '/';

建立数据库时,出现SQL1043C错误,可能的问题:
指定容器所在的磁盘空间不足,
当容器为file类型时,后面的long-num参数不对,好比25600表明256Mb,但若是指定256则会致使以上错误。


平台 RH Linux 8
DB2 UDB v8.1 
在WAS 5中创建到db2的数据源,但链接失败,返回如下错误:
[Servlet Error]-[SQLConnect]: java.lang.UnsatisfiedLinkError: SQLConnect
缘由是没有为运行was服务的用户设置如下环境变量:
LD_LIBRARY_PATH
LIBPATH
DB2INSTANCE
...
以上环境变量定义在 $INSTHOME/sqllib/db2profile文件中,能够采用的解决方案:
sh stopServer.sh servername
. $INSTHOME/sqllib/db2profile
sh startServer.sh servername
也能够把db2profile放到was启动脚本中首先执行。

若是只设置了LD_LIBRARY_PATH,LIBPATH两个环境变量,DB2会返回如下错误:
CLI0600E Invalid connection handle or connection is closed.
SQLSTATE S1000


对应于Oracle的Job包功能,DB2经过一个GUI工具-任务中心(task center)实现。使用任务中心前须要进行必要的工具设置,须要建立一些数据库对象,能够建立在已有的一个数据库中,也能够单首创建一个数据库。经过如下命令实现:
create catalog tools schema_name create new database db_name
此命令为编目工具建立一个名为db_name 的数据库,并指定了一个模式名。
注意:没法用using 子句指定一个codeset,系统会默认使用ISO8859-1字符集。


Quest Center for DB2带有数据库性能诊断功能,动态监视db内存,磁盘io, 表空间,负载等等。

DB2客户端的类型:
DB2运行时客户端 DB2 Runtime Client
DB2管理客户端 DB2 Administrator Client(包含运行时客户端的全部内容)
DB2应用程序开发客户端 DB2 Application Development Client(包含管理客户端的全部内容)
DB2瘦客户端 DB2 Thin Client

DB2 Relational Connect 联邦数据库,用于链接异种数据库。
node

db2idrop -f instance_name 强制断开已有链接,中止实例并删除。
db2imigr instance_name 用于在UNIX下迁移实例。
db2iupdt instance_name 更新实例,用于实例得到一些新的产品选项或修订包的访问权。
db2 get instance 获取当前所处的实例。

当更新实例级别或数据库级别的参数后,有些能够当即生效,有些须要从新启动实例才可生效。immediate 显式指明更改当即生效,deferred 显式指明更改在重起实例后生效。


当须要配置许多台客户机与DB2服务器的链接时,能够用配置助手将服务器的概要文件导出,而后在每一个客户机使用配置助手导入概要文件。若客户端只安装了运行时客户端,则可使用
db2cfimp access_profile_name
导入概要文件。
疑问:是否应该由已配置好的一台客户机导出概要文件?

db2 list applications 列出全部的数据库链接
db2 force application (2) 终止指定的链接句柄,事务被中断并回滚。同时操做多个句柄能够用逗号分开,或者指定关键字 all。此命令只终止指定的链接,不会阻止新的应用链接到数据库。


建立数据库时能够指定排序方式:collate using identity

系统模式集是和每一个数据库一块儿建立的,而且它们被放置到 SYSCATSPACE 表空间中:
SYSIBM: 
基本系统目录 
建议不要进行直接访问 
SYSCAT: 
PUBLIC 被授予该模式的 SELECT 权限 
对只读视图编目 
这是获取目录信息的推荐方式 
SYSSTAT: 
可更新的目录视图 - 影响优化器 
SYSFUN: 
用户定义的函数 

若是表中的现有行不知足约束,则不能定义该约束。能够关闭约束检查以加快大量数据的添加,可是该表处于检查暂挂(CHECK PENDING)状态。


在建立表时,可使用选项来指定一个或多个表空间,表和索引将被放置到其中: 
CREATE TABLE TEST (
column 1 definition, column 2 definition, ...
) IN <tablespace name> INDEX IN <index space name>
这条命令为您提供了一个选项:指定建立表和索引的位置。若是没有指定单独的索引表空间,那么将在表所在的同一表空间中建立索引。建立表以后,就没有机会在不一样的表空间中建立索引了。建立索引要提早做规划! 
CREATE <UNIQUE> INDEX <index name> ON <table name>
(
column 1 <ASC | DESC> ,
column 2 <ASC | DESC> ...
)
UNIQUE 属性告诉 DB2,索引必须强制全部插入值的惟一性。
若是结果集是以升序和降序两种方式排序的,ALLOW REVERSE SCANS 会告诉 DB2 在索引中包括附加的指针,以容许在记录中有效地进行正向和反向连接。

DB2 可以向正在建立的索引中添加另外的列。CREATE INDEX 命令容许用户指定那些不属于实际索引但由于性能缘由而保存在索引记录中的列。 
CREATE UNIQUE INDEX ON EMPLOYEE (EMPNO) INCLUDE (LASTNAME,FIRSTNAME)
对于索引中包含的列而言,索引必须是 UNIQUE 的。当建立索引时,另外的列被添加到索引值中。索引不使用这些值进行排序或肯定惟一性,但能够在知足 SQL 查询时使用它们。例如,下列 SELECT 语句将不须要读取实际数据行:
SELECT LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE EMPNO < '000300'

要在表上建立群集索引,将 CLUSTER 关键字附加到 CREATE INDEX 命令的末尾,例如: 
CREATE INDEX DEPTS-IX ON EMPLOYEE(WORKDEPT) CLUSTER

使用下列通用规则来决定为表定义的索引的经典数量。索引数量取决于数据库的主要用途:
对于在线事务处理(OLTP)环境,建立一到两个索引。 
对于混合查询和 OLTP 环境,建立两到五个索引。 
对于只读查询环境,建立五个以上索引。


在Windows平台上的DB2的命令行模式下,或者在类Unix平台下,使用命令db2cc启动控制中心。

db2move提供了在数据库之间批量移动数据的能力,能够指定某个表,也能够指定整个数据库的表。
db2move dbname action

action 能够指定为:export, import或者load
使用 -l 参数指定lob对象存储的文件夹


执行增量备份要求设置数据库配置参数“trackmod”的值为“YES”
执行在线备份要求设置数据库配置参数“logretain”的值为“YES”,在线备份语法:
db2 backup db dbname online to path


当删除了das用户的home目录,未先drop掉das服务,则再执行dasdrop则不成功,提示:
db2admin 命令没法找到,缘由是db2admin命令保存在das的home目录中。
能够删除干净das用户的home目录后,重起服务器解决此问题。

dasupdt dasName 升级das
db2iupdt instName 升级实例
db2licd end 中止许可证守护进程

在Linux系统安装DB2 V8.1后,db2fmcd进程会自动启动,即便不启动实例和DAS,

在中文Linux环境下安装了DB2数据库服务,并使用GBK代码页(codepage)建立了一个数据库,完成后能够正常链接操做,若更改操做系统代码页为英语,则使用“db2 connect”时会报错,链接时没法转换代码页
sql

相关文章
相关标签/搜索