DB2

DB2 - 命令 数据库操作

标签(空格分隔): DB2实例 DB2授权 数据库


DB2用户授权

# 数据库名称
database_name=lqr 
# 用户名称
user_name=lqr
# 查看表空间名称
# db2 "list tablespaces show detail" 
# 表空间名称 需要大写
tablesapce_name=USERSPACE1 
# 实例或者数据库管理员用户登录,不然权限不足
instance_name=db2inst1
instance_passwd=qwe123

db2 connect to $database_name user $instance_name using $instance_passwd
# 数据库授权
db2 "grant connect on database to user $user_name" 
# 表空间授权
db2 "grant use of tablespace $tablesapce_name to user $user_name"    
# 需要先db2 connect to $database_name user $instance_name using $instance_passwd(用数据库管理员权限)
db2 "grant dbadm, createtab, bindadd, connect, create_not_fenced_routine, implicit_schema, load, create_external_routine, quiesce_connect, quiesce_connect, secadm on database to user $user_name" 

echo "$user_name $database_name 授权成功"  

DB2数据批量导入导出脚本

Time:2017-02-18

echo "----   数据库数据导入&导出脚本   -----"
#     一次性导出数据库中所有表,并生成对应的ex.sh导出脚本和lo.sh导入脚本
#     操作:1.修改参数 2.运行脚本export.sh得到ex.sh和lo.sh以及columns.txt
#          3.运行ex.sh导出数据得到大量del文件 4.使用lo.sh导入del数据到数据库

#参数
db_name=dwdb    #数据库名称
user_name=lqr   #用户名称
user_passwd=qwe123    #用户密码
tabschema_name=LQR    #用户名称 #必须大写 
#db2 "select SCHEMANAME,owner,CREATE_TIME from syscat.schemata" 查看当前存在的Schema


#db2 connect to lqr user lqr using qwe123;
db2 connect to $db_name user $user_name using $user_passwd;
rm -rf columns.txt
rm -rf ex.sh
rm -rf lo.sh
#db2 -x "select tabname,colname,row_number() over(partition by tabname order by colno desc) from syscat.columns where tabschema = 'LQR' and left(tabname,2) = 'FB' order by tabname,colno with ur" > columns.txt
db2 -x "select tabname,colname,row_number() over(partition by tabname order by colno desc) from syscat.columns where tabschema = '$tabschema_name' order by tabname,colno with ur" > columns.txt
#echo "db2 connect to lqr user lqr using qwe123;" >> ex.sh
echo "db2 connect to $db_name user $user_name using $user_passwd;" >> ex.sh
echo "db2 connect to $db_name user $user_name using $user_passwd;" >> lo.sh

sql=""
cat columns.txt|while read tabname colname num
do
    if [ $num == 1 ]
    then
        echo "db2 "export to $tabname.del of del select $sql$colname from $tabname"">> ex.sh
        echo "db2 "load from $tabname.del of del  insert into $tabname ($sql$colname)"">> lo.sh
        sql=""
    else
        sql="$sql$colname,"
    fi
done

备注:导出的数据,用txt文件查看中文正常,xshell查看乱码,导入乱码,由于Linux默认的读取编码问题导致的,在用户目录下的.vimrc中加入set encoding=utf-8 fileencodings=ucs-bom,utf-8,gbk,cp936 设置读取的编码格式

运行后的结果:

运行后的结果

—– 未测试

1、查看数据库页大小
db2 get db cfg
2、收集表状态信息
db2 runstats on table schema.table_name
3、查询数据表占用页的数量
select tabname, npages from syscat.tables where tabname = ‘table_name’
4、计算表占用磁盘空间大小
表占用磁盘空间大小 = 数据页大小 * 页数量
查看表占磁盘空间大小:select tabname, npages*16384/(1024*1024) from syscat.tables where tabname = ‘XXXXXX’

db2 v9以上查看表占磁盘逻辑空间大小:select sum(x.DATA_OBJECT_P_SIZE+x.INDEX_OBJECT_P_SIZE+x.LOB_OBJECT_P_SIZE+x.LONG_OBJECT_P_SIZE+x.XML_OBJECT_P_SIZE) from SYSIBMADM.ADMINTABINFO x where TABNAME=’XXXXXXX’;
select TABNAME,sum(x.DATA_OBJECT_P_SIZE+x.INDEX_OBJECT_P_SIZE+x.LOB_OBJECT_P_SIZE+x.LONG_OBJECT_P_SIZE+x.XML_OBJECT_P_SIZE) from SYSIBMADM.ADMINTABINFO x group by TABNAME;
db2 v9以上查看数据库占用空间大小:db2 “call SYSPROC.GET_DBSIZE_INFO(?,?,?,10)”

原文地址:https://www.cnblogs.com/superscfan/p/12257042.html