Linux系统下DB2
- Linux系统下启动DB2
- 常用的一些数据库指令
- 1.数据库相关操作
- 2.表的相关操作
Linux系统下启动DB2
1.修改主机名为db2
vi /etc/sysconfig/network
将文件内容修改为:
NETWORKING=yes
HOSTNAME=db2
2.修改/etc/hosts 中主机名为db2
将文件修改成为如下:
127.0.0.1 redhat6 localhost db2 localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
3.切换到db2用户
su - db2inst1
chmod 775 sqllib/db2nodes.cfg
4.修改sqllib/db2nodes.cfg中主机名为db2
将文件修改成为如下:
0 db2 0
然后使用命令db2start
启动DB2数据库实例。
常用的一些数据库指令
1.数据库相关操作
- 开启数据库:
db2start
- 关闭数据库:
db2stop (force)
,后面加force为强制关闭,最好先保证db2 list application
没有应用连接 - 查看数据库版本
db2licm -v
或db2level
或者用SQL语句:
db2 select service_level from sysibmadm.env_init_info
- 查看db2的许可证信息:
db2licm -l
,导入许可证:db2licm -a <文件>
- 显示当前的实例:
db2 get instance
- 列出所有数据库:
db2 list db directory
- (指定路径)创建数据库:
db2 create db db_name (on /tmp)
- 连接数据库:
db2 connect to db_name
- 断开数据库连接:
db2 connect reset
或db2 disconnect current
- 数据库激活 :
db2 activate database db_name
- 查看激活的数据库:
db2 list active databases
- 停止激活:
db2 deactivate database db_name
- 删除数据库:
db2 drop database db_name
,注意删除数据库之前要使数据库处于deactive的状态 - 创建不同字符集的数据库
db2 create database db_name using codeset GBK territory CN
更多字符集(codeset)参考:DB2字符集官方文档
- 查看当前DB2数据库用户
db2 select current schema from sysibm.sysdummy1
# db2 "select current schema from sysibm.sysdummy1"
- 查看数据的相关配置
db2 get db cfg for db_name
- 设置数据库,允许进行增量备份
db2 update db cfg for <db_name> using trackmod on
- 设置归档模式数据库:
db2数据库的归档方法有如下几种off, logretain, userexit, disk, tsm, vendor。数据库的默认日志模式为循环日志记录即off.
1). 可以通过命令手动修改配置文件
db2 update db cfg for <db_name> using logretain on
db2 update db cfg for <db_name> using logarchmeth1 userexit
db2 update db cfg for <db_name> using logarchmeth1 disk:/tmp
db2 update db cfg for <db_name> using logarchmeth1 tsm
- 2).
db2 backup db <db_name> to /tmp
3). 强制归档:db2 archive log for db <db_name>
2.表的相关操作
- 列出数据库中的表:
db2 list tables
- 创建表:
db2 "create table table_name(vol1 , vol2 , vol3 ... )"
- 修改表名称:
db2 rename table <旧表名> to <新表名>
- 修改表中某字段名:
db2 alter table <table_name> rename column <old_column_name> to <new_column_name>
- 创建表指定表空间:
db2 create table table_name(vol1 , vol2 , vol3 ... ) in <tablespace_name> ;
# db2 "create table table_name(vol1 , vol2 , vol3 ... ) in <tablespace_name> "
- 创建一个主键自增的表:
db2 create table s1 (id int not null primary key generated always as identity (start with 20001,increment by +1),name varchar(200) not null) ;
# db2 "create table s1 (id int not null primary key generated always as identity (start with 20001,increment by +1),name varchar(200) not null) "
- 表的时间类型:
时间类型 | 默认当前时间 | 表达形式 |
date | default current date | xx年xx月xx日,如 2021-03-01 |
time | default current time | x时x分x秒,如 11:00:21 |
timestamp | default current timestamp | 具体时间,如 2021-03-01-11.00.21.421000 |
- 查看表所在的表空间:
db2 select tabname,tbspace from syscat.tables where tabname = '表名' ; #表名大写
# db2 "select tabname,tbspace from syscat.tables where tabname = '表名' "
- 查看表所在的索引:
db2 select * from syscat.index where tabname = '表名' ; #表名大写
# db2 "select * from syscat.index where tabname = '表名' "
- 查询所有的表空间
db2 select tbsp_name, case TBSP_USING_AUTO_STORAGE when 1 then 'YES' else 'NO' end auto_storage from table (sysproc.MON_GET_TABLESPACE('',-1)) ;
# db2 "select tbsp_name, case TBSP_USING_AUTO_STORAGE when 1 then 'YES' else 'NO' end auto_storage from table (sysproc.MON_GET_TABLESPACE('',-1)) "
- 查询确认表空间(重点观察Containers一栏的内容)
db2 connect to <DBNAME>
db2pd -db <DBNAME> -tablespaces
- 插入数据:
db2 "insert into table_name values(value1,value2 ...)"
- 将文本文件的数据导入数据库某个表中,如将test.txt文件的数据导入到student表中:
db2 import from '(路径名)\test.txt' of del insert into student ;
- 显示数据:
db2 select * from table_name
- 创建BUFFERPOOL
db2 CREATE BUFFERPOOL epayBUFFER SIZE 1000 PAGESIZE 32K ;
# db2 "CREATE BUFFERPOOL epayBUFFER SIZE 1000 PAGESIZE 32K "
- 创建TABLESPACE(表空间)
表空间SMSMANAGED BY SYSTEM
(指定的最后可以是目录)
表空间DMSMANAGED BY DATABASE
(指定的最后只能是文件)
db2 CREATE TABLESPACE epaySpace PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/db2inst1/epay/ts') BUFFERPOOL epayBUFFER ;
# db2 "CREATE TABLESPACE epaySpace PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/db2inst1/epay/ts') BUFFERPOOL epayBUFFER "
db2 CREATE TABLESPACE TS_SPACE2 MANAGED BY DATABASE USING (FILE '/home/db2inst1/ts_space2/ts' 1000)
# db2 "CREATE TABLESPACE TS_SPACE2 MANAGED BY DATABASE USING (FILE '/home/db2inst1/ts_space2/ts' 1000)"
- 清空表数据
1).使用 DELETE 语句
db2 DELETE FROM < 表名 >
该语句将清除表中所有数据,但由于这一操作会记日志,因此执行速度会相对慢一些。另外要注意的是,如果表较大,那么为保证删除操作的成功,应考虑是否留有足够大的日志空间。
2).使用 NOT LOGGED INITIALLY 选项
db2 ALTER TABLE < 表名 > ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE
这一方法仅在所操作的表在创建时选择了 NOT LOGGED INITIALLY 选项进行定义后才可使用。整个删除操作将不会记日志,因此执行速度是这 4 种方法中最快的一种,但删除的数据是不可恢复的。
3).使用 LOAD 命令
db2 LOAD FROM /dev/null OF DEL REPLACE INTO < 表名 > NONRECOVERABLE
--(UNIX 系统或 LOAD FROM < 空文件 > OF DEL REPLACE INTO < 表名 > NONRECOVERABLE
在这一方法中,REPLACE 导入方式首先会将表中所有数据清空,然后 IMPORT/LOAD 又向表中导入了空数据,从而实现了数据的清除操作。
4).使用 DROP/CREATE TABLE 语句
db2 DROP TABLE < 表名 > CREATE TABLE < 表名 > < 字段的定义 >
如果保存有表的定义语句,或已利用 DB2LOOK 命令获得了表定义的脚本,那么也可先删除整个表,再重新创建表。如果表较大,那么用这种方法实现数据清空的速度会快于使用 DELETE 语句。但是用这种方法时要注意:如果这个表上有很多外键,那么需要维护外键的完整性。
PS:
9.7新增了
TRUNCATE TABLE tabname IMMEDIATE
快速删除表里所有行,不能回滚