db2总结

------------------------------------------安装-----------------------------------------------
 1 创建用户和组
   groupadd  db2asgrp
  groupadd  db2instgrp
   groupadd  db2fencgrp
   useradd -g db2asgrp db2as
   useradd -g db2instgrp db2inst1 --实例用户
   useradd -g db2fencgrp db2fenc1 --安全用户
     
 2 输入 ./db2_install 
   提示 Do you want to choose a different directory to install [yes/no] ?   --安装目录
   输入 no   -- 使用默认目录就可以了
   输入 ESE  --选择安装ESE,即enterprise server edition
   
 3 安装license
   [root@seagull bin]# cd /opt/ibm/db2/V9.1/adm/
   [root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2ese_c.lic
   [root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2dpf.lic
   [root@seagull adm]# ./db2licm -a /tmp/seagull/db2v9/license/db2xmlese.lic
   
 4 创建实例和样本数据库
   [root@seagull V9.1]# cd /opt/ibm/db2/V9.1/instance
   [root@seagull instance]# ./db2icrt -p 50000 -u db2fenc1 db2inst1  --创建实例
   [root@seagull instance]# tail -n 6 -f /etc/services
# Local services
DB2_db2inst1    60000/tcp
DB2_db2inst1_1  60001/tcp
DB2_db2inst1_2  60002/tcp
DB2_db2inst1_END        60003/tcp
[root@seagull ~]# su - db2inst1
[db2inst1@seagull ~]$ db2sampl  --创建sample示例数据库
[db2inst1@seagull sqllib]$ db2start
[db2inst1@seagull sqllib]$ db2 connect to sample
[db2inst1@seagull sqllib]$ db2 "select * from staff"
 
  5 创建das管理服务器
    为了远程客户端能够用控制中心来控制数据库服务器,需要在数据库服务器上安装das,当然,如果只是远程连接而不是远程管理,可以不用装。
   [root@seagull instance]# ./dascrt -u db2as
   [root@seagull instance]# su - db2as
   [db2as@seagull ~]$ db2admin start


  6.确认一下db2inst1实例的服务名 
   [db2inst1@seagull ~]$ db2 get dbm cfg|grep SVCENAME
      TCP/IP Service name                          (SVCENAME) = 50000


  7.可以看一下license情况 
   [db2inst1@seagull ~]$ db2licm -l
    Product name:                     "DB2 Enterprise Server Edition"
License type:                     "CPU Option"
Expiry date:                      "Permanent"
Product identifier:               "db2ese"
Version information:              "9.7"
Enforcement policy:               "Soft Stop"
Features:
DB2 Performance Optimization ESE: "Not licensed"
DB2 Storage Optimization:         "Not licensed"
DB2 Advanced Access Control:      "Not licensed"
DB2 Geodetic Data Management:     "Not licensed"
IBM Homogeneous Replication ESE:  "Not licensed"


 8 windows 远程连接
   db2cmd
   db2 catalog tcpip node 节点名 remote IP地址 server 50000
   db2 catalog db 库名 as 本地库别名 at node 节点名
   此时打开控制中心,就可以操作远程的数据库了


 9 问题 1 ,如果在linux能连上库,用客户端连不上可以用以下命令解决
   root用户进入db2的instance目录下
   执行 ./db2iupdt db2inst1


-------------------------------------------------------------------------------------------------
db2inst1 环境变量
if [ -f /home/db2inst1/sqllib/db2profile ]; then
    . /home/db2inst1/sqllib/db2profile
fi


rewsdb2 环境变量
if [ -f /home/db2inst1/sqllib/db2profile ]; then
 . /home/db2inst1/sqllib/db2profile
fi


  ----------------------------------------—命令------------------------------------------------
使索引生效  
db2 runstats on table schema.表名 and detailed indexes all  
  
0 DB2日志
DB2HOME/sqllib/db2dump/db2diag.log
  
1 建立编目
catalog tcpip  node  节点名 remote IP地址 server 端口号
   
2 卸载节点编目
uncatalog  node  节点名


3 查看机器上节点目录
db2 list node directory | more


4 数据库编目
db2 catalog db 节点上库名 as 本地库别名 at node 节点名   --as 本地库别名可不加


5 卸载数据库编目
db2 uncatalog db 库名


6 察看数据库的编目
db2 list db directory | more


7 连接节点上的数据库
db2 connect to 库名 user 用户名 using 密码  


8 导出数据
db2 export to 目录/myfile.ixf of ixf messages msg select * from tb1
db2 export to 目录/myfile.dat of del modified by coldel0x03 nochardel datesiso select * from tb1 WITH UR


9 导入数据
db2 import from 目录/myfile.ixf of ixf messages msg replace into tb1
db2 "import from c:\zj\321104\bbsybsj.ixf of ixf modified by forcein insert into bbsybsj"
db2 import from 目录/myfile.dat of del modified by coldel0x03 nochardel keepblanks CODEPAGE=1386 replace into tb1
db2 load from myfile.dat of del modified by coldel0x03 nochardel keepblanks CODEPAGE=1386 replace into M_TDL_F_F_GL_PUB_CMVCA


db2 import to c:\dftz.txt of del commitcount 5000 messages  c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 messages c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert_update into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 create into dftz   (仅IXF)
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace_create into dftz  (仅IXF)


load from tempfile of del modified by delprioritychar replace into 表名 nonrecoverable;
说明:
在不相关的数据表export数据时,可以采取并发的形式,以提高效率;
modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;
replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;
nonrecoverable无日志方式装入;




10 启动实例(db2inst1)
db2start


11 停止实例(db2inst1):
db2stop
db2stop force


12 列出所有实例(db2inst1)
db2ilist


13 列出当前实例:
db2 get instance


14 察看示例配置文件:
db2 get dbm cfg|more


15 写数据库管理程序配置
db2 update dbm cfg using 参数名 参数值


16 创建数据库:
db2 create db 库名 using codeset GBK territory CN


17 察看数据库配置参数信息
db2 get db cfg for 库名|more


18 更新数据库参数配置信息
db2 update db cfg for 库名 using 参数名 参数值


修改数据库日志大小
db2 update db cfg for etl2 using LOGFILSIZ  42000
db2 update db cfg for etl2 using LOGPRIMARY  50
db2 update db cfg for etl2 using LOGSECOND 20


19 删除数据库:
db2 drop db 库名


20 连接数据库
db2 connect to 库名


21 列出所有表空间的详细信息。
db2 list tablespaces show detail


13.列出容器的信息
db2 list tablespace containers for 表空间id show detail


14 列出所有表
db2 list tables


15 列出所有的系统表
list tables for system


16.创建表:
db2 ceate table tb1(id integer not null,name char(10))
17.插入数据:
db2 insert into tb1 values(1,’sam’);
db2 insert into tb2 values(2,’smitty’);
18.查询数据:
db2 “select * from tb1”
19.删除数据:
db2 delete from tb1 where id=1
20.创建索引:
db2 create index idx1 on 表名(字段);
21.创建视图:
db2 create view 视图名 as select id from 表名


22 执行文中的sql
db2 -tvf 文件名.sql
23 执行一个批处理文件
db2 –tf 批处理文件名 (文件中每一条命令用 ;结束)


24 备份数据库
db2 backup db 库名 to 目录地址


25 恢复数据库
db2 restore db 库名 from 目录地址


26 查看数据表结构
db2 “describe select * from 表名”


27 查询表建的索引
DESCRIBE INDEXES FOR TABLE 表名 SHOW DETAIL
db2 "select INDNAME, COLNAMES FROM syscat.indexes where tabname='表名'"


28 查询一张表的状态
db2 "load query table 表名"


29 查询数据库里有没有表锁了。
db2 "select * from sysibmadm.locks_held"


30 A用户安装DB2后(安装在默认目录),如何用B用户启动DATABASE?


    在B用户下的.PROFILE中加上


    ./HOME/DB2INST/SQLLIB/DB2PROFILE


31 查询连接到db2库的应用
db2 list application for db 库名 show detail
 
31.关闭所有应用连接
    db2 force application all
    db2 force application ID1,ID2,,,Idn MODE ASYNC 
    
31 查看版本 
  db2level  


32 查看数据库字符集  
  db2 get db cfg|grep code  
  Database code page                                      = 1208
  Database code set                                       = UTF-8
  Database country/region code                            = 1
  #注解,在客户端,要设置db2codepage变量与数据库一致,这样才能正确的显示汉字,客 户端设置方法db2set db2codepage=1208,在windows 上,db2codepage默认为1386(GBK),linux上默认为1208(UTF-8),aix上默认为819(ISO8859-1),要注意 这个问题,我在客户端查询t1表时就发现是乱码,后来设置了客户端变量db2codepage才搞定。
  另外一种可行的办法是,在服务器上创建生产库时,指定数据库字符集为GBK,这样windows客户端就不用改db2codepage变量了,这个方法我以前用过,当时在服务器上创建生产数据库的脚本为:
  
su - db2inst1
db2set db2codepage=1386  #为了能创建gbk字符集数据库
exit  #退一次为了使得设置生效
su - db2inst1
db2 create db GZDC using codeset GBK territory CN
   
connect to gzdc
db2 grant dbadm on database to db2admin
db2 "create bufferpool BP_8K size -1  pagesize 8192 not extended storage"
db2 "alter bufferpool IBMDEFAULTBP immediate size 50000"
CREATE system temporary TABLESPACE TS_SYSTEMP_04  PAGESIZE 4096  MANAGED BY DATABASE USING (FILE '/db2data/db2data01/stmp4k1.dbf' 1024M, FILE  '/db2data/db2data02/stmp4k2.dbf' 1024M)  EXTENTSIZE 32 PREFETCHSIZE 64
CREATE system temporary TABLESPACE TS_SYSTEMP_08  PAGESIZE 8192  MANAGED BY DATABASE USING (FILE '/db2data/db2data01/stmp8k1.dbf' 5G, FILE  '/db2data/db2data02/stmp8k2.dbf' 5G)  EXTENTSIZE 192 PREFETCHSIZE 384 BUFFERPOOL BP_8K
CREATE LARGE TABLESPACE HOSPITALSPACE PAGESIZE 8192 MANAGED BY DATABASE USING 
(FILE '/db2data/db2data01/HOSPITAL_01.dbf' 50G,
 FILE '/db2data/db2data02/HOSPITAL_02.dbf' 50G,
 FILE '/db2data/db2data01/HOSPITAL_03.dbf' 50G,
 FILE '/db2data/db2data02/HOSPITAL_04.dbf' 50G,
 FILE '/db2data/db2data01/HOSPITAL_05.dbf' 50G,
 FILE '/db2data/db2data02/HOSPITAL_06.dbf' 50G,
 FILE '/db2data/db2data01/HOSPITAL_07.dbf' 50G,
 FILE '/db2data/db2data02/HOSPITAL_08.dbf' 50G,
 FILE '/db2data/db2data01/HOSPITAL_09.dbf' 50G,
 FILE '/db2data/db2data02/HOSPITAL_10.dbf' 50G) 
EXTENTSIZE 192  PREFETCHSIZE 384   BUFFERPOOL BP_8K;
CREATE LARGE TABLESPACE MANAGERSPACE PAGESIZE 8192 MANAGED BY DATABASE USING (FILE '/db2data/db2data01/MANAGER_01.dbf' 25G)       EXTENTSIZE 192  PREFETCHSIZE 384        BUFFERPOOL BP_8K
alter tablespace managerspace add (file '/db2data/db2data02/MANAGER_02.dbf' 25G)


33 db2advis 根据优化器的配置以及机器性能给出提高查询性能的建议,种建议主要集中于如何创建索引,这些索引可以降低多少查询代价,需要创建哪些表或者 Materialized Query Table(MQT) 等
1)创建temp.sql里面写需要优化的sql语句,以";"结束
2)执行
  db2advis -d 库名 -n sample -a 用户名/密码 -i temp.sql >test.log
  
34 查看表空间的状况?
    select * from  sysibm.SYSTABLESPACES


35 db2batch 测试SQL的执行性能
db2batch -d 库名 -f select.sql -a 用户名/密码 > test.log
(select.sql中有查询的sql语句,以";"结束)


36 db2expln 获得文本形式的查询计划
db2expln -d 库名 -user 用户名 密码 -stmtfile sql文件(文件中的sql结束没有;)-z @ -output 输出结果文件 -g
(db2expln 将存取计划以文本形式输出,它只提供存取计划中主要的信息,并不包含每一个操作占用多少 CPU、I/O、占用Buffer 的大小以及使用的数据库对象等信息,方便阅读。但是 db2expln 也会将各项有关存取计划的信息存入 Explain表中,用户可以使用db2exfmt 察看详细的格式化文本信息。
  -z @: -z参数指定多个查询之间的分隔符,之处的分隔符为@)


37 获取连接的进程
db2 list applications


38 删除当前正在使用的application:
db2 "force application (Id1,Id2,Id3)"
Id1,Id2,Id3 是List显示的应用号


39 删除所有的进程
db2 force application all


40 查看当前应用号的执行状态:
db2 get snapshot for application agentid 299 |grep Row


41 查看数据库配置
db2 get db cfg for 库名 


42 將数据库的参数设置为默认数值  
reset db cfg for 库名


43 修改数据库配置参数数值
update db cfg for 库名 using 参数名 参数值
update db cfg for etl2 using LOGFILSIZ 100000


44 设置表不记录日志
db2 "alter table 表名 activate not logged Initially"     


45 如何重新啟動数据库?
    Restart db db_name
46 如何激活数据库?
    Activate db db_name
47 如何停止数据库?
    Deactivate db db_name
48 如何重命名表?
    Rename old_tablename to new_tablename




----------------------------------------—缓冲池 表空间------------------------------------------------


1 创建缓冲池
db2 create bufferpool 缓冲池名 immediate size 100 automatic pagesize 32k
db3 CREATE BUFFERPOOL BP_FM IMMEDIATE ALL DBPARTITIONNUMS SIZE 50000 NUMBLOCKPAGES 0 PAGESIZE 16K;
  
2 修改缓冲池
db2 alter bufferpool 缓冲池名 size 10240


3 删除缓冲池
db2 drop bufferpool 缓冲池名


4 查看缓冲池状况
db2 "select * from  sysibm.sysbufferpools" 


4 创建表空间
DB2 CREATE REGULAR TABLESPACE 表空间名 PAGESIZE 4K MANAGED BY AUTOMATIC STORAGE BUFFERPOOL 缓冲池名


CREATE LARGE TABLESPACE TBS_DATA_FM                                                
PAGESIZE 16K                                                      
MANAGED BY AUTOMATIC STORAGE                                                     
EXTENTSIZE 32                                                     
PREFETCHSIZE AUTOMATIC                                            
BUFFERPOOL BP_FM                                                        
INITIALSIZE 10G                                                   
INCREASESIZE 2G
NO FILE SYSTEM CACHING                                            
AUTORESIZE YES; 


5 DB2快照
  1、打开db2监控开关
  #db2 connect to eos
  #db2 update monitor switches using statement on
  #db2 reset monitor all
  2、几分钟之后,我们收集sql统计快照
  #db2 get snapshot for dynamic sql on eos > dysqlstatus.out


select * from sysibmadm.top_dynamic_sql where (stmt_text like '%CACHE_%' OR STMT_TEXT LIKE  '%cache_%') and (stmt_text like 'select%' or stmt_text like 'insert%' or stmt_text like 'delet%') order by average_execution_time_s desc fetch first 30 rows only;
----------------------------------------—sql------------------------------------------------
  
1 查询去除重复记录
select  c.cstno,c.name,c.v1 
from (select row_number() over( partition by a.cstno,a.name ) as rn, a.cstno,a.name,b.v1
         from test1 a , test2 b where a.cstno=b.cstno) c
where  c.rn = 1  


2 列出表中前10条数据  fetch first 10 rows  only 
  select * from <表名> fetch first 10 rows only
  
3 对是null的字段进行值转换 coalesce(字段名,转换后的值) 
  select coalesce(id,1)  from <表名>    --对表中id如果为null转换成1
  
4 计算出日期中是周几(1是周日,2是周一.......7是周六)  dayofweek(日期)
  计算出日期中是周几(1是周一.......7是周日)     dayofweek_iso(日期)
   dayofweek(date(2008-01-16))   --它会返回是4,代表星期三
   dayofweek_iso(date(2008-01-16))   --它会返回是3,代表星期三
   
   注意:参数中日期的格式是YYYY-MM-DD的形式,如果不是需要进行转换,否则函数不能使用
   
5 一年中的第几天,范围在1-366范围之内   dayofyear(日期)


6 把参数1加上连接值组成一个新值 concatt(参数1,连接值)
  concat('aa','b')    --返回是aab


7 转义字符
  如果你想查询字符串中包含‘%’或‘_’ ,就得使用转义字符,比如,要想查询testtab中包含字符串’99%’的纪录
  SELECT * FROM testtab WHERE title like '%99!%%' escape '!'


8 表压缩
  在建表语句后加 COMPRESS YES;
----------------------------------------—linux------------------------------------------------
1 每两秒查一次io读写
iostat -t 2   
l
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值