1、启动/停止/显示实例
1、数据库实例的启动
首先要启动数据库的实例,即切换到db2inst1用户(注:db2inst1用户为当前数据库的实例),然后执行db2start启动数据库的实例
su - db2inst1
db2start
2、数据库实例的关闭
首先在db2inst1用户下强制关闭实例上的所有应用程序,然后再关闭数据库实例
db2 force application all
db2stop
强制停止
db2stop force
3、显示版本号
db2level
4、显示所有的实例
db2ilist
5、显示当前的实例
db2 get instance
6、删除一个实例(注:需切换到root用户权限下)
cd /opt/ibm/db2/V9.7/instance
./db2idrop db2inst1
7、显示当前数据库连接有哪些应用程序
db2 list application
2、数据库操作
1、列出当前实例中有哪些数据库
su - db2inst1
db2 list db directory
2、创建数据库
db2 create database test
使用UTF-8编码
db2 create database test on '/home/db2inst1' using codeset UTF-8 territory CN
on '/home/db2inst1' 表示数据库路径
一般情况下'/home/db2inst1'为默认数据库路径
3、连接数据库
db2 connect to test
注:用密码情况下格式 db2 connect to test user username using password
db2 connect to <database> user <username> using <password>
4.列出当前实例中所有激活的数据库
db2 list active databases
db2 list db directory
5、删除数据库
db2 drop database test
6、查看表的空间
db2 list tablespaces [ show detail ]
注: show detail为可选项,显示更详细信息
或者 db2pd -tablespaces -db 数据库名
[db2inst1@localhost ~]$ db2pd -tablespaces -db test
3、表操作
1、列出数据库中所有表
db2 list tables
2、在数据库test中创建表student
db2 "create table student (id int,fname varchar(30),age int)"
3、向表student中添加数据信息
db2 "insert into student values (1,'Tom',22)"
4、显示表student所有的信息
db2 "select * from student"
5、更改表student中的数据(如将Sunrier的年龄改为22)
db2 "select * from student"
db2 "update student set age=22 where fname='Sunrier'"
6、查看表student结构
db2 describe table student
或db2 "describe select * from student"
或db2 "describe select * from db2inst1.student"
7、创建一个新表(如people)与数据库中某个表(如student)结构相同
db2 describe table student
db2 create table people like student
8、两个结构相同的表,将原来数据库中某个表(如student)的数据导入与它相同结构的新表(如people)中
db2 "insert into people select * from student"
9、修改一个表的字段类型(如表people中的fname字段把varchar(30)改为varchar(28))
db2 "alter table people alter column fname set data type varchar(28)"
格式:db2 "alter table <tablename> alter column <columnname> set data type <datatype>"
tablename:表名
columnname:字段名
datatype:字段类型
注:
一般更改字段类型是有操作限制的. 将字段改为比之前类型长度大的可以;如果要改小,必须先drop掉原来的column,然后再重新添加.
虽然我上面的执行成功了,可能是因为我用的官方免费版本的,如果遇到把长度大的改为小的无法执行,先用drop,再重新添加
10、向一个表添加字段(如向表people中添加备注信息字段notes;向表people中添加分数字段score)
格式:db2 "alter table <tablename> add <columnname> <datatype>"
db2 "alter table people add notes varchar(100)"
db2 "alter table people add score integer"
11、删除表中的某个字段(如删除表people中的字段score)
格式:db2 "alter table <tablename> drop column <columnname>"
db2 "alter table people drop column score"
注:如果drop掉字段之后,可能会导致表查询/插入操作不能执行,则需要执行一下reorg命令,优化数据结构,
格式如db2 reorg table <tablename>
db2 reorg table people
12、给表中添加带默认值的字段(如向表people中添加分数字段score,默认设置为90)
格式:db2 "alter table <tablename> add column <columnname> <datatype> not null with default <value> "
db2 "alter table people add column score interger not null with default 90"
例1.向表people中添加地址字段address默认设置为shanghai
db2 "alter table people add column address varchar(30) not null with default 'ShangHai'"
例2.将表people中地址字段address默认设置改为当前时间
db2 "alter table people alter column address set default current date"
格式:db2 "alter table <tablename> alter column <columnname> set default <value>"
13、列出数据库中用户表
db2 list tables for user
14、列出数据库中所有系统表
db2 list tables for system
15、列出数据库中所有表
db2 list tables for all
16、列出数据库中特定用户表
db2 list tables for schema db2inst1
db2 list tables for schema db2inst2
格式: db2 list tables for schema <username>
注:符号<>表示必选项
17、删除表中的数据 :
db2 delete from student where id=3
18、删除一个数据库中的某个表
db2 drop table student
4、注册表
1、查看DB2全部受支持的注册表变量列表
db2set -lr
2、更改DB2 UDB注册表变量的值
db2set registry_variable_name=new_value
db2set DB2COMM=TCPIP
3、查看在服务器上已经设置的所有DB2概要文件注册表
db2set -all
5、导入导出数据
1、导出表中的数据
以DEL格式导出
db2 "export to teacher.txt of del select * from teacher"
db2 "export to teacher_bak.txt of del modified by coldel| select * from teacher"
[db2inst1@localhost ~]$ ls
db2inst1 sqllib Sunrier teacher.sql TEST.0.db2inst1.NODE0000.CATN0000.20120817103306.001
[db2inst1@localhost ~]$ db2 "export to teacher.txt of del select * from teacher"
字段之间默认分隔符号为逗号,下面使用'|'分割
[db2inst1@localhost ~]$ db2 "export to teacher_bak.txt of del modified by coldel| select * from teacher"
以IXF格式导出
[db2inst1@localhost ~]$ pwd
/home/db2inst1
[db2inst1@localhost ~]$ ls
db2inst1 sqllib Sunrier teacher_bak.txt teacher.sql teacher.txt TEST.0.db2inst1.NODE0000.CATN0000.20120817103306.001
[db2inst1@localhost ~]$ ls /home/db2inst1/Sunrier
TEST.0.db2inst1.NODE0000.CATN0000.20120817150317.001
[db2inst1@localhost ~]$ db2 "export to /home/db2inst1/Sunrier/teacher.ixf of ixf select * from teacher"
如需要导出记录过程的message
[db2inst1@localhost ~]$ db2 "export to /home/db2inst1/Sunrier/teacher_bak.ixf of ixf messages /home/db2inst1/Sunrier/teacher.msg select * from teacher"
Number of rows exported: 4
[db2inst1@localhost ~]$ ls /home/db2inst1/Sunrier
teacher_bak.ixf teacher.ixf teacher.msg TEST.0.db2inst1.NODE0000.CATN0000.20120817150317.001
[db2inst1@localhost ~]$ cat /home/db2inst1/Sunrier/teacher.msg
SQL3104N The Export utility is beginning to export data to file
"/home/db2inst1/Sunrier/teacher_bak.ixf".
SQL3105N The Export utility has finished exporting "4" rows.
2、导入数据到一个表中
db2 "import from teacher.txt of del insert into teacher"
db2 "import from teacher_bak.txt of del modified by coldel| insert into teacher"
db2 "import from teacher.txt of del insert into teacher"
3、利用脚本创建表
格式:db2 -tvf scriptName.sql
teacher.sql为以下内容
----建立表teacher
create table teacher
(
id integer not null ,
fname varchar(20) not null,
address varchar(80) default '上海',
birth date,
primary key(id)
);
--建表结束
--以下为插入数据字段
insert into teacher values(1,'Lory','上海徐汇中学','1978-08-06');
insert into teacher values(2,'Sunrier','田林中学','1988-06-27');
4、备份数据库(如防止表误操作)
格式:db2 backup db <database name> [ to <dir name> ]
database name:表示数据库
to <dir name>:表示为备份到的目录路径,为可选项,默认在当前目录下
db2 backup db test
执行备份命令时,如果出现无法执行,则先断开数据库的连接再执行备份命令.
我使用的免费版本的DB2数据库测试时,从上面可以看出没有断开也可以执行,但执行完,发现数据库
处于断开状态了
如: db2 force application all
强制关闭实例上的所有应用程序
db2 backup db test to /home/db2inst1/Sunrier
说明:上面的方法为脱机备份(也称为离线备份或者冷备份),此方法必须断开所有与数据库连接的应用后才能进行,备份时数据库不能提供给用户使用
5、恢复数据库(如将一个表删除后,通过删除前的备份文件恢复)
格式:db2 restore db <database name> [ from <dir name> ]
database name:表示恢复的数据库名
from <dir name>:表示为从哪个目录路径下恢复,为可选项,默认在当前目录下
db2 restore db test from /home/db2inst1/Sunrier
注:如果想把恢复的数据库更改为新的数据库名,则格式如下
db2 restore db <database name> [ from <dir name> into <new database name> ]
例:db2 restore db test from /home/db2inst1/Sunrier into testdb
或者db2 restore db test from "/home/db2inst1/Sunrier" into testdb
6、db2move命令的使用
db2move是一个集成式的数据移动工具,它具有导入(import),导出(export),装入(load)三种操作方法.
db2move导出的数据文件格式是IXF(Integration Exchange Format)集成交换格式.
格式:db2move <database name> [ export -tc <username> ] -u <username> -p <password>
参数: -tc 创建表的用户名
-tn 用户的表名
-sn 模式名,即导出该模式下的所有表
查看db2move命令帮助db2move -help
导出test数据库中的全部数据
db2move test export -u db2inst1 -p Sunrier
注:
执行上面命令后会把数据库test中全部数据提取到当前目录(/home/db2inst1),每个表的内容都存储在一个.ixf文件中,
每个.ixf文件都有一个与之相对应的.msg文件,.msg文件是描述从表中导出数据时的信息.例外还有两个文件,db2move.lst用来
记录.ixf文件,.msg文件与表一一对应.EXPORT.out记录的是导出数据时的屏幕输出.
导出test数据库中的teacher表中的信息
[db2inst1@localhost ~]$ ls
db2inst1 Sunrier teacher.sql TEST.0.db2inst1.NODE0000.CATN0000.20120817103306.001
sqllib teacher_bak.txt teacher.txt
[db2inst1@localhost ~]$ db2move test export -tn teacher -u db2inst1 -p Sunrier
7、查看test数据库备份的历史记录
格式:db2 list history backup all for <database name>
[db2inst1@localhost ~]$ db2 list history backup all for test
6、数据库管理程序
1、读数据库管理程序配置标签:db2inst1,数据库,常用命令,table,db2,teacher,localhost From: https://blog.51cto.com/u_13236892/5729469
db2 get dbm cfg
2、写数据库管理程序配置
db2 update dbm cfg using 参数名 参数值
3、查看数据库的配置
db2 connect to <database> user <username> using <password>
db2 get db cfg [ for <database> ]
database:数据库名
username:用户名
password:表示密码
4、设置数据库的配置
db2 connect to <database> user <username> using <password>
db2 update db cfg for <database> using 参数名 参数值
5、添加DB2服务端口50000
切换到root用户下su - root
[root@localhost etc]# vi /etc/services
在/etc/services文件中加入db2inst1 50000/tcp
/etc/services内容格式:
# service-name port/protocol [aliases ...] [# comment]
6、断开与数据库的连接
db2 connect reset 或 db2 terminate
db2 disconnect <database>
7、查看命令帮助
[db2inst1@localhost ~]$ db2 ? db2start48.查看错误码信息
[db2inst1@localhost ~]$ db2 ? 22003
SQLSTATE 22003: A numeric value is out of range.
[db2inst1@localhost ~]$ db2 ? sql00100
[db2inst1@localhost ~]$
格式:db2 ? <ERRCODE>
8、查询当前数据库下表空间使用率
[db2inst1@localhost ~]$ db2 'select substr(tbsp_name,1,20) as TABLESPACE_NAME,substr(tbsp_content_type,1,10) as
TABLESPACE_TYPE,sum(tbsp_total_size_kb)/1024 as TOTAL_MB,sum(tbsp_used_size_kb)/1024 as USED_MB,sum
(tbsp_free_size_kb)/1024 as FREE_MB,tbsp_page_size AS PAGE_SIZE from SYSIBMADM.TBSP_UTILIZATION group by tbsp_name,
tbsp_content_type,tbsp_page_size order by 1'
9、查询当前数据库下所有表空间
[db2inst1@localhost ~]$ db2 'select tabname from syscat.tables'
10、查询数据表占用页的数量
[db2inst1@localhost ~]$ db2 'select tabname, npages from syscat.tables where tabname = 'table_name''
11、计算表占用磁盘空间大小
表占用磁盘空间大小 = 数据页大小 * 页数量
查看表占磁盘空间大小:
[db2inst1@localhost ~]$ db2 'select tabname, npages*16384/(1024*1024) from syscat.tables where tabname = 'XXXXXX''