db2常用命令/db2常见报错

一、前言

二、db2服务端常用命令

说明:二、db2服务端常用命令一般指的是linux上的操作命令

2.1 启动/停止数据库

启动: db2start
停止: db2stop
强制停止:db2stop force
查看数据库是否启动成功;db2pd -edus

示例:

[student@centos firserver]$ db2stop
2023-05-21 16:25:30     0   0   SQL1025N  The database manager was not stopped because databases are still active.
SQL1025N  The database manager was not stopped because databases are still active.

[student@centos firserver]$ db2start
2023-05-21 16:28:42     0   0   SQL1026N  The database manager is already active.
SQL1026N  The database manager is already active.

[student@centos firserver]$ 

查看数据库启动状态:

db2pd -edus

该命令将列出DB2当前正在运行的所有线程,包括正在运行的DB2实例和数据库的线程。如果DB2已经启动,那么可以从输出中看到DB2实例的线程,如下所示:

[student@centos ~]$ db2pd -edus

Database Member 0 -- Active -- Up 0 days 00:00:21 -- Date 2023-08-21-19.44.09.649477

List of all EDUs for database member 0

db2sysc PID: 3403
db2wdog PID: 3401
db2acd  PID: 3421

EDU ID    TID                  Kernel TID           EDU Name                               USR (s)         SYS (s) 
========================================================================================================================================
21        140651349927680      3419                 db2spmlw 0                             0.000000     0.000000
20        140651354121984      3418                 db2spmrsy 0                            0.000000     0.010000
19        140651358316288      3417                 db2resync 0                            0.000000     0.020000

2.2 添加用户/删除用户/创建数据库/删除数据库

添加用户

root权限新建用户 useradd user_name
修改用户密码: passwd user_name

root权限删除用户:userdel -f user_name

示例:

[root@centos ~]# useradd test1
[root@centos ~]# passwd test1
更改用户 test1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@centos ~]# userdel -f test1
[root@centos ~]# 

创建数据库

创建数据库:db2 create [db_name]
创建数据库:db2 "create database [db_name] using codeset UTF-8 territory CN"(指定数据库的字符集)

删除数据库

删除db2数据库
db2 drop database [databasename]
注意:如果以上步骤执行成功,还报错SQL1035N,就执行以下操作:
-- 先强制停止数据库
db2stop force
-- 注意要连着写执行
db2start;db2 drop database databasename;

2.3 连接数据库/断开数据库连接

连接数据库

语法:db2 connect to [数据库名称]
语法:db2 connect to [数据库名称] user [数据库账号] using [数据库密码]

示例:db2 connect to student_db user root using root1234

断开数据库

db2 connect reset 断开数据库连接
db2 terminate 断开数据库连接
db2 force applications all 断开所有数据库连接

示例:

[student@centos db2V10.5]$ db2 connect to STUDENTDB user root using root1234

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.5.8
 SQL authorization ID   = STUDENT_SCHEMA
 Local database alias   = STUDENTDB

[student@centos db2V10.5]$ db2 terminate
DB20000I  The TERMINATE command completed successfully.
[student@centos db2V10.5]$ 

2.4 查看所有数据库/查看数据库下的所有表

db2 list db directory 列出所有数据库
db2 list active databases 列出所有活动的数据库
db2 list tables for all 列出当前数据库下所有的表
db2 list tables for schema btp 列出当前数据库中schema为btp的表
db2 list tablespaces show detail 显示数据库空间使用情况

2.5 查看schema下所有表名/查看表结构

#查看schema下所有的表
list tables
# 查看表结构
db2 describe  table <table_name>

示例:db2 describe table user

2.6 导入导出数据库表结构及数据

2.6.1 导出数据库整个表结构

数据库表结构、视图、存储结构导出
db2look -d 数据库名称 -e -a -x -i 数据库用户名 -w 密码 -o 生成的sql文件名
如:db2look -d mydatabase -e -a -x -i username -w passwd -o file.sql
[studnet@centos db2V10.5]$ db2look -d STUDENTDB -e -a -x -i root -w root1234 -o file_ddl.sql

-- Generate statistics for all creators 
-- Creating DDL for table(s)
-- Output is sent to file: file_ddl.sql

2.6.2 导入表结构

db2 –tvf /home/file_ddl.sql

2.6.3 导出所有表数据

db2move [databasename] export -u [username] -p [password]

示例:db2move STUDENTDB export -u root -p root1234

说明:
1,这将会把数据库studentdb中的全部数据提取到当前目录(/home/backup/mydata)中。每个表的内容都存储在一个.ixf文件中,每个.ixf文件都有一个与之相对应的.msg文件,.msg文件是描述从表中导出数据时的信息的。另外还有两个文件,db2move.lst用来记录.ixf文件、.msg文件与表的一一对应关系,EXPORT.out记录的是导出数据时的屏幕输出。
在这里插入图片描述
db2move.lst文件内容如下:

!"STUDENT   "."ACT_EVT_LOG"!tab1.ixf!tab1.msg!
!"STUDENT   "."ACT_GE_BYTEARRAY"!tab2.ixf!tab2.msg!
!"STUDENT   "."ACT_GE_PROPERTY"!tab3.ixf!tab3.msg!
!"STUDENT   "."ACT_HI_ACTINST"!tab4.ixf!tab4.msg!
!"STUDENT   "."ACT_HI_ATTACHMENT"!tab5.ixf!tab5.msg!
!"STUDENT   "."ACT_HI_COMMENT"!tab6.ixf!tab6.msg!
!"STUDENT   "."ACT_HI_DETAIL"!tab7.ixf!tab7.msg!
!"STUDENT   "."ACT_HI_IDENTITYLINK"!tab8.ixf!tab8.msg!
!"STUDENT   "."ACT_HI_PROCINST"!tab9.ixf!tab9.msg!
!"STUDENT   "."ACT_HI_TASKINST"!tab10.ixf!tab10.msg!
!"STUDENT   "."ACT_HI_VARINST"!tab11.ixf!tab11.msg!
!"STUDENT   "."ACT_ID_GROUP"!tab12.ixf!tab12.msg!
!"STUDENT   "."ACT_ID_INFO"!tab13.ixf!tab13.msg!
!"STUDENT   "."ACT_ID_MEMBERSHIP"!tab14.ixf!tab14.msg!
!"STUDENT   "."ACT_ID_USER"!tab15.ixf!tab15.msg!
!"STUDENT   "."ACT_PROCDEF_INFO"!tab16.ixf!tab16.msg!
!"STUDENT   "."ACT_RE_DEPLOYMENT"!tab17.ixf!tab17.msg!
!"STUDENT   "."ACT_RE_MODEL"!tab18.ixf!tab18.msg!
!"STUDENT   "."ACT_RE_PROCDEF"!tab19.ixf!tab19.msg!
!"STUDENT   "."ACT_RU_EVENT_SUBSCR"!tab20.ixf!tab20.msg!
!"STUDENT   "."ACT_RU_EXECUTION"!tab21.ixf!tab21.msg!
!"STUDENT   "."ACT_RU_IDENTITYLINK"!tab22.ixf!tab22.msg!
!"STUDENT   "."ACT_RU_JOB"!tab23.ixf!tab23.msg!
!"STUDENT   "."ACT_RU_TASK"!tab24.ixf!tab24.msg!
!"STUDENT   "."ACT_RU_VARIABLE"!tab25.ixf!tab25.msg!

2.6.4 导入导出单表数据为del/ixf文件

导出导入del格式文件

1.导出为del
db2 export to /home/xxxx.del of del select * from [tablename]
2.导入del文件
db2 import from /home/xxxx.del of del insert into [tablename]
3.导出为txt并指定分隔符
db2 "export to /home/btpoper.txt of del modified by coldel| select * from btpoper where name = '张三' "
4.导入txt文件并指定分隔符
db2  "import from btpoper.txt of del modified by coldel| insert into btpoper"

导出导入ixf格式文件

db2 export to /home/xxxx.IXF of IXF select * from [tablename]
db2 import from /home/xxxx.IXF of IXF insert into [tablename]
2.6.4.1 del与ixf区别
  • del格式是一个文本文件,文件按行来存储,含有回车的文本内容在del文件中会另起一行,del文件可视。
  • ixf格式保存的是结构和数据,是一个二进制文件,ixf文件不可视。

del格式如下图:
在这里插入图片描述

2.7 删除表数据

1.truncate表数据

truncate table [tableName]  immediate

示例:truncate table user  immediate
  1. delete表数据
语法:delete from <table_name>

db2 “delete from user where id=‘907020000’ or id=‘907010000’”

2.8 列出数据库所有配置

连接数据库后执行以下命令:

db2 get db cfg

示例:

[student@centos ~]$ db2 connect to STUDENTDB

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.5.8
 SQL authorization ID   = STUDENT_SCHEMA
 Local database alias   = STUDENTDB

[student@centos ~]$ db2 get db cfg

       Database Configuration for Database 

 Database configuration release level                    = 0x1000
 Database release level                                  = 0x1000

 Database territory                                      = CN
 Database code page                                      = 1386
 Database code set                                       = GBK
 Database country/region code                            = 86
 Database collating sequence                             = UNIQUE
 Alternate collating sequence              (ALT_COLLATE) = 
 Number compatibility                                    = OFF
 Varchar2 compatibility                                  = OFF
 Date compatibility                                      = OFF
 Database page size                                      = 4096

 Statement concentrator                      (STMT_CONC) = OFF

 Discovery support for this database       (DISCOVER_DB) = ENABLE

 Restrict access                                         = YES
 Default query optimization class         (DFT_QUERYOPT) = 5
 Degree of parallelism                      (DFT_DEGREE) = 3
 Continue upon arithmetic exceptions   (DFT_SQLMATHWARN) = NO
 Default refresh age                   (DFT_REFRESH_AGE) = 0
 Default maintained table types for opt (DFT_MTTB_TYPES) = SYSTEM
 Number of frequent values retained     (NUM_FREQVALUES) = 10
 Number of quantiles retained            (NUM_QUANTILES) = 20

 Decimal floating point rounding mode  (DECFLT_ROUNDING) = ROUND_HALF_EVEN

 Backup pending                                          = NO

[student@centos ~]$ 

2.9、查看表结构

db2 describe table user1.department

db2 describe select * from user.tables

2.10、查看表的索引

db2 describe indexes for table user1.department

三、db2客户端常用命令

3.1 查看schema下所有表及每个表的记录数

此命令可以用来查看schema下所有的表,以及查看表是否有记录

select tabname,card from syscat.tables where tabschema = '[schema name]'

tabname    表名
card       总行数

如: select tabname,card from syscat.tables where tabschema = 'manager';

-- 查看schema为manager下有记录的表
如: select tabname,card from syscat.tables where tabschema = 'manager' and card <> '0'

3.2 添加索引/查询索引/删除索引

1. 添加普通索引

语法:  create index  索引名 on 表名(列名,列名)

-- 添加一个组合索引
示例: create index  index_name_age  on user(name, age);

2. 添加唯一索引

语法:  create  unique index  索引名 on 表名(列名,列名)

-- 添加一个组合索引
示例: create unique index  uniq_name_age  on user(name, age);

3. 查询索引

语法:  select * from syscat.indexes where tabname = '表名';

4. 删除索引

drop index 索引名

3.2 修改表字段,对表字段进行新增/修改/删除

1.新增表字段

alter table <表名> add column <字段名>  <字段类型> default '0'

示例: alter table user add column user_name varchar(30) default '张三'

设置字段默认时间为当前时间
alter table [table_name] alter column [column_name] set default  current date;

注意:目前db2好像不支持添加字段到指定位置,所以添加的字段默认都是放在最后,若需要添加到指定的位置,可以考虑删除表后重新建表

2.删除表字段

alter table <表名> drop column <字段名> 

示例: alter table user drop column user_name 

注意:drop掉字段之后,可能会导致表查询/插入操作不能执行,需要对表进行reorg。

3.修改字段
注意:此操作需要执行重构表的语句,语句见本篇文章中的重构表内容

语法: alter table <TABLE_NAME> alter column <COLUMN_NAME> set data type <NEW TYPE>

示例:alter table user alter column user_name set data type varchar(100)

注意: 更改字段类型是有限制的,如将字段改为比之前类型长度大的可以,如果要改小或者修改小数点长度,必须先drop掉原来的column,然后再重新添加.

例如我要将一个Varchar(10)的字段改为Varchar(6) 或者将一个DECIMAL(14, 2)的字段改为DECIMAL(14, 4)等,均不能使用上述语句修改,另外改为不同的类型,也需要先drop掉column。

4.对已有字段重命名

alter table <table name> rename  column <column name> TO <new column name>

示例:alter talbe user rename column user_name to u_name

3.3 添加注释

1.对表添加/修改注释

COMMENT ON COLUMN 表名 IS '描述'

示例:comment on table user is '用户表'

2.对字段添加/修改注释

COMMENT ON COLUMN 表名.字段名 IS '表字段的描述'

示例:comment on column user.user_name is '用户名'

3.4 重构表

改变了字段的类型、字段的长度、改变了索引、删除表字段等都需要重构表, 否则执行数据插入/更新操作时可能会抛出异常

语法一:reorg table 表名
语法二:CALL SYSPROC.ADMIN_CMD(‘reorg table 表名’)

示例:CALL SYSPROC.ADMIN_CMD('REORG TABLE user')

四、db2常见报错

SQL0668N 不允许对表 “user” 执行操作,原因码为 “7”。 SQLSTATE=57016

报错内容:

SQL0668N  不允许对表 "student_db.user" 执行操作,原因码为 "7"SQLSTATE=57016

报错场景:

对user表新增了性别sex字段,类型设置为Integer, 后来更改了该字段类型为VARCHAR,然后执行update语句对数据进行更新时抛出了该错误。

解决方法:

先执行重构表操作后,再执行update语句。
重构表语法:CALL SYSPROC.ADMIN_CMD(‘reorg table 表名’)
示例:CALL SYSPROC.ADMIN_CMD('REORG TABLE user')





注: 该篇文章持续更新,若有朋友觉得文章不全或有不错内容想更新的,可私信或在评论区留言。

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值