文章目录
一、前言
二、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
- 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')
注: 该篇文章持续更新,若有朋友觉得文章不全或有不错内容想更新的,可私信或在评论区留言。