现在的位置: 首页 > 综合 > 正文

DB2 命令总汇

2012年08月27日 ⁄ 综合 ⁄ 共 30858字 ⁄ 字号 评论关闭

db2 -tvf my.sql

db2level 显示db2的版本号

显示SQL出错信息
db2 "? sql6031"

db2mtrk

管理DAS
产生:root运行-dascrt -u dasuser1
删除:root运行-dasdrop
启动:dasusr1运行-db2admin start
停止:dasusr1运行-db2admin stop

db2_kill
ipclean

db2start dbpartitionnum 9 restart

AIX启动控制中心:
db2cc

DB2用户管理:
  db2 use os to manage users.You can use following steps to add a db2 user:
  1,add a user on os.
  2,grant rights to user.
    GRANT  CREATETAB,CONNECT ON DATABASE  TO USER FUJIE;
    grant select, update, delete on table employee to user john with grant option

一,实例

产生
db2icrt -a AuthType(SERVER,CLIENT,SERVER_ENCRYPT) -p PORT_NAME
表空间PREFETCHSIZE的设置,EXTENTSIZE的关系,缓冲池的监控,页清除程序的多少。
   临时表空间页面大小与其他表空间页面大小的设置,临时表空间与缓冲池的设置。
example:db2icrt db2 -s ese -p d:\db2 -u Administrator

注意:在UNIX 上产生实例时需要产生一个和实例名称相同的用户名,和fencedid 用户。
  如:db2icrt -s ese -u db2fenc2 db2inst2 将在db2inst2用户中产生实例db2inst2.

缺省创建32位实例,创建64位实例:db2icrt -s ese -w 64 -u db2fenc2 db2inst2
  
删除
db2idrop instance-name
启动
db2start
停止
db2stop force
连接
db2 attach to testdb2
db2 detach
列出实例
db2ilist
设置当前实例
set db2instance=<instance-name>
得到当前实例
db2 get instance
设置实例自动重启动UNIX
db2iauto -on <instance-name>
db2iauto -off <instance-name>

获取实例的配置参数
db2 get dbm cfg
修改配置参数
例如:db2 update dbm cfg using authentication server_encrypt
     db2stop and db2start
    
二,声明注册表和环境变量
db2set   注意:设置完成后需要退出用户,再注册进入才能生效。
列出所有受支持的变量
db2set -lr
列出当前实例所有已定义的变量
db2set
要列出概要文件注册表中所有定义的注册表变量
db2set -all
列出单个变量
db2set registry_variable_name
更改变量
db2set registry_variable_name=new_value
变量复位为缺省值
db2set -r registry_variable_name

db2set DB2CODEPAGE=819

db2set DB2CODEPAGE=1386

db2 -tvf my_sql.sql

三,创建节点配置文件
db2nodes.cfg

UNIX 格式:dbpartitionnum(0-999) hostname [logical-port [netname]]
WIN  格式:nodenumber hostname computername logical_port netname

四,管理服务器
<配置助手,控制中心,开发中心> 通过DAS来进行工作
创建DAS
db2admin create (windows)
dascrt -u <DASUser>  需要root权限
启动和停止
db2admin start
db2admin stop
列出
db2admin
配置DAS
db2 get admin cfg
db2 update admin cfg using
db2 reset admin cfg
最好stop再start
五,配置多个逻辑节点
可以用两个方法来配置多个逻辑节点:
* 在db2nodes.cfg文件中配置逻辑节点(数据库分区).然后,可使用db2start启动所有逻辑和远程节点.
    对于windows nt,若系统中没有数据库,则必须使用db2ncrt来添加节点,否则,若一个或多个数据库,
    则应使用db2start addnode 命令.在nt 中,不能手工编辑db2nodes.cfg文件.
   db2ncrt /n:1 /u:administrator,yhnu0987 /m:fujie /p:1 /h:fujie
   db2start addnode nodenum 1 hostname guosd port 1 computer GUOSD user db2admin password db2admin

* 在另一个处理器上重新启动一个逻辑节点,其他逻辑数据库分区(节点)已在该处理器上运行.这允许覆盖
  在db2nodes.cfg中为逻辑数据库分区指定的主机名和端口号.
 

在WIN中添加逻辑节点
  db2ncrt /n:1 /u:Administrator,<pwd> /i:db2 /m:FUJIE /p:1
 
#删除逻辑节点
db2ndrop
有数据库的时候使用db2stop drop nodenum
#改变逻辑节点
db2nchg

DB2常用命令汇总之二

六,创建数据库
创建数据库时,完成如下任务:
* 设置数据库所需的所有系统目录表
* 分配数据库恢复日志
* 创建数据库配置文件,设置缺省值
* 将数据库实用程序与数据库绑定

初始数据库分区组的定义
当最初创建数据库时,会为所有在db2nodes.cfg文件中指定的分区创建数据库分区.可以用
add dbpartitionnum 和 drop dbpartitionnum verify 命令来添加或除去其他分区.
定义了三个数据库分区组:
         * 用于容纳syscatspace表空间的ibmcatgroup, 保存系统目录表
         * 用于容纳tempspaces1表空间的ibmtempgroup,保存系统临时表
* 用于容纳userspace1表空间的ibmdefaultgroup,缺省保存用户表和索引

(创建新的数据库后最好重新启动db2clp)

EXAMPLE:
CREATE DATABASE PERSONL
   CATALOG TABLESPACE
     MANAGED BY SYSTEM USING (path 'D:\PCATALOG','E:\PCATALOG')
     EXTENTSIZE 16 PREFETCHSIZE 32
   USER TABLESPACE
     MANAGED BY DATABASE USING (FILE 'D:\DB2DATA\PERSION1' 5000,
                                FILE 'D:\DB2DATA\PERSION2' 5000)
     EXTENSIZE 32 PREFETCHSIZE 64
   TEMPORARY TABLESPACE
     MANAGED BY SYSTEM USING (path 'F:\DB2TEMP\PERSONL')
   WITH "PERSONNEL DB FOR DSCHIEFER CO"

create database sccrm using codeset GBK territory CN

#删除数据库
   DROP DATABASE <DB-NAME>
  

# 数据库目录的定义
  *本地数据库目录(节点的目录中的文件SQLDBDIR)
     本地数据库目录文件存在于定义了数据库的每条路径(或WIN中的"驱动器")
     对于可以从该位置存取得每个数据库此目录都包含一个条目.包含信息:
      数据库名称,数据库别名,数据库注释,数据库的根目录的名称,其他系统信息.
  *系统数据库目录(实例中的目录中的文件SQLDBDIR)
     对于数据库管理器的每个实例,都存在一个系统数据库目录文件,该文件对于针对
     此实例编目的每个数据库都包含一个条目.使用CREATE DATABASE时隐式的编目数据库
     每个数据库包含一条信息: 数据库名,数据库别名,数据库注释,本地数据库目录的位置,
      指示该数据库是间接的指示符,表示它与系统数据库目录文件驻留在相同的机器上.
查看本地或系统数据库目录文件
   LIST DATABASE DIRECTORY ON <location>
   LIST DATABASE DIRECTORY
  
  *节点目录
     数据库管理器在编目第一个数据库分区时会创建节点目录.要编目数据库分区,
     使用CATALOG NODE命令.要显示本地节点目录的内容,使用LIST NODE DIRECTORY
     .在每个数据库客户机上都创建并维护节点目录.对于具有客户机可以存取得一个
     或多个数据库的每个远程工作站,该目录都包含一个条目.db2客户机使用该节点目录中
     的通信端点信息.
     catalog tcpip node my_node_name remote 10.10.10.10 server 54321
uncatalog node my_node_name
     catalog database DB as my_data_alias at node my_node_name
# "轻量级目录访问协议" (LDAP)目录服务
    目录服务是一个关于分布式环境中的多个系统和服务的资源信息的资源库;它
    提供对这些资源的客户机和服务器存取.客户机和服务器将使用目录服务来找出
    如何存取其他资源.
    LDAP是业界标准的存取目录服务的方法.每个数据库服务器实例都会将它的存在情况发布给LDAP,
    并在创建数据库时向LDAP目录提供数据库信息.当客户机与数据库连接后,可从LDAP目录检索
    服务器的目录信息.不再要求每个客户机将目录信息以本地方式存储在每台机器上.

# 创建数据库分区组
    可以使用CREATE DATABASE PARTITION GROUP语句创建数据库分区组.此语句指定表空间
    容器和表数据将驻留其上的一组数据库分区.
      *为数据库分区组创建分区映象.
      *生成分区映象标识
      *将记录插入下列目录表:
       SYSCAT.DBPARTITONGROUPS,SYSCAT.PARTITIONMAPS,SYSCAT.DBPARTITIONGROUPDEF

   CREATE DATABASE PARTITION GROUP <name> ON DBPARTITIONNUMS (<value>,<value>)
 
#创建表空间
表空间建立数据库系统使用的物理存储设备与用来存储数据的逻辑容器或表的关系

CREATE TABLESPACE <name>
    MANAGED BY SYSTEM
    USING ('<path>')
   
CREATE TABLESPACE <name>
    MANAGED BY DATABASE
    USING (FILE'<path>' <size>)
           DEVICE
*指定分区组
CREATE TABLESPACE PLANS IN ODDNODEGROUP
    MANAGED BY DATABASE
    USING (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd01' 40000) on node 1
        (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd03' 40000) on node 3
        (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd05' 40000) on node 5 

CREATE  REGULAR  TABLESPACE CUSTTBS IN DATABASE PARTITION GROUP CUSTOMER
PAGESIZE 4 K  MANAGED BY DATABASE  USING
( FILE 'D:\testdbtbs\custtbs0_1' 5120 ) ON DBPARTITIONNUM (0)
USING
( FILE 'D:\testdbtbs\custtbs1_1' 5120 ) ON DBPARTITIONNUM (1)
EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16
 
   在多分区数据库中创建单分区组.
   CREATE DATABASE PARTITION GROUP single_tbs_grp ON DBPARTITIONNUM(0)
   在单分区组中创建单分区表空间.
   CREATE TABLESPACE single_part_tbs IN DATABASE PARTITION GROUP single_tbs_grp
   MANAGED BY DATABASE USING (FILE 'd:\testdbtbs\single_part_tbs_1' 5120)
  
  在UNIX中使用字符设备.
 
* 创建特定类型的表空间
  创建系统临时表空间
  CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp
   MANAGED BY SYSTEM
   USING ('d:\tmp_tbsp','e:\tmp_tbsp')
  
   在分区数据库中创建系统临时表空间 只能在IBMTEMPGROUP中产生
   CREATE  SYSTEM TEMPORARY  TABLESPACE TEMPSYS_TBSP1
    IN DATABASE PARTITION GROUP IBMTEMPGROUP
    PAGESIZE 4 K  MANAGED BY SYSTEM 
    USING ('D:\testdbtbs\sys_temp_0' ) ON DBPARTITIONNUM (0)
    USING ('d:\testdbtbs\sys_temp_1' ) ON DBPARTITIONNUM (1)
    EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16
  创建用户临时表空间
   CREATE USER TEMPORARY TABLESPACE usr_tbsp
    MANAGED BY DATABASE
    USING (FILE 'd:\db2data\user_tZbsp' 5000,
           FILE 'e:\db2data\user_tbsp' 5000)
   
    在分区数据库中创建用户临时表空间 可在除IBMTEMPGROUP中的其他分区组中产生.
   CREATE  USER TEMPORARY  TABLESPACE USER_TEMP_TBSP
    IN DATABASE PARTITION GROUP USER_TEMP_TBSGRP
    PAGESIZE 4 K  MANAGED BY SYSTEM 
    USING ('D:\testdbtbs\user_temp_0' ) ON DBPARTITIONNUM (0)
    USING ('d:\testdbtbs\user_temp_1' ) ON DBPARTITIONNUM (1)       
  
  *指定物理设备
  在WINDOWS上,指定物理硬盘驱动器,使用\\.\PhysicalDriveN (N-0,1,2..)
              指定逻辑驱动器使用\\.\N: (N是系统中的逻辑盘符)
  在UNIX中指定字符设备.
 
   #SMS  当对象增大时,文件每次扩展一页。若需要提高插入性能,可以考虑启用多页分配,如MDC表。
运行db2empfa. 对于多分区数据库必须对每个分区运行此使用程序,一旦启用就不能禁止。
   #DMS 
单分区表空间大小,4kb - 64gb;8kb-128gb;16kb-256gb;32kb-512gb
            在缺省情况下,每个容器都保留一个数据块作为开销,表空间的最小大小是5个数据块。
三个保留给开销使用。两个用于用户表数据。

  #在多个节点上产生表空间
CREATE TABLESPACE TS1 MANAGED BY DATABASE USING
(device '/dev/rcont $N' 20000)

CREATE TABLESPACE TS2 MANAGED BY DATABASE USING
(file '/DB2/containers/TS2/container $N+100' 10000)

CREATE TABLESPACE TS3 MANAGED BY SYSTEM USING
('/TS3/cont $N%2', '/TS3/cont $N%2+2')

  #增加表空间的空间
    ALTER TABLESPACE RESOURCE
       ADD (DEVICE '/dev/rhd9' 10000,
            DEVICE '/dev/rhd10' 10000)
   #改变表空间状态
    DB2 ALTER TABLESPACE <name> SWITCH ONLINE
   #删除表空间
    DROP TABLESPACE <name>
    可以先增加一个系统临时表空间,然后删除老的.
   #获取表空间使用信息
    get snapshot for tablespaces on sample
   #获取表空间的CONTAINER
    LIST TABLESPACE CONTAINERS FOR 0(TABLESPACE_ID) SHOW DETAIL
  
# 创建和填充表

  列出表:
  list tables - 列出当前用户的表
  list tables for all - 列出数据库中所定义的所有表
  list tables for schema schemaname - 列出具有指定模式的表
  describe table tablename - 显示指定表的结构

  产生表和主键
  CREATE TABLE DEPARTMENT
(DEPTNO CHAR(3) NOT NULL,
DEPTNAME VARCHAR(29) NOT NULL,
MGRNO CHAR(6),
ADMRDEPT CHAR(3) NOT NULL,
LOCATION CHAR(16),
PRIMARY KEY (DEPTNO))
  IN RESOURCE
  产生外键
  CREATE TABLE EMPLOYEE
(EMPNO CHAR(3) NOT NULL PRIMARY KEY,
FIRSTNME VARCHAR(12) NOT NULL,
LASTNAME VARCHAR(15) NOT NULL,
WORKDEPT CHAR(3),
PHONENO CHAR(4),
PHOTO BLOB(10m) NOT NULL,
FOREIGN KEY DEPT (WORKDEPT)
REFERENCES DEPARTMENT ON DELETE NO ACTION)
  IN RESOURCE
        ON DELETE NO ACTION 表示如果该部门有任何雇员则该部门不能被删除.
  定义表检查约束
      在创建或改变表时,通过将检查约束定义与表关联来对该表创建表检查约束.
      当INSERT或UPDATE语句修改该表中的数据时,就自动激活此约束.表检查约束对
      DELETE或SELECT没有影响.检查约束不能与类型表相关.
       约束名不能与在同一个CREATE TABLE语句内指定的任何其他约束相同.若不
       指定约束名,系统会自动生成18个字符的唯一标识符.
      表检查约束用于实现键唯一性或引用完整性约束所未涵盖的数据完整性规则.
      如:
CREATE TABLE EMP_ACT
(EMPNO CHAR(6) NOT NULL,
PROJNO CHAR(6) NOT NULL,
ACTNO SMALLINT NOT NULL,
EMPTIME DECIMAL(5,2),
EMSTDATE DATE,
EMENDATE DATE,
CONSTRAINT ACTDATES CHECK(EMSTDATE <= EMENDATE) )
IN RESOURCE
     约束EMSTDATE必须小于EMENDATE

   定义信息性约束
       信息性约束是一个规则,可由SQL编译器使用,但数据库管理器不会强制使用它.
       SQL编译器包括一个重写查询阶段,它将SQL语句变换为可能是优化的格式并改进
       所需数据的存取路径.目的是改进查询性能.
   对新表定义生成列
       生成列在基本表中定义,在这些列中,存储的值是使用表达式计算得出的,而不是
通过插入或更新操作指定.可以改善查询性能,特别是计算很复杂或在查询时要进行
多次表达式求值.
CREATE TABLE t1 (c1 INT,
c2 DOUBLE,
c3 DOUBLE GENERATED ALWAYS AS (c1 + c2)
c4 GENERATED ALWAYS AS
(CASE WHEN c1 > c2 THEN 1 ELSE NULL END))
    创建用户定义临时表
临时表不出现在系统目录中,不能共享此表
DECLARE GLOBAL TEMPORARY TABLE gb1_temp
  LIKE tmpltab1
  ON COMMIT DELETE ROES
  NOT LOGGED
  IN usr_tbsp
 
定义此用户临时表所使用的列的名称和描述与empltabl的列的名称和描述完全相同.
隐式定义只包括列名,数据类型,可空性特征和列缺省值属性.未定义其他列属性,包括
唯一约束,外键约束,触发器和索引.
    对新表定义身份列
        为插入表的每一行自动生成保证唯一数字值的方法.
        只在单分区数据库中支持.
CREATE TABLE test_table ( col1 int,
  col2 double,
  col3 int not null generated always as identity
       (start with 100,increment by 5))

    创建序列
        序列是一个数据库对象,它允许自动生成值.序列特别适合于生成唯一键值.
        与身份列属性不同,未使序列与特定表列相关,也未将它绑定至唯一列,只是仅可通过该表
        列存取.只在单分区数据库中才受支持.
        在多分区环境中的单分区数据库也不行.
        CREATE SEQUENCE order_seq
               START WITH 1
               INCREMENT BY 1
               NOMAXVALUE
               NOCYCLE
               CACHE 24
       使用序列
         insert into order (orderno,custno)
             values (nextval for order_seq,123456);
         insert into line_item (orderno,partno,quantity)
             values (prevval for order_seq,987654,1)
         使用NEXTVAL,PREVVAL可以在两个不同的表中使用相同的序列号.
   对表定义维
  
引用完整性约束 第 13 页(共17 页)

引用完整性约束是在创建表时定义的,或者是在之后使用 alter table 语句定义的。

建立引用完整性的子句有:

primary key 子句
unique constraint 子句
foreign key 子句
references 子句
例如:

create table artists (artno INT, ...  primary key (artno) foreign key dept (workdept)
          references department on delete no action)

让我们了解一下各种引用完整性规则:

插入规则:

有一个隐式规则,在没有找到父项时取消插入。
删除规则:

Restrict:如果有从属行就不能删除父行。
Cascade:删除父表中的行会自动删除其从属表中的任何相关行。
No Action(缺省值):在应用了所有其它引用约束之后强制每个子行的父行都存在。
Set Null:外键字段设置成 null;其它列保持不变。
更新规则:

Restrict:如果从属表中的行与键的初始值相匹配,则不更新父键。
No Action(缺省值):如果从属表中没有任何行与父键相匹配,则不更新父键。

   增加表中的列
   ALTER TABLE EMPLOYEE
     ADD <COLUMN_NAME> <DATA_TYPE> <NULL_ATTRIBUTE>
    
   增加唯一性约束
   ALTER TABLE EMPLOYEE
        ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE)
   删除唯一性约束
   ALTER TABLE EMPLOYEE
     DROP UNIQUE NEWID
   删除主键
   ALTER TABLE <NAME>
     DROP PRIMARY KEY
   增加主键
  ALTER TABLE <NAME> ADD PRIMARY KEY (COL1,COL2,..)
   删除外键
   ALTER TABLE <name>
DROP FOREIGN KEY <foreign_key_name>
   删除表检查约束
   ALTER TABLE <table_name>
DROP CHECK <check_constraint_name>   
   添加表的外键
     ALTER TABLE <NAME>
        ADD CONSTRAINT <constraint_NAME>
        FOREIGN KEY <COLUMN_NAME>
        references table_name <col_name>
        ON DELETE <ACTION_TYPE>
        ON UPDATE <ACTION_TYPE>
 
   在多个表空间中创建表
       表数据,表索引及与表相关联的任何长型列数据可以存储在同一表空间中,也可以
       放在不同的表空间中.只能使用DMS.
       CREATE TABLE <name>
        (<column_name> <data_type> <null_attribute>)
         IN <table_space_name>
         INDEX IN <index_space_name>
         LONG IN <long_space_name>
        
    在分区数据库中创建表
        必须小心的选择适当的分区建,以后不能跟改.再者,必须将任何唯一索引定义为分区键的一个超集.
        表的大小是(分区数*分区大小(4K是64GB).
        CREATE TABLE MIXREC (MIX_CNTL INTEGER NOT NULL,
             MIX_DESC CHAR(20) NOT NULL,
             MIX_INT INTEGER NOT NULL)
             IN MIXTS12
             PARTITIONING KEY (MIX_INT) USING HASHING
    产生触发器
      用途:
      验证输入的数据
      为新插入的行生成值
      为交叉引用而从其他表中进行读取
      为审计跟踪而向其他表写入
     
      CREATE TRIGGER <name>
        <action> ON <table_name>
        <operation>
        <triggered_action>
       
    创建用户定义函数(UDF)或方法
        UDF扩展并添加了SQL的内置函数提供的支持,且可在可使用内置函数的任何
        地方使用.可使用两种方式创建UDF:
           外部函数,用一种编程语言编写
           有源函数,从另一个现有函数继承产生.
          
          
           三种UDF:标量,返回一个单值答案.
                   列,从一组相似(一列)的值中返回单值答案,如AVG()只能定义有源函数.
                   表,将一个表返回至引用它的SQL,只能在select语句的from子句中引用表函数.
         UDF 记录在SYSCAT.FUNCTIONS AND SYSCAT.FUNCPARMS目录视图中.
    用户定义类UDT
        UDT是由用户在数据库中创建的命名的数据类型.UDT可以是单值类型,它与内部数据类型或
        结构化类型共享一个公共的表示法,结构化类型具有一个命名属性序列,其中每个属性都有一个类型.
        结构化类型可以是另一个定义类型层次结构的结构化类型的子类型.
   
    创建视图
        CREATE VIEW <name> (<column>,<column>,<column>)
           SELECT <column_names> FROM <table_name>
           WITH CHECK OPTION
       WITH CHECK OPTION 子句指示必须根据该视图定义检查该视图的任何更新的行或插入的行,
       如它不符合,则拒绝它,增加了数据完整性.
       CREATE VIEW EMP_VIEW
         SELECT LASTNAME AS DA00NAME,
                EMPNO AS DA00NUM,
                PHONENO
         FROM EMPLOYEE
       WHERE WORKDEPT = 'A00'
       WITH CHECK OPTION
      
    创建具体查询表
        具体查询表是以查询结果为基础所定义的一种表.因此,具体查询表通常包含预先计算的结果,
        这些结果是根据表定义中引用的一个或多个表中的现有数据计算而得.若SQL编译器确定查询
        在针对具体查询表运行时比对一个或多个基本表运行时效率更高,将对具体查询表执行该查询.
       
   创建别名
       别名是引用表,别名或视图的间接方法,这样SQL语句可与该表或视图的限定名无关.
      
       CREATE ALIAS WORKERS FOR EMPLOYEE
      
   索引,索引扩展或索引规范
       索引是行位置的列表,按一个或多个指定列的内容来排序.
       索引扩展是一个索引对象,它配合带有结构化类型或单值类型列的索引使用.
       索引规范是一个元数据结构.它告诉优化器别名所引用的数据源对象(表或视图)
       是否存在索引.只是索引的描述.
         索引顾问,,db2advis
       索引得最大列数是16,最大长度是1024字节.
       CREATE INDEX <name> ON <talbe_name> (<column_name>)
   重命名表或索引
       要重命名的表或索引不能是目录表或索引,总结表或索引,类型表,已声明
       全局临时表以及昵称的名称.
        并且不能在下列任何一个对象中引用现有表或索引:
        视图,触发器,引用约束,总结表,现有引用列的作用域
        表中不能有检查约束,不能有除身份列以外的其他生成列.
       
        RENAME TABLE <SCHEMA_NAME>.<TABLE_NAME> TO <NEW_NAME>
        RENAME INDEX <schema_name>.<index_name> TO <new_name>
       

索引可以:

是升序或是降序(如果没有指定,缺省值是升序)
是唯一的,也可以是不唯一的(如果没有指定,缺省值是不唯一的)
是复合的
用来执行群集
是双向的(这由 allow 或 disallow reverse scans 控制的)
包括其它列(这只适用于唯一索引)。

   删除表
       DROP TABLE <TABLE_NAME>
   删除索引
       DROP INDEX <index_name>
    
   通过命令行处理器调用"性能配置向导"
       使用AUTOCONFIGURE 
      
终止所有应用程序与数据库的连接
db2 force applicaitons all

#给用户授权
GRANT privilege ON object-type object-name
  TO [{USER | GROUP | PUBLIC}] authorization-name
  [WITH GRANT OPTION]
 
  GRANT INSERT,DELETE ON TABLE staff TO USER rosita WITH GRANT OPTION
 
  #撤消用户权利
  REVOKE privilege ON object-type object-name
  FROM [{USER | GROUP | PUBLIC}] authorization-name

  REVOKE ALL PRIVILEGES ON TABLE staff FROM joanna

DB2常用命令汇总之三#声明临时表
DECLARE GLOBAL TEMPORARY TABLE session.temp1
  LIKE employee
  ON COMMIT PRESERVE ROWS
  NOT LOGGED
IN mytempspace

#ALTER
  可以修改:缓冲池,表,表空间,视图

#DROP
  可以删除:缓冲池,事件监控程序,函数,索引,模式,存储过程,表,表空间,触发器,视图.
#产生数据备份
CREATE TABLE pers LIKE staff

INSERT INTO pers
  SELECT id, name, dept, job, years, salary, comm
    FROM staff
    WHERE dept = 38

#唯一性约束
CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                    BOOKNAME VARCHAR(100),
                    ISBN CHAR(10) NOT NULL CONSTRAINT BOOKSISBN UNIQUE)

ALTER TABLE BOOKS ADD  CONSTRAINT UNIQUE (BOOKID)

#参照完整性约束
CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,
                      LNAME VARCHAR(100),
                      FNAME VARCHAR(100))
CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                    BOOKNAME VARCHAR(100),
                    ISBN CHAR(10),
                    AUTHORID INTEGER REFERENCES AUTHORS)

#表检查约束
ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) CHECK (BOOKTYPE IN ('F','N') )

#创建索引
CREATE INDEX I2BOOKNAME ON BOOKS (AUTHOID DESC, BOOKNAME ASC)

#设置概要文件注册表
  设置后实例要重新启动
  列出所有的变量: db2set -lr
  设置变量:db2set variable_name=value
  设置为缺省值:db2set variable_name=
  显示设置的变量:db2set -all
# 设置数据库管理器和数据库的参数
  获取当前参数:
    db2 get database manager configuration
db2 get database configuration for database_name
db2 get database manager configuration show detail
  设置参数:
   db2 update database manager configuration using parameter new_value
db2 update database configuration for database_name using parameter new_value
#准备数据库服务端口
  db2set DB2COMM=TCPIP,NETBIOS
  在services文件中包含服务和端口号,
   如:db2icdb2    50000/tcp
  db2 update database manager configuration using svcename db2icdb2
  重新启动数据库.
 
#查看连接的应用程序
  db2 list applications [for database db-name] [show detail]
#断开应用程序
  db2 force application (6,5)
  db2 force application all
#设置客户认证方式
  db2 update database manager configuration authentication auth_type
#创建缓冲池
  create bufferpool BP2 size 25000 pagesize 8 k

CONNECT TO SCCRM;
ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE NODE 1 SIZE 50000;
ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE NODE 0 SIZE 50000;
CONNECT RESET;

#将表空间的状态复位成正常(NORMAL)
  quiesce tablespaces for table <tablename> reset
 
#有用的目录表
  SYSCAT.COLUMNS:所包含的每一行对应于表或视图中定义的每个列
  SYSCAT.INDEXCOLUSE:列出索引中包含的所有列
  SYSCAT.INDEXES:包含的每一行对应于表或视图中定义的每个索引(包括适用的继承索引)。
  SYSCAT.TABLES:所创建每个表、视图、别名(nickname)或别名(alias)都对应其中一行。所有目录表和视图都在 SYSCAT.TABLES 目录视图中拥有一项。
  SYSCAT.VIEWS:所创建的每个视图都对应其中一行或多行。
 

###监控DB2活动
  ##捕获快照
    数据库,表空间,表,缓冲池,锁,数据库管理器,应用程序
  #拍摄快照
   API,命令行
  UPDATE MONITOR SWITCHES
  #打开和关闭快照
   1,在实例级别上设置监视器开关(影响所有用户和数据库)
     DFT_MON_STMT:语句监视器(用于动态 SQL)
DFT_MON_TABLE:表监视器
DFT_MON_LOCK:锁监视器
DFT_MON_BUFPOOL:缓冲池监视器
DFT_MON_SORT:排序监视器
DFT_MON_UOW:工作单元信息
DFT_MON_TIMESTAMP:跟踪时间戳记信息
     db2 get dbm cfg|grep DFT_MON
     db2 update dbm cfg using monitorSwitch [ON|OFF]
db2 update dbm cfg using DFT_MON_SORT ON

   2,在应用程序级别上设置监视器开关(只适合于特定的应用程序)
   在CLP中打开只适合这个CLP
     Bufferpool
Lock
Sort
Statement
Table
Timestamp
UOW

db2 get monitor switches
    db2 update monitor switches using switchName [ON|OFF]
    3,复位开关
  db2 reset monitor [ALL|for database databaseName] [at dbpartitionnum partitionNum]
将监视器开关的值复位成空或0.
    #数据库快照
     包含如下信息:
     连接
DB2 代理程序

排序
缓冲池活动总数
SQL 活动
SQL 语句数量
日志使用情况
高速缓存使用情况
散列连接
    下面是获取这种快照的命令
db2 get snapshot for database on databaseName

    #数据库管理器快照
    db2 get snapshot for database manager
    #表快照
    db2 get snapshot for tables on drew_db
    #表空间和缓冲池快照
    db2 get snapshot for tablespaces on drew_db
    db2 get snapshot for bufferpools on drew_db

计算缓冲池命中率:
    Ratio = ((1-(physical index and data reads))/(logical index and data reads))*100%

    #锁快照
    db2 get snapshot for locks on drew_db
   
    #动态SQL快照
    #查找执行速度较慢的SQL
     SELECT stmt_text,total_exec_time,num_executions
     FROM TABLE (SNAPSHOT_DYN_SQL('DREW_DB',-1)) as dynSnapTab
     ORDER BY total_exec_time desc
     FETCH FIRST 1 ROW ONLY

    第二个示例查找平均执行时间最长的五条 SQL 语句:

SELECT stmt_text,
CASE WHEN num_executions = 0
THEN 0
ELSE (total_exec_time / num_executions)
END avgExecTime,
num_executions
FROM TABLE( SNAPSHOT_DYN_SQL('DREW_DB', -1)) as dynSnapTab
ORDER BY avgExecTime desc
FETCH FIRST 5 ROWS ONLY

### 事件监控器
     人们用快照来检查某个精确时刻的DB2,并聚集性能信息。事件监控器与此不同,人们用他在固定的时间
    周期内监控DB2性能。事件监视器检查数据库中的转换事件,并将每个事件都当成一个对象。这允许对 DB2 的行为进行非常详细的分析。
        事件监视器捕获的信息类似于快照捕获的信息。同时可以运行多个监视器,并且每个监视器也可以捕获多种事件类型的信息。这允许不同的管理员相互独立地监控不同的活动。

事件监视器可以捕获有关下列内容的信息:

数据库

死锁
表空间
缓冲池
连接
语句
事务
可将事件监视器的信息写到:

SQL 表
文件
管道

   ##创建事件监视器
     CREATE EVENT MONITOR
   ##打开和关闭监视器
     db2 set event monitor eventMonitorName state [0|1]
eventMonitorName 是已创建的事件监视器的名称。0 将关闭监视器,而 1 将打开监视器。
      #获取状态
      SELECT EVENT_MON_STATE('drewTest') FROM SYSIBM.SYSDUMMY1

SYSIBM.SYSEVENTMONITORS 表及该表的视图 SYSCAT.EVENTMONITORS 包含有关已创建的事件监视器的信息。可以对这些表运行 SQL 查询,以确定监视器的状态:
SELECT evmonname, target_type, target,
FROM syscat.eventmonitors
where evmonname LIKE 'drew%'

autostart 选项

用于创建事件监视器的命令中的 autostart 选项表明,每当数据库启动时,自动启动事件监视器。

#清空事件监视器
      注意:事件监控器名称使用大写字母,需要创建目录。
     
     
还可将事件监视器数据清空到磁盘中。如果您希望记录这类信息,如通常仅当终止所有连接时才写的数据库事件,那么这非常有用。下面是一个示例命令:

db2 flush event monitor eventMonitorName
#使用事件监视器
       事件监视器应当用于监控非常具体的一些事件或短时间内的工作负载。它
们旨在为您提供非常具体的信息,以允许您诊断数据库或应用程序的问题或行为。
与快照不同,事件监视器对 DB2 的性能影响极大。这是由于为每个事件对象写的
信息的数量造成的。语句监视器对性能的影响极大,因为数据库引擎必须为每个
查询执行所有额外的工作:不只是能够执行查询,DB2 引擎还必须写出这条查询
的所有特征和运行时信息。该信息必须写入文本文件,这样会进一步降低性能。

#死锁监控
        CREATE EVENT MONITOR DEADLOCK_DB
FOR DEADLOCKS
WRITE TO FILE 'deadlock_db'
MAXFILES 1
MAXFILESIZE NONE
AUTOSTART
              注意:事件监控器名称使用大写字母,需要创建目录。

#SQL监控
        SQL 监视器十分有用,因为它可以俘获动态和静态 SQL 语句。如果应用
程序利用了无法用 SQL 快照捕获的预编译 SQL 语句,那么该监视器就
很重要。

对于每条被执行的 SQL 语句记录一个事件。每个语句的属性(如读取、
选择和删除等等操作的行数)都被记录下来,但是不象在快照中那样以
汇总的方式进行表示。另外还记录执行的时间范围以及启动和停止次数。这允许您对一些事务以及某个应用程序的 SQL 执行对其它应用程序的 SQL 执行有何影响进行详细分析。

还可以使用 SQL 监视器来发现拙劣的执行代码;如果将输出放入表中,
那么通过对个别代码的执行次数进行搜索,可以做到这一点。由于运行
SQL 监视器的信息量以及性能开销,所以只应在短期测试或问题确定中
使用该技术,而不应在生产环境中使用它。

CREATE EVENT MONITOR BAR
FOR STATEMENTS
WRITE TO TABLE
STMT(TABLE drewkb.stmtTab)
includes(rows_read,rows_written_stmt_text)

#捕获事件监视器数据
        db2eva [db databaseName] [evm eventMonitorName]

       #利用EXPLAIN分析SQL
        SQL 的 Explain 通过图形化或基于文本的方式详细说明了 SQL 语句的每个部分是如何执行以及何时执行的。这包括以下一些基本信息:

正被访问的表
正被使用的索引
何时连接数据
何时排序数据
Explain 还捕获更复杂的信息,在细究 SQL 正在发生什么时,该信息非常有用:

表和索引基数
正连接的表和索引的顺序
结果集的基数
在查询的每部分正在选择哪些字段
排序方法
SQL 每部分的时间范围

       要理解 Explain 信息,您需要掌握的最重要概念是 timeron。timeron 是 DB2 优化器使
用的计量单位,用来计量完成查询的时间和资源数量。timeron 综合了时间、CPU 利用率、
I/O 和其它因素。由于这些参数值是变化的,因此执行某个查询所需的 timeron 数量是动态
的,每次执行该查询所需的 timeron 都不同。

#使用控制中心的EXPLAIN SQL
         观察SQL的存取方案,分析优化参数,考虑优化的级别。
        #使用字符工具
         db2 set current explain mode [no|yes|explain]
db2exfmt
可以从命令行调用 db2expln 工具,以获得查询的存取方案。但是,该工具不返回优化器信息。
        db2expln -database drew_db -statement "select * from syscat.tables" -terminal

#SQL故障诊断
        索引使用,是否使用索引,使用索引的顺序
        表基数和"SELECT *" 的使用
        优化级别太低。
        设置优化级别:db2 set current query optimization [0|1|2|3|5|7|9]
   ##使用运行状况中心和内存可视化工具
       # 选定实例使用view memory usage,可以把输出保存到文件。
   除了提供了内存可视化之外,该工具还允许您对某些参数值设置警报。警报的输出将被写到名为
threshold 的文件,该文件与 db2diag.log 位于同一目录下。该目录位于实例主目录下。根据
您创建实例时所做选择的不同,该位置也会不同。
# DB2运行状况中心
         是否有充足的资源(如可用内存、表空间容器或日志存储器)来完成任务
资源使用是否有效
任务是否在可接受的时间周期内完成,或者任务的完成是否不会大幅度降低性能
资源或数据库对象是否不会永远处于不可用状态

  ##DB2查询巡视器和控制器
       IBM 为 DB2 提供了两种主要工具,它们允许您监控和控制数据库上 SQL 的执行。DB2 控制器(Governor)用于控制
用户和应用程序执行其 SQL 的优先级。DB2 查询巡视器(Query Patroller)为决策支持系统提供了查询和资源管理。
该工具接受通过您系统的所有查询,并对其进行分析、优先排序和调度。
      
DB2 查询巡视器为决策支持系统提供了查询和资源管理。该工具可以接受流经您系统的所有查询,并对其进行分析、
优先排序和调度。一旦完成查询,用户也将接到通知。在大型环境(其中完成某些查询可能要花几个小时,或者不
同部门可能具有不同的系统优先级或用途)中,该功能极其有用。

通过将工作重定向到合适的数据库分区,查询巡视器还将执行负载均衡,以确保某个数据库分区的使用不会过于繁重
。该工具只能与 SMP 或 MMP 环境中 DB2 ESE 的多分区选项一起使用。

在经过最新修订以后,IBM 已经对 DB2 查询巡视器彻底进行了重新架构,从而将查询控制功能集成进了类似 DB2 控制
中心的 DB2 查询巡视器中心,并提供了一个易于使用的用户界面。查询巡视器是完全基于服务器的,不需要客户机软件。

#性能  监控命令
get monitor switches  返回会话监控开关的状态
update monitor switches using <monitor> <on|off> 为<monitor>设置会话监控开关的状态
reset monitor all 复位性能监控程序值
get snapshot for dbm
get snapshot for all on <dbname>
get snapshot for dynamic sql on <dbname>   返回动态SQL高速缓存的内容
runstats on table <tbschema>.<tbname> 收集<tbname>的统计信息
reorgchk on table all      确定是否需要重组  reorgchk on table <tbschema>.<tbname>
reorg table <tablename> 通过重组消除碎片
###DB2实用程序
    三种实用程序:EXPORT,IMPORT,LOAD
        这些实用程序支持的文件格式有:

非定界或定长 ASCII(ASC):顾名思义,这种文件类型包含定长 ASCII 数据,以便与列数据对齐。每个 ASC 文件都是一个
ASCII 字符流,这个字符流由根据行和列排序的数据值组成。数据流中的行由行定界符分隔,而通常将行定界符假定为换行符。
定界 ASCII(DEL):它是各种数据库管理器用于数据交换的最常用文件格式。这种格式包含 ASCII 数据,它使用特殊字符定
界符分隔列值。数据流中的行由换行符充当行定界符进行分隔。
PC 版集成交换格式(PC version of the Integrated Exchange Format,PC/IXF):它是数据库表的结构化描述。这种文件格式不仅
可以用于导入数据,还可以用于创建目标数据库中尚不存在的表。
工作表格式(Worksheet Format,WSF):以这种格式存储的数据可以在工作表中显示。这种格式只能用于导出和导入。
游标:游标是用查询声明的。它只能用作装入操作的输入。

#EXPORT 实用程序使用 SQL SELECT 语句将数据从数据库表抽取到某个文件中。对于导出的数据而言,其文件格式可以是 DEL、IXF 或 WSF。建议您在
导出中包含 MESSAGES 子句,以便在导出期间捕获错误、警告和信息性消息。
EXPORT TO myfile.del OF DEL
    MESSAGES msg.out
        SELECT staff.name, staff.dept, org.location
        FROM org,staff
                WHERE org.deptnumb = staff.dept;

   在前一页上的示例中,数据被抽取到一个 DEL 格式的文件中。缺省情况下,列值由逗号(,)分隔,而字符串由双引号(")括起来。如果要抽取
的数据已经包含逗号和双引号,那该怎么办呢?如果是这样的话,导入或装入实用程序不可能确定:哪些符号是实际的数据,哪些是定界符。要定
制 EXPORT 的运作方式,可以使用 MODIFIED BY 子句并指定想用文件类型修饰符修改什么。EXPORT 命令的格式如下:

EXPORT TO file_name OF file_type
    MODIFIED BY file_type_modifiers
    MESSAGES message_file
    select_statement
chardelx
指定 x 为新的单字符串定界符。缺省值是双引号(")。
coldelx
指定 x 为新的单字符列定界符。缺省值是逗号(,)。
codepage=x
指定 x 这个 ASCII 字符串为输出数据的新代码页。在导出操作期间,将字符数据从应用程序代码页转换成这一代码页。
timestampformat="x"
x 是源表中时间戳记的格式。
考虑下面这个示例:

EXPORT TO myfile.del OF DEL
  MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"
  MESSAGES msg.out
  SELECT * FROM schedule

面的命令以 DEL 格式从 SCHEDULE 表导出数据,其间发生了下列行为:

字符串由感叹号(!)括起来
列由 @ 号定界
字符串被转换成代码页 1208
SCHEDULE 表中用户定义的时间戳记具有 yyyy.mm.dd hh:mm tt 这种格式

  #导出大对象
  #可以在控制中心导出表,并进行调度。
  #IMPORT实用程序
   IMPORT FROM file_name OF file_type
    MESSAGES message_file
    [ INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE | CREATE ]
    INTO target_table_name

INSERT 选项将导入的数据插入表中。目标表必须已经存在。
INSERT_UPDATE 向表中插入数据,或者用匹配的主键更新表中现有的行。目标表必须存在,且定义了主键。
REPLACE 选项删除现有的全部数据,然后将导入的数据插入现有的目标表中。
有 了 REPLACE_CREATE 选项,如果目标表存在,那么实用程序删除现有的数据,然后插入新数据,就好像指定了 REPLACE 选项一样。如果没有定义目标表,那么在导入数据之前将先创建该表及其相关索引。正如您可以想到的那样,输入文件必须是 PC/IXF 格式的,因为这种格式含有导出表的结构化描述。如果目标表是由外键引用的父表,就不能使用 REPLACE_CREATE。
CREATE 选项创建目标表及其索引,然后将数据导入到新表中。它唯一支持的文件格式是 PC/IXF。您也可以指定表空间的名称,新表将创建于其中。
示例:

IMPORT FROM emp.ixf OF IXF
COMMITCOUNT 500
    MESSAGES msg.out
    CREATE INTO employee IN datatbsp INDEX IN indtbsp
       
        如果上面的命令因为某些原因而执行失败,那么您可以使用消息文件确定被成功导入并提交的最后一行。然后,您可以使用
RESTARTCOUNT 选项重新启动导入。在下面的命令中,实用程序将跳过前面的 30000 条记录才开始 IMPORT 操作。

IMPORT FROM myfile.ixf OF IXF
   COMMITCOUNT 500 RESTARTCOUNT 30000
   MESSAGES msg.out
   INSERT INTO newtable

       compound=x
使用非原子的复合 SQL 来插入数据。每次会尝试 x 条语句。
indexschema=schema
在创建索引期间对索引使用指定的模式。
striptblanks
在向变长字段装入数据时,截断任何尾部空格。
lobsinfile
指出要导入 LOB 数据。实用程序将检查 LOBS FROM 子句,以获取输入 LOB 文件的路径。
这里有一个实际使用这些文件类型修饰符的示例:

IMPORT FOR inputfile.asc OF ASC
    LOBS FROM /u/db2load/lob1, /u/db2load/lob2
   MODIFIED BY compount=5 lobinsfile
    INSERT INTO newtable
使用控制中心进行import。

  ##LOAD实用程序概述
        LOAD 实用程序是另一种用数据来填充表的方法。经过格式化的页被直接
写入数据库。这种机制允许进行比 IMPORT 实用程序更有效的数据移动。
不过,LOAD 实用程序不执行某些操作,如引用或表约束检查以及触发器调用。

  LOAD FROM input_source OF input_type
    MESSAGES message_file
    [ INSERT | REPLACE | TERMINATE | RESTART ]
    INTO target_tablename

#example,execute at partition en

date
db2 connect to sccrm user db2inst1 using db2inst1
db2 "LOAD FROM /backup1114/dw_call_cdr_20031002.txt OF DEL modified by coldel; fastparse anyorder replace into dw_call_cdr_20030801"
date

db2 "LOAD FROM /db2home/db2inst1/data/dw_newbusi_smscdr_20031026.txt OF DEL modified by coldel; terminate into dw_newbusi_smscdr_20031026_1"

LOAD 的源输入的格式可以是 DEL、ASC、PC/IXF 或 CURSOR。游标是从 SELECT
语句返回的结果集。使用 CURSOR 作为装入输入的示例显示如下:

DECLARE mycursor CURSOR FOR SELECT col1, col2, col3 FROM tab1;
LOAD FROM mycursor OF CURSOR INSERT INTO newtab;

装入目标必须存在,该实用程序才能启动。这个目标可以是表、类型表或表别名。不支持向系统表或临时表进行装入。

请使用 MESSAGES 选项来捕获装入期间的任何错误、警告和信息性消息。

LOAD 可以以四种不同方式执行:

INSERT 方式将输入数据添加到表中,不更改现有表数据。
REPLACE 方式从表中删除全部现有数据,然后用输入数据填充该表。
TERMINATE 方式终止装入操作,然后回滚到装入操作的起始点。一个例外是:如果指定了 REPLACE 方式,那么表将会被截断。
RESTART 方式用于重新启动以前中断的装入。它将自动从上一个一致性点继续操作。要使用该方式,请指定与前面的 LOAD 命令中相同的选项,
但却使用 RESTART 方式。它允许该实用程序找到在装入处理期间生成的所有必需临时文件。因此
,除非能够确信不需要从装入生成的临时文件,否则就不要以手工方式除去任何这类文件,这一点十分重要。
一旦装入不出任何错误地完成,临时文件就会被自动除去。缺省情况下,临时文件是在当前工作目录中创建的。
可以使用 TEMPFILES PATH 选项指定存储临时文件的目录。
   #装入过程的四个阶段
       完整的装入过程分为四个不同阶段。

装入阶段:
将数据装入表中。
收集索引键和表统计信息。
记录一致性点。
将无效数据放入转储文件,并在消息文件中记录消息。当数据行与表的定义不一致时,这些数据行就被认为是无效数据,
并会被拒绝(不装入表中)。请使用 dumpfile 修饰符来指定文件的名称和位置,以记录任何被拒绝的行。
构建阶段:
根据装入阶段所收集的键创建索引。
删除阶段:
删除导致违反键唯一性的那些行,并将这些行放入异常表中。除了如上所述有些数据只是不满足目标表的定义之外,还有
一些数据已经通过了装入阶段,但却违反了表中定义的唯一性约束。注:这里只将违反键唯一性的行作为坏数据;目前不检查其它约束。
由于这类数据已经装入了表中,因此 LOAD 实用程序将在此阶段删除违规行。异常表可以用来存储被删除的行,使您可以决定在装入操
作完成之后如何处理它们。如果没有指定异常表,那么就删除违规行,而不做任何跟踪,下面对异常表进行了更详细的讨论。
在消息文件中记录消息。
索引复制阶段:
如果 ALLOW READ ACCESS 是用 USE TABLESPACE 选项指定的,那么就会将索引数据从系统临时表空间复制到
索引应该驻留的表空间。
异常表是一个用户定义的表,它必须与要装入的目标表具有相同的列定义。如果至少有一列没有出现在异常表中,那么就
会废弃违规行。只可以向表末尾添加两个额外的列:记录行插入时间的时间戳记列,以及存储(认为行所包含的是坏数据的)
理由(或消息)的 CLOB 列。

LOAD FROM emp.ixf OF IXF
    MODIFIED BY DUMPFILE=c:\emp.dmp
  MESSAGES msg.out
    TEMPFILES PATH d:\tmp
    INSERT INTO employee
    FOR EXCEPTION empexp

在上图中,(1)显示了输入源文件的内容。
(2)中显示的目标表 EMPLOYEE 是用以下列定义创建的:
第一列必须具有唯一性。
最后一列是不能为 NULL 的数字列。
(3)中显示的异常表 EMPEXP 是用与 EMPLOYEE 相同的那些列以及时间戳记和消息列创建的。
在装入阶段,输入文件的所有数据都被装入了 EMPLOYEE — 但用粉红色标记的两行除外,
因为它们不满足 NOT NULL 和 NUMERIC 列定义。由于指定了 DUMPFILE 修饰符,因此这两行被记录在文件 C:\emp.dmp 中。

在删除阶段,用黄色标记的两行被从 EMPLOYEE 中删除了,并且被插入异常表 EMPEXP 中。这是由于违反了 EMPLOYEE 表中第一
列的唯一性而引起的。

在装入结束时,您应该检查消息文件、转储文件和异常表,然后决定如何处理被拒绝的行。
如果装入成功完成,那么就会除去在 D:\tmp 中生成的临时文件。

  #装入选项
      ROWCOUNT n:允许用户指定只装入输入文件中的前 n 条记录。
SAVECOUNT n:每装入 n 条记录之后就建立一致性点。同时会生成消息,并会将其记录在消息文件中,以指出在保存点成功地装入了多少输入行。这一点在输入文件类型为 CURSOR 时是无法做到的。
WARNINGCOUNT n:在发出 n 次警告后停止装入。
INDEXING MODE [ REBUILD | INCREMENTAL | AUTOSELECT | DEFERRED ]:在构建阶段,构建索引。这个选项指定 LOAD实用程序是重新构建索引还是增量式地扩展索引。支持四种不同方式:
REBUILD 方式强制重新构建所有索引。
INCREMENTAL 方式只用新数据扩展索引。
AUTOSELECT 方式允许实用程序在 REBUILD 和 INCREMENTAL 之间进行选择。
DEFERRED 方式意味着在装入期间不创建索引。所涉及的索引都用需要的刷新进行标记。这些索引将在重新启动数据库或第一次访问这类索引时重新构建。
STATISTICS [ YES | NO ]:在执行完装入以后,以前的目标表统计信息极有可能不再有效,因为目标表中已加入了更多的数据。您可以通过指定 STATISTICS YES 来选择收集这些统计信息。
  #文件类型修饰符。文件类型修饰符是用 MODIFIED BY 子句指定的。下面是少数几个您可能会觉得有用的修饰符:

fastparse:减少了对装入数据的语法检查以增强性能。
identityignore、identitymissing 和 identityoverride:分别用来忽略、指出丢失或覆盖标识列数据。
indexfreespace n、pagefreespace n 和 totalfreespace n:在索引和数据页中保留指定量的空闲页。
norowwarnings:禁止行警告。
lobsinfile:指出将装入 LOB 文件;并检查 LOBS FROM 选项以获取 LOB 路径。
 
  ##装入期间的表访问
    在装入表期间,LOAD 实用程序会用互斥锁将它锁定。在装入完成以前,不允许任何其它访问。这是 ALLOW NO ACCESS 选项的缺省行为。在进行这种装入期间,表处于 LOAD IN PROGRESS 状态。有一个方便好用的命令可以检查装入操作的状态,还返回表状态:

LOAD QUERY TABLE table_name

您可能猜到了这一点,即有一个选项允许进行表访问。ALLOW READ ACCESS 选项导致表在共享方式下被锁定。阅读器可以访问表
中已经存在的数据,却不能访问新的数据。正在装入的数据要等到装入完成后才可获得。此选项将装入表同时置于 LOAD IN PROGRESS
状态和 READ ACCESS ONLY 状态。
正如在前一页中所提到的那样,在构建阶段可以重新构建全部索引,也可以用新数据扩展索引。对于 ALLOW READ ACCESS 选项,
如果重新构建全部索引,那么会为该索引创建一个镜像副本。当 LOAD 实用程序到达索引复制阶段时(请参阅装入过程的四个阶段)
,目标表被置为脱机,然后将新索引复制到目标表空间。
无论指定哪个表访问选项,装入都需要各种锁来进行处理。如果某一应用程序已经锁定了目标表,那么 LOAD 实用程序就必须等到
锁被释放。不想等待锁的话,您可以在 LOAD 命令中使用 LOCK WITH FORCE 选项,以强制关闭其它持有冲突锁的应用程序。

  ##检查暂挂表状态
     至此,我们知道:不会将与目标表定义不一致的输入数据装入表中。在装入阶段,这样的数据会遭到拒绝,并被记录在消息文件中。
在删除阶段,LOAD 实用程序会删除那些违反任何唯一性约束的行。如果指定了异常表,违规的行将插入该表。对于表可能定义的
其它约束(如引用完整性和检查约束),怎么办呢?LOAD
实用程序不检查这些约束。表会被置于 CHECK PENDING 状态,这种状态迫使您先手工检查数据完整性,然后才能访问表。如前一页
中所讨论的那样,可以使用 LOAD QUERY 命令查询表状态。系统目录表 SYSCAT.TABLES 中的列 CONST_CHECKED 也指出表中所定义的
每个约束的状态。

       状态类型:Y,N,U,W,F
     要手工为一个或多个表关闭完整性检查,请使用 SET INTEGRITY 命令。下面给出了一些示例,以演示该命令的部分选项。要立即检查表
EMPLOYEE 和 STAFF 追加的选项的完整性,请使用以下命令:
SET INTEGRITY FOR employee, staff IMMEDIATE CHECKED INCREMENTAL
要用 IMMEDIATE UNCHECKED 选项忽略对表 EMPLOYEE 的外键检查:
SET INTEGRITY FOR employee FOREIGN KEY IMMEDIATE UNCHECKED
在装入完成以后,有时您可能想将目标表及其具有外键关系的派生表置于 CHECK PENDING 状态。这样做确保了在对完整性进行手工
检查之前,所有这些表的可访问性都得到了控制。装入选项是 CHECK PENDING CASCADE IMMEDIATE,它指出:立即将外键约束的检查
暂挂状态扩展到所有派生外键表。缺省情况下,只会将装入的表置于检查暂挂状态。这正是装入选项
CHECK PENDING CASCADE DEFERRED 的行为。

## IMPORT VS LOAD
   IMPORT LOAD
   SLOWER ON LARGE AMOUNTS OF DATA FASTER ON LARGE LOADS-WRITES FORMATTED PAGES
   CREATION OF TABLES & INDEXES WITH IXF   TABLES AND INDEXES MUST EXIST
   WSF SUPPORTED WSF NOT SUPPORTED
   IMPORT INTO TABLES AND VIEWS LOAD TABLES ONLY
   NO SUPPORT FOR IMPORTING INTO SUPPORTED
      MATERIALIZED QUERY TABLES
   ALL ROWS LOGGED MINIMAL LOGGING SUPPORTED
   TRIGGERS WILL BE FIRED TRIGGERS NOT SUPPORTED
   TEMPORARY SPACE USED WITHIN THE DATABASE  USED OUTSIDE THE DATABASE
   CONSTRAINTS VALIDATED DURING IMPORT   ALL UNIQUE KEY IS VERIFIED DURING LOAD
   OTHER CONSTRAINTS ARE VALIDATED WITH THE
   SET INTEGRITY COMMAND
   IF INTERRUPTED,TABLE IS USABLE WITH IF INTERRUPTED,THE TABLE IS HELD IN LOAD PENDING
   DATA UP TO THE LAST COMMIT POINT STATE,EITHER RESTART OR RESTORE TABLES EFFECTED
  
   RUN RUNSTATS AFTER IMPORT FOR STATISICS  STATISTICS CAN BE GATHERED DURING LOAD
   IMPORT INTO MAINFRAM DATABASE VIA CANNOT LOAD INTO MAINFRAME DATABASE
      DB2 CONNECT
   NO BACK-UP IMAGE REQUIRED BACKUP CAN BE CREATED DURING LOAD

DB2命令总汇四

##db2move

db2move 是一个数据移动工具,可以用来在 DB2 数据库之间移动大量的表。该命令中支持的操作有 EXPORT、IMPORT 和 LOAD。
db2move 的语法可以象下面那样简单:
db2move database_name action options

该工具先从系统目录表中抽取用户表列表,接着以 PC/IXF 格式导出每个表。然后,可以将这些 PC/IXF 文件导入或装入到另一个
DB2 数据库。
以下是一些示例。下面这条命令用指定的用户标识和密码以 REPLACE 方式导入 sample 数据库中的所有表:

db2move sample import -io replace -u userid -p password
而下面这条命令则以 REPLACE 方式装入 db2admin 和 db2user 模式下的所有表:

db2move sample load -sn db2admin, db2user -lo REPLACE
   ##db2look 是一个方便的工具,可以从命令提示符或控制中心对其进行调用。该工具可以:

从数据库对象抽取数据库定义语言(DDL)语句
生成 UPDATE 语句来更新数据库管理器和数据库配置参数
生成 db2set 命令来设置 DB2 概要文件注册表
抽取和生成数据库统计报告
生成 UPDATE 语句来复制有关数据库对象的统计信息
类似 LOAD 的实用程序都要求存在目标表。您可以使用 db2look 来抽取表的 DDL,对目标数据库运行该 DLL,然后调用装入操作。如同下面
的示例所演示的那样,db2look 使用起来非常方便。下面这条命令为(来自数据库 department 的)peter 所创建的所有对象生成 DDL 语句,
同时将输出存储在 alltables.sql 中。

db2look -d department -u peter -e -o alltables.sql

接下来这条命令生成:

数据库 department 中所有对象的 DLL(由选项 -d、-a 和 -e 指定)。
复制数据库中所有表和索引的统计信息的 UPDATE 语句(由选项 -m 指定)。
GRANT 授权语句(由选项 -x 指定)。
用于数据库管理器和数据库配置参数的 UPDATE 语句,以及用于概要文件注册表的 db2set 命令(由选项 -f 指定)。

db2look -d department -a -e -m -x -f -o db2look.sql

##RUNSTATS 实用程序

DB2 利用一个完善的、基于成本的优化器来确定如何访问数据。其决策在很大程度上受到了一些统计信息的影响,这些统计信息是关于数据库
表和索引的大小的。因此,要时刻使数据库统计信息保持最新状态,以便能够选择有效的数据存取方案,这一点十分重要。RUNSTATS 实用程
序用于更新表的物理特征及其相关索引的统计信息。这些特征包括记录数(基数)、页数和平均记录长度等。
让我们用一些示例来演示此实用程序的用法。下面的命令收集表 db2user.employee 的统计信息。在计算统计信息期间允许阅读器和记录器访
问该表:

RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

以下命令用分布式统计收集表 db2user.employee 以及列 empid 和 empname 的统计信息。在此命令运行期间,该表只能用于只读请求。

RUNSTATS ON TABLE db2user.employee WITH DISTRIBUTION ON COLUMNS ( empid, empname )
    ALLOW READ ACCESS
以下命令收集表 db2user.employee 的统计信息及其全部索引的详细统计信息:

RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

##REORG 和 REORGCHK 实用程序

从数据库增删的数据在物理上可能并不是按顺序放置的。在这种情况下,DB2 必须执行额外的读操作来访问数据。通常,这意味着需要更多的
磁盘 I/O 操作,而我们都知道进行这类操作的代价是昂贵的。在这种情况下,您应该考虑根据索引对表进行物理上的重组,以便相关数据相
互之间靠得更近一些,从而尽可能地减少 I/O 操作。
REORG 是一个为表和/或索引重组数据的实用程序。虽然在物理上对数据进行了重新安排,但 DB2 却提供了联机或脱机执行该操作的选项。
在缺省情况下,脱机 REORG 允许其他用户读取该表。您可以通过指定 ALLOW NO ACCESS 选项来限制表访问。联机 REORG(也称为现场 REORG)
不支持对表的读访问或写访问。由于重新安排了数据页,因此并发应用程序可能必须等待 REORG 完成当前页。您可以使用适当的选项来轻松
地停止、暂停或重新开始重组过程:
下面的示例都是非常容易看懂的:

REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE ALLOW WRITE ACCESS
REORG TABLE db2user.employee INDEX db2us

抱歉!评论已关闭.