db2&unix使用总结(一)


1.
unix 上增加环境db2的变量、:


在 /db2home2/db2inst2/sqllib 下的db2profile 里加入:
if [ -f ${INSTHOME?}/sqllib/userprofile ]; then
    . ${INSTHOME?}/sqllib/userprofile
fi


并且在用户的配置文件中也加入这句。
.profile 文件里


3.
检查数据库上的锁的情况:
[/home/liqiheng]$more lock_check.sh
#!/usr/bin/ksh
dbname=$1
filename=find.locksql.$(date+'%m%d%H%M%S')
touch $filename
echo now,connecting to database:$dbname
db2 "connect to $dbname"
echo now,finding the SQLS which made lockwait
db2 "select agent_id,substr(stmt_text,1,100) as statement,stmt_elapsed_time_ms 
from table(snapshot_statement('zjbi2',-1)) as B 
where agent_id in 
(select agent_id_holding_lk from table(snapshot_lockwait('zjbi2',-1)) as A 
order by lock_wait_start_time asc fetch first 20 rows only)
order by stmt_elapsed_time_ms desc" > $filename


4.
查看数据库锁 :
db2pd -alldbpartitionnums -db zjbi2 -locks wait showlocks>>/tmp/locks.txt
db2pd -alldbpartitionnums -db zjbi2 -transactions>>/tmp/trans.txt


5.
要了解一个表存在什么类型的索引,执行 INSPECT CHECK 命令。
要将 Type 1 索引转换为 Type 2 索引,执行 REORG INDEXES CONVERT 命令


db2 " inspect check database results keep inspect.rel "     
然后解析成格式化的内容 db2inspf inspect.rel.000 inspect.out.000
db2 "inspect check tablespace tbspaceid 2 results keep inspect.rel"  
db2 inspect check database begin TBSPACEID 11 OBJECTID 2 results checkts.out 


db2 reorg indexes all for table oracle.t1 convert 转变为 type-2 索引


type-1与type-2的区别,一个是物理删除,一个是伪删除,只是记录一下删除信息


Restart db db_name  如何激活数据库? Activate db db_name


6.计算缓冲池的命中率:
select snapshot_timestamp, substr(db_name,1,10) as dbname, 
 substr(bp_name,1,18) as bufferpool, total_hit_ratio_percent as total, 
 data_hit_ratio_percent as data, index_hit_ratio_percent as index 
 from sysibmadm.bp_hitratio
 
 
 7.
 db2 get snapshot for dbm
 db2 get snapshot for database on zjbi2 | grep  "Log pages"
 db2 get database cfg for zjbi2|grep LOGBUFSZ
 db2 get database cfg for zjbi2|grep DBHEAP
 db2 get database cfg for zjbi2|grep LOCKTIMEOUT  
 db2 get database cfg for zjbi2|grep SORTHEAP 
 db2 get database cfg for zjbi2|grep MAXAPPLS
 db2 get database cfg for zjbi2|grep MAXLOCKS 
 db2 get database cfg for zjbi2|grep LOCKLIST 
 db2 get database cfg for zjbi2|grep MAXAPPLS 
 db2 get database cfg for zjbi2|grep NUM_IO
 db2 get database cfg for zjbi2|grep MINCOMMIT
 
 
 
 8.(1) 计算锁列表大小的下限:(512 * 56 * 711) / 4096 
   (2) 计算锁列表大小的上限:(512 * 112 * 711) / 4096 


9.
 使用 rpm 命令来检验这些包是否已安装:

db2pd -osinfo  查看操作系统信息


10.手动查看格式化后的执行计划
db2 set current explain mode explain
db2 -tvf 123.sql
db2exfmt -1 -d zjbi2 -o db2exfmt1.out


仅收集数据:
db2expln -d sample -q "select * from employee" -t 

db2 "select tbspaceid, tabname from syscat.tables where tabname='ACC_DEPS_CUR' "
db2 load query table DB2ADMIN.ACC_DEPS_CUR


db2 get snapshot for tables on

db2 get snapshot for locks on  

db2 get snapshot for applications on


11.
raid-0:至少需要两个以上盘,各盘同时读取,提高读取速率,速度快,但容错能力差
raid-1:要求能够同时对两个盘进行读操作和对两个镜像盘进行写操作,磁盘利用率只有50%,数据校验非常完备
       当系统要求极高的可靠性时比较合适。
raid-5:磁盘分割技术。利用奇偶校验位回复数据,校验位分布在各个盘,至少需要3个独立硬盘,是raid-0和raid-1的折中。
       容灾上限是一块硬盘,两块盘同时出现问题就会丢失数据,因此最好热备盘,即:将一块空盘加电空挂,不加入任何卷组,
       任何一块盘出问题时代替其工作。
raid-10:先镜像在分割技术。至少4个盘。       




"CREATE DATABASE MYDB  AUTOMATIC STORAGE  on D:\db2test\mydbpath001,D:\db2test\mydbpath002,D:\db2test\mydbpath003 AUTORESIZE YES 
INITIALSIZE 100M INCREASESIZE 25M  MAXSIZE none using codeset GBK "  --此语句windows上不行


db2 "CREATE DATABASE mydb on D:\db2test USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM"  --加路径不行


db2look -d sample -e -o sample.ddl -i lenovo -w cuinan -z lenovo


create TABLESPACE mytbs  PAGESIZE 4K MANAGED BY database using ( file 'D:\dev\rlvdim_n00_01' 33M) --页大小要跟bp一样
alter TABLESPACE mytbs  add  ( file 'D:\dev\rlvdim_n00_02' 13M) 
ALTER TABLESPACE TS1  EXTEND (ALL,10000) --所有容器扩展100页
ALTER TABLESPACE PAYROLL  REDUCE  (FILE 'd:\hldr\finance'  200) --缩小200页
ALTER TABLESPACE mytbs PERSNEEXTEND (FILE 'D:\dev\rlvdim_n00_02' 250 ) --windows上的扩展
alter tablespace mytbs switch offline


db2 create table xinzhuang_tab(id int NOT NULwith default 1)
在数据库中,当表中数据被删除时,空间并不会释放,而是在该行原来的位置做个“ DELETED ”的标志,表示该空间可以被重用。当 DB2 执行 INSERT 操作时,会扫描整个表的空闲空间并将新行置入空槽。
而如果我们启用了 append on 特性,那么当插入新行时,DB2 就不必搜索空槽再插入而是直接插入到表的最后


ALTER TABLE RECEIPTS PCTFREE 10 或
 ALTER TABLE RECEIPTS PCTFREE 0 ----- 只读表 
假如字段 name 的数据类型为 varchar(60),如果一开始 name 长度为 10 字节,
这时假设它刚好可以放到一个数据页中。但是假设有一个 update 操作将 name 从 10 字节更新为 60 字节,
如果这个数据页无法放下,那么数据库就在当前位置存放一个指针,
把数据放到一个新的页中,这就叫 overflow 。 overflow 会增加 I/O 的读取,对性能不好


alter table transaction_log volatile cardinality --- 设置银行交易流水表 volatile 
这样一来,优化器将对启用 volatile 特性的表考虑使用索引扫描而不是表扫描,而无论统计信息如何。如果我们要处理的表的数据量是快速变化的,那么建议启用这个特性


清除卷的残留信息:
db2untag -f /dev/...


db2 "call admin_cmd('export to 2.del of del select * from dim_area_id')"   --为何ixf的不行,del的可以执行
db2 load from haha.ixf of IXF insert into bi.cuirong_area_id
db2 "CALL ADMIN_CMD('LOAD FROM haha.del of del REPLACE INTO cuirong_area_id')"


admin_cmd 用法:
--首先建立一个结果集数组 
--这里定义一个就够了,因为ADMIN_CMD的EXPORT操作返回值为1个result set,但是要注意别的操作有可能返回2个result set的,这时就需要定义2个了

declare loc1 result_set_locator varying;  

--然后执行存储过程ADMIN_CMD
CALL SYSPROC.ADMIN_CMD ('EXPORT to /home/user1/data/myfile.ixf OF ixf MESSAGES ON SERVER select * from staff'); 

--然后调用该ADMIN_CMD返回结果集。 
associate result set locator(loc1) with procedure ADMIN_CMD; 
--将返回结果集和结果集数组关联 


--再然后将结果集数组分配给cursor
allocate cursor1 cursor for result set loc1; 


--下来就是操作游标的东东了
fetch  cursor1 into ....--这里就不详细说了。。


--最后需要关闭游标
close cursor1;


EXPORT TO myfile.del OF DEL MODIFIED BY  coldel0x1b codepage=1386 MESSAGES msg.out SELECT * FROM bi.dim_area_id

你可能感兴趣的:(RDBMS)