db2运维命令
=======================================================================================
===================================系统命令============================================
=======================================================================================
也就是直接在db2环境变量下直接敲就可以的,这些命令都可以再产品目录下找到
●db2level 查看数据库版本
●db2ilist 查看实例
●db2icrt -a SERVER -s ese -p db2c_bnd8inst -u bnd8fenc bnd8inst 创建实例
●db2idrop xxinst 删除实例
●db2start 启动数据库实例(数据库跟随实例启动,不能单独关闭和启动数据库)
●db2stop 关闭数据库实例
●db2stop force 强制停止
●db2iauto -on testinst系统启动实例自动启动
●db2iauto -off testinst 系统启动实例不自动启动
●db2sampl 创建例库
●db2tbst 十六进制状态码 可以显示表空间状态
●db2move dbname export 备份数据
●db2move dbname import恢复数据
●db2ckbkp -h BTADB.0.btainst.NODE0000.CATN0000.20120206132720.001 查看数据库备份。
●db2cklog CHECK 3 to 5 ARCHLOGPATH /archivelog 检查归档日志
●reorgchk 注意选项是使用当前的统计信息还是更新后的统计信息
●db2advis -d sample -s "select * from employee where workdept='A00' and salary > 40000" -o output.out 也可以对批量的语句进行advise
●db2pd 需要仔细研究和熟悉
●db2acsutil 快照备份和管理,详细资料看信息中心
●db2addicons 针对linux系统,对某用户创建tools的菜单,详细见信息中心。
●db2adutl TSM相关命令,详细见信息中心。
●db2ckrst 从备份文件中的历史文件中查看历史数据。
●db2convert 将行组织表转化为列组织表
●db2dart 详细见信息中心,和笔记单独专题。
●db2drdat drda的trace文件。
●db2empfa 针对sms管理表空间的空间分配时按照段而不是页。
●db2exfmt 执行计划。
●db2exmig 迁移解释表。
●db2expln 解释表
●db2extsec 该命令和权限有关,没认真看。
●db2flsn 根据lsn号找到对应日志db2flsn 000000BF0030 (例如db2flsn -path /db2sys/db2inst1/db2inst1/NODE0000/SQL00001 00001C2078A6C1BD)
●db2fodc 详情见笔记中的相关章节。
●db2fopt 让优化器使用这个命令指定的参数值来作为语句优化器评估时候的值,例如测试系统sortheap是2000,但是使用该命令将其设置为5000,语句优化器评估时候讲使用5000来制定执行计划。
●db2gcf 启动、停止、监视实例用,一般用在自动执行脚本中,详见信息中心。
●db2inidb You must issue this command before you can use a split-mirror database.
●db2inspf Formats the data from INSPECT CHECK results into ASCII format.
●db2iupdt 实例升级
●db2iupgrade Upgrades an instance to a DB2? copy of the current release from a DB2 copy of a previous release.
●db2logsForRfwd Parses the DB2TSCHG.HIS file. This utility allows a user to find out which log files are required for a table space rollforward operation.
●db2mtrk 查看内存
●db2osconf Makes recommendations for kernel parameter values based on the size of a system.
●db2pdcfg Sets flags in the DB2? database memory sets to influence the database system behavior for problem determination purposes.
●db2prereqcheck 安装前检查
●db2relocatedb This command renames a database, or relocates a database or part of a database (for example, the container and the log directory) as specified in the configuration file provided by the user.
●db2rfpen Puts a database in rollforward pending state. 需要在归档模式执行。
●db2rspgn 获取响应文件
●db2sampl 创建sample库
●db2snapcore On Linux and Solaris operating systems, this command mimics the functionality provided by the snapcore command on AIX? operating systems.
●db2unins Uninstalls one or more DB2? database products, features, or languages.
●db2untag Removes the tag on a table space container.The tag is used to prevent DB2 from reusing a container in more than one table space. 例如报错:SQL0299N Container is already assigned to the table space. SQLSTATE=42731的时候使用该命令
<######################################>
●db2ls(需要进入到产品目录下的install下执行)
db2inst1@ZBDB1:[/opt/IBM/db2/V9.5/install]$./db2ls 可以查看安装的目录和版本升级的日期
Install Path Level Fix Pack Special Install Number Install Date Installer UID
---------------------------------------------------------------------------------------------------------------------
/opt/IBM/db2/V9.5 9.5.0.10 10 Tue Oct 30 14:58:42 2012 BEIST 0
[root@db2server install]# ./db2ls -q -b /opt/ibm/db2/V9.7 查看安装了哪些组件
Install Path : /opt/ibm/db2/V9.7
Feature Response File ID Level Fix Pack Feature Description
---------------------------------------------------------------------------------------------------------------------
BASE_CLIENT 9.7.0.0 0 Base client support
JAVA_SUPPORT 9.7.0.0 0 Java support
SQL_PROCEDURES 9.7.0.0 0 SQL procedures
BASE_DB2_ENGINE 9.7.0.0 0 Base server support
JDK 9.7.0.0 0 IBM Software Development Kit (SDK) for Java(TM)
CONNECT_SUPPORT 9.7.0.0 0 Connect support
COMMUNICATION_SUPPORT_TCPIP 9.7.0.0 0 Communication support - TCP/IP
REPL_CLIENT 9.7.0.0 0 Replication tools
CONTROL_CENTER 9.7.0.0 0 Control Center
DB2_DATA_SOURCE_SUPPORT 9.7.0.0 0 DB2 data source support
LDAP_EXPLOITATION 9.7.0.0 0 DB2 LDAP support
INSTANCE_SETUP_SUPPORT 9.7.0.0 0 DB2 Instance Setup wizard
SPATIAL_EXTENDER_CLIENT_SUPPORT 9.7.0.0 0 Spatial Extender client
APPLICATION_DEVELOPMENT_TOOLS 9.7.0.0 0 Base application development tools
DB2_UPDATE_SERVICE 9.7.0.0 0 DB2 Update Service
FIRST_STEPS 9.7.0.0 0 First Steps
DB2_SAMPLE_DATABASE 9.7.0.0 0 Sample database source
TEXT_SEARCH 9.7.0.0 0 DB2 Text Search
INFORMIX_DATA_SOURCE_SUPPORT 9.7.0.0 0 Informix data source support
<######################################>
●db2licm 许可证相关
查询db2licm的帮助信息:db2licm -h
db2licm -l 查看软件授权信息
db2licm –a db2ese.lic,添加license
查询许可文件记录的版本信息 db2licm -v
<######################################>
●db2_kill 杀DB2进程
●db2_ps 查看DB2进程
db2_kill或ps -efl|grep -i xxinst|awk '{print $2}'|xargs kill -9
执行ipcs -a|grep -i testinst 查找共享内存
根绝上面查到的共享内存信息执行ipcrm -m 共享内存ID或使用ipclean,ipcs|grep testinst|awk '{print "ipcrm -"$1" "$2}'>xx.sh
●db2_local_ps 查看本地db2进程 还没试验和db2_ps有何区别
<######################################>
●db2look 可以:
1获取数据库对象的ddl语句
2 生成update语句用来更新数据库管理器和数据库配置
3 生成db2set命令,用于设置DB2概要注册表
4 提取和生成数据库统计报告
5 生成update语句,用户复制关于数据库对象的统计信息。
db2look -d xxxdb -o xxx.ddl 获取的是编目表的字段信息。
db2look -d xxxdb -e -l -x -a -td @ -o XXX.ddl 获取全库的对象和表空间、bufferpool的ddl语句,grant语句,使用@做分隔符。
db2look -d fxdb -e -t table1 table2 -td @ -o tmp.ddl 只取某表的ddl语句 但是表前不能指定模式名。
-d 指定数据库
-a 为所有的创建者(creator)生成DDL信息。指定了该项会忽略-u(-u指定creator)
-e 提取-u XXusr或-a参数指定的用户的所能访问的对象(表、视图、存储过程、函数、序列、别名、nickname等)的ddl语句。如果不指定-u或-a则使用$USER
-l 生成数据库布局,这里用于数据库分区组、缓冲池、表空间的布局
-x 获取grant信息
-t 指定表 -v指定视图
-m 以模拟模式运行,生成了包括sql update语句的脚本,这些sql update语句捕获所有的统计数据。指定-m时忽略-p -g -s。-c -r只有在-m时才有效,-c不取COMMIT, CONNECT and CONNECT RESET statements语句,-r不取RUNSTATS语句。
-f 获得配置和环境变量的参数db cfg ,dbm cfg
-td 指定ddl语句的分隔符号 不指定的时候默认使用";"
实验:testinst创建了bufferpool 表空间 testinst.table1,test用户创建了test.table1 test.view1
db2look -d testdb -e -td @ -o 1 不知道为什么使用默认的$USER却产生了 所有表的ddl,所以严重怀疑默认不是使用$USER而是使用-a
db2look -d testdb -e -u testinst -td @ -o 1.1 只产生了testinst用户所拥有的表
db2look -d testdb -e -u test -td @ -o 1.2 只产生了test 用户所拥有的表
一般db2look -d xxxdb -e -l -x -a -td @ -o XXX.ddl 使用获取全库信息即可
db2look -d db_alias -a -e -m -l -x -f -td @ -o db2look.sql 是比较全的,通常用不到。
注意:通过db2look 拿出的脚本包含的授权语句是不包括隐式授权的,例如使用test用户创建了test.table1表,使用db2look是拿不出该表上对test用户的授权语句的,一定要注意,通过db2look创建数据库或者表的时候一定要注意,要检查该表的creater 和 owner。
<######################################>db2support
db2support?实用程序应该由具有?SYSADM?权限的用户(如实例所有者)运行,以便该实用程序可以收集所有必需的信息而不发生错误。如果没有?SYSADM?权限的用户运行?db2support,则在实用程序运行“query?client”或“list?active?databases”之类的命令时,可能会产生?SQL?错误(SQL1092)。
所有条件下收集以下信息:
db2diag.log 、所有陷阱文件、锁定列表文件、转储文件、缓冲池和表空间(SQLSPCS.1和SQLSPCS.2)、控制文件(使用-d选项)、各种与系统有关的文件、各种系统命令的输出、db2cli.ini
-c并且可连接至数据库,则db2support.html文件包含以下信息:
用户表的数目、数据库数据的大概大小、数据库快照、应用程序快照、缓冲池信息、、LIST APPLICATIONS 命令的结果、LIST COMMAND OPTIONS 命令的结果、LIST DATABASE DIRECTORY 命令的结果、LIST INDOUBT TRANSACTIONS 命令的结果、LIST DATABASE PARTITION GROUPS 命令的结果、LIST DBPARTITIONNUMS 命令的结果、LIST ODBC?DATA SOURCES 命令的结果 、LIST PACKAGES/TABLES 命令的结果、LIST TABLESPACE CONTAINERS 命令的结果、LIST TABLESPACES 命令的结果、LIST DRDA IN?DOUBT TRANSACTIONS 命令的结果?
-s 扩展系统信息
-a 用于收集所有核心文件,-r 用于仅收集近的核心文件
db2support . -d <dbname> -a -c -s -f
<######################################>
●db2diag 查看日志
1:db2diag -g db=MYDB |more ( 注:数据库名字为大写)
2:db2diag -time 2010-03-01 -level "Error"
3:db2diag -time 2010-03-01 -level "Severe"
4:db2diag -g APPHDL="0-222"
5: db2diag -g level=Severe
6:db2diag -g db=SAMPLE,instance=aabrashk
<######################################>das相关
●dasauto
●dascrt
●dasdrop
●dasmigr
●dasupdt
●db2admin
●db2daslevel
<######################################>事件监控器相关
●db2evmon Formats event monitor file and named pipe output, and writes it to standard output.
●db2evtbl Use db2evtbl to generate the CREATE EVENT MONITOR statement.
Defining WRITE TO TABLE event monitors is more straightforward when using the db2evtbl tool. For example, the following steps can be followed to define and activate an event monitor.
Use db2evtbl to generate the CREATE EVENT MONITOR statement.
Edit the SQL statement, removing any unwanted columns.
Use the CLP to process the SQL statement. (When the CREATE EVENT MONITOR statement is executing, target tables are created.)
Issue SET EVENT MONITOR STATE to activate the new event monitor.
<######################################>故障monitor
db2fm
db2fmcu
<######################################>trace
●db2trc 进程内存跟踪
db2trc on -l 8M :使用 on 选项启用跟踪工具后,将跟踪实例所作的所有后续工作。
db2trc clr :clr 选项来清除跟踪缓冲区
db2trc dmp trace.dmp :内存缓冲池转储至磁盘。
db2trc off :关闭跟踪
db2trc flw example.trc nul 验证是否可读取跟踪文件
db2trc flw trace.dmp trace.flw 转换为 ASCII 格式。这是通过 flw 和 fmt 选项完成的
db2stop
db2start
db2trc on -f db2trc.dmp
db2 "rollforward database db00 to end of logs and stop overflow log path (/home/db2nps/db00/arclog/sjzbinst/DB00/NODE0000/C0000000) recover dropped table 000000000000560100020004 to /home/db2nps/db00/db2bak"
db2trc off
db2trc flw db2trc.dmp db2trc.flw
db2trc fmt db2trc.dmp db2trc.fmt
db2trcoff 同db2trc off
db2trcon 同db2trc on
The db2trcon and db2trcoff command supports all the parameters of the db2trc command.
db2xprt - Format trap file command
<######################################>db2pd
db2pd工具有两种执行方式:
1.交互式 db2pd -interactive
2.直接在命令行执行
其实和交互方式执行是一样的结果。
db2pd有22个选项,如果想对所有分区,所有活动数据库,运行所有选项,您只要输入db2pd -everything,就会列出所有信息。
//如果想控制输出的范围,可以参考如下:
范围 范围选项 说明
实例 -inst 或 -ins 用于实例
数据库 -database x 或 –db x 用于特定的数据库x
数据库 -alldatabase 或 –alldb 用于所有数据库
分区 -dbpartitionnum n 或 –dbp n 用于特定的数据库分区服务器 n
分区 -alldbpartitionnums 或 –alldbp 用于实例中的所有数据库分区服务器
(1)-repeat [num sec] [count] 该选项用于重复db2pd命令,并指定间隔多长时间执行多少次
(2)-file <filename> 该选项将输出结果保存到一个指定文件中。
(3)db2pd 命令的所有选项都可以使用前三个字符的缩写,只有两个除外:-mempools 和 –memsets。
<######################################>执行计划
如何获取SQL执行计划
SQL 解释工具
SQL 解释工具提供查询优化器为 SQL 语句所选择的访问计划的有关详细信息。该信息存储在 EXPLAIN 表中,可以在稍后使用诸如 Visual Explain、db2expln、dynexpln 和 db2exfmt 的工具进行格式化,从而以友好的可视方式进行表示。
EXPLAIN 表可以在您次使用 Visual Explain 时自动进行创建。即使没有创建它们,您也可以手工进行创建,如下:
% cd <db2 install path>\sqllib\misc
% db2 connect to bank
% db2 -tvf EXPLAIN.DDL
使用 db2exfmt 工具。解释动态 SQL 语句,在 DB2 CLP窗口中按照下列步骤进行:
% db2 connect to <database_name>
% db2 set current explain mode explain
% db2 -tvf <Input file with an SQL statement ended with a semicolon>
% db2 set current explain mode no
% db2exfmt -d <dbname> -g TIC -w -1 -n % -s % -# 0 -o <output file>
<######################################>db2batch 批量测试语句的执行性能。
基准测试是从各种不同方面(例如数据库响应时间、cpu 和内存使用情况)对应用程序进行评测的一个过程。基准测试基于一个可重复的环境,以便能够在相同的条件下运行相同的测试。之后,对测试收集到的结果可以进行评估和比较。
db2batch 是一种基准测试工具,它以一组 SQL 和/或 XQuery 语句作为输入,动态地准备语句和描述语句,并返回一个结果集。取决于 db2batch 命令中所使用的选项,结果集可以返回这些语句的执行时间、关于内存使用情况(例如缓冲池)的数据库管理器快照和缓存信息。db2batch 就是这样一个 Benchmark 工具,它能够提供从准备到查询完成中各个阶段所花费地具体时间,CPU 时间,以及返回的记录。
db2batch 命令格式:
db2batch -d <db_name> -a <user>/<password> -i <time_condition> -f <sql.file> -r <output>
对于执行 db2batch 时一些详细的设置可以通过 -o 参数指定,也可以在 SQL 文件中指定,譬如可以在 SQL 文件中使用下面的配置参数:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
例子SQL文件,保存到1.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
select * from employee where empno='000340'@
--#COMMENT Query 2
select * from employee where empno='000350'@
其中 ROWS_FETCH 和 ROWS_OUT 定义了从查询的结果集中读取记录数和打印到输出文件中的记录数,PERF_DETAIL设置了收集性能信息的级别,DELIMITER 则指定了多个查询间的间隔符。
执行命令:
db2batch -d sample -i complete -f 1.sql -r 1.out
db2batch还允许在输入文件中定义SQL程序块,并且可以定义这个块重复执行的次数,这个功能对于基准测试是很有用处的。
--#BGBLK [repeat_count]
(定义查询块的开始)
--#EOBLK
(定义查询块的结束)
例子SQL文件,保存到2.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 10
select * from employee where empno='000340'@
--#EOBLK
其中 BGBLK 10定义了SQL块的开始,并且定义了循环执行的次数为10次,EOBLK定义了SQL块的结束。
执行命令:
db2batch -d sample -i complete -f 2.sql -r 2.out
db2batch还允许为SQL语句中条件字段指定参数值。如果使用了参数文件,则每一行都将为一条给定语句和一个块的给定迭代指定参数值。如果使用了 #PARAM 伪指令,则会为每条语句的每个参数预先指定多个值甚至指定参数范围,而对于块的每次迭代,将从每个参数的指定集合中选择一个随机值。#PARAM 伪指令与参数文件不能混合在一起。
-m后跟一个参数文件,它包含在执行一条语句之前要绑定至SQL 语句参数标记的参数值。缺省情况是不绑定参数。
参数值的格式如下:
-36.6 'DB2' X'0AB2' G'...' NULL 12 'batch' x'32ef' N'...' null +1.345E-6 'db2 batch' X'afD4' g'...' Null
定义每个参数就像定义 SQL 常量一样,并且每个参数与其他参数之间用空格隔开。
非定界文本表示数字;纯定界(')文本表示单字节字符串;
以 x/X 作为前缀的定界(')文本表示编码为成对的十六进制数字的二进制字符串;
以 g/G/n/N 作为前缀的定界(')文本表示组成双字节字符的图形字符串;
而 NULL(不区分大小写)表示空值。
参数输入文件格式:
第 X 行列示要为在输入文件中执行的第 X 条 SQL 语句提供的一组参数。
如果语句块不重复,则这对应于输入文件中列示的第 X 个 SQL 语句。
空白行表示相应的 SQL 语句没有参数。
参数的数目和类型必须与 SQL 语句期望的参数数目和类型一致。
参数伪指令格式:
--#PARAM [single | start:end | start:step:end] [...]
每个参数伪指令都会指定一组参数值,每次执行查询时就从这一组参数值中选择一个随机值。参数值集合由单个参数值和参数值范围组成。通过在两个有效参数值之间添加一个冒号(:)的方式来指定参数值范围,而是否添加空格作为分隔符是可选的。可以在开始值与结束值之间放置第三个参数值作为步长,该步长将覆盖缺省值。每个参数范围等价于指定“start, start+step, start+2*step, ... start+n*step”中的单个值,其中 n 的选择标准是应满足“start+n*step <= end”且“start+(n+1)*step > end”。
虽然可以使用参数伪指令来为任何类型(甚至可以是 NULL)的参数指定多组值,但是,仅支持数字参数值(整数和小数)范围。
使用参数文件的场景,例子SQL保存到3.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 10
select * from employee where empno= ?@
--#EOBLK
参数文件,保存到3.par中:
'200010'
'200120'
'200140'
'200170'
'200220'
'200240'
'200280'
'200310'
'200330'
'200340'
执行命令:
db2batch -d sample -i complete -f 3.sql -m 3.par -r 3.out
使用参数文件的场景,SQL块中包含2条SQL,例子SQL保存到4.sql文件中
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#BGBLK 5
select * from employee where empno= ?@
select * from employee where empno= ? and JOB=?@
--#EOBLK
参数文件,保存到4.par中:
'200010'
'200010' 'SALESREP'
'200120'
'200120' 'CLERK'
'200140'
'200140' 'ANALYST'
'200170'
'200170' 'DESIGNER'
'200220'
'200220' 'DESIGNER'
执行命令:
db2batch -d sample -i complete -f 4.sql -m 4.par -r 4.out
使用参数伪指令的场景1,例子SQL保存到5.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#BGBLK 10
select * from employee where empno= ?@
--#EOBLK
执行命令:
db2batch -d sample -i complete -f 5.sql-r 5.out
使用参数伪指令的场景2——包含2个参数标记,例子SQL保存到6.sql文件中:
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
执行命令:
db2batch -d sample -i complete -f 6.sql -r 6.out
使用参数伪指令的场景3,例子SQL保存到7.sql文件中
每个程序块前必须单独定义参数,下面的语句将执行不成功,因为第2个程序块没有使用参数伪指令单独定义参数
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
--#BGBLK 5
select * from employee where empno= ? and job=?@
--#EOBLK
修正为如下的语句将可以成功执行
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
'000340'
--#PARAM
'FIELDREP'
--#BGBLK 10
select * from employee where empno= ? and job=?@
--#EOBLK
--#PARAM
'200240'
--#PARAM
'CLERK'
--#BGBLK 5
select * from employee where empno= ? and job=?@
--#EOBLK
执行命令:
db2batch -d sample -i complete -f 7.sql -r 7.out
使用参数伪指令的场景4,例子SQL保存到8.sql文件中
参数值集合可以由单个参数值和参数值范围组成。以上例子演示的都是由单个参数值组成的集合;下面例子演示如何使用参数值范围组成的集合来为动态SQL语句的占位符提供值,通过在两个有效参数值之间添加一个冒号(:)的方式来指定参数值范围,而且参数伪指令不能被包含在程序块中,不然可能会出现每次取得相同的值。
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
31840:152750
--#BGBLK 10
select * from employee where SALARY<?@
--#EOBLK
执行命令:
db2batch -d sample -i complete -f 8.sql -r 8.out
使用参数伪指令的场景5,例子SQL保存到9.sql文件中
下面例子演示如何使用参数值范围组成的集合来为动态SQL语句的占位符提供值,通过在两个有效参数值之间添加一个冒号(:)的方式来指定参数值范围,可以在开始值与结束值之间放置第三个参数值作为步长,该步长将覆盖缺省值。每个参数范围等价于指定“start, start+step, start+2*step, ... start+n*step”中的单个值,其中 n 的选择标准是应满足“start+n*step <= end”且“start+(n+1)*step > end”。
--#SET ROWS_FETCH -1 ROWS_OUT 5 PERF_DETAIL 1 DELIMITER @ TIMESTAMP
--#PARAM
31840:10:152750
--#BGBLK 10
select * from employee where SALARY<?@
--#EOBLK
执行命令:
db2batch -d sample -i complete -f 9.sql -r 9.out
总体说明:
1. 所有 SQL 语句都必须以 --#SET DELIMITER 命令设置的定界符 (缺省值为“;”)结尾。此定界符可以是一个或两个字符。
2. SQL 语句的长度仅受到可用内存和使用的接口的限制。 可以将一条语句分成多行,但是不允许多条语句位于同一行上。
3. 输入文件的行长度仅受到可用内存的限制。
4. db2batch 将发出它自己的 CONNECT 和 CONNECT RESET。
5. 当使用 LONG 计时方式时,将把 PAUSE(暂停)和SLEEP(休眠)所花的时间也计算在内。
6. 必须创建了说明表才能使用说明选项。
7. 对于 db2batch,所有命令行选项和 SQL 文件语句都不区分大小写
=======================================================================================
===================================CLP命令============================================
=======================================================================================
也就是执行前边必须加上db2 的命令
●db2 get instance :Returns the value of the DB2INSTANCE environment variable.
●db2 attach to XXX XXX为本用户下的实例名或node
●db2 detach从attach的实例断开。
●db2 get dbm cfg 获得实例参数配置
●db2 get dbm cfg show detail delayed value 为挂起值 ,不知道为什么执行该命令必须attach to到实例,及时使用db2 get instance看到是该实例也不行。
●db2 get db cfg for dbname 获得数据库参数配置
●db2 get db cfg show detail, delayed value 为挂起值
●db2 update dbm cfg using 参数 值 ---修改数据库实例参数
●db2 update db cfg for dbname using 参数 值 --修改数据库参数
●db2 reset db/dbm cfg for dbname将db cfg重置为默认值
●db2 list node directory 查看节点
●db2 list db directory 列出本实例下的所有库
●db2 list active databases显示活动库
●db2 restart database testdb 重新启动数据库
●db2 activate database testdb 激活数据库
●db2 Deactivate database testdb 停止数据库
●db2 LIST、update COMMAND OPTIONS 显示clp命令行选项
●db2 list applications
●db2 list applications show detail
●db2 force application ( 1128,1129 )根绝句柄值断掉应用
●db2 force applications all 中断所有数据库应用
●db2 list tablespaces show detail 查看表空间
●db2 list tablespace containers for (tablepace id) show detail根据表空间ID查看容器
●db2 list tables for all 列出所有的表名
●db2 "list tables for schema myschema" 列出shecma 为myschema的表名 list tables for system查看所有系统表
●db2 list packages 列出包名
●db2 "describe table tablename" db2 "describe select * from tablename"显示某表的表结构
●db2 describe indexes for table lcpt.HIS_TBDATACSRCTMP show detail 显示表的索引信息
●db2 load query load状态查询
●db2 archive log 对日志强行截断和归档
●db2 autoconfigure 对系统进行简单评估,自动配置参数
●db2 change database comment 修改db 的commet信息,可以从db2 list db directory中看到
●db2 change isolation level :Isolation level changes are not permitted while connected to a database with a type 1 connection. The back end process must be terminated before isolation level can be changed
●db2 deregister 在LDAP服务器上注册
●db2 START HADR
●db2 STOP HADR
●db2 TAKEOVER HADR
●db2 PRUNE HISTORY/LOGFILE Used to delete entries from the recovery history file or to delete log files from the active log file path. The PRUNE LOGFILE command is deprecated and might be removed in a future release.
●db2 RECOVER DATABASE 相当于resotre 家 rollforward
●db2 get cli cfg 查看db2cli.ini
●db2 get connection state 查看连接状态
●db2 get dbm monitor switches 查看monitor开启情况,直接在dbm中看也可以,使用db2 get monitor switches 可以查看当前回话的监控设置
●db2 RESET MONITOR 重置监控器计数器
●db2 INGEST 可以从输入文件或者管道将数据导入到表,没做过测试,不清楚具体作用于何种场景
●db2 INSPECT 和db2dart作用类似,详细情况见信息中心。
●db2 LIST UTILITIES show detail 查看正在执行的utilities信息,目前知道的有backup、restore、rollforward、runstats、load、dpf的数据重新分发、异步索引清除,reorg不能监视。
●db2 MIGRATE DATABASE Converts a previous version of a DB2? database to the formats corresponding to the release run by the instance.This command is deprecated and will be discontinued in a future release. You should use the UPGRADE DATABASE command instead.
●db2 SET SERVEROUTPUT 控制输出到标准输出的结果,详情见信息中心。
●db2 SET UTIL_IMPACT_PRIORITY ;db2 SET WORKLOAD和工作负载相关,节流策略。
●db2 GET AUTHORIZATIONS 查看当前用户的权限
●db2 set integrity for test.users immediate checked 初始化一致性检查,一般在load结束后会出现不一致情况,需要执行此命令,使用load query 命令可以看到状态为checked状态,而不是normal
●db2 set write suspend/resume 用来进行镜像分割备份
●db2get routine into <filename> from [specific] procedure <routine-name>[hide body] 将 SQL 过程抽取成二进制文件。
●db2put routine from <filename> [owner <newowner>[use registers]] 从二进制文件部署 SQL 过程。
<######################################>REORG INDEXES/TABLE
reorg table f_sw.VWLog1_113 allow read access use VWSTMP2 脱机
reorg table f_sw.VWLog1_113 inplace allow write access 联机整理
reorg table f_sw.VWLog1_113 inplace stop
reorg table f_sw.VWLog1_113 inplace pause
reorg table f_sw.VWLog1_113 inplace resume
reorg indexes all for table f_sw.VWLog1_113 allow write access;联机整理索引。
可通过db2pd -d xxdb -reorg或者历史文件查看reorg进度。
<######################################>分区内并行度
●db2 SET RUNTIME DEGREE
>>-SET RUNTIME DEGREE FOR--+-ALL--------------------------+-----TO--degree------><
| .-,------------------. |
| V | |
'-(----application-handle-+--)-'
Sets the maximum run time degree of intra-partition parallelism for SQL statements for specified active applications.
The actual run time degree will be the lowest of:
the max_querydegree configuration parameter dbm的参数
the application run time degree
the SQL statement compilation degree.bind时候可以指定
<######################################>alternate server
在create database 和 catalog 后可以通过命令指定和修改alternate server
●UPDATE ALTERNATE SERVER FOR DATABASE
●UPDATE ALTERNATE SERVER FOR LDAP
<######################################>quiesced
当调用表空间停顿(quiesce)功能的应用程序独占(读或写)、共享或意向更新访问的表空间的时候处于该状态。
使用下列命令将表空间处于该状态:
首先确认表空间处于normal
db2 quiesce tablespaces for table table1 reset;
db2 quiesce tablespaces for table table1 exclusive;
db2 quiesce tablespaces for table table1 share;
db2 quiesce tablespaces for table table1 intend to update;
可以执行
db2 quiesce tablespaces for table table1 reset;消除该状态。
如何除去quiesce状态
1. 连接到数据库
2. 用 list tablespaces 判断哪个tablespace处于quiesce状态和和取得对象(object)ID
3. 判断对象ID对应的表
a)用 db2 "select tabname from syscat.tables where tablid=对象ID" 得到表名
b)用 db2 list history 判断是那个表
4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce状态
QUIESCE DATABASE
QUIESCE INSTANCE--instance-name--+-------------------+------->
+-USER--user-name---+
'-GROUP--group-name-'
然后使用 UNQUIESCE恢复实例和数据库即可
<######################################>仿操作系统命令
●db2 echo 和操作系统的echo相同,只是可以通过db2 CLP调用
●db2 history 和系统的history相同
●RUNCMD xx 或者执行r xx 执行使用db2 history命令看到的历史命令,xx是历史命令对应的号码
●db2 edit 何以调用系统的editor例如vi.
●db2 ping
<######################################>二阶段提交相关
●LIST DRDA INDOUBT TRANSACTIONS
●LIST INDOUBT TRANSACTIONS
INDOUBT TRANSACTION 是DB2 为了保护数据一致性 而采取的方法。当一个交易完成一阶段提交而没有开始第二阶段时,DB2不能判断其它同伴的状况,不能作出回滚或前滚决定.这时候, DB2就把这个交易定为INDOUBT TRANSACTION。
严格按MESSAGE 推选的方法进行恢复, 一般先用DISPLAY THREAD(INDOUBT)找出 INDOUBT TRANSACTION 信息,确定采取回滚或前滚.然后用RECOVERY INDOUBT 命令回滚或前滚。
●QUERY CLIENT 详情参看set client命令,可以配置连接和断开连接时候的一些机制,同二段连接有很大关系。type1和type2连接。
<######################################>dpf相关
●LIST DATABASE PARTITION GROUPS
●LIST DBPARTITIONNUMS
<######################################>快照相关
●get snapshot for database on xx
●get snapshot for all databases
●get snapshot for remote database on dbname
●get snapshot for application applid appl-id
●get snapshot for application agentid appl-handle
●get snapshot for applications on dbname
●get snapshot for all applications
●get snapshot for locks for application applid appl-id
●get snapshot for locks for application agentid appl-handle
●get snapshot for locks on dbname
●get snapshot for tablespaces on dbname
●get snapshot for all bufferpools
●get snapshot for bufferpools on dbname
●get snapshot for dynamic sql on dbname
<######################################>bind相关
●PRECOMPILE 编译*.sqc文件。
●BIND command Invokes the bind utility, which prepares SQL statements stored in the bind file generated by the precompiler, and creates a package that is stored in the database.
●db2rbind - Rebind all packages command
●REBIND command Allows the user to recreate a package stored in the database without the need for a bind file.
●db2bfd -s -b -v 察看bnd文件属性 属主、创建者、模式,-s查看sql,-b查看文件头,-v查看变量
<######################################>catalog 编目相关
db2 catalog tcpip node XXX remote 22.5.232.24 server 50001 编目节点
db2 uncatalog node XXX 删除node
db2 catalog db ccbdb as oltpdb at node dbserver 编目远程库
实例损坏、或者其它情况需要重新建造实例:
B2DIR/instance/db2idrop XXXinst
B2DIR/instance/db2icrt -u XXXinst XXXinst
db2 catalog db XXdb on /xxx/xxx(原来数据库所在路径)
db2 catalog tcpip node XXX remote 22.5.232.24 server 50001 编目节点
db2 list node directory 查看建成的node
db2 uncatalog node XXX 删除node
db2 catalog db ccbdb as oltpdb at node dbserver 编目远程库
list db directory 可以看到所catalog的库例如
Database alias = FXDB_ALIAS 通过alias来访问远程库。
Database name = FXDB
Node name = FXDBNODE ##通过节点来访问。
Database release level = c.00
Comment =
Directory entry type = Remote ##############代表为编目的远程库接口
Catalog database partition number = -1
Alternate server hostname =
Alternate server port number =
db2 uncatalog db XXDB 反编目xxdb
<######################################>创建,备份,恢复相关
db2 create db testdb on /xxx/xxx using codeset GBK territory CN 创建数据库
db2"CREATE DATABASE GCFRONT USING CODESET GBK TERRITORY CN COLLATE USING IDENTITY
CATALOG TABLESPACE MANAGED BY SYSTEM USING ('/bcabdb/GCFRONT/sys/SYSCATSPACE')
USER TABLESPACE MANAGED BY DATABASE USING (FILE '/bcabdb/GCFRONT/usr/USERSPACE1' 1000) EXTENTSIZE 32 PREFETCHSIZE 64
TEMPORARY TABLESPACE MANAGED BY SYSTEM USING ('/bcabdb/GCFRONT/tmp/TEMPSPACE1')"
db2 backup db dbname to directory备份整个数据库,也可以做镜像分割进行备份和恢复。
db2 restore db dbname from directory 恢复整个数据库
db2 rollforward db sample to end of logs
db2 rollforward db sample to 1998-04-03-14.21.56.000000
db2 rollforward db xxxdb query status就可以看到必须滚的日志了
db2 drop db testdb 删除数据库
<######################################>恢复被删除的表
如何实施已删除表的恢复(Dropped Table Recovery)
1. 首先数据库要可以前滚恢复(数据库配置参数logretain或userexit打开)。
2. 对要实施Drop Table Recovery的表空间(限regular tablespace),执行: alter tablespace 表空间名 dropped table recovery on
3. 用 list history dropped table all for 数据库名 得到删除表的tableid(例如 0000000000006d0000020003)和表结构的生成语句(DDL),记录tableid和该语句以便恢复。之后,用drop命令删除的表中的数据可以在前滚恢复时导出。
4. 恢复数据库后,如果想恢复已删除的表,在前滚时加recover dropped table tableid to 目标目录 。 在该目录下被删除的表中的数据导出,例如导出至 ../NODE0000/data文件。利用上面提到表结构生成语句生成被删除了的表,然后用import命令将数据导入表中。
例如:
db2 "restore db db00 taken at 20140527090933 logtarget /home/db2nps/db00/db2bak/logtar"
db2 "rollforward database db00 to end of logs and stop overflow log path (/home/db2nps/db00/arclog/sjzbinst/DB00/NODE0000/C0000000) recover dropped table 000000000000560100020004 to /home/db2nps/db00/db2bak"
<######################################>导入导出相关
export 导出数据
db2 "export to filename of ixf select * from tablename "
例:db2 "export to usertable.exp of del select * from myschema.usertable "
db2 "export to usertable.exp of ixf select * from myschema.usertable "
import导入数据
db2 "import from filename of del|ixf insert into tablename "
例:db2 "import from usertable.exp of del insert into myschema.usertable "
db2 "import from usertable.exp of ixf insert into myschema.usertable "
load游标导入
declare INSbasecurs5 cursor for select * from R_SHARE_DUE_TMP_BAK ;
load from INSbasecurs5 of cursor replace into CISYS.R_SHARE_DUE NONRECOVERABLE;
lob数据导入导出
export to /tmp/tmp/blob/XLSRULE.ixf of ixf LOBS TO /tmp/tmp/blob LOBFILE XLSRULE_blob MODIFIED BY LOBSINFILE MESSAGES OYP.OUT select * from hdev.XLSRULE
import from /tmp/tmp/blob/XLSRULE.ixf of ixf LOBS FROM /tmp/tmp/blob MODIFIED BY LOBSINFILE REPLACE INTO hdev.XLSRULE
XML数据导入导出
export to staff.ixf of ixf XML to /db2exp1/, /db2exp2/ modified by XMLINSEPFILES select * from db2inst1.staff
快速清空表
db2 "import from /dev/null of del replace into RISYS .SHARE_DUE_TMP_BAK ”可以快速释放空间
如果是drop table不会马上释放,会逐步释放空间。
快速清除一个大表? ALTER TABLE TABLE_NAME ACTIVE NOT LOGGED INITALLY WITH EMPTY TABLE 和使用load不同,load通过物理形式导入,修改该属性只是不记录日志,执行该语句只是激活该属性,只在本连接中有效。
EXPORT TO "C:\Documents and Settings\likeliang\test.dat" OF DEL MODIFIED BY NOCHARDEL COLDEL0x03 DECPT. MESSAGES "C:\Documents and Settings\likeliang\test.txt"
LOAD FROM "C:\Documents and Settings\likeliang\test.dat" OF DEL MODIFIED BY NOCHARDEL COLDEL0x03 DECPT. MESSAGES "C:\Documents and Settings\likeliang\test.txt" REPLACE INTO CBMP.F_GL_INN_IAMAA_S;
modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;默认定界符优先级是: record delimiter, character delimiter, column delimiter.使用该参数后的优先级是: character delimiter, record delimiter, column delimiter.
影响Export工具性能的因素:
Export中指定的Select语句的执行效率
Export指定的文件目录的磁盘写速度
影响Import工具性能的因素
指定的insert语句执行效率
指定的文件目录的磁盘读速度
提交频率(在不产生日志满和锁升级等错误的前提下,尽量将COMMITCOUNT指定的大一些)
<######################################>历史文件相关命令
查看历史文件使用 list history
例如list history all for testdb
查看备份db2 list history backup all for testdb
查看归档db2 list history ARCHIVE LOG all for CICHEAL
删除历史文件使用 prune history timestamp [with force options]删除小于等于该时间戳的内容。
恢复历史文件使用 restore db testdb history file
修改更新历史文件内的条目,详情见信息中心UPDATE HISTORY FILE
<######################################>收集统计信息
下面是收集统计信息的命令的例子
!!!!!注意:不能收集列组上的分布统计信息。Collection of frequent values and distribution statistics on column groups is currently not supported; distribution statistics will not be collected when column groups are specified in the WITH DISTRIBUTION ON COLUMNS clause
1 收集表和索引上的数据库统计信息,包含分布统计信息
runstats on table testinst.table1 with distribution and indexes all
2 收集表上的统计信息,索引上的详细统计信息,包含分布统计信息
runstats on table testinst.table1 with distribution and detailed indexes all
3 收集选定列中包含分布的统计信息。
!!!!!!!!注意:这只是指定列的分布统计信息而不是列组的。
runstats on table testinst.table1 with distribution on columns(a,b)
4 只收集表上的统计信息,包含a、b列上的基本统计信息和c、d列上分布统计信息
runstats on table testinst.table1 on columns(a,b) with disribution on columns(c,d)
5 收集构成索引的a、b列以及非索引列的c、d列包含分布的统计信息。
runstats on table testinst.table1 with distribution on key columns and columns(c,d)
6 收集表上的数据库统计信息,使用指定的num_freqvalues和db cfg中的num_quantiles收集所有列的分布统计信息。
runstats on table testinst.table1 with distribution default num_freqvalues 40 default后跟的num_freqvalues值的意义是所有为明确指定num_freqvalues值的列都使用此值。
7 收集表上的数据库统计信息,包括列a、b上的分布统计信息,a使用指定的统计信息范围,b、c使用默认统计信息范围,并且收集idx_a、idx_b的数据库统计信息。
runstats on table testinst.table1 with distribution on columns(a num_freqvalues 50 num_quatiles 60,b,c) default num_freqvalues 70 num_quatiles 80 and indexes testinst.idx_a,testinst.idx_b
8 收集所有索引上的统计信息,包括列a上分布统计信息,未列出的列上的分布统计信息将被清除。
runstats on table testinst.table1 with distribution on columns(a num_freqvalues 50 num_quatiles 60) and indexes all
<------->like statistics
在runstats 中指定like statistics子句时,将收集附加的统计信息,这些统计信息被存储在sysibm.syscolumns表中的sub_count和sub_delim_length列中,它们仅针对字符串列进行收集,查询优化器利用它们提高 where column like %abc/abc%/%abc%类型的选择性估计。
收集所有列上的统计信息并指定varchar列上的like统计信息
runstats on table testinst.table1 on all columns and columns(a like statistics)
<------->包含统计信息配置文件的runstats
统计信息配置文件是一组选项,预先定义了特定表上要收集的统计信息。
db2中没有删除配置文件的选项。常用命令如下:
1 注册一个配置文件,不收集数据库统计信息
runstats on table testinst.table1 and indexes all set profile only
2 注册一个配置文件,并执行所存储统计信息配置文件的runstats命令选项来收集目录统计信息
runstats on table testinst.table1 and indexes all set profile
3 只修改现有配置文件,不收集任何数据库统计信息
runstats on table testinst.table1 with distribution and indexes all update frofile only
4 修改现有配置文件,并执行已经更新的配置文件的runstats命令来收集数据库统计信息。
runstats on table testinst.table1 with distribution and indexes all update frofile
5 根据前面已经注册的统计信息配置文件来查询runstats选项。
select statistics_profile from sysibm.systables where name='TABLE1' and creator ='TESTINST'
6 使用前面注册的统计信息文件收集统计信息
runstats on table testinst.table1 use profile
<------->抽样的runstats
如果数据量巨大的表做全面的runstats会对资源造成很大的耗费,所以可以通过扫描表的一部分做抽样来收集统计信息。
通过sampleed detailed子句来收集详细的索引统计信息。例子如下:
1 通过抽样收集全部索引上的详细数据库统计信息
runstats on table testinst.table1 and sampled detailed indexes all
2 收集索引上的详细抽样统计信息和表的分布统计信息。
runstats on table testinst.table1 with distrbution on key columns and sampled detailed indexes all
V8.2后提供了对表数据进行抽样的两种方法:行级别Bernoulli抽样和系统页级抽样
页级抽样的对象是页,以P/100的概率选择每页。在被选中页中的,选中所有行。和行级抽样和全表扫描比页级抽样节约了I/O
例子:
1 收集统计信息,包含10%行的分布统计信息
runstats on table testinst.table1 with distribution tablesample bernoulli(10)
2 控制收集统计信息的样本集,以及可以重复使用相同的样本集:(1024是指定的一个整数,表示将用于生成样本的种子(seed),使用相同的种子可以生成相同的样本,只要表数据没发生改变)
runstats on table testinst.table1 with distribution tablesample bernoulli(10) repeatable(1024)
3 收集10%的数据页上的索引统计信息和表统计信息。注意只对表页抽样,而不是索引页。下例中的10%的表数据页用于表统计信息的收集,而用于索引统计信息将使用所有的索引页
runstats on table testinst.table1 and indexes all tablesample system(10)
总之抽样信息的准确性取决于抽样率、数据倾斜、以及用于抽样的数据集群。
<------->reorgechk
例子:
1 收集全部表的统计信息,请慎用,很耗费系统资源,大系统不要在繁忙时间做。
$ db2 reorgchk update/current statistics [on tables all]
update statistics选项作用类似调用runstats来更新数据统计信息,但是所有列上的统计信息智能通过默认的runstats选项来收集。
2 收集单个表上的统计信息
reorgchk update/current statistics on table testinst.table1
3 收集一个模式下对象的数据库统计信息
reorgchk update/current statistics on schema testinst
<------->load
V8.2之后可以在load期间收集统计信息,可以使用选项stistics use profile(需要在这之前创建统计信息配置文件),这样快过在load后再执行runstats。选项statistics yes相对已经过时,不如stistics use profile控制的更精细化.
例子:
load from xx.del of del replace into testinst.table1 statistics usre profile
<------->创建索引的过程中收集统计信息
收集基本的索引统计信息:
create index testinst.idx_a on table1(a) collect statistics
收集扩展的索引统计信息:
create index testinst.idx_a on table1(a) collect detailed statistics
收集扩展的索引统计信息,指定使用抽样:
create index testinst.idx_a on table1(a) collect sampled detailed statistics
=======================================================================================
===================================SQL=================================================
=======================================================================================
●db2 connect to dbname 连接数据库
●db2 disconnect testdb 断掉连接
●db2 COMMIT WORK 提交作业,详细看命令详解
●db2 CONNECT RESET 详细看connect命令详解
●db2 terminate 结束本session的所有应用,断掉数据库连接。
●db2 terminate 与db2 reset和disconnect的区别见命令详解。
●create schema schema_name
●set current schema / set current sqlid
was的数据源中的属性中的currentschema配置是区分大小写的,例如配置了模式jzsd模式,他引用的时候会强制使用小写模式名,而通常db2中为大写,所以要注意
●db2 "call PRO_F_CM_SRC_TFUNDINFO('20111231','3',?)" 执行存储过程PRO_F_CM_SRC_TFUNDINFO(22.5.228.188 rdmusr rdmusr@123)
创建存储过程的时候,如果使用db2 -t 来执行创建,好使用db2 -td xxx end结尾使用分隔符xxx,因为存储过程中的语句结束符使用的";"所以会混淆。
●rename table xxtable to yytable
●rename index xxindex to yyindex
●rename tablespace xx to yy
●flush package cache DYNAMIC 清空动态包缓存
<######################################>db2对象的大小写
例如表名,字段名,模式名,在默认建立时db2会自动将其转换成大写。只有使用双引号例如"objectname"才能强制为小写。例如:
create table "gdp".table1 (a int)
create table test.table1(a int)
db2 list tables for all
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
TABLE1 gdp T 2012-08-24-09.33.54.864692
TABLE1 TEST T 2012-08-21-18.10.13.747499
select * from gdp.table1
SQL0204N "GDP.TABLE1" is an undefined name. SQLSTATE=42704
select * from "gdp".table1
A
-----------
0 record(s) selected.
<######################################>创建表空间
create tablespace testspace1 pagesize 16k managed by database using (file '/backup/containers/test1' 500) extentsize 32 bufferpool testbuf16k
create tablespace testspace2 pagesize 8k managed by automatic storage initialsize 10 M bufferpool testbuf8k
create tablespace testspace2 pagesize 16k managed by automatic storage bufferpool buf16k initialsize 50M increasesize 5M extentsize 64
alter tablespace testspace2 extend(file '/backup/containers/test2' 5M)
alter tablespace testspace2 extend (all 5M)
alter tablespace testspace2 add(file '/backup/containers/test3' 5M)
<######################################>创建修改bufferpool
create bufferpool testbuf16k size 1024 pagesize 16k
create bufferpool testbuf16k size 1024 pagesize 16k numblockpages 512 blocksize 32
drop bufferpool testbuf16k
alter bufferpool GCBP8K size 2048
<######################################>主键外键
外键语法:例子
create table A (
id int not null,
name varchar(30),
constraint constraint_xxx primary key (id) 主键
);
也可以
create table A (
id int not null,
name varchar(30),
primary key (id)
);
create table B (
id int not null,
name varchar(30),
groupid int,
primary key (id),
constraint constraint_yyy foreign key (groupid) references A(id) on delete cascade on update cascade 外键
);
也可以
create table B (
id int not null,
name varchar(30),
groupid int,
primary key (id),
foreign key (groupid) references A(id) on delete cascade
);
更改foreign key约束定义的引用行为(delete cascade/delete set null/delete no action),默认是delete on action
引用行为(当主表中一条记录被删除时,确定如何处理字表中的外部码字段):
delete cascade : 删除子表中所有的相关记录
delete set null : 将所有相关记录的外部码字段值设置为NULL
delete no action: 不做任何操作
<######################################>comment
comment ON TABLE t1 is 'test table 1 aaaaa'
select remarks from syscat.tables where tabname='T1'
comment on column gdp1.a is 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
select remarks from syscat.columns where tabname='GDP1' and colname='A'
更新commnet只要再执行commnent语句,新注释就会替换旧注释了。
<######################################>创建索引
创建集群索引create index index1 on table1(a,b) cluster
创建值索引
CREATE UNIQUE INDEX I_ztables_tabname ON zjt_tables(tabname);
创建双向索引。
create index index1 on table1 (a desc) allow reverse scans 允许双向扫描。
create index index1 on table1 (a desc) disallow reverse scans 不允许反向扫描。
create index index1 on table1 (a) include(b)
create index index1 on table1 (a,b)
指定索引页中小已用空间的阀值(pct是percentage的缩写。):
create index index1 on table1 (a) minpctused 20
当低于该值时候,启动联机索引重组(前提是db cfg中的auto_maint 、auto_tbl_maint 、auto_reorg 参数为on)
就是当索引数据在叶子页中占用的空间少于20%时候会尝试将相邻的两个叶子页进行合并,当然这只能解决叶子页碎片化的问题。
指定索引创建时候预留出的空闲空间
create index index1 on table1 (a) pctfee 10
在索引创建的时候为每个叶子页预留出10%的空闲空间,一可以避免后续的插入操作导致叶子页满后索引页频繁分裂,二可以对于聚簇索引可以保持索引数据的正确顺序。
<######################################>序列:
create sequence xxxseq start with 1 increment by 1 maxvalue 100 nocycle cache 25
alter sequence xxxseq restart with 1
$ db2 "values next value for xxxseq"
1
-----------
3
SELECT NEXT VALUE FOR xxseq FROM sysibm.sysdummy1
<######################################>分区表相关
可以使用 MON_GET_TABLE
db2 "select tabname from syscat.datapartitions where seqno !=0"
db2 describe data partitions for table lineitem show detail
--create source table named test
drop table db2inst1.test;
create table db2inst1.test (id integer ,idd integer);
--insert data from below into db2inst1.test
insert into db2inst1.test
with a (id,addrid) as (values(1,1)
union all
select a.id+1,int(rand()*4)+1 from a a where a.id <10000)
select * from a;
commit;
--create target table test_p like table test but partitioned
drop table db2inst1.test_p;
create table db2inst1.test_p (id integer,idd integer) partition
by (idd) ( partition test_p1 starting from 1 inclusive ending at 1 inclusive ,
partition test_p2 starting from 2 inclusive ending at maxvalue inclusive);
commit;
--now using sysproc.sysibmadm.admin_move_table() procedure move data from soure
table test to target test_p which have same structure
call sysproc.admin_move_table('DB2INST1','TEST','TEST_P','','MOVE');
COMMIT;
<######################################>修改表结构
alter table CST_BANK_ZONE alter BRANCH_CODE set data type CHARACTER(6)
再对表操作会报错57016 表为inactive状态 需要执行:
reorg table XXX 或
runstats on table 或
reorgchk on table all
其实目的就是收集统计信息。
alter table EBC_BILL_LIST alter column EBL_SEQNO restart with 9000000 修改队列初始值
ALTER TABLE "RISYS"."SHARE_DUE_TMP_BAK" ALTER COLUMN C_SHAREDUE_NO DROP IDENTITY 删除identity定义。
<######################################>
UDF:要运行 DB2 Java 存储过程或 UDF,还需要更新服务器上的 DB2 数据库管理程序配置,以包括在该机器上安装 JDK 的路径
db2 update dbm cfg using JDK11_PATH d:sqllibjavajdk
<######################################>常用的字符串函数
ltrim、rtrim去除左右空格,
left、right、substr取字符串,
length取字符串长度,
CONCAT(ARG1,ARG2) 字符串连接||,
LCASE、LOWER函数返回定长、变长字符串的小写形式,
UCASE、UPPER函数返回定长、变长字符串的大写形式,
INSERT(ARG1,POS,SIZE,ARG2) 返回一个字符串,将ARG1从POS处删除SIZE个字符,将ARG2插入该位置,
LOCATE(ARG1,ARG2,<POS>) LOCATE函数在ARG2中查找ARG1次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1次出现的位置。
POSSTR(EXP1,EXP2) POSSTR函数返回EXP2在EXP1中的位置。
REPLACE(EXP1,EXP2,EXP3) REPLACE函数用EXP3代替EXP1中所有的EXP2。
SPACE(SIZE) 返回一个包含SIZE个空格的字符串
VALUE(EXPRESSION1,EXPRESSION2)
COALESCE(ARG1,ARG2...) 返回参数集中个非null参数。用法类似于VALUE函数
注释:“--”(两个减号)
字符串连接:“||”
如set msg=’aaaa’||’bbbb’,则msg为’aaaabbbb’
字符串的引用:‘’(一定用单引号),如果需要输入单引号,输入两个单引号即可(例如:select '''' from sysibm.sysdummy1)。
转义字符
如果你想查询字符串中包含‘%’或‘_’ ,就得使用转义字符(Escape Characters)。比如,要想查询book_title中包含字符串’99%’的纪录:
SELECT * FROM books WHERE book_title like ‘%99!%%’ escape ‘!’
后面的escape ‘!’是定一个转义字符‘!’, 指明紧跟着转义字符’!'后的%不再是统配符。
<######################################>列函数或叫集合函数
列函数对列中的一组值进行运算以得到单个结果值。下列就是一些列函数的示例。
AVG 返回某一组中的值除以该组中值的个数的和
COUNT 返回一组行或值中行或值的个数
MAX 返回一组值中的大值
MIN 返回一组值中的小值
<######################################>标量函数
标量函数对值进行某个运算以返回另一个值。
下列就是一些由DB2 通用数据库提供的标量函数的示例。
ABS 返回数的值
HEX 返回值的十六进制表示
LENGTH 返回自变量中的字节数(对于图形字符串则返回双字节字符数。)
YEAR 抽取日期时间值的年份部分
COALESCE函数返回()中表达式列表中个不为空的表达式,可以带多个表达式, 和oracle的isnull类似。
DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在 1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前 4712 年 1 月 1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在 0 到 86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是 TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在 1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在 1-53 的整数值表示。
要使当前时间或当前时间戳记调整到 GMT/CUT,则把当前的时间或时间戳记减去当前时区寄存器:
current time - current timezone
current timestamp - current timezone
给定了日期、时间或时间戳记,则使用适当的函数可以单独抽取出(如果适用的话)年、月、日、时、分、秒及微秒各部分:
YEAR (current timestamp)
MONTH (current timestamp)
DAY (current timestamp)
HOUR (current timestamp)
MINUTE (current timestamp)
SECOND (current timestamp)
MICROSECOND (current timestamp)
因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:
current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS - 3 MINUTES + 10 SECONDS
从时间戳记单独抽取出日期和时间也非常简单:
DATE (current timestamp)
TIME (current timestamp)
而以下示例描述了如何获得微秒部分归零的当前时间戳记:
CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS
如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。为此,只要使用 CHAR() 函数:
char(current date)
char(current time)
char(current date + 12 hours)
要将字符串转换成日期或时间值,可以使用:
TIMESTAMP ('2002-10-20-12.00.00.000000')
TIMESTAMP ('2002-10-20 12:00:00')
DATE ('2002-10-20')
DATE ('10/20/2002')
TIME ('12:00:00')
TIME ('12.00.00')
TIMESTAMP()、DATE() 和 TIME() 函数接受更多种格式。上面几种格式只是示例,我将把它作为一个练习,让读者自己去发现其它格式。
有时,您需要知道两个时间戳记之间的时差。为此,DB2 提供了一个名为 TIMESTAMPDIFF() 的内置函数。但该函数返回的是近似值,因为它不考虑闰年,而且假设每个月只有 30 天。以下示例描述了如何得到两个日期的近似时差:
timestampdiff (<n>, char(
timestamp('2002-11-30-00.00.00')-
timestamp('2002-11-08-00.00.00')))
对于 <n>,可以使用以下各值来替代,以指出结果的时间单位:
1 = 秒的小数部分
2 = 秒
4 = 分
8 = 时
16 = 天
32 = 周
64 = 月
128 = 季度
256 = 年
当日期很接近时使用 timestampdiff() 比日期相差很大时。如果需要进行更的计算,可以使用以下方法来确定时差(按秒计):
(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
为方便起见,还可以对上面的方法创建 SQL 用户定义的函数:
CREATE FUNCTION secondsdiff(t1 TIMESTAMP, t2 TIMESTAMP)
RETURNS INT
RETURN (
(DAYS(t1) - DAYS(t2)) * 86400 +
(MIDNIGHT_SECONDS(t1) - MIDNIGHT_SECONDS(t2))
)
@
如果需要确定给定年份是否是闰年,以下是一个很有用的 SQL 函数,您可以创建它来确定给定年份的天数:
CREATE FUNCTION daysinyear(yr INT)
RETURNS INT
RETURN (CASE (mod(yr, 400)) WHEN 0 THEN 366 ELSE
CASE (mod(yr, 4)) WHEN 0 THEN
CASE (mod(yr, 100)) WHEN 0 THEN 365 ELSE 366 END
ELSE 365 END
END)@
后,以下是一张用于日期操作的内置函数表。它旨在帮助您快速确定可能满足您要求的函数,但未提供完整的参考。有关这些函数的更多信息,请参考 SQL 参考大全。
SQL 日期和时间函数
DAYNAME 返回一个大小写混合的字符串,对于参数的日部分,用星期表示这一天的名称(例如,Friday)。
DAYOFWEEK 返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期日。
DAYOFWEEK_ISO 返回参数中的星期几,用范围在 1-7 的整数值表示,其中 1 代表星期一。
DAYOFYEAR 返回参数中一年中的第几天,用范围在 1-366 的整数值表示。
DAYS 返回日期的整数表示。
JULIAN_DAY 返回从公元前 4712 年 1 月 1 日(儒略日历的开始日期)到参数中指定日期值之间的天数,用整数值表示。
MIDNIGHT_SECONDS 返回午夜和参数中指定的时间值之间的秒数,用范围在 0 到 86400 之间的整数值表示。
MONTHNAME 对于参数的月部分的月份,返回一个大小写混合的字符串(例如,January)。
TIMESTAMP_ISO 根据日期、时间或时间戳记参数而返回一个时间戳记值。
TIMESTAMP_FORMAT 从已使用字符模板解释的字符串返回时间戳记。
TIMESTAMPDIFF 根据两个时间戳记之间的时差,返回由个参数定义的类型表示的估计时差。
TO_CHAR 返回已用字符模板进行格式化的时间戳记的字符表示。TO_CHAR 是 VARCHAR_FORMAT 的同义词。
TO_DATE 从已使用字符模板解释过的字符串返回时间戳记。TO_DATE 是 TIMESTAMP_FORMAT 的同义词。
WEEK 返回参数中一年的第几周,用范围在 1-54 的整数值表示。以星期日作为一周的开始。
WEEK_ISO 返回参数中一年的第几周,用范围在 1-53 的整数值表示。
时间戳处理:db2 "values VARCHAR_FORMAT(timestamp(timestamp('20131219014701')),'DD/MM/YY HH24:MI:SS')
<######################################>数据类型
数据类型 类型 特性 示例或范围
CHAR(15) 定长字符串 大长度为 254 'Sunny day '
VARCHAR(15) 变长字符 大长度为 4000 'Sunny day'
SMALLINT 数字 长度为 2 字节精度为 5 位范围为-32768 至 32767
INTEGER 数字 长度为 4 字节精度为 10 位范围为-2147483648 至 2147483647
REAL 数字 单精度浮点32 位近似值 范围为-3.402E+38至-1.175E-37或 1.175E-37 至-3.402E+38或零
DOUBLE 数字 双精度浮点64 位近似值 范围为-1.79769E+308 至-2.225E-307或 2.225E-307 至 1.79769E+308或零
DECIMAL(5,2) 数字 精度为 5小数位为 2 范围为 -10**31+1 至 10**31-1
DATE 日期时间 三部分值 1991-10-27
TIME 日期时间 三部分值 13.30.05
TIMESTAMP 日期时间 七部分值 1991-10-27-13.30.05.000000
二进制大对象 (BLOB) 字符串。
字符大对象 (CLOB) 字符串,它的字符序列可以是单字节字符或多字节字符, 或这两者的组合。
双字节字符大对象 (DBCLOB) 字符串,它的字符序列是双字节字符。
<######################################>常用sql和技巧
索引拼接:select substr(indschema,1,20),substr(indname,1,20),listagg(colname,', ') within group(order by colseq) as list from syscat.indexcoluse group by indschema,indname
通过存储过程调用管理命令,call sysproc.admin_cmd('load from /home/xx.del of del messages /home/xxx.msg replace into sacle') ,该存储并不支持所有的管理命令,细节查看信息中心
只取表的几行数据:select * from table1 fetch first 10 rows only
db2 "create table test like emp" 创建表结构一样的表,但是注意一些表的属性和约束并不一定相同,可以通过db2look查看
db2 "create table test as (select * from emp) definition only“ 创建表.
db2不能像sqlserver样,使用select into 创建一个表,db2中的select into只能用于存储过程,意思是把值取到一个变量中,
select count(col) from table count不统计col为NULL的值。
创建视图:db2 create view view1 as select id from tb1
建立别名 create alias db2admin.tables for sysstat.tables;
类型转换(cast) ip datatype:varchar select cast(ip as integer)+50 from log_comm_failed 或者使用select decimal(amount,16,2) from tablename;
多个字段时如何不通过使用select子句使用in/not in,注意:这里只用一个values select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))
给某个模式授权 db2 list tables for schema eximuser |awk '{print "grant select on eximuser." $1 " to odsuser">1.sql
生成一个Runstats CLP脚本 select 'runstats on table'||rtrim(tabschema)||'.'||char(tabname,40)||'and detailed indexes all;' from syscat.tables where type='T' order by tabschema,tabname;
多表的关联更新方法(好使用merge)
db2的update语法不支持“update table1 set t1.col1=t2.value1 from table1 t1,table2 t2 where …”的写法,但是可以通过如下方法解决:
update table1 t1 set t1.col1=(select t2.col1 from table2 t2 where …)
例:update test t1 set (t1.username,t1.instcode) = (select t2.instcode,t2.instname from sysinsttb t2 where t2.instcode=t1.instcode);
插入记录 insert into zjt_tables select * from tables
插入100000条数据进入test表
create table test (id integer,idd integer)
insert into test with a (id ,idd) as (values(1,1) union all select a.id+1,int(rand()*4+1) from a where a.id<100000) select * from a;
insert into yhdab values ('20000300001','123456','user01','20000300001'), ('20000300002','123456','user02','20000300002')
利用存储过程插入多条数据:
create procedure sp_insert2 (in count int)
language sql
begin
declare i integer default 0;
while i<count
do
insert into t2 values(i, 'abcdefghixxxxxxxxxxxxxxxxx' || char(i),
'bbbbbbbbbbbbbbbbbbbbbbbbbb' || char(i));
set i=i+1;
end while;
end
@
取得N-M条记录 其中以列作为排序的字段
db2 SELECT * FROM ((SELECT * FROM (SELECT * FROM 表 ORDER BY 1 ASC FETCH FIRST M ROWS ONLY) a ORDER BY 1 DESC FETCH FIRST (M-N+1) ROWS ONLY)) b ORDER BY 1 ASC
创建触发器:CREATE TRIGGER zjt_tables_del AFTER DELETE ON zjt_tables REFERENCING OLD AS O FOR EACH ROW MODE DB2SQL Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10))
select * from tabschema.tabname where (colA, colB, colC) [not] in (values (valueA1, valueB1, valueC1), (valueA2, valueB2, valueC2), ...(valueAn, valueBn, valueCn))
查找重复索引
idx(a,b,c) idx2(a,b) idx3(a),idx4(b) 其中 idx2 idx3算是重复索引
可以写个存储过程逐条处理,但是我有个一次性的办法,比较快,
可以用个临时表做个全连接得到同一张表的索引列的排列组合
insert into xxx(tabname,xx,yy) select a.tabname,a.columes,b.columes from indexes a,indexes b where a.tabname=b.tabname
把xx=yy的排除然后就可以得到一张表上所有索引的组合,这样就可以用POSSTR函数select一下就出来了。
我这只是个思路,就是把本来需要对不同行间的字段做比较转化我同一行间的数据来坐比较,
列出索引中前序真子集:
select tabschema,tabname,indname,colnames from
(
select substr(a.tabschema,1,30)as tabschema,substr(a.tabname,1,30) as tabname,substr(a.indname,1,30) as indname, substr(a.colnames,1,70) as colnames
from syscat.indexes a
where
exists (select 1 from syscat.indexes b where a.colnames =substr(b.colnames,1,length(a.colnames)) and a.tabname=b.tabname having count(*)>1 )
) a group by tabschema,tabname,indname,colnames
<######################################>显式锁获得
大多数情况下都是DB2数据库管理器控制锁的,可以显示指定锁定的对象只有表。
可以使用lock table xx in share|exclusive mode语句可以在会话级别显式的获得表锁。例子可以参看锁试验部分。
可以使用alter table xx locksize table|row 修改表的获得锁的级别参数locksize使用row时候,事务首先尝试获得行级锁,必要时才锁升级,这是默认的表locksize值。locksize使用table时,事务总是使用非意图表锁锁定该表。
<######################################>物化视图
DB2物化视图(MQT Materialized Query Table)
create table mqt1 as (select * from t1 where a=1) data initially deferred refresh deferred;
refresh table mqt1;
<######################################>如何使用select获取常量或变量值:使用表sysibm.sysdummy1
select 1 from sysibm.sysdummy1
select current timestamp from sysibm.sysdummy1
select current schema from sysibm.sysdummy1
select CURRENT QUERY OPTIMIZATION from sysibm.sysdummy1 (只影响当前session)
使用(values n) as xx和sysibm.sysdummy1有同样的效果
select current time from (values 1) as tmp;
select current date from (values 2) as tmp;
select year(current date) from (values 2) as tmp; --获取系统年份
select month(current date) from (values 2) as tmp; --获取系统月份
select day(current date) from (values 2) as tmp; --获取系统日份
(CURRENT TIMESTAMP 精度达到微秒)
或者使用寄存器
values 1
values current timestamp
values current schema
values current date
Special registers
A special register is a storage area that is defined for an application process by the database manager. It is used to store information that can be referenced in SQL statements. A reference to a special register is a reference to a value provided by the current server. If the value is a string, its CCSID is a default CCSID of the current server. The special registers can be referenced as follows:
>>-+-+-CURRENT CLIENT_ACCTNG-+-----------------------+---------><
| '-CLIENT ACCTNG---------' |
+-+-CURRENT CLIENT_APPLNAME-+---------------------+
| '-CLIENT APPLNAME---------' |
+-+-CURRENT CLIENT_USERID-+-----------------------+
| '-CLIENT USERID---------' |
+-+-CURRENT CLIENT_WRKSTNNAME-+-------------------+
| '-CLIENT WRKSTNNAME---------' |
+-+-CURRENT DATE-----+----------------------------+
| | (1) | |
| '-CURRENT_DATE-----' |
+-CURRENT DBPARTITIONNUM--------------------------+
+-CURRENT DECFLOAT ROUNDING MODE------------------+
+-CURRENT DEFAULT TRANSFORM GROUP-----------------+
+-CURRENT DEGREE----------------------------------+
+-CURRENT EXPLAIN MODE----------------------------+
+-CURRENT EXPLAIN SNAPSHOT------------------------+
+-CURRENT FEDERATED ASYNCHRONY--------------------+
+-CURRENT IMPLICIT XMLPARSE OPTION----------------+
+-CURRENT ISOLATION-------------------------------+
+-CURRENT LOCALE LC_MESSAGES----------------------+
+-CURRENT LOCALE LC_TIME--------------------------+
+-CURRENT LOCK TIMEOUT----------------------------+
+-CURRENT MAINTAINED TABLE * FOR OPTIMIZATION-+
+-CURRENT MDC ROLLOUT MODE------------------------+
+-CURRENT OPTIMIZATION PROFILE--------------------+
+-CURRENT PACKAGE PATH----------------------------+
+-+-CURRENT PATH-----+----------------------------+
| | (1) | |
| '-CURRENT_PATH-----' |
+-CURRENT QUERY OPTIMIZATION----------------------+ 优化级别
+-CURRENT REFRESH AGE-----------------------------+
+-+-CURRENT SCHEMA-----+--------------------------+
| | (1) | |
| '-CURRENT_SCHEMA-----' |
+-+-CURRENT SERVER-----+--------------------------+
| | (1) | |
| '-CURRENT_SERVER-----' |
+-CURRENT SQL_CCFLAGS-----------------------------+
+-+-CURRENT TIME-----+----------------------------+
| | (1) | |
| '-CURRENT_TIME-----' |
+-+-CURRENT TIMESTAMP-----+--+---------------+----+
| | (1) | '-(--integer--)-' |
| '-CURRENT_TIMESTAMP-----' |
+-+-CURRENT TIMEZONE-----+------------------------+
| | (1) | |
| '-CURRENT_TIMEZONE-----' |
+-+-CURRENT USER-----+----------------------------+
| | (1) | |
| '-CURRENT_USER-----' |
+-+-SESSION_USER-+--------------------------------+
| '-USER---------' |
'-SYSTEM_USER-------------------------------------'
<######################################>联邦库或称联合库
db2 update dbm cfg using FEDERATED yes 修改后重新启动实例
用作跨库访问(即使同一实例下的两个库想要进行联邦也需要先建立节点和远程库访问)
--------------------------------------建立联合库
在A 库 访问B库德表 A库用户AA B库用户BB,
update dbm cfg using federated yes
-- ---------------------------
-- DDL Statements for WRAPPER
-- ---------------------------
CREATE WRAPPER "DRDA" LIBRARY 'libdb2drda.a' OPTIONS (DB2_FENCED 'N' )
-- ---------------------------
-- DDL Statements for SERVER
-- ---------------------------
CREATE SERVER "LCPT" TYPE DB2/UDB VERSION '9.1' WRAPPER "DRDA" AUTHORIZATION "BB" PASSWORD "XXXX" OPTIONS (DBNAME 'B' ,PASSWORD 'Y' )
用户密码为B库的用户密码 注意""里的用户名密码要与实际的大小写相同。这个认证用户只需要有能访问库的权限即可、不需要有高权限。
-- --------------------------------
-- DDL Statements for USER MAPPING
-- --------------------------------
CREATE USER MAPPING FOR AA SERVER "LCPT" OPTIONS (REMOTE_AUTHID 'BB' ,REMOTE_PASSWORD 'XXX')
"for AA" 为本地AA库的用户A添加访问权限 ,这里BB用户的权限要求起码可以访问要联邦的表的权限。可以和上一条CREATE SERVER中不使用同一用户。
使用AA用户登录A库执行下边语句可以建成
CREATE NICKNAME "AGENT "."CCF" FOR "LCPT"."LCPTBY"."TBACCCFM"
注:BB用户如果可以访问A库可以使用 db2 connect to A user BB using XXXX 连接到A库创建NICKNAME,一定要使用db2 connect to A user BB using XXXX,如果A库和BB在同一台服务器上只是su - BB 然后connect to A创建NICKNAME时候是同不过认证的.
联邦还可以添加用户mapping,使用多个用户mapping
db2 connect to oltpdb user agent using agent123
# su - db2inst1
db2 => CREATE NICKNAME "AGENT "."INCALL_ACL_AG_GRP" FOR "INCALL"."AGENT"."ACL_AG_GRP"
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1101N Remote database "webdb" on node "" could not be accessed with the
specified authorization id and password. SQLSTATE=08004
db2 =>
必须用AUTHORIZATION "agent"用户建造nickename否则会报上边的错误
查看server信息
SELECT * FROM SYSCAT.SERVEROPTIONS
查看联邦
db2 list node directory
db2 "select * from syscat.servers"
db2 "select substr(AUTHID,1,10) as AUTHID,substr(AUTHIDTYPE,1,1) as AUTHIDTYPE,substr(SERVERNAME,1,10) as SERVERNAME,substr(OPTION,1,10) as OPTION,substr(SETTING,1,10) as SETTING from syscat.useroptions"
<######################################>常用的表函数语句和编目视图
说明 目录视图
检查约束 SYSCAT.CHECKS
列 SYSCAT.COLUMNS
检查约束引用的列 SYSCAT.COLCHECKS
关键字中使用的列 SYSCAT.KEYCOLUSE
数据类型 SYSCAT.DATA*
函数参数或函数结果 SYSCAT.FUNCPARMS
参考约束 SYSCAT.REFERENCES
模式 SYSCAT.SCHEMATA
表约束 SYSCAT.TABCONST
表 SYSCAT.TABLES
触发器 SYSCAT.TRIGGERS
用户定义函数 SYSCAT.FUNCTIONS
视图 SYSCAT.VIEWS
检查没有统计信息的表和索引
select tabname from syscat.tables where stats_time is null or stats_time in ("-1")
select indname from syscat.indexes where stats_time is null or stats_time in("-1")
select tabname from syscat.tables where stats_time < current timestamp- 30days
select indname from syscat.indexes where stats_time < current timestamp - 30 days
查看表空间和容器的使用大小
db2 "select char(tbsp_name,20)as tbsp_name,char(tbsp_type,10) as tbsp_type,char(tbsp_state,10) as tbsp_state,tbsp_free_pages,tbsp_page_size,tbsp_utilization_percent from sysibmadm.tbsp_utilization order by tbsp_utilization_percent"
db2 "select char(tbsp_name,20)as tbsp_name,char(container_name,80) as container_name,INT(TOTAL_PAGES) AS TOTAL_PAGES,INT(USABLE_PAGES) AS USABLE_PAGES from sysibmadm.container_utilization"
查看表和索引大小:
SELECT TABNAME,SUM(DATA_OBJECT_P_SIZE)/1024,SUM(INDEX_OBJECT_P_SIZE)/1024 FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('模式','表名')) AS T GROUP BY TABNAME 注意模式和表明因为在编目表中都是大写,所以在表函数中也要写成大写,DATA_OBJECT_P_SIZE的单位是KB,所以除以1024显示的结果是M
SELECT (DATA_OBJECT_P_SIZE + INDEX_OBJECT_P_SIZE + LONG_OBJECT_P_SIZE + LOB_OBJECT_P_SIZE + XML_OBJECT_P_SIZE) AS TOTAL_P_SIZE FROM SYSIBMADM.ADMINTABINFO WHERE TABNAME = '表名'
另外统计表语句:
select * from tkdw.edw_tables_for_acrm a,(
select snapshot_timestamp,tabschema,tabname,
(coalesce(data_object_pages,0)+coalesce(index_object_pages,0)+coalesce(lob_object_pages,0)+coalesce(long_object_pages,0))*32/1024.0/1024 tab_size
from table(snap_get_tab('MDM85',-2))
order by (coalesce(data_object_pages,0)+coalesce(index_object_pages,0)+coalesce(lob_object_pages,0)+coalesce(long_object_pages,0))*32/1024.0/1024
desc) b
where a.tabname=b.tabname
and tabschema='MDM'
with ur;
查看日志使用:db2 "select int(total_log_used/1024/1024) as Log_used_meg,int(total_log_available/1024/1024) as Log_space_free_meg,int((float(total_log_used) / float(total_log_used+total_log_available))*100) as Pct_used,int(tot_log_used_top/1024/1024) as Max_log_used_meg,int(sec_log_used_top/1024/1024) as max_sec_used_meg,int(sec_logs_allocated) as Secondaries from sysibmadm.snapdb"
查看执行时间长的语句:
当前正在执行的语句:
select ELAPSED_TIME_MIN,STMT_TEXT from sysibmadm.long_running_sql where ELAPSED_TIME_MIN is not NULL order by ELAPSED_TIME_MIN desc fetch first 1 rows only
查看快照:
select
NUM_EXECUTIONS as num ,
decimal((TOTAL_EXEC_TIME+TOTAL_EXEC_TIME_MS*0.000001)/NUM_EXECUTIONS,8,2) as exetime,
decimal((TOTAL_USR_CPU_TIME+TOTAL_SYS_CPU_TIME+TOTAL_USR_CPU_TIME_MS*0.000001+TOTAL_SYS_CPU_TIME_MS*0.000001)/NUM_EXECUTIONS,8,2) as cpu_time,
substr (STMT_TEXT,1,50) as stmt
from SYSIBMADM.SNAPDYN_SQL
where NUM_EXECUTIONS<>0
order by exetime desc
fetch first 3 rows only
查看统计信息收集时间,db2 "select name, stats_time from sysibm.systables"
表或视图特权
grant select,delete,insert,update on tables to user
grant all on tables to user WITH GRANT OPTION
程序包特权
GRANT EXECUTE ON PACKAGE PACKAGE-name TO PUBLIC
模式特权
GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER
数据库特权
grant connect,createtab,dbadm on database to user
索引特权
grant control on index index-name to user
查看表上的权限(特权)
select "AUTHID", "PRIVILEGE","OBJECTSCHEMA", "OBJECTTYPE" from "SYSIBMADM"."PRIVILEGES" where objecttype='TABLE' and objectname= tab_name
查看用户的系统权限:
SELECT substr(AUTHORITY,1,40), D_USER, D_GROUP, D_PUBLIC, ROLE_USER, ROLE_GROUP, ROLE_PUBLIC, D_ROLE FROM TABLE (SYSPROC.AUTH_LIST_AUTHORITIES_FOR_AUTHID ('DB2INST1', 'U') ) AS T ORDER BY AUTHORITY
检索具有特权的所有授权名
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH
UNION
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH
ORDER BY GRANTEE, GRANTEETYPE, 3
相关文章