芯が強い人になるESTJ-A

# IBM db2 常用命令

IT開発 Tags: 无标签 阅读: 207

截屏2024-01-13 8.42.46.png

DB2数据库中,复制已经存在的表的结构及其数据。我们采用两步走方式:第一步先复制表结构,第二部拷贝数据。

第一步:复制表结构

方法一:

Create table test_Rate as (select * from t_Rate) Definition only;
--test_Rate是新表,t_Rate是老表
方法二:

Create table test_Rate like t_Rate;
--test_Rate 是新表,t_Rate是老表
说明:上述方式创建的新表不复制老表的主键,约束,索引,非空,默认值,数据。且创建的新表放在用户的临时表空间中。

 有时候需改变数据库的表结构,但执行了alter语句后,现有的表结构还是没发生变化。

所以一般在修改表结构的后面需加上重构表结构语句。

如:db2 "REORG TABLE SCHEMA.TABLENAME";

--索引生效
CALL sysproc.admin_cmd ('runstats on table TABLE_xxxxxxxx on all columns and indexes all allow read access');

--重构表
CALL SYSPROC.ADMIN_CMD('REORG TABLE TABLE_xxxxxxxx'); 

/*----查询新表test_Rate的主键,表空间----*/
select keycolumns,keyindexid,tbspace from syscat.tables where tabname='TEST_RATE'
--keycolumns:表示有几个字段组成联合主键,keyindexid:等于0表示没有主键

/*----查询新表test_Rate的索引----*/
select * from syscat.indexes where tabname='TEST_RATE';
--上述查询有记录表示表有索引,反之没有

/*----查询新表test_Rate的记录条数----*/
select count(1) from test_Rate
 

第二步:插入数据

insert into test_Rate select * from t_Rate where '条件';
通过以上操作,会拷贝t_Rate的表结构及数据至test_Rate表上。

比对新建表与原表是否一致

###查询表索引(表明大写)
select * from syscat.indexes where tabname='TABLENAME'

###查看主键
describe indexes for table tablename

5、导出原数据
time db2 "export to tablename.del of del select * from tablename1"

导入数据(每次提交10000)
time db2"import from tablename.del of del commitcount 10000 insert into tablename"

REORGを実行
実行コマンドは簡単

db2 reorg table ${テーブル名}
並べ替え基準をインデックスにしたい場合。

db2 reorg table ${テーブル名} index ${インデックス名}
インデックスを再編成したい場合

db2 reorg indexes all for table ${テーブル名} 

データベースに定義されている表の一覧を取得する
タイプ列の記号の主なものは、以下のとおり。
T:表
A:別名(ALIAS)
V:ビュー
S:マテリアライズ照会表(MQT)


$ db2 list tables

表/ビュー                       スキーマ        タイプ 作成時刻
------------------------------- --------------- ----- --------------------------
ACT                             DB2I115         T     2021-06-28-19.54.17.007059
ADEFUSR                         DB2I115         S     2021-06-28-19.54.18.872658
CATALOG                         DB2I115         T     2021-06-28-19.54.33.845894
CL_SCHED                        DB2I115         T     2021-06-28-19.54.14.648341
CUSTOMER                        DB2I115         T     2021-06-28-19.54.21.277008
DEPARTMENT                      DB2I115         T     2021-06-28-19.54.14.813984
DEPT                            DB2I115         A     2021-06-28-19.54.15.077674
EMP                             DB2I115         A     2021-06-28-19.54.15.327167
EMPACT                          DB2I115         A     2021-06-28-19.54.17.005861
EMPLOYEE                        DB2I115         T     2021-06-28-19.54.15.078994
EMPMDC                          DB2I115         T     2021-06-28-19.54.19.157375
EMPPROJACT                      DB2I115         T     2021-06-28-19.54.16.851764
EMP_ACT                         DB2I115         A     2021-06-28-19.54.17.006552
                         :
                       以下略

特定のスキーマ名の表の一覧を取得する
以下の例は、SYSCATスキーマのもの、つまりシステムカタログビューをリストしている。

$ db2 list tables for schema syscat

表/ビュー                       スキーマ        タイプ 作成時刻
------------------------------- --------------- ----- --------------------------
ATTRIBUTES                      SYSCAT          V     2021-06-28-19.52.59.697655
AUDITPOLICIES                   SYSCAT          V     2021-06-28-19.52.59.730695
AUDITUSE                        SYSCAT          V     2021-06-28-19.52.59.746300
BUFFERPOOLDBPARTITIONS          SYSCAT          V     2021-06-28-19.52.59.767614
BUFFERPOOLEXCEPTIONS            SYSCAT          V     2021-06-28-19.52.59.778816
BUFFERPOOLNODES                 SYSCAT          V     2021-06-28-19.52.59.788100
BUFFERPOOLS                     SYSCAT          V     2021-06-28-19.52.59.796748
CASTFUNCTIONS                   SYSCAT          V     2021-06-28-19.52.59.809168
CHECKS                          SYSCAT          V     2021-06-28-19.52.59.823562
COLAUTH                         SYSCAT          V     2021-06-28-19.52.59.834614
COLCHECKS                       SYSCAT          V     2021-06-28-19.52.59.846397
COLDIST                         SYSCAT          V     2021-06-28-19.52.59.861894
                         :
                       以下略

ある表の列定義情報を表示する
スキーマ名を省略した場合は、ユーザー名がデフォルトのスキーマ名となる。

$ db2 describe table db2i115.employee

                            データ・タイ データ・         列の       スケ
列名                        プ・スキーマ タイプ名         長さ       ール  NULL
--------------------------- --------- ------------------- ---------- ----- ------
EMPNO                       SYSIBM    CHARACTER                    6     0 いいえ
FIRSTNME                    SYSIBM    VARCHAR                     12     0 いいえ
MIDINIT                     SYSIBM    CHARACTER                    1     0 はい
LASTNAME                    SYSIBM    VARCHAR                     15     0 いいえ
WORKDEPT                    SYSIBM    CHARACTER                    3     0 はい
PHONENO                     SYSIBM    CHARACTER                    4     0 はい
HIREDATE                    SYSIBM    DATE                         4     0 はい
JOB                         SYSIBM    CHARACTER                    8     0 はい
EDLEVEL                     SYSIBM    SMALLINT                     2     0 いいえ
SEX                         SYSIBM    CHARACTER                    1     0 はい
BIRTHDATE                   SYSIBM    DATE                         4     0 はい
SALARY                      SYSIBM    DECIMAL                      9     2 はい
BONUS                       SYSIBM    DECIMAL                      9     2 はい
COMM                        SYSIBM    DECIMAL                      9     2 はい

  14 レコードが選択されました。

ある表に定義された索引の情報を取得する

$ db2 describe indexes for table employee

索引          索引           ユニーク    索引      索引              パーティ      NULL
スキーマ      名             規則        列数      タイプ            ョニング      キー
------------- -------------- ---------- --------- ---------------- -------------- ------
DB2I115       PK_EMPLOYEE    P                  1 RELATIONAL DATA    -              Y
DB2I115       XEMP2          D                  1 RELATIONAL DATA    -              Y

  2 レコードが選択されました。

describe indexes for table 表名 show detail のように show detail オプションをつけると、索引の定義された列名などの情報も表示される。

以上、マニュアルを見れば書いてあることだが、簡単なことは意外と見つけにくいので、まとめておいた。

Step2. スキーマコピー
db2moveコマンドを実行します。

db2move <移行元DB名> COPY -sn <コピー対象スキーマ名>
 -co TARGET_DB <ターゲットDB名> user <ターゲットDB接続ユーザ> using <パスワード>
 owner <オブジェクト所有者名>
 -u <ソースDB接続ユーザ> -p <パスワード>



C:\IBM\Db2_11.5.7\BIN>db2move TESTDB COPY -sn MOVTEST -co TARGET_DB MYDB user db2admin using xxxxxx owner movtest -u db2inst1 -p xxxxxx

Application code page not determined, using ANSI codepage 943

*****  DB2MOVE  *****

Action:  COPY

Start time:  Fri Feb 24 20:22:22 2023


All schema names matching:  MOVTEST;

Connecting to database TESTDB ... successful!  Server : DB2 Common Server V11.5.6

Copy schema MOVTEST to MOVTEST on the target database MYDB

Create DMT :  "SYSTOOLS"."DMT_641ad043d5fa1"

Binding package automatically ... C:\IBM\Db2_11.5.7\BND\DB2MOVE.BND ... successful!

Start Load Phase :


db2move finished successfully



Files generated:
-----------------
COPYSCHEMA.20230224202222.msg
LOADTABLE.20230224202222.MSG

Please delete these files when they are no longer needed.


End time:  Fri Feb 24 20:22:31 2023

C:\IBM\Db2_11.5.7\BIN>

"db2move finished successfully"と出力され、スキーマコピーが成功していることがわかります。
問題が起きた場合はエラー有と出力され、拡張子".ERR" ファイルも生成されます。

これで移行作業完了です!

Step3. 移行オブジェクト / データ確認


想定通りコピーされ、Valid(STATUS N=正常)状態となっています。


db2 "select tabschema, tabname, owner, type, status from syscat.tables where tabschema='MOVTEST' and type='T'"

截屏2024-01-13 8.39.01.png

step4索引
索引も移行されています

db2 "select indschema, indname, owner, tabschema, tabname from syscat.indexes where indschema='MOVTEST'"

截屏2024-01-13 8.40.14.png

シーケンス

シーケンスもターゲットDBに移行されています。
また、次に払い出される順序値も、カタログへの照会で確認することができます。

db2 "select seqschema, seqname, owner, nextcachefirstvalue from syscat.sequences where seqschema='MOVTEST'"

截屏2024-01-13 8.41.32.png