DB2操作生产实例

对CSDN用的比较多,但是从来没有写过自己的东西慢慢的发现很多东西自己曾经遇到过但是都忘记了。因此想留下点痕迹证明自己来过,自己也曾经了解。借此机会就把最近操作DB2的全过程留下来吧,就当是开张了。

整个操作分为四部分组成

  • 数据备份
  • 具体数据库操作
  • REORG及RUNSTATS操作
  • 数据回滚

第一步:数据备份

本次数据库变更涉及操作两张表分别为TBL_UBP_ORDER和TBL_UBP_ORDER_TRANS,第一张为订单主表第二张为订单流水表:

--数据库登入
db2 connect to mnsvcdb user mn_svcad
--数据表备份导出交易主表
db2 "export to TBL_UBP_ORDER_`date +%m%d`.ixf of ixf select * from mn_svcap.TBL_UBP_ORDER with ur"
--数据备份导出交易流水子表
db2 "export to TBL_UBP_ORDER_TRANS_`date +%m%d`.ixf of ixf select * from mn_svcap.TBL_UBP_ORDER_TRANS with ur"
--断开数据库连接
db2 disconnect current
  • db2 connect to mnsvcdb user mn_svcad
    此操作:登入数据库 mnsvcdb 为数据库名称 mn_svcad为用户名,理论上此用户为admin用户,涉及复杂操作。
    db2 connect to 数据库名称 user 数据库用户名
  • db2 “export to TBL_UBP_ORDER_date+%m%d.ixf of ixf select * from mn_svcap.TBL_UBP_ORDER with ur”
    此操作:备份表订单主表TBL_UBP_ORDER到以TBL_UBP_ORDER_月日.ixf命名的备份文件中。
    1.export 为 导出命令
    2.导出有两种方式文件格式
    (1).ixf格式保存的是结构和数据,是一个二进制文件(本人强烈建议)
    (2).del格式是一个文本文件,相当于一个.txt文件
    3.with ur 为俗称“脏读“,在没有提交数据的时候能够读到更新的数据;是最低的隔离级别,并且提供最高的并行性。
    db2 “export to 文件名称.ixf of ixf select * from mn_svcap.TBL_UBP_ORDER with ur”
  • db2 disconnect current
    此操作:断开所有数据库的连接

第二步:具体数据库操作

此步骤涉及内容包括增加TBL_UBP_ORDER表字段;修改TBL_UBP_ORDER_TRANS表字段长度;对TBL_UBP_ORDER_TRANS新建索引:

--数据库登入
db2 connect to mnsvcdb user mn_svcad
--新增order主表字段
db2 "alter table mn_svcap.TBL_UBP_ORDER 
     add column QR_CODE VARCHAR(300) DEFAULT ''
     add column PAYMENT_VALID_TM  CHARACTER(10) DEFAULT ''
     add column RECEIVE_INS_ID_CD CHARACTER(11) DEFAULT ''"
--修改order_trans表的字段长度
db2 "alter table mn_svcap.TBL_UBP_ORDER_TRANS 
     alter TRANS_NO set data type varchar(40)"
--新建order_trans表的trans_no字段索引
db2 "create index mn_svcap.IDX_ORDER_TRANS_NO on mn_svcap.TBL_UBP_ORDER_TRANS(TRANS_NO)"
--断开数据库连接
db2 disconnect current
  • 新增TBL_UBP_ORDER主表字段
    alter table mn_svcap.TBL_UBP_ORDER 为声明对TBL_UBP_ORDER表的修改操作
    add column QR_CODE VARCHAR(300) DEFAULT ” 为新增字段名称为QR_CODE字段类型为VARCHAR长度为300默认字段允许为空
  • 修改TBL_UBP_ORDER_TRANS子表字段长度
    alter table mn_svcap.TBL_UBP_ORDER_TRANS 为声明对TBL_UBP_ORDER_TRANS表的修改操作
    alter TRANS_NO set data type varchar(40)为修改字段名称为TRANS_NO;set data type指修改数据 varchar类型长度为40
  • 新建TBL_UBP_ORDER_TRANS子表索引
    create index mn_svcap.IDX_ORDER_TRANS_NO中create index为建立索引名字IDX_ORDER_TRANS_NO;on TBL_UBP_ORDER_TRANS(TRANS_NO)指在TBL_UBP_ORDER_TRANS这张表的TRANS_NO字段增加索引

第三步:REORG及RUNSTATS操作

此操作步骤为对变更的两张表进行REORG和RUNSTATS操作,REORG为针对数据库对象的大量操作,如反复地删除表,存储过程,会引起系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作。RUNSTATS命令就是用来收集数据库对象的状态信息,这对优化器生成最优的执行计划至关重要:

--数据库登入
db2 connect to mnsvcdb user mn_svcad
--REORG表TBL_UBP_ORDER
db2 "reorg table mn_svcap.TBL_UBP_ORDER"
--RUNSTATS表TBL_UBP_ORDER
db2 "runstats on table mn_svcap.TBL_UBP_ORDER and  indexes all"
--REORG表TBL_UBP_ORDER_TRANS
db2 "REORG table mn_svcap.TBL_UBP_ORDER_TRANS"
--RUNSTATS表TBL_UBP_ORDER_TRANS
db2 "runstats on table mn_svcap.TBL_UBP_ORDER_TRANS and  indexes all"
--断开数据库连接
db2 disconnect current
  • REORG表TBL_UBP_ORDER
    reorg table 表名
  • RUNSTATS表TBL_UBP_ORDER
    runstats on table 表名 and indexes all

第四步:数据回滚

当遇到数据库操作异常影响正常交易则立即进行数据库回滚操作,此操作为数据库变更紧急应急手段。

--数据库登入
db2 connect to mnsvcdb user mn_svcad
--删除TBL_UBP_ORDER新增字段
db2 "alter TABLE mn_svcap.TBL_UBP_ORDER
     DROP COLUMN QR_CODE
     DROP COLUMN PAYMENT_VALID_TM
     DROP COLUMN RECEIVE_INS_ID_CD"
--REORG表TBL_UBP_ORDER
db2 "reorg table mn_svcap.TBL_UBP_ORDER"
--RUNSTATS表TBL_UBP_ORDER
db2 "runstats on table mn_svcap.TBL_UBP_ORDER and  indexes all"
--恢复原有表结构
db2 "CREATE TABLE mn_svcap.TBL_UBP_ORDER_TRANS
    (
        TRANS_ID          CHARACTER(20)              NOT NULL,
        ORDER_ID          CHARACTER(20)              NOT NULL,
        TRANS_AT          DECIMAL(12,0)              NOT NULL,
        TRANS_ST          CHARACTER(2)               NOT NULL,
        TRANS_TP          CHARACTER(2)               NOT NULL,
        TRANS_TM          CHARACTER(14)              NOT NULL,
        TRANS_NO          CHARACTER(21)              NOT NULL,
        TRANS_INDEX       VARCHAR(21)                NOT NULL,
        RESP_CD           VARCHAR(16)                NOT NULL,
        RESP_MSG          VARCHAR(256)               NOT NULL,
        RESP_TM           CHARACTER(14)              NOT NULL,
        TRACE_TM          CHARACTER(14)              NOT NULL,
        TRACE_NUM         CHARACTER(6)               NOT NULL,
        REC_CRT_TS        TIMESTAMP                  NOT NULL,
        REC_UPD_TS        TIMESTAMP                  NOT NULL,
        SETTLE_AT         DECIMAL(12,0)              DEFAULT 0 NOT NULL,
        SETTLE_DT         CHARACTER(4)               DEFAULT '' NOT NULL,
        PRIMARY KEY (TRANS_ID)
    )IN MNSVC_32k_1 
--赋值索引和此表的表空间
INDEX IN MNSVC_32k_1"
--创建索引
db2 "create index mn_svcap.IDX_TRANS_TP ON mn_svcap.TBL_UBP_ORDER_TRANS(TRANS_TP)"
db2 "create index mn_svcap.IDX_TRANS_INDEX ON mn_svcap.TBL_UBP_ORDER_TRANS(TRANS_INDEX)"
--通过admin用户赋值该表权限
db2 "grant select,delete,update,insert on mn_svcap.TBL_UBP_ORDER_TRANS to user mn_svcap"
--导入TBL_UBP_ORDER_TRANS表的备份数据
db2 "import from  TBL_UBP_ORDER_TRANS_`date +%m%d`.ixf of ixf replace into mn_svcap.TBL_UBP_ORDER_TRANS"
--REORG表TBL_UBP_ORDER
db2 "reorg table mn_svcap.TBL_UBP_ORDER_TRANS"
--RUNSTATS表TBL_UBP_ORDER
db2 "runstats on table mn_svcap.TBL_UBP_ORDER_TRANS and  indexes all"
--断开数据库连接
db2 disconnect current

DB2部分扩展命令

1. 删除表drop 
 db2 “drop table 表名”2. 通过表名查看表空间 
 db2 “select tabname, tbspace from syscat.tables where tabname=’表名’”3. 通过表空间查看所属的表 
 db2 “select tabname from syscat.tables where tbspace=’表空间名’”4. 查看数据库中有表 
 db2 list tables ; 5. 查看数据库中的表结构 
 db2 describe table 表名; 
 db2 describe table 表名 show detail ;(详细的结构)6. 查看表的索引 
 db2 describe indexes for table表名 (显示所有索引的标识,但是不会显示字段) 
 db2 describe indexes for table 表名 show detail (显示各种索引的字段名)

本次变更涉及内容有限,故介绍内容也只有这些无论对大家有用无用到此为止。