数据库和表空间的备份,下边把施用进程中相见的多少个难点整治下

日前,工作中二个系列的数目 Table 和 Stored Procedure 在 DB2
数据库,供给探访之。上边把利用进程中碰着的多少个难点整治下:

第七章:数据库备份与还原
(苏醒的概念,db2日志,数据库和表空间的备份,数据库和表空间的复原,数据库和表空间的前滚,recover使用程序,数据库重新建立,监察和控制备份苏醒和恢复,优化备份复苏和苏醒)
1) Redo
是指db记录了成功的操作commite之后但没立马的写入硬盘,那个时候开机数据库会自动做写入硬盘的操作
2)崩溃复苏(crash
recovery)是数据库的一个意义,使数据库到达一样的气象,能够回滚未提交的多少,重做已经在内部存款和储蓄器提交的多寡。选项:autorestart
on ,以及能够选拔db2 list utilites show detail或db2pd -until查看进度。
3)脱机是指在崩溃恢复生机的时候表空间发出错误
4)劫难复苏(disaster recovery),用HAD卡宴效用来过来,原理
是将源数据复制到指标数据库防止
5)前滚恢复生机要依据启用备份並且启用了归档日志,复苏数据库时且不能用without
rolling forward,数据库在还原操作甘休时处于roll foward pending
6)前滚恢复生机分为:前滚数据库和前滚表空间
7)前滚表空间一般能够选取在日记中前滚至:日志末尾(to end of
log)和某些特定期间点(称为时间点复苏)。一般二种处境用前滚表空间:表空间作复苏操作后高居前滚暂挂状态(做rollfoward
database将日志应用于表空间)和崩溃恢复时遇上叁个或多个表空间处于前滚暂挂(这种意况要先修复表空间,技术做rollfoward
database将日志应用于表空间)
8)前滚恢复生机要启用归档日志功用,私下认可是一贯不的
9)日志记录任何commit到磁盘的数码,提交的数额redo ,未有付诸的数据undo
10)日志只记录DML(insert,delete,update)
11)循环日志 有 主日志(primary log files) 和 支持日志(second log
files).循环日志只可以苏醒到备份点
12)活动日志(active
log)是还没写入磁盘的日志,三种标准自便叁个尺度下正是运动日志:包罗尚未提交或回滚的业务音信;包蕴已经交给但未有写入磁盘的事情消息
13)logarchmeth1=off 是循环日志
14)logarchmeth1=logretain,userexit,disk:directory_name,tsm:managment
class name,vendor:libary name
15)日志计算:循环日志辅助崩溃复苏和本子复苏,归档日志支持除了前三个外还大概有一个前滚恢复
16)备份不会去备份数据库管理器配置文件或注册变量
17)若是是在线备份(backup online)这就必须要是归档日志
18)复苏(restore)数据库只可以是离线来做,这么些和rollforward
数据库是同样的法则
19)本地数据库目录 和 系统数据库目录都以同一个名字的公文夹:sqlbdir
20)表空间的复原自然会有rolling forward的操作以高达平等的场馆
21)能够动用db2 list tablespaces show detail或db2 get snapshot for
tablespace on db查看minimum recovery time这一选项
22)db2ckbkp -h 检查测验备份性息 db2ckrst -d dbname -t time 检查增量恢复生机
23)苏醒restore数据库的时候,容器的岗位或名称设备与备份时的不等,就要采用重定向苏醒
24)drop是剔除表,使用drop之后表结交涉表的数据都会被剔除,truncate 和
delete是删除表里的数量,但不删除表本人,truncate 和
delete相比较,truncate要快相当多,但劣势就是无法回滚,包涵索引等都会化为开头值,数据就不能够复苏了
25)db2 select tbspace,drop_recovery from syscat.tablespaces
查看表空间的选项                    
26)drop_recover这几个选项不能够用在system temporary tablespace ; LOB ;
XML上
27)复苏删除表步骤:1)完整数据库备份2)restore在删除表此前创设的数目库级或表空间级备份image
3)检索已删除表的目的ID 4)rollforward 数据库 5)重新建设构造表
6)用前滚的数据库导入的数额导入到表中
28)rollforward 会使表空间处于不可采访的情状
29)历史文件db2rhist.asc
在db2inst1/NODE0000/SQL00001上边,及其备份文件db2rhist.bak
30)db2rhist.asc能够用list history来查阅哪
31)db2 list history backup all for db tomdb 列出tomdb的野史文件
32)prune histroy 命令处理恢复生机破坏了的历史文件
33)为了确定保障日志文件能够保留,能够利用backup db dbname online to
/backuodir include logs,保存日志在备份影象中的操作之能是在线备份
34)离线备份:earliest log=current log   而在线备份 earliest log <
current log 
35)复苏删除的野史文件:db2 restore db dbname history file 
36)可过来数据库重新建立:表空间备份可过来数据库,部分表空间备份可还原数据库,含有log文件的在线备份可复原数据库,使用增量备份重新建立可过来数据库,使用重定向选项重新建立可过来数据库
37)db2 restore db tomdb rebuild with all tablespaces in database taken
at 20150317130324 用表空间备份重新建立数据库(归档日志)
38)用表空间重新营造之后要前滚表空间,若无相应的备份影像都能在历史文件中找到技能EvoqueF,当中国和扶桑志文件必定要可用,借使不在数据库参数的帕特h
to log files里面,将在钦点日志文件地方(用overflow log path这一个选项)
39)[db2inst1@oc6162546036 SQL00001]$ db2 rollforward db tomdb stop
SQL1271W  Database “TOMDB” is recovered but one or more table spaces
are 
offline on members or nodes “0”.           qa:????为何复苏持续 
40)部分表空间重新建构数据库,除了重新建立,还要恢复restore pending的表空间
41)可过来数据重新创立能够用别样备份,不可恢复生机数据库只可以用数据库备份

(说实话,DB2 并不曾 SQLServer 好用,也大概笔者是太小白了,有待于升高…)

42)0x0100 表示:restore pending 

第六章 数据移动 (export,import.load,db2move,db2look)
1)db2 “export to table1.dat of del messages table1.log select * from
table1”
SQL3015N  An SQL error “-1585” occurred during processing.
纵然有记录不过会报错 
2)import 脱机导入(allow no access), 联机导入(allow write access)
3)导入情势有:insert,insert_update,replace,db2look
前三符合对象表存在(支持的格式IXF,WSF,ASC,DEL),db2look适合未有指标表(支持的格式PC/IXF)
4)load有多少个动作选项:insert,replace,restart,terminate

================================================================================================================
第九歌 基本监察和控制措施 
1)监察和控制工具备:快速照相监视器,事件监视器,db2pd工具,db2mtrk, activity
monitor等
2)快照监察和控制器是在对话等第改动:有二种办法更动:更换数据库的配备参数(db2
update dbm cfg using dft_mon_lock on)
,调用应用程序级的db2MonitorSwitches() API函数,大概施行update monitor
switches using [[SwitchID] on | off,…]
3)得到快速照相音信:db2 get snapshot for dbm/database on dbname/locks on
dbname/sdynamic sql on dbname
4)复位计数器:reset monitor for db dbalias,reset monitor all,
能够重新初始化单个数据库,全局数据库,但不能够选用性的对用快速照相监视器按钮调节的出格监视器组重新设置计数器
5)db2pd主假如监察和控制锁
6)为啥快速照相监察和控制未有别的项,如:tablespaces ,dbm,tables
7)快速照相监察和控制的主意:get snapshot for
8)利用函数监控,然而要受控于监视器按键 
9)利用视图监察和控制 sysibmadm格局名最早的视图
10)monitor switches 功用与单个数据库,dbm 是装有数据库,db2 update dbm
cfg 是总开关,monitor switches是小按键
11)event monitor是要为特定事件类型成立
12)db2evmon工具来格式化sql event monitor原始数据 
13)db2mtrk是用来监督内部存款和储蓄器
14)db2pd -version -osinfo查看版本 操作系统新闻

================================================================================================================
第十章 运营数据库必需思考的数据库设置
1)db2 get dbm cfg show detail里面包车型地铁Delayed Value 与Current
Value在在线配置的情形下,值应该是非常的
2)db2pd -dbptnmem能够查阅数据库内部存款和储蓄器总结音信
3)通讯设置不得以共同配置(在线配置,包罗注册变量,节点配置,端口配置);
  内部存款和储蓄器设置中instance_memory能够联手动态更新;
  self_tunning_mem单分区多分区DPF能够一同配置;
 
数据库分享内存能够同步配置(databse_memory,那些内部存款和储蓄器分享配置取决于slef_tunning_mem
是ON的情况);
 
缓存池大小能够联手配置(IBMDEFAULTBP是暗中同意的缓冲池,当syscat.bufferpools目录表中该缓冲的NPAGES值为-1是,db2数据库配置参数   
BUFFPAGE调节缓冲池大小,不然会忽略BUFFPAGE参数,并用NPAGES参数内定的页数创设缓冲值);
 
pckcachesz能够共同配置(程序包告诉缓存用来高速缓存数据库上的静态和动态SQL和XQuery语句的持有section);
 
catalogcache_sz高速缓存能够选用的数据库堆中最大空间(以页总计)能够共同配置;
4)数据库管理器须要从磁盘I/O进行的越少,质量越好
5)BPHCR-V缓冲池命中率应该当先80%(能够利用SYSIBMADM.BP_HITRATIO总结命中率),在那之中的字段:SNAPSHOT_TIMESTAMP
,DB_NAME ,BP_NAME  ,TOTAL_HIT_RATIO_PERCENT
,DATA_HIT_RATIO_PERCENT,INDEX_HIT_RATIO_PERCENT)
6)程序包高速缓存(pckcachesz)不提议设置automatic
,它使SQL不用拜望系统目录,以及动态SQL或XQuery免去编写翻译这一步,在那之中能够是用上边那一个讲话决断是或不是满意供给:
select (1-pkg_cache_inserts/pkg_cache_lookups)*100 as
pchr,pkg_cache_num_overflows from sysibmadm.snapdb
7)catalogcache_sz(高速缓存)使用情形查看:db2 get snapshot for dabtabase
on dbname|grep -i “catalog”)中的catalog cache
overflows这一项,不为0就要追加:db2 update db cfg using catalogcache_sz
XX
8)locklist达到maxlocks时,数据库管理器会对应用程序挂起的锁定施行从行到表的锁定进级
9)db2 event monitor
笔录下音讯后用db2evmon -path 命令打开

1.db2 update monitor switches using lock on statement on

2.create event monitor lockmonitor for deadlocks, statements  write to
file ‘c:\dulog’ 
  db2 “create event monitor dlockevm for deadlocks with details history
write to file ‘/home/db2inst1/locks'”

3.set event monitor lockmonitor state 1

最后
4.set event monitor lockmonitor state 0 

5.db2evmon -path /home/db2inst1/deadlock > deadlock.txt

6 more sqltrace.txt

================================================================================================================
第十一章 日常运作维护 runstats,reorg,rebind,健检,数据库监察和控制
1)计算音讯是记录各样数据库对象音信,并保存在数据库系统表目表中,优化器会依照那些新闻选取最低的施行费用
1)db2运营的资金是指CPU费用(以指令数计)和I/O(以寻道数和页的调换数计),费用的单位是timeron,数据库总括音信偶然误差过大,就有希望形成质量难题
2)
静态SQL在runstats之后供给重新bind,因为在bind在此以前就早就鲜明,则会出现总计音信分裂样的情状,但动态SQL就无需,因为动态SQL语句的会见攻略是基于计算音讯在运作是动态变化的
3)runstats就疑似小车的GPS
4)  静态 SQL:静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运维前,SQL
语句必须是明确的,举例 SQL 语句中涉及的列名和表名必得是存在的。静态 SQL
语句的编写翻译是在应用程序运营前举办的,编写翻译的结果会蕴藏在数据库内部。而后程序运维时,数据库将一直实践编写翻译好的
SQL 语句,缩短运作时的支出。
    动态 SQL:动态 SQL 语句是在应用程序运转时被编写翻译和实践的,譬喻,使用
DB2 的交互式工具 CLP 访问数据库时,客户输入的 SQL 语句是不分明的,因而SQL 语句只好被动态地编写翻译。动态 SQL 的使用很多,常见的 CLI 和 JDBC
应用程序都应用动态 SQL。 
 依据编程方法的比不上,DB2 的应用程序开还能分成嵌入式 SQL
编制程序和非嵌入式编制程序 :

    嵌入式 SQL 编制程序将 SQL 语句嵌入到宿主语言 (host) 的程序中,举例 C/C++
程序。因为宿主语言不识别 SQL 语句,先要对程序进行预编译,把 SQL
语句转变为对 DB2
服务的调用,一视同仁写源代码,最终再使用宿主语言的编写翻译器对应用程序举行编写翻译。嵌入式
SQL 都供给被绑定到特定的数据库中,可分为嵌入式静态 SQL 和嵌入式动态
SQL。
    非嵌入式应用程序不须求预编写翻译,且方法相当多,如
CLI、JDBC、ODBC、ADO.NET 等等,那个点子中都运用动态 SQL。表
2点数了广阔的 DB2 编制程序接口。 
5)db2 reorgchk update statustucs on table all
对全表进行runstats,假诺有批量的数目插入时候,就须求做runstats
6)对特定表的runstats,db2 -v runstats on table tablename and indexs all
7)查看是还是不是施行了runstats:
syscat.tables中的stats_time列呈现的值能够查阅是还是不是运维,当为null时,便是从未运营runstats;syscat.indexes也能够用这种措施行检查测
8)在表中运维runstats有三种客户访谈选项:allow read access,allow write
access(暗中认可)
9)9.5事先的runstats之能在单区(单个数据库分区)进行总括,所以只要不是在颇具数据库分区中同样揭橥,那么会冒出计算消息不雷同,就要在runstats从前各种的对一一分区之间重新分发数据,用这些命令:redistribute
database partition group
10)db2rbind能够用于重新绑定数据库中装有应用程序包,使用 db2 flush
package cache
dynamic删除程序包缓存器中颇具当前缓存的动态SQL,并强制隐式的编写翻译一下呼吁
11)stat_heap_sz是代理个人内存的一局地,钦点了runstas计算的具有内部存款和储蓄器堆的最大值,运转是分配,完毕时释放,最佳是能增大其值
12)当定义了runstats调节(thrittling,个中的参数util_impact_priority,util_impact_lim),而且该调解可操作时,runstas经常会话费越多的时日,但对生育系统影响相当小
例:db2 runstats on table tablename and indexes all util_impact prioriy
10 ,如果util_impact_lim 10 ,表明职业负荷限定在一成下
13)在自动化总结音讯配置在此之前,要经过运转sysinstallobjects存款和储蓄进度创制查询反馈库,即在设置auto_stats_prof
on,auto_prof_upd on之前,要用call
sysinstallobjects(toolname,action,tablespacename,schemaname)
14)在运用runstats对特定表和目录进行时,必得使用完全限定的表名和索引名
15)搜集遍及式计算音信:db2 runstats on table tablename with
distribution and indexes all
16)runstats有比较多样分裂的选项实行坚实优化作用:
   在特定的列和目录实行
   收罗遍布式总结信息
   满含频率和分位数总结新闻
   包括列组总计音讯
   包含like statistics的runstats
   包涵总括音信配置文件的runstats
   带有抽样的runstats
   带有系统页级抽样的runstats
   reorgchk收罗全部表的数据库总括音信:reorgchk update statistics on
table / schema
   边load边做总结音讯,边创造索引边总括音讯
17)重组表要比runstats总计消息时间越来越长,能够先奉行runstats绑定程序包计算消息,若无改革能够再拓宽reorg
18)v8在此之前只可以离线重组,v8之后方可联手也能够离线:钦点了选项inplace就是共同重组,默许是离线脱机重组
19)有关重组的速度消息将记录在数据库活动的历史记录文件中,能够用db2 list
history命令张开,也得以用表快照来见识重组进度(db2 get snapshot for table
on db,不关怎么着设置数据库监视表按键,都会记录表重组监视数据
20)假诺系统开展的倒台复苏且进入替换进度,那么势要求使重组表操作达成
21)脱机表重组须要将别本复制到不经常表空间,但在线重组表不会
22)联机表重组会创制贰个.OLPAJERO的二进制的公文记录重组时要用的新闻,如:LSN
重组项目,下个腾出的范围,索引标记,是为了掩护数据集群如故回收空间等
23)联机表重组包含八个阶段:select N pages,vacate the range,fill the
range,truncate table 
24)尽管要对联机表重组进展重新组成,必得先暂停(db2 reorg table tbname
inplace pause),手艺组成
  
发出resume央求之后,如果未有再度钦点实行的整合项中truncate的选项,将沿须原本的截断表选项truncate
   在restore 和 backup的时候不可能拓宽重组
25)监视在线重组表方法:快照(get
snapshot),管理视图(snaptab_reorg),表函数(snap_get_tab_reorg)
26)由于脱机表重组是一道的,因而脱机表重组中的任何错误都会回到给实用程序
  
联机表重组是异步的,因而并未SQL音讯写入CLP,查看再次回到SQL错误,请发出list
history reorg
27)联机重组索引,借使钦赐了allow write
access那些选项,将会重新建立该表的具备索引,命令:db2 reorg index
index_name for table table_name[clean up /clean up all /cleanup only
pages]
28)PCTfree是指 在创制索引的时候为其定义的可用空间百分比
29)db2 “select ‘revoke select  on
‘||rtrim(tabschema)||’.’||rtrim(tabname)||’ from public;’ from
syscat.tables ” > script.sql 利用目录表做的脚本rvoke public的权限
30)脱机表重组必要的额外部存款和储蓄器储空间保存表的影子别本,脱机索引重组不须求,联机表重组要求的是更加多的日志空间,联机索引重组需求越多的日记空间和阴影别本存款和储蓄空间
31)rebind会对应用程序在施行前进行绑定,绑定和依赖计算音信和数据库对象创立二个主次包,这么些程序包便是进行安排
32)所以只要进行了总结或是重组,那就要再度开展rebind
33)runstats > reorgchk > reorg > rebind/db2rbind > runstats
循环
34)syscat.packages表中的valid值标记当前的程序包是还是不是可用,若是是X值,就表示当前的顺序包是不可用,那么就需求再一次绑定
35)db2diag.log 错误日志,db2inst1.nfy文告日志。那三个需求平日检查
36)DMS表空间的结余查询是用,db2 list tablespaces show detail
,SMS表空间对应的容器用操作系统查看剩余空间df -k 
37)DB2有过多工具用于监控数据库和实例活动 举例:snapshot monitors/sql
snapshot函数 ; event monitor ; sysibmadm动态品质试图
38) db2 list utilities show detail 能够监督 LOAD ,BACKUP ,RESTORE,
RUNSTATS

================================================================================================================
第十二章 数据库常用工具
1)db2cfexp ,db2cfimp 实例配置音讯导入导出
2)db2exfmt,db2expln是用来查阅已搜聚并写入解释表(explain_instance)的宏观解释多少
3)visual explain查看特定SQL语句选择的会见布署的图形化表示GUI解释工具
4)timeron是db2优化器使用的一种基金衡量单位,用于总计查询完全试行所需的年华和资源数量
5)访谈安顿是db2用于实践db2语句的路线和步子,那是具备可用解释工具显示的新闻
6)syscat.packages是用来存款和储蓄数据库中的以程序包的花样的拜望布署
7)查看静态SQL,动态SQL用 db2expln
8)db2exfmt是平昔管理已搜罗并村混在表明表中的完善批注多少或表达快速照相数据,输出是依附文本的报告
9)db2advis索引设计工具,测量检验如若成立了目录,SQL实施费用可以增进多少,
10)使用db2advis第一步是要采摘和陈诉提供给Design advisor的劳作负荷
11)db2batch
是一种口径测量试验工具,是以一组sql和xquery语句作为输入,动态的准备语句的实践时间,并赶回结果集
12)db2dart
数据库一致性检查工具和修补工具,那一个实用程序会平素从硬盘中读取数据库的多寡和元数据实行比较,因而无法对具备活动总是的数据库运维该工具
13) db2look
能够提取数据库定义语言DDL;生成缓冲池,表空间和数据库分区组音信 ;
创造数量定义语言DDL
;搜罗数据库子集的总计数据和DDL。以及用db2look来创设立模型拟测量试验数据库

条件搭建

(1)DB2Client

DB2 客户端:DB2 v9.1

设置落成后,能够通过cmd命令行查看 DB2Client 相关新闻:

  • db2level:查看DB2Client版本信,包括32/64位

在开头一直运营 db2cmd 来运转 db2cmd.exe 运行 db2命令行程序,推行 db2:

图片 1

之后,能够进行连接数据库、访问数据等操作。

db2命令行连接数据库

catalog tcpip node runnode_My remote IP server Port
catalog database calldb_Dest as calldb_My at node runnode_My

再凭 顾客名和登陆密码 就能够访谈数据库了。当中,DB2 数据库暗中同意端口是
60000。

connect to calldb_My user 用户名 using 密码

(2)Quest
Central

DB2 可视化学工业具:Quest Central for DB2 v5.0.2.4

有关心册码

  • Quest Central for DB2:2-95710-05964-91891-64750 和 Bergelmir/CORE
  • Knowledge Xpert for DB2:147851648424638496327 和 stenny

安装之后,运转境遇如下难点:

图片 2

消除方法:程序上点击鼠标右键–>属性–>包容性;勾选以合作情势运转这些程序(包容windowsXP);勾选以管理人身份运行程序,就能够减轻。

具体操作

通过 db2命令 连接到数据后,在 Quest Central
首页会突显已接连的应和数据库的连年结点。

除 Quest Central 外,还应该有另外 DB2可视化学工业具,可扩张学习。

14)

第十三章 v10.1的新特征 

基础运用

事先多是用 SQLServer,初次操作 DB2
数据库,虽说语法多数类似,照旧各样不顺手。

关于DB2,相关资料和书本推荐:

  • 牛新庄
    -《规行矩步DB2》《深切分析DB2》《DB2品质调节与优化》
  • 《DB2 Express-C 急速入门》

此外,可参考:DB第22中学华夏族民共和国社区

二个服务器能够建三个实例,一个实例下能够建多少个数据库,多个数据库能够分包多个表空间。

多少个注意事项

  • SQL 语句须求求以 ; 结尾
  • declare 定义变量不要带 @,那是与 SQL Server 的区分
  • SQLSTATE 和 SQLCODE 能够提供 SQL 命令的周转状态
  • 仓库储存进度调用:call ProcedureName(inVal, …, inVal, ?, … ,
    ?);,当中,? 是出口参数占位符
  • NULL
    对于完整性约束和询问带来负效应,提出表中最棒尚未空值,在建表时增加非空约束
  • 表存款和储蓄在表数据空间,索引存款和储蓄在目录数据空间
  • 分区提升系统个性

常用命令

(1)查询

// 查看表字段信息
[1]. describe table schemaName.tableName;
[2]. describe select * from schemaName.tableName;
// 查看表索引信息
[1]. describe indexes for table schemaName.tableName show detail;
[2]. select * from syscat.indexes where tabname='大写的表名';

(2)删除

// 删除索引
drop index schemaName.indexName;

(3)重命名

// 重命名 表名
rename table schemaName.oldTabName to newTabName;
// 重命名 字段
alter table schemaName.TabName
    rename column oldColName to newColName;

里面,表 oldTabName 不要有外键约束和视图引用。其它,尽量制止字段重命名。

建表

已知存在表 tabSqh,创立 tabSqh 的别本 tabSqh_Copy:

CREATE TABLE tabSqh_Copy like tabSqh;
INSERT INTO tabSqh_Copy select * from tabSqh;

只顾,该格局只复制表结商谈表数据,tabSqh_Copy
没有相关的表约束,必要手动加多:

alter table tabName
    add constraint P_tabName primary key(IDKey);
alter table tabName1
        add constraint F_IDKey foreign key (IDKey)
                references tabName2 (IDKey)
on delete restrict on update restrict;        

任何连锁约束增多方法如是之。

SELECT 高等用法

此处介绍 select 在 DB2 中的 3 种高等用法:

(1)复制表结构

CREATE TABLE new_table_name LIKE table_name; 

(2)创制结果表

CREATE TABLE new_table_name AS (
    SELECT * FROM table_name
) DEFINITION ONLY; 

(3)创造物化查询表(MQT)

create table new_table_name AS (
    select * from table_name
) data initially deferred refresh deferred;   
refresh table new_table_name; 

物化表SELECT语句看似二个询问,未有真正造成表,类型突显为Query,但它完全可以当表来用。 

删表

(1)删除单行数据或批量剔除数据:方法2比办法1性子好

// 方法1
DELETE FROM tabName WHERE 过滤条件  
// 方法2
DELETE FROM  
(  
    SELECT * FROM tabName WHERE 过滤条件  
);

(3)全表数据删除

// 方法1
DELETE FROM tabName;
// 方法2
DROP TABLE ...
CREATE TABLE ...
// 方法3
ALTER TABLE tabName ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;

(4)直接删除表

DROP TABLE tabName;

临时表

DB2的有时表基于会话(session),且会话之间相互隔断。当会话结束时,一时表的数额被去除,不时表也会被去除。

有时表的职能:

  • 保留中间结果集,以便职分的接续管理
  • 制止复杂的SQL语句,将一条较为复杂的SQL语句分解成多条轻便的SQL语句,升高运转功用

    // 创制临时表
    DECLARE GLOBAL TEMPORARY TABLE session.TmpTableName
    LIKE rvc.TableName INCLUDING COLUMN DEFAULTS
    WITH REPLACE
    ON COMMIT PRESERVE ROWS
    NOT LOGGED;
    // 向偶然表中插入数据
    INSERT INTO session.TmpTableName
    SELECT * FROM rvc.TableName WHERE <过滤条件>;

其间,NOT LOGGED 表示不记录日志,WITH REPLACE
代表若已存在有的时候表则替换之,ON COMMIT PRESE中华VVE ROWS
表示commit后依然保留表中的数据。之后,有的时候表能够当作是普通表,查询、联表均可。

关于session有的时候表的多少个难点:http://www.db2china.net/Question/28913

关于session有时表调节选项 ON COMMIT PRESE冠道VE
ROWS的表达:http://www.db2china.net/Article/9916

当心,全局一时表允许创制索引、但差别意创设主键和独一约束。创制的权且表同原表有同等的表结构,不过相关列的性质(主键、外键、独一约束、索引等)消息是绝非的。

任何新闻可参看:DECLARE GLOBAL TEMPORARY TABLE –
IBM

DGTT 与 CGTT

上述不时表均为 DGTT(已扬言的全局临时表),DB 9.7 初始协助CGTT(已开立的大局有时表)。

共同点:

  •  帮衬基于会话的数码
  •  帮助索引,但不援助独一约束或主键

两者都协助基于会话的数目。

CGTT 优点:

  •  持久化的,在系统装置时优先创立、供未来分享之,而 DGTT
    是在某一应对中扬言、仅供该会话使用;
  •  防止在各客户会话先河时声称临时表的渴求;
  •  选择与普通表同样的方式法则,而 DGTT 必需是原则性的格局 SESSION;

创建 CGTT:

CREATE GLOBAL TEMPORARY TABLE <table_name> (
    <column_name>  <column_datatype>,
    <column_name>  <column_datatype>,
…  )
ON COMMIT [PRESERVE|DELETE] ROWS
ON ROLLBACK [PRESERVE|DELETE] ROWS 
[NOT LOGGED|LOGGED] 
DISTRIBUTE BY HASH ( col1,..)
IN <tspace-name>;

另外详细新闻可参照:DB2 临时表 – DGTT 和
CGTT

索引

目录是如法炮制键值的集合,每贰个键值指向表的一行。

目录是一把双刃剑,当表的目录过多时,数据删除、插入和更新频率会裁减,当索引过少依旧设计不成立即会影响多少的查询作用。尽量不要在饱含null 值的字段上确立(单列)索引,因为索引不会积存该条记录的音讯。

对此构成索引,指引列(组合索引中排在最左边的列)对查询语句中where条件的影响最大。因而,应该对索引键中的列按重复值由少到多的一一排序,该排序会使索引键提供最好品质。

优点:

  •  加速查询速度
  •  防止不须要的表扫描 或 排序操作
  •  收缩死锁的发生
  •  独一性索引保障数据的独一性

缺点:

  •  额外的寄存空间
  •  索引成立和护卫的耗费时间

总结新闻

数据库对象的总计参数音信,如表的数据量大小、占用的页数、表的行数、索引的动静和各省的分区情形等。

三个SQL在写完并运转之后,我们只是告诉DB2去做怎么着,实际不是怎么着去做。具体如何是好,取决于优化器。优化器为了扭转最优的实践布署,供给调控当前的类别消息、目录中的总结音讯等。runstats
命令就是用来收集数据库对象的动静新闻,对优化器生成最优的实行安排第一。

对数据表频仍的insert,
update,会促成数据仓库储存储中出现物理碎片,runstats能够对数据库进行数据整合,有利于数据块再三再四化、提升多少存取的频率,原理类似于OS中的磁盘碎片整理。

// 针对表
runstats on table schemaName.tableName;
// 针对表和索引信息
runstats on table schemaName.tableName [with distribution] and [detailed] indexes all;
// 针对某个单一索引
runstats on table schemaName.tableName for/and indexes schemaName.indexName;

1)

施行陈设

在关系型数据库调优进程中,SQL语句是关联质量难点的重大原因,而实施布置则是演说SQL语句实施进程的言语。

  •  差异数据库之间对于实行布置的表示方法各不相同样
  •  每一趟导入存款和储蓄进程,生成的积攒进度推行安排不确定完全同样,受当前的数据库参数、计算新闻的熏陶

SQL语句的实施进程一共包蕴多少个关键环节:

  •  数据读取格局(scan):表扫描
    or 索引围观
  •  表之间怎么着开展延续(join):包涵Nest
    Loop 、Merge Join、Hash join及半老是等、多表间的总是各样接纳

关于多表间连接的次第选取主题素材:

不论在同等条SQL语句中包括了多少张表连接,同一时刻唯有两张表张开一连,但多表间的连天各种也是决定品质的重大原因。数据库对于表的相继的选拔,按照多少个表之直接连后得出的行数实行排序,假使统计新闻与事实上情形不是相当大,有比比较大希望会促成由于延续各样不当而致使的品质难题。

连锁新闻请参照他事他说加以考察:DB2实行布署浅析

对此有个别复杂的SQL,提议使用
Quest Central 中的 SQL Turning 功效,相比直观。

SQL语句执行布置的任何查看方法:

(1)db2expln

db2expln实行布署分为三部分:

  •  当前搜聚推行铺排的口舌
  •  试行安顿详细新闻
  •  实践安插图:从下往上,从左往右,根据号码从大到小的种种实行阅读

在cmd命令行运营 db2expln
命令,能够查看该命令的利用帮衬。

db2expln -d 数据库名称 -u 用户名 密码 -q "sql语句"[-f "文件名.sql"] -t -o 输出文件名.out

里头,文件名.sql 中的多条独立的SQL语句各占1行,行末不要带分号。

db2expln -d dbName -u sqh cmb@2018 -q "sql语句" -g -t -o tmp_sqh.out
db2expln -d dbName -u sqh cmb@2018 -f "sqh.sql" -g -t -o tmp_sqh.out

对上述命令的表明:

  • -t:输出到终极,-o:输出到文件
  • -q:实施一个SQL语句,-f:奉行有个别保存了多条SQL语句的公文
  • -g:图形化显示
  • -z:钦赐SQL语句间的相间符

参考:行使 db2expln 的 DB2
SQL质量优化示例

(2)db2exfmt

该方式要求在DB2安装目录 …\IBM\SQLLIB\MISC\ 下有 explain.dll
文件,有待于进一步深造。

有关查看存款和储蓄过程的进行安排

先是,获取存款和储蓄进程相呼应的包

SELECT bname, bschema, pkgname, pkgschema 
FROM syscat.packagedep
WHERE btype='T' AND pkgname in (
     select bname from sysibm.sysdependencies where dname in (
            select specificname from syscat.procedures where procname='存储过程名称' AND procschema='存储过程模式名称'
     )
);

接下来,再通过如下命令获取包中的施行陈设

db2expln -d 数据库名称 -u 用户名 密码 -g -c 包模式名称 -p 包名称 -s 0 -t -o tmp_sqh.out

专心,上述代码获取存储进度对应的包,有些情状下询问不到消息,至于为什么还不领会,再提供另一种办法

select c.PROCSCHEMA, c.PROCNAME, b.* 
from syscat.STATEMENTS b, syscat.PROCEDURES c, syscat.ROUTINEDEP d
where b.pkgname = d.bname
      AND c.SPECIFICNAME = d.SPECIFICNAME
      AND c.PROCSCHEMA   = d.ROUTINESCHEMA
      AND c.PROCSCHEMA   = '存储过程模式名称' AND c.PROCNAME = '存储过程名称'; 

小结之,鉴于数据仓库储存款和储蓄进度实行布置的多变性,提议:

  •  runstats + rebind
  •  删除重新建立 

runstats
命令参见上述总结音讯部分,下边给出其余常用命令

// 重新绑定包
rebind package pkgSchemaName.pkgName;
// 更新 package cache 中的执行计划
flush package cache dynamic;

留意,runstats
仅是立异实行布置的单方面(对动态SQL生效、但对存储进度无效),另一方面还需
rebind 包(对创新存款和储蓄进程施行布置才有效)。

================================================================================================================================================================================================================================

================================================================================================================================================================================================================================

================================================================================================================================================================================================================================

================================================================================================================================================================================================================================

 
1)CLI JDBC ODBC
是应用程序是用以db2服务器调换的驱动,当二个言语被驱动后,会打成一个网络包发送给数据库

2)查看db2进度执长势况: ps -ef|grep -i db2

3)查看db2版本下有哪些实例: db2ilist

4)即便db2stop
force无法结束实力,db2start不可能运营,能够奉行db2_kill强制终止全数分区推行的长河,然后施行ipclean ,重新启航数据库时,做崩溃苏醒

5)db2 get dbm cfg 观察的是sqllib目录下的db2systm那个文件

6)db2 list db directory /catalog databse
观看编指标是/sqllib/sqldbdir/sqldbdir这些文件 ,这几个和node
是千篇一律的(node要创立才有)

7)db2support <output_path> -d <db name> -cl 0
备份当前实例和数据库配置音讯,

??8)难道说补丁的基本功上不可能打补丁,绝对要有根基版本 ? qa

9)表空间容器的连锁消息可以透过list tablespace containers for tbspid show
detail

10)用db2pd -d <dbname> -tablespaces直观显示表空间的布置音讯

11)list tablespaces相比较,get snapshot for
tablespaces音讯要完美,比如自动积攒和表空间map新闻

12)SMS表空间不支持容器大小,只援助更换路径;DMS能够支撑容器大小改动,ADD,DROP,(add和drop会重新平衡rebalance)
EXTEND,REDUCE,RESIZE;自动积攒管理表空间(这几个表空间是db在创立时默许选项或是内定了automatic
storage
yes)情形下默许的选项,不可能在表空间级改动表空间尺寸,只好在数据库级扩大add
storage on 选项为数据库增加新的储存路径(db2 alter database dbname add
storage on dbpath),这里有一点要表明:
9.7
之前新加的渠道不会被表空间登时选拔,唯有已有囤积路线文件系统满了,才会接纳新添的路径,况且不得不扩充不能去除。9.7从此就能够对机动储存表空间执行rebalance操作就能够马上选用那几个蕴藏路线

13)DMS中采纳add扩大容器会再度rebalance,影响属性 ,

14) DMS中使用begin neww stripe set
选项是当已有容器已用完后,再选拔新增的容器,于add容器不一样,该选项不会rebalance,但会促成数据偏移

15)db2pd -d tomdb -storagepaths 查看存款和储蓄路线(数据库品级)

16)在数量库级扩张存款和储蓄路线必须要在实例目录下边建设构造才行:db2 “alter
database tomdb add storage on ‘/home/db2inst1/testdbpath/’ “
DB20000I  The SQL command completed successfully ,qa ?

17)对什么样表做rebalance ,哪个表就有新增添的门路咯

18)可以从DMS改成自动管理表空间(显示的用上选项alter tablespace tbname
managed by automatic storage)

19)怎么样删除八个在数额库级创造的器皿,表空间已经rebalance,容器路线已经rm
-rf掉了 ,db2pd -d dbname -storagepath查看今后是drop pending? qa

20)quiesce能够对表空间锁定,防止别的客户对表空间的表数据举行退换db2
quiesce tablespaces for table db2inst1.t1 share /【reset】

21)对表空间状态的二进制解释用:db2tbst 0x5000

22)SYSIBM.SYSCAT,SYSIBMADM,SYSSTAT这多少个种类情势对有关对象开展分组

23)syscat.schemata这几个视图用来查阅数据库创设了什么样格局

24)decimal(p,s)p是数字的总位数,s是小数位
;假诺不钦定准确的位数就遵照decima(5,0)来表示

25)表约束:*非空约束 not null *独一约束
unique(columm)*主键约束和外键约束 *自己评论约束 constraint constraintname
chek

26)constraint只是束缚名称 ,个中外键约束需求名称,检查约束需求名称

27)能够透过syscat.references检查有着完整性约束,syscat.checks查看检查约束 

28)删除约束:db2 alter table tbname drop constraint contraintname

29)在sysibmadm.admintabinfo里面查看表体积,已经回退之后的体量

30)在根节点上找到大致对应的数值范围,然后经过这么些范围指针知道叶节点对应的数值,然后在数值通过途锐ID偏移找到呼应的行音讯

31)唯一索引:当在表上创设了主键或独一键的时候,表会自动创立独一索引:db2
create unique index indexname on tablename(column)

32)唯有成立了唯一索引工夫运用include这么些选项举行七个字段的查询

33)db2 describe indexes for table tablename show detail
命令查看贰个表是还是不是有目录,在哪些字段上创建了目录,以及索引的类型,也能够透过syscat.indexes选择字段查看索引

34)怎么着改变私下认可使用的表空间? qa

35)有八个方法消除种类唯一:generate_unique , identity , sequence

36)独一体系号:generate_unique函数是db2最先选用在表中生成独一值的格局(bit
data)

db2 create table tablename(columnname char(13) for bit
data,columnname….),在那之中10个字节的数据串包括的是timestamp和表分区,举个例子:
[db2inst1@oc6162546036 ~]$ db2 “select * from customers”

CUSTNO                        CUSTNAME        


x’20140402203636696427000000′ tom             
x’20140402203636696544000000′ sam             

  2 record(s) selected.

[db2inst1@oc6162546036 ~]$ db2 “select timestamp(custno) as
custno,custname from customers”

CUSTNO                     CUSTNAME        


2014-04-02-20.36.36.696427 tom             
2014-04-02-20.36.36.696544 sam             

  2 record(s) selected.

36)sequence是db2的一个对象,用选项nextval for seqname抓取下个值,prevval
for seqname抓取上个值 用法:db2 create sequence db2inst1.my_seq as
bigint start with 1 increment by 1 no maxvalue cycle cache 100 ;
个中cache 100是指
一百个优先算出来的队列存在内部存款和储蓄器中,当要读取的时候一贯从内存里面拿,所以cache
不等于1的时候,连接断开会出现缓存值错过而导致不三番两次,通过syscat.sequences视图查看体系定义
[db2inst1@oc6162546036 ~]$ db2 “create sequence myseq start with 1
increment by 1”
[db2inst1@oc6162546036 ~]$ db2 “create table t1(id int,name char(16))
in testdms2”
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “insert into t1 values (nextval for
myseq,’tom’)”
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “insert into t1 values (nextval for
myseq,’sam’)”
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “select * from t1”

ID          NAME            


          1 tom             
          2 sam             

  2 record(s) selected.

37)indentity自增字段
,于sequence的分别在于,indentity只可以在表中某一列使用,作用范围是二个表。而sequence是db2对象,于表非亲非故,能够在全方位数据库总使用

###############################################################################################################################################################################################
 
积存进程(stored procedure),函数,LOB,tirgger,自增字段(indentity)
那么些从没学
###############################################################################################################################################################################################

39)定界ASC(II) DEL是db2最常用的格式。””双引号作为字符分割符 ;
,逗号列字段分割符 ;换行来界定行区划符

40)定长ASC(II)格式,每一个字符长度于列定义的字符长度相同,不足用空格补齐

41)PC/IXF 这几个是IBM特有的,能够保存表结构定义,WSF格式是lotus的格式

42)cursor游标只帮忙LOAD,没有须求中介就足以在表和表之间迁移 :declare
mycursor cursor for select c1 ,c2 ,c3 from tab1 ; load from mycursor of
cursor insert into newtab

43)export :db2 “export to tablename.del of del messages emp.msg select
* from tablename”
            db2 “export to tablename.del of del modified by chardel”
messages emp.msg select * from tablename”  
    import : db2 “import from tablename.del of del messages emp.msg
insert/insert_update/replace into tablename
             db2 “import from tablename.del of del modified by chardel”
allow wirte access commitcount messages emp.msg insert into tablename”

44)load跟import差别样,import照旧施行insert,update,delete操作,须求表达约束和触发器,通过作业日志记录变化。而load不是一行行的导入,而是格式化数据,不必验证约束和触发器,日志也非常少,适合多量数量导入。

45)load常用命令:db2 load source-file of filetype messages msgfile
[insert,replace,terminate,restart] into targettable

46)
load除了是非独一键的表唯有load装载这几个操作,只如若有独一键的表(独一索引)就要开展塑造,删除,索引复制另外3个级次,可经过db2diag.log查看各样阶段步骤

47)load在剔除重复值阶段,只会检讨独一键,不会检验check和完整性(主键和外键),在第二个装载阶段不符合表定义的输入数据不会棉被服装载到表中

48)含独一键的load进程:load(不经过db2引擎将文件剖判成物理存款和储蓄方式,无效数据足以放在转储文件)
> build(假设有目录就能凭仗load采摘的键创设索引) >
delete(检查评定独一键,制造足够表) > index copy(钦点了allow read
access/use ts选项会将build的目录数据从temporary sp里面copy到index
sp(索引表空间))
    
49)LOAD例子:
[db2inst1@oc6162546036 ~]$ db2 “alter table t1_exp add column ts
timestamp add column msg clob(32k)”
《《《《《《制造丰硕表,加上timestamp 和 大对象
[db2inst1@oc6162546036 ~]$ db2 “load from t1load.del of del modified
by dumpfile=/home/tomzhao/t1.dmp messages msg.t1 insert into t1load for
exception t1_exp” 《《《《《《load过程

Number of rows read         = 8
Number of rows skipped      = 0
Number of rows loaded       = 6
Number of rows rejected     = 2
Number of rows deleted      = 2
Number of rows committed    = 8

SQL3107W  At least one warning message was encountered during LOAD
processing.
[db2inst1@oc6162546036 ~]$ cat t1.dmp.load.000 
《《《《《《查看有线数码(转储文件)
20,”sam”,
40,”aaaaa”,x
[db2inst1@oc6162546036 ~]$ db2 “select id
,name,seqno,ts,substr(msg,1,10)as msg from t1_exp”
《《《《《《查正视复值(万分表)

ID          NAME       SEQNO       TS                         MSG     
 



         30 mike                 4 2014-04-04-12.26.15.342640
00001I0000
         50 cccc                 7 2014-04-04-12.26.15.342640
00001I0000

  2 record(s) selected.

装载完今后,要检查错误新闻(msg.t1),万分表(t1_exp),转储文件(t1.dmp) 

50)在实质上中若是能确定保证独一键未有重复值的话,能够毫不创建丰富表

51)用load query检查表load状态

52)load有个copy选项用来备份load,因为有极大希望开展数据库或表空间的复苏,那时前滚须求copy的表空间备份恢复生机被数据库恢复生机删掉的load数据
(copy no 缺省,copy之对归档日志有效)

53)copy
no会是归档日志load的时候处于backup-peding状态,那个时候要求backup
db/ts来排除那几个场合

54)copy yes会使归档日志数据库load的时候发生备份介质,用于db
苏醒rolllforward的时候利用 
[db2inst1@oc6162546036 ~]$ db2 update db cfg for sample using
archlogmeth1 disk:/home/dbi2nst1/archlog  《《《《《《归档数据库
[db2inst1@oc6162546036 ~]$ db2 “load from t3.del of del insert into t3
copy yes to /home/db2inst1”     《《《《《《copy yes 的load
[db2inst1@oc6162546036 ~]$ db2 restore db sample taken at
贰零壹肆0404143751                               《《《《《《恢复生机数据库
[db2inst1@oc6162546036 ~]$ db2 connect to sample
SQL1117N  A connection to or activation of database “SAMPLE” cannot be
made 
because of ROLL-FORWARD PENDING.  SQLSTATE=57019               
[db2inst1@oc6162546036 ~]$ db2 rollforward db sample to end of logs
and stop                           《《《《《《前滚数据库

                                 Rollforward Status

 Input database alias                   = sample
 Number of members have returned status = 1

 Member ID                              = 0
 Rollforward status                     = not pending
 Next log file to be read               =
 Log files processed                    = S0000001.LOG – S0000001.LOG
 Last committed transaction             = 2014-04-04-18.57.17.000000
UTC

DB20000I  The ROLLFORWARD command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “select * from
t3”                                                    
《《《《《《表在restore / rollforward后 和事先的大同小异
          6 record(s) selected.

                              

55)-rw——-.  1 db2inst1 db2iadm1  20M Apr  4 14:37
SAMPLE.0.db2inst1.DBPART000.20140404143751.001
    -rw-r—–.  1 db2inst1 db2iadm1 528K Apr  4 14:45
SAMPLE.4.db2inst1.DBPART000.20140404144545.001
里面第2个字段 4代表load备份,0代表数据库备份

56)除了copy yes, copy no 还应该有一种load 选项 nonrecoverable
,这么些选项能够在load之后不备份表空间,马上可以动用表,可是这些表在之后亟需备份前滚的时候不能够被还原(时间点在nonrecoverable那一个动作之后),假使急需还原将在重新建设构造表或对数据库进行load点之后的备份

57)copy no 会使表空间处于backup-pending
    copy yes 会使表空间处于长日子等待
    nonrecoverable 会使表不可苏醒,不过速度火速

58)对于load装载阶段会将不符合表定义的输入数据放入转存文件,将违反独一约束放入至极表,那么违反完整约束和check约束,load会将其安装为set
intergrity (SQL0668n ,reason code “1” )

59)set intergrity 有二种采用:set intergrity no 暗许
db2 set integrtiy for T1
   set intergrity immediate checked 

   set intergrity unimmediate checked

60)和违反独一键同样,也要创设丰盛表把违反完整约束和check约束记录下来

61)演示进度:
[db2inst1@oc6162546036 ~]$ db2 “create table t2(col1 char(10),col2
char(10))”                                          《《《《《《创建表
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “alter table t2 add constraint check1
check (col2 in( ‘a’,’b’,’c’))”                   
《《《《《《增减check约束
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ cat
t2.del                                                                                 
《《《《《《创建del文档
“AAA”,”A”
[db2inst1@oc6162546036 ~]$ db2 create table t2_exp like
t2                                                            
《《《《《《创建充足表
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “set integrity for db2inst1.t2
immediate checked for exception in t2 use t2_exp”       
《《《《《《对t2进行反省,并动用十一分表  
SQL3602W  Check data processing found constraint violations and moved
them to  
exception tables.  SQLSTATE=01603 
[db2inst1@oc6162546036 dbbackup]$ db2 “select * from
t2_exp”                                                          
《《《《《《非凡表查看,不管是不是有丰富数据,t2都将退出set integrity
pending状态
 
COL1       COL2      


AAA        A         

  1 record(s) selected.

62)对于数据仓库来讲,有无数表必要检讨,那么能够利用表字典查看哪样表处于set
integrity pending状态:db2 select
tabname,status,access_mode,substr(const_checked,1,1) as
fk_checked,substr(const_checked,2,1) as cc_checked from syscat.tables
where status=’c’

63)表d>c>b>a,当C做完load处于set integrity
pending状态的时候,其余表不会处于此情状,可是对C表试行set
integrity那一个动作之后,a和b表都会处于set integrity
pending的动静,像这种地方主外键约束相当多的气象,或然要执行多次set
integrity命令   

64)db2 “select tabname from syscat.tables where status=’c'”
查看表处于set integrity pending 状态的表

65)db2 set integrity for t1 off no access cascade immediate
《《《《《《对表t1安装为set integrity
pending状态,不容许访谈,同有时间他的重视性表也高居set integrity pending状态

66)db2 set integrity for manager foregin key, employee check immediate
unchecked
《《《《《《对表manager的外键和employee的反省约束检查,并将该表脱离set
integrity pending状态(确定保障没有背离约束的意况下能够这么用unchecked)

67)借使表处于load
pending状态,可以运用load…restart,terminate,replace,举个例子load
termiante模拟下列操作:
[db2inst1@oc6162546036 ~]$ db2 create bufferpool bp8k size automatic
《《《《《《创建8k bufferpool
[db2inst1@oc6162546036 ~]$ db2 “create tablespace ts3 pagesize 8k
managed by database using(file ‘/home/db2inst1/ts3’ 256) bufferpool
bp8k”《《《《《《创建8k的ts3表空间
[db2inst1@oc6162546036 ~]$ db2 “create table t1(id int,name
char(50),desc char(50)) in ts1″《《《《《《创建表
[db2inst1@oc6162546036 ~]$ db2 -td@ -f
sp_insert.sql《《《《《《实践插入存款和储蓄进度
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “call
sp_insert(6500)”《《《《《《奉行插入存款和储蓄进度

  Return Status = 0
[db2inst1@oc6162546036 ~]$ db2 “export to t1.del of del select * from
t1″《《《《《《导出数据
[db2inst1@oc6162546036 ~]$ db2 drop tablespace
ts3《《《《《《删除ts3
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “create tablespace ts3 pagesize 8k
managed by database using(file ‘/home/db2inst1/ts3’ 232) bufferpool
bp8k”《《《《《《重新创设一个232页的8k ts3表空间
[db2inst1@oc6162546036 ~]$ db2 “create table t1(id int,name
char(50),desc char(50))in ts3″《《《《《《重建表
[db2inst1@oc6162546036 ~]$ db2 “load from t1.del of del insert into
t1″《《《《《《重新load数据
[db2inst1@oc6162546036 ~]$ db2 load query table
t1《《《《《《查看表状态 load pending 
Tablestate:
  Load Pending
[db2inst1@oc6162546036 ~]$ db2 “load from /dev/null of del terminate
into t1″《《《《《《使用terminate选项
[db2inst1@oc6162546036 ~]$ db2 load query table
t1《《《《《《查看表状态
Tablestate:
  Normal

68)从客商端load数据,假使出现路径不设有,表就处于load in
progress,这时要在顾客段实行load terminate,假诺load
是insert动作,表会恢复生机到load从前情形,如若是replace动作,表会被terminate清空

69)假诺要导入的数额是分号;和单引号,能够是选用modified
by修饰符来钦点,coldelx钦赐分隔符,chardelx钦定字符串分割,其中x代表导入数据的分店,单引号
比方:
[db2inst1@oc6162546036 ~]$ db2 “load from t1.del of del modified by
coldel; chardel” insert into t1″

70)modified by
有为数非常多修饰选项来修饰格式,如:decimal小数会有”aaa”,+00023.40那中状态,能够行使decplusblank
striplzeros去除+号和零 0 ;可以这么设定日期timestampformate=”YYYY/MM/DD
HH:MM:SS.uuuuuu”

71)要导入的多少比表中的字段多怎么做:DEL格式的能够运用
import,load的method p选项,对于ASC格式,method L ,对于IXF格式,用method
N选项 :db2 “import from t4.del of del method p(1,3) insert into
t4”,当中p(1,3)代表截取导入数据的1列和3列 

72)要导入的数据比表中的字段少,和字段多一致,DEL的格式用method
P(1,99,2),利用99开立多少个null值就足以了

72)qa :为何时偶尔的会TS 会backup-pending

73)假诺插入的数目是sequence的,而开始的数码也是来源于sequence的数额,那么插入新值的时候要reset
sequence的最早数值。模拟操作如下:
[db2inst1@oc6162546036 ~]$ db2 “create sequence seq1 as integer start
with 1 increment by 1 minvalue 1 maxvalue 9999999 cycle cache 10”
《《《《《《创建sequence cache10
[db2inst1@oc6162546036 ~]$ db2 “create table test2(id int,name
char(20))”《《《《《《创建表    
[db2inst1@oc6162546036 ~]$ db2 “load from seq.del of del insert into
test2″《《《《《《load数据
[db2inst1@oc6162546036 ~]$ db2 “select * from
test2″《《《《《《三行数据

ID          NAME                


          1 aaa                 
          2 bbb                 
          3 ccc                     

[db2inst1@oc6162546036 ~]$ db2 “select max(id) as counter from
test2″《《《《《《那是关键,设置最终断点 select max(id) as counter from
table

COUNTER    

          3

  1 record(s) selected.
[db2inst1@oc6162546036 ~]$ db2 “alter sequence seq1 restart with
4″《《《《《《重设发轫值,alter sequence seq1 restart with counter+1
[db2inst1@oc6162546036 ~]$ db2 “backup database sample tablespace(ts3)
to /home/db2inst1″《《《《《《表空间不可用,做了备份 
[db2inst1@oc6162546036 ~]$ db2 connect to
sample《《《《《《重新链接db
[db2inst1@oc6162546036 ~]$ db2 “insert into test2 values (nextval for
seq1,’bbbbb’)”《《《《《《插入下个值
[db2inst1@oc6162546036 ~]$ db2 “select * from
test2″《《《《《《发现成为了14,并不是4,那是因为在开首创建sequence的时候cache
10
,当数据库断开,前10组数据(4-13)会从内部存款和储蓄器消失,链接db后从14事后伊始算起

ID          NAME                


         14 bbbbb               
          1 aaa                 
          2 bbb                 
          3 ccc                 

  4 record(s) selected.
 
74)IXF格式一般会友善转变不会并发乱码,DEL则会有乱码的主题材料。当load的时候乱码,能够运用
modified by codepage=1208/1386/819来退换数据库钦赐的格式,私下认可是1208 
[db2inst1@oc6162546036 ~]$ db2 get db cfg for sample |grep -i code
来查看,db2set db2codepage=1386来更改

75)表空间之间的表迁移,标准的做法是,t1原表export出来,在另个表空间成立一样和t1表同样t2,把t1export出来的数据import进t2,删除或rename
t1,把t2改成t1

76)能够选拔存款和储蓄进度admin_move_table来拓宽表空间之间的动员搬迁,这种在线的动员搬迁格局保证原表持续访谈

77)在线表迁移有5个步骤:init copy replace swap cleanup

78)db2move适用于db2move程序用来在八个数据库间的动员搬迁,适合区别平台,表数据量相当多,是import,export,load命令的卷入,将数据导出为pc/ixf格式

79)db2look能为目的表发生表,视图,索引,函数,trigger,存款和储蓄进程等对象定义语句,db2look也足以抽取表的靶子定义音讯,以及表空间结构

80)db2move不可能迁移identity标志列的表,之能用单独的load去导入

81)查看缓冲池大小:
    SELECT BPNAME,NPAGES,PAGESIZE FROM SYSCAT.BUFFERPOOLS
修改缓冲池大小:
    ALTER BUFFERPOOL <bp_name> SIZE <number_of_pages>
制造缓冲池时内定大小:
    CREATE BUFFERPOOL <bp_name> SIZE <number_of_pages>
PAGESIZE <integer K>

82)db2look+ db2move数据库数据里面垮平台迁移手续,举个例子linux 到 window :
1)db2look 导出表和表空间对象的概念 db2look.ddl 
                                                                
2)db2move 导出全体数据库表数据到二个索引下 
                                                                 3)FTP
到window, 修改db2look.ddl中的内容,举个例子路线,实行db2 -tvf db2lool.ddl
加载定义
                                                                
4)通过db2move导入 db2move sample load   

83)db2dart 效率非常无敌能够导出数据,

84)ixf是二进制自带结构的,del是独有多少

81) qa 即使4k页面,什么动静下表创制不了 行大小超过了4k 。。。。
############################################################################################################################################################################################### 
identity数据导入,lob数据导入,换行导入没学
############################################################################################################################################################################################### 

82)三种景况的恢复生机:苏醒+前滚 ;
复苏职业日志和崩溃苏醒(数据保持一致性)

83)前滚能够复苏到备份之后的某部点或日志结尾

84)崩溃恢复:redo提交到内部存款和储蓄器缓冲池还没写进磁盘,undo还没交给的,缺省情况下崩溃苏醒是电动试行没有需求人工干预,

85)日志是数据库一种恢复机制,用于操作数据在没写入存款和储蓄系统此前的不可磨灭记录

86)db2采纳写日记优先算法,先写日记,再写多少,写多少的历程是异步的。日志是不开展另外不是物理数据更新操作的,比方查询就不须要记录到日志内,以及日志只记录操作爆发地点,时间点和左右的数码变化,比方不要求记录sql语句和发命令的客户account 

87)数据流二种格局测算,那二种能够放肆转变
    LSN(log sequence
number)记录所在日记文件在磁盘中的真实的职位,用十六进制表示
    LSO(logical stream
offset)记录真正的数目,不分包日志文件的各个头音讯

88)外界的日记命令和决定文件都分布选用LSN记录数据流的职位

89)pageLSN会保障日志文件在还原的时候不把写进磁盘的多寡拿来还原,种种数据页头都记录了LSN,当复苏的时候读到LSN,会跟pageLSN相比,如果LSN更老,pageLSN更新的话,那么就不会去恢复生机这几个老的LSN,pageLSN是用来和LSN相比用的

90)查看pageLSN 使用 db2dart /Dd选项,其中有pageLSN的信息

91)非活动日志是在回复起源在此之前的日志,活动正是随后

92)全部重大的LSN都会记录到 SQLOGCTL.LFH那几个调整文件内,backup
pending,rollforwarding pending 皆以由那个文件掌握控制

93)db2日志原理,写日记的先行算法,先写日记,在写多少,当崩溃或前滚苏醒时候,须求将日志文件写回到数据盘,有限帮忙db2数据库的一致性,db2日志最后都留存日志文件中,在内部结构上,各样日志文件由一些日记构成,每一个日志也包行一些日志记录,每种日志记录同LSN记录,但恢复生机时,db2需求理解从十三分LSN开始,那便是min(MinfuffLSN,LowtranLSN),以及移动日志一定不要删除,不然会down机
一致性正是还原前滚到贰个时间点,这一个日子点会将送交的数据写入磁盘,未有交到或早就回滚的时候都被撤废

94) 日志的轻重,主日志文件和推来推去日志文件:日志文件个数
 Log file size (4KB)                         (LOGFILSIZ) = 1024
 Number of primary log files                (LOGPRIMARY) = 13
 Number of secondary log files               (LOGSECOND) = 12

95)
获得 DB2 数据库大小和其最大体积音讯的方法
db2 “call GET_DBSIZE_INFO (?,?,?,0)”
赢得表空间攻陷大小的点子
DMS能够平昔查看容器大小,假设想查看里面包车型大巴数目也,db2 list tablespaces
show detail
SMS由于每一种对象都挤占一个文本,能够计算SMS表空间容器普通话件的总大小
DMS自动积存管理表空间,只要自动积累路线有丰硕的上空,满了随后会自扩
获得表/索引占用空间的艺术
三种情势:
db2pd -tcbstats;datasize*页数(这种格局仅限于被访问过的表)
admin_get_tab_info 表函数;
和sysibmadm.admintabinfo系统一管理理视图

96)获取职业日志大小:(logprimary+logsencond)*logfilesiz*4k 
设置为数据库大小10-十分之四品质最好(用kbyte来总结比例),logprimary+logsecond无法高出255,日志空间尺寸不能够超越256GB.
对logprimary和logfilsiz参数的转移供给断开链接才干奏效。而logsecond的修改会应声生效,logsecond日志文件使用完后不会立马删除,而是在有着连接都断开并再度连接的时候才会去除

97)日志满:SQL0946C ,事务会回滚

98)日志路线:
[db2inst1@oc6162546036 NODE0000]$ db2 get db cfg for tomdb2|grep -i
‘path’
 Changed path to log files                  (NEWLOGPATH) = 
 Path to log files                                       =
/home/db2inst1/db2inst1/NODE0000/SQL00002/LOGSTREAM0000/

99)假如急需对创制日志镜像文件
,可以透过mirrorlogpath设置日志镜像文件,将日志存在多个任务

100)循环日志,主日志用完业务提交到磁盘,能够重新利用这些日志,当主日志全体抽成出去,何况都没交给到磁盘,则动用分配支持日志来延续日志,协助日志分配完没交给到磁盘,系统报错SQL09460C

101)
归档日志,日志一旦写满就归档(不管是不是commit恐怕写入磁盘,归档日志还是能是运动日志,富含没交给的数目),系统会复制写满的日志举办重复选拔(假诺日志是移动的那么会用协助日志,假设是非活动,那么就能够复制)

102)归档日志常用选项:db2 get db cfg for sample using logarchmeth1
disk:/archlogs

103)创设数据库暗中同意是循环日志,改动成归档日志供给离线完全备份,不然会报backup-pending状态

104)循环日志多用于OLAP
数据存款和储蓄的询问,并发,多维,帮助rollback,崩溃恢复生机,backup/restore,但不恐怕保存日志,不援助前滚
    归档日志多用于OLTP 交易系统,可以在产出难点时,第临时间复苏

105) DML(data manipulation
language)是数额垄断语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,那4条命令是用来对数据Curry的数码实行操作的语言。

    DDL(data definition
language)是数量定义语言:DDL比DML要多,主要的命令有CREATE、ALTEOdyssey、DROP等,DDL首假如用在概念或改造表(TABLE)的协会,数据类型,表之间的链接和封锁等起始化工作上,他们大都在成立表时使用。

   
DCL(DataControlLanguage)是数据库调节语言:是用来安装或更换数据库客户或剧中人物权限的讲话,包含(grant,deny,revoke等)语句。

106)监察和控制日志使用状态:db2 get snaphost for database on sample 

107)查看归档日志 :db2 list history archive log all for sample,

108)first active log file(db2 get db cfg for sample |grep -i ‘first log’
)此前是非活动日志,之后是移动日志

108)事务日志满的事态(SQL09460N) :
事务太大,能够加大logsecond大小,logprimary大小
logfilsiz大小。能够虚构用load from /dev/null of del replace into
tbname(这种措施能够不用记录日志)
                               
事务小但没交给:使用快速照相查看最初事务应用程序(appl id holding the oldest
transaction),抓取应用快速照相:db2 get snapshot for application agentid
228

110)备份:离线备份 和 在线备份(归档日志)
          数据库备份 和 表空间备份
          增量备份(归档日志)和完全备份 

111)在线备份中的include
logs是把日志一同打包在备份介质,是为了在另一台机械方便大张旗鼓前滚,当中在线备份中的include
logs是可选,但貌似景色下都以丰盛那些选项 
例如:
db2 backup db sample online include logs 在A机器上做在线备份
db2 restore db sample from /data1 taken at timestamp logtarget
/data/logs 把介质传到B机器上做通过logtarget将日志复苏到多个点名的目录
d2b “rollforward db sample at the end of logs and stop overflow log
path(/data/logs) 在B机器上通过overflow log path苏醒的日志做前滚苏醒
借使不想过来数据库只想重操旧业日志使用logtarget:db2 restore db sample logs
from /data1 logtarget /data/logs

112)能够查看苏醒实行各样:db2ckrst -d sample -t timestamp -r database

113)借使要选择增量备份:db2 update db cfg for sample using trackmod on

114)增量备份:db2 backup db sample [tablespace(tbspname)] [online]
incremental [delta] to /home/db2inst1
    增量恢复生机:db2 restore db sample [tablespace(tbspname)] incremental
[auotmatic] taken at timestamp

115)db2ckbkp -h image(介质)查看备份介质准确性

116)db2支持三种恢复生机:崩溃苏醒,前滚苏醒,版本复苏

117)暗中认可境况下崩溃恢复是暗中同意(autorestart on),无需人工干预

118) db2各种备份介质正是八个本子(image),所以版本苏醒就是利用介质恢复生机

119)重定向恢复生机:db2 restore db sample redirect generate script
redirect.ddl
              db2 -tvf redirect.ddl
重定向苏醒不支持 自动积累表空间,能够在还原命令中经过 on path-list 
钦定存款和储蓄路线,重定向复苏要前滚恢复生机,对于源端和对象段表空间容器不包容的场所特意契合

120)前滚苏醒多少个选项:时间
                   end of logs and stop (最大程度复苏)
                   end of backup and stop
(最小时间回复,backup中隐含了在线备份的log)

121)前滚提取日志顺序:活动日志目录 > overflow log path >
logarchmeth1

122)表空间的纤维时间回复点=表空间的系统目录表或内部表的终极叁回立异操作的时间点,只有前滚到细微复苏时间之后本领确定保证系统表和数据库对象

123)删除表恢复生机(dropped table
recovery)(归档日志),暗许是打开的,能够手动展开,db2 alter tablespace
tbspname dropped table recovery on
萧规曹随操作表恢复生机:
[db2inst1@oc6162546036 ~]$ db2 “create table t3(id int,name char(10))”
《《《《《《创建表
[db2inst1@oc6162546036 ~]$ db2 “insert into t3
values(10,’tom’)”《《《《《《插入值
[db2inst1@oc6162546036 ~]$ db2 backup db sample
online《《《《《《在线备份

Backup successful. The timestamp for this backup image is :
20140413153752
[db2inst1@oc6162546036 ~]$ db2 drop table t3《《《《《《删除表
[db2inst1@oc6162546036 ~]$ db2 list history dropped table all for
sample《《《《《《利用历史文件查看表定义

 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  Backup
ID

 — — —————— —- — ———— ————

  D  T  20140413153841                                       
00000000000053430004000a 
 —————————————————————————-
  “DB2INST1”.”T3″ resides in 1 tablespace(s):

 00001 IBMDB2SAMPLEREL
 —————————————————————————-
    Comment: DROP TABLE
 Start Time: 20140413153841
   End Time: 20140413153841
     Status: A
 —————————————————————————-
  EID: 47

 DDL: CREATE TABLE “DB2INST1”.”T3″ ( “ID” INTEGER , “NAME” CHAR(10) ) 
IN “IBMDB2SAMPLEREL” ;     
[db2inst1@oc6162546036 ~]$ db2 “restore db sample
tablespace(IBMDB2SAMPLEREL) taken at
二零一六0413153752″《《《《《《表空间复苏
[db2inst1@oc6162546036 ~]$ mkdir droppedtablerecoverytest
[db2inst1@oc6162546036 ~]$ db2 “rollforward database sample to end of
logs tablespace(IBMDB2SAMPLEREL) recover dropped table
0000000000005343000伍仟a to
/home/db2inst1/droppedtablerecoverytest”《《《《《《利用历史文件的表定义,可以查看到backup
id ,和接纳的tablesapce .在前滚的进程中校表数据导出到一个目录里
[db2inst1@oc6162546036 NODE0000]$ cat data《《《《《《
10,”tom       “
[db2inst1@oc6162546036 ~]$ cat
creatt3.ddl《《《《《《创建一个剧本,DDL语句能够在历史记录里查看到
CREATE TABLE “DB2INST1”.”T3″ ( “ID” INTEGER , “NAME” CHAR(10) )  IN
“IBMDB2SAMPLEREL” ;
[db2inst1@oc6162546036 ~]$ db2 -tvf creatt3.ddl《《《《《《
[db2inst1@oc6162546036 ~]$ db2 “import from
/home/db2inst1/droppedtablerecoverytest/NODE0000/data of del insert into
t3″《《《《《《
[db2inst1@oc6162546036 ~]$ db2 “select * from t3″《《《《《《
ID          NAME      


         10 tom       

  1 record(s) selected.

124)前滚复苏一旦落成就能够转换新的日志链,之后时间的日记将恒久的无法被恢复生机,被去除了早就
例如:
 
125)前滚恢复有多个选项:timestamp某些时间点
                     end of logs and stop 最大恢复生机时间
             end of backup最小苏醒时间

126)db2 “values current timestamp” 
这么些能够记下当前精准的年月和前滚时候供给的格式
[db2inst1@oc6162546036 ~]$ db2 “values current timestamp”

1                         

2014-04-14-04.50.13.452212

127)使用db2 list history backup all for sample查看备份最小时间(start
time)和最大时间(end time)
     使用db2 list history archive log all for sample 查看归档日志 

###############################################################################################################################################################################################
普及备份恢复生机情况及境遇的题目 
###############################################################################################################################################################################################

128)自动表空间设置有三个选项要同一时间设置才会自动管理空间:创建的表空间的是automatic
storage yes ;autoresize yes,  autoresize yes技艺促成automatic storage 

129)runstats > reorgchk > reorg > runstats > rebind
    runstats > reorgchk > rebind

130)runstats 使用distrubution
参数搜集数据布满(一种是frequency,一种是quantile)

131)[db2inst1@oc6162546036 ~]$ db2 “select tabname,stats_time from
syscat.tables where stats_time is null”
《《《《《《查看是还是不是采撷过总计新闻 

132)runstats只可以对单纯表举行实践,无法对全体数据库做运转总括,供给脚本来收罗一切数据库的总计新闻

133)runstats有allow write access(默认)和allow read acess

134)若是出现表和目录总计音信分歧样,runstats将会报告警察方,此时快要同一时间对表和目录举行计算音信
db2 runstats on table db2inst1.t1 and detailed indexes all

135)要是施行大数据量的总计音讯收罗时,会产出sql2310n
使用程序不可能生成总括新闻,那是足以选用抽样总计

136)runstats总计的结果是保留在sysstat.tables 和sysstat,indexs,
不提出修改

137)db2look -d sample -m > db2look_stat.out保存总括音信

138)runstats使用实行:

*当表数据量产生巨大变化的时候,如通过load加载大量数码或reorg后,或追加的新的目录,提议runstats
*没事的时候实施runstats
*表非常大,或表数据频仍变动,能够设想在某个字段上runstats,而不是任何字段,
*表极大,总计时间不长,可以虚构抽样总括
*增加可以用性,能够暗许使用allow wirte access
*系统表也要时常做runstats
*为缩减消息不平等的情景,思量同期在表和目录上还要扩充总结新闻收罗
*总括完消息要产生commit
以自由锁。对于静态语句,还亟需对package重新绑定,一便生成新的拜会安插

139)reorg磁盘碎片整理工科具

140)但出现难题时,reorg表大概会大大升高品质

*假设表中有非常多刨除的行,或许稍微表已经是空表,那么reorg能够是表占用的空间大大降低
*一经发生overflow行溢出,首要发生在变长字段varchar更新之后,记录的长度会跨页,增大了
I/O,reorg表数据足以重新组织数据的仓库储存顺序
*依据有个别索引重新协会表数据的顺序物理,即cluster
index聚焦索引的概念,表数据在物理上的囤积顺序于索引顺序相相配。
*但表数据压缩是,能够由此reorg构建字典,并对表数据举行压缩

141)当然 reorg不是万能的,有希望依据索引增添页数,DBA 比较关系
reorg实行时间,频率 和对采取的影响
 
142)判别是还是不是供给reorg 多少个挑选:reorgchk和sysibmadm.snaptab管理视图
db2 reorgchk on schema db2admin
如果F1,F2,F3标记 *,则需求重组表,假诺索引总结结果 F4-F8 有*
标志,则要求对索引重组 

143)判定某一张表是或不是供给结合,能够采纳视图sysibmadm.snaptab管理视图,overflow_accesses于rows_read比例抢先3%,就需求对表进行整合
[db2inst1@oc6162546036 ~]$ db2 “select substr(tabname,1,18) as
tabname,rows_read,overflow_accesses from sysibmadm.snaptab where
(rows_read > 999) and ((overflow_accesses *100) / (rows_read +1)
>3 )”

TABNAME            ROWS_READ            OVERFLOW_ACCESSES   


  0 record(s) selected.

144)对索引重组的检讨仍旧要求reorgchk

145)reorg分为 离线重组 和 在线重组

离线重组 接纳shoadow copy的法子,创造一份原始数据别本保持原表可读(allow
read access),reorg进程中会记录日志,能够在老大的情形下进展根据日志苏醒
对于离线重组。可以依附现实的目录实行组合index indexname ,如下:
[db2inst1@oc6162546036 ~]$ db2 reorg table db2inst1.t3 index il allow
read access use tempts1
DB20000I  The REORG command completed successfully.

146)db2 提供各样格局检查监察和控制reorg是或不是做到:

*通过sysibmadm.snaptab 检查(打开dft_mon_table实例监察和控制器开关 
*经过快速照相查看db2 get snapshot for tables on sample(current counter/max
counter来预测完结的比例)
*通过db2pd -d sampe -reorg
*经过list history reorg all for sample 得到表或索引重组消息(因为
reorg会记录日志)

147)在线reorg表比离线reorg慢相当多,因为在线不会成立数量别本,分批次重组,每一次只有一对数目

148)在线reorg表也叫inplace reorg(
原定reorg),reorg可随时运行和甘休,为了保障复苏性,在线reorg会记录一大波的日志,供给在日记空间正视于活动的行数,表上索引的个数和索引键大小,因而也许是表大小的数倍

db2 reorg table db2inst1.t3 inplace allow write access

149)在线reorg表是后台异步,尽管我们见到命令成功重返,实际上如故在后台试行。假如在线结合的表非常多,那么恐怕变成I/O
cpu能源占用相当多,何况也许会费用全体的位移日志,影响系统健康运维,那么能够运用脚本调节多个表在线reorg实施各样:db2
list applicaitons show detail |grep -i db2rerog推断,假如有 reorg
正在举行,则等待该 reorg 实践完结,不然施行脚本里的下二个表重组
,在那之中db2reorg是一个用到进度,能够断开

150)监察和控制在线重组和离线重组的监察类似

151)离线reorg表之后会重新建立索引,在线表重组仅仅维护索引,而不会重新建立索引(除
cluster index 之外),纵然要对索引单独构成能够:db2 reorg indexs all for
tbname,对在线重组索引的监督检查:db2 list history all for
sample,可能查看db2diag.log文件

152)对于在线重组,要保全丰硕的日志空间,同一时间要确定保障 util_heap_sz
数据库参数的值丰硕大

153)bind(绑定),是将C程序中的DB2 SQL
语句经过编写翻译(prep)绑定到db2的package中,package中蕴藏了每种SQL语句的拜见布置,今后实施那些C程序时,就能依照保存的package的拜访布置实行SQL语句
那正是说rebind正是重新绑定更新实践布署。rebind一般都对静态sql
(事先已经在package里面)绑定,存款和储蓄进程也是在package里面,所以rebind也同等适合

154)逻辑空间恐怕低于物理空间(物理空间是分配过未有自由的,实际占有的空间是逻辑空间),总计表空间大小的时候是用情理空间),reorg能够去掉这种场馆

###############################################################################################################################################################################################
###############################################################################################################################################################################################
155)隔绝品级只限于读锁

156)默许等级的CS能够在程序级,语句级,事务级设置

157)4中隔断等第:
U本田UR-V(uncommited read):读的时候不加锁,能够读到未提交的数额
CS(cusror stability):读到哪行,哪行就加锁,读完之后就释放锁
TucsonS(read stability):把询问的结果行,全体都加锁
奥德赛揽胜极光(repeatable stablility):把读过的行,全体都加锁

157)表锁在暗许情形下db2不会实施强锁(s u x z ),唯有经过lock table 或
发生锁进级的时候才会在表上抓实项目锁格局,弱类型锁首假诺万分行锁使用,在赢得行锁在此之前绝对要有表锁(IN,IX,IS,SIX)
    
158)db2pd是锁的监察好工具,因为不供给锁定引擎能源,对系统开支小,格式上也相比较直观

159)加Z锁,是当create,alter,drop,表或create.drop索引时须求要。用db2pd
-d sample
-locks观望,开采出了mode上边有Z锁外还应该有任何锁,那是因为drop属于DDL语句,DDL定义会存到catalog
table 中,所以系统表上会加行锁和表锁

160)list tables for schema <schema name>
     list tables for all 
     list tables 查看当前客商做为情势名的表和视图
     syscat.tables系统视图查看表的概念,所属的表空间
 
161)U锁是介于 S 和 X锁中间的锁,一般用于”select….for update
“,目标是为了维持和s锁的合作,但三个u锁是不合营的。幸免连个S锁之间升级到X锁
所发生的死锁
依样葫芦如下:

[db2inst1@oc6162546036 ~]$ db2 +c “select * from t1 for update with
rr”
[db2inst1@oc6162546036 ~]$ db2pd -d sample -locks

Database Member 0 — Database SAMPLE — Active — Up 0 days 00:04:19 —
Date 2014-04-16-23.45.20.002013

Locks:
Address            TranHdl    Lockname                   Type       Mode
Sts Owner      Dur HoldCount  Att        ReleaseFlg rrIID
0x00007FD8F6611980 552        41414141415649626B457D1AC1 PlanLock   ..S 
G   552        1   0          0x00000000 0x40000000 0     
0x00007FD8F6611D80 552        010000000100000001004079D6 VarLock    ..S 
G   552        1   0          0x00000000 0x40000000 0     
0x00007FD8F6611B80 552        06000400000000000000000054 TableLock  ..U 
G   552        1   0          0x00002000 0x00000001 0     

162)SIX锁是S+IX锁或IX+S锁产生的 。即先有S锁,或IX锁再去申请IX锁或S锁
照猫画虎如下:
[db2inst1@oc6162546036 ~]$ db2 +c lock table t1 in share mode 
[db2inst1@oc6162546036 ~]$ db2 +c “insert into t1(id,name)
values(13,’tim’)”
[db2inst1@oc6162546036 ~]$ db2pd -d sample -locks

Database Member 0 — Database SAMPLE — Active — Up 0 days 00:12:56 —
Date 2014-04-16-23.53.57.095565

Locks:
Address            TranHdl    Lockname                   Type       Mode
Sts Owner      Dur HoldCount  Att        ReleaseFlg rrIID
0x00007FD8F6611980 552        41414141415649626B457D1AC1 PlanLock   ..S 
G   552        1   0          0x00000000 0x40000000 0     
0x00007FD8F6612100 552        000005000F1E0000C19D3AFBC3 CatCacheLock
..S  G   552        5   0          0x00000000 0x40000000 0     
0x00007FD8F6611B80 552        06000400040000000000000052 RowLock    ..X 
G   552        1   0          0x00200008 0x40000000 0     
0x00007FD8F6612700 552        000021000A000000A0FA39FBC3 CatCacheLock
..S  G   552        6   0          0x00000000 0x40000000 0     
0x00007FD8F6611A80 552        06000400000000000000000054 TableLock  SIX 
G   552        255 0          0x00202000 0x40000000 0     

163)W 和 NW行锁
是有目录的时候才会用到,S和NS是分化隔开等第下读锁的格局,在CS 和
大切诺基S隔绝等第下是NS锁,在大切诺基君越隔开分离等第下是S锁

164)在赢得行锁从前,要赢得这些行所在表的最低表锁,借使要询问有个别行,那么正是对表有读的意图,须要先的到表的意图读(IS),要是是增加和删除改某行,就是有意图写(IX)

165) 行锁的s和x模拟: 
锁窗口的观看比赛能够见见,有二个IS表锁和NS行锁,但NS行锁是W状态,表示锁等

[db2inst1@oc6162546036 ~]$ db2pd -d sample -locks

Database Member 0 — Database SAMPLE — Active — Up 0 days 00:01:50 —
Date 2014-04-17-22.41.46.759541

Locks:
Address            TranHdl    Lockname                   Type       Mode
Sts Owner      Dur HoldCount  Att        ReleaseFlg rrIID
0x00007F9B55C72300 3          04000A00080000000000000052 RowLock    ..X 
G   3          1   0          0x00200008 0x40000000 0     
0x00007F9B55C76100 14         04000A00080000000000000052 RowLock    .NS 
W   3          0   0          0x00000000 0x00000000 0     
0x00007F9B55C76200 14         010000000100000001006057D6 VarLock    ..S 
G   14         1   0          0x00000000 0x40000000 0     
0x00007F9B55C71980 3          41414141415649626B457D1AC1 PlanLock   ..S 
G   3          1   0          0x00000000 0x40000000 0     
0x00007F9B55C76300 14         41414141415649626B457D1AC1 PlanLock   ..S 
G   14         1   0          0x00000000 0x40000000 0     
0x00007F9B55C71B80 3          04000A00000000000000000054 TableLock  .IX 
G   3          1   0          0x00202000 0x40000000 0     
0x00007F9B55C76180 14         04000A00000000000000000054 TableLock  .IS 
G   14         1   0          0x00003000 0x40000000 0 
166)锁等
     锁超时 locktimeout=-1 是最棒等待的意趣
     死锁
     锁晋级(lock escation),正是由行锁替换为表锁,释放内部存款和储蓄器财富的进度(行锁晋级为表锁),能够利用db2diag.log查看
     锁调换(lock conversion)是锁的方式转黄,比如NS锁转为X锁
(弱型的锁转向强类型的锁)

167)db2
用locklist和maxlocks出发锁晋级,locklist用来支配各个数据足以行使最大锁内部存款和储蓄器;maxlocks用来调节各类应用能够并吞的锁内部存款和储蓄器百分比,在多客商并发系统中,此参数的指标是限制某些应用占用过多的锁内部存款和储蓄器,锁进级爆发的规范满含:
锁内部存款和储蓄器跨越了locklist大小
有些应用使用的锁内部存款和储蓄器空间达到了locklist * maxlock%
发出锁晋级时,会在db2diag.log 中记录锁晋级的详细消息。
     

168)决断锁的难点应时而生:
*系统响应慢,吞吐量低,cpu使用率低,磁盘空闲
*应用程序重临错误 SQL911
*通过平时督察工具,如快照监察和控制和事件监察和控制 ,那一点是最棒源点db2 get
snapshot for db on sample |more

169)锁是一下子的,某一随时可能监察和控制到比非常多锁等,而另一随时可能已经释放,所以必要经过脚本试行多次(find_lickwait.sh
脚本用于抓取超过2min的使用)

170)db2pd -d sample -locks showlocks wait -tra -app -dyn >db2pd.out
那是db2pd常用的命令组合
大家得以遵照db2pd
-locks选项定位锁音讯,找到持有锁和锁等的业务句柄(TranHdl)>>依据db2pd
-tra找到那多少个职业句柄所属的施用句柄(AppHandl)>>接着依据db2pd
-app找到那几个句柄刚实行的或正在奉行的sql句柄(通过Anchid和Stmtid识别>>最终依据db2pd
-dyn找到sql句柄所表示的sql语句,在骨子里条件中,能够依据需求写二个本子,定期调整和抓取锁的音讯

171)对锁的监督,纵然锁快速照相也能够获得锁的新闻,但我们依旧建议用db2pd,锁列表能够高达几百m
,何况锁快照会对db2内部数据结构加上中间锁,以担保自身独享内部存储器,而db2pd无需占用内部锁

172)db2pd具备一定的局限性,不可能担保一定能抓取到引起锁等的SQL语句,db2pd只好抓取到现行反革命和上一个的进行语句(C-AnchID/C-StmtID)(L-AnchID/L-StmtID),如若四个业务增加和删除改操作之后,又拓宽了累累读的操作,那是db2pd抓取的结果就不是真正占领锁的SQL

173)9.5本子就算选择db2pd不可能抓取到引起锁等的SQL,那么能够locktimout的值间隔设置小一些,然后用v9.5提供的db2_capture_locktimeout注册变量来抓取

174)9.5事后 倘若想要用+C 这些选项,首先要翻开这么些布局参数(CUENVISION_COMMIT)
= disabled [on , off]
[db2inst1@oc6162546036 ~]$ db2 get db cfg for sample|grep -i
‘commit’
 All committed transactions have been written to disk    = NO
 Currently Committed                        (CUR_COMMIT) = ON
眼前以贯彻那么些参数用来决定currently commited
机制,CC是CS默许级其他新完结,指标是堤防写操作阻碍读操作(wirte blocks
read),减弱锁等而压实并发性,,即二个事情做update
delete此前的数量无需等待,叁个政工做insert但未提交,另个事业读取是会忽视新插入的数码,无需等待。这种机制是因此其内部的日志来保管专业一致性,即在行锁上边扩张多少个标记(no
information ; uncommited insert identifier ; log information )

175)
[db2inst1@oc6162546036 ~]$ db2 get snapshot for db on sample|more

Number of Threshold Violations             = 0      
Locks held currently                       = 0
Lock waits                                 = 1  
《《《在快照弹指间发生锁的次数
Time database waited on locks (ms)         = Not Collected
《《《锁等的年月总和 (除以lock waits
即没个锁等的年月,那个小时一点都相当大,就要查处引起锁等的SQL语句,db2pd -d
sample -locks showlocks wait -tra -app -dyn)
Lock list memory in use (Bytes)            = 19200  
Deadlocks detected                         = 0   
《《《多少个死锁被检查实验到
Lock escalations                           = 0    《《《多少个锁发生升级(db2diag.log查看)
Exclusive lock escalations                 = 0     
Agents currently waiting on locks          = 0
Lock Timeouts                              = 1   
《《《产生锁超时的次数
Number of indoubt transactions             = 0    
《《《正在等待锁的运用

对于快速照相监控锁,必须求在有个别时间内深入分析才有含义

176)锁超时
因为db2pd抓取SQL语句的技艺有限,所以大家得以用这些注册变量:db2_capture_locktimeout来有效的抓取死锁和锁超时,还需合营创立deadlock
event monitor才干正确完好的抓取锁超时的有关新闻(适用于9.5之上)
[db2inst1@oc6162546036 ~]$ db2set -lr|grep -i ‘capture’
《《《注册变量
DB2_CAPTURE_LOCKTIMEOUT

模拟:
[db2inst1@oc6162546036 ~]$ db2set db2_capture_locktimeout=on
《《《打开注册变量
[db2inst1@oc6162546036 ~]$ db2set 
DB2_CAPTURE_LOCKTIMEOUT=ON
DB2AUTOSTART=YES
[db2inst1@oc6162546036 ~]$ mkdir locks 《《《创造死锁监控器目录
[db2inst1@oc6162546036 ~]$ db2 “create event monitor deadlock for
deadlocks with details history write to file ‘/home/db2inst1/locks'”
《《《创设死锁监察和控制器
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 locks]$ db2 set event monitor deadlock state=1
《《《张开死锁监察和控制器
[db2inst1@oc6162546036 locks]$ db2 +c “insert into t3
values(20,’may’)”
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 locks]$ db2 +c “select * from t3 where
id=20”

ID          NAME      


         20 may       

  1 record(s) selected.
[db2inst1@oc6162546036 ~]$ db2 +c “select * from t3 where id=20”
SQL0911N  The current transaction has been rolled back because of a
deadlock 
or timeout.  Reason code “68”.  SQLSTATE=40001
[db2inst1@oc6162546036 db2dump]$ ll |grep -i ‘lock’
查看db2dump里素不相识成的db2locktimout文件,那几个文件包蕴几个部分,二个部分是申请锁类型,锁超时的口舌,其它一个为锁具备者相关新闻,蕴涵了当下格局,和当下事情施行的享有SQL
-rw-r—–. 1 db2inst1 db2iadm1    3160 Apr 17 23:23
db2locktimeout.0.40.2014-04-17-23-23-55
[db2inst1@oc6162546036 db2dump]$ cat
db2locktimeout.0.40.2014-04-17-23-23-55
Lock Requestor: 
.
.
 Lock mode requested:     .NS  《《《须求锁的等级次序
Context of Lock Request: 
.
.
    Statement:              select * from t3 where id=20 
《《《产生锁超时的持有者语句
Lock Owner (Representative): 
.
.
 Lock mode held:          ..X 《《《锁持有方式

177)死锁近些日子的常用的不二等秘书诀正是透过deadlock event monitor (9.5版本)
模拟:
首先个窗口:
[db2inst1@oc6162546036 ~]$ db2 +c “insert into t1 values(‘aaa’)”
[db2inst1@oc6162546036 ~]$ db2 set event monitor deadlock state=1
[db2inst1@oc6162546036 ~]$ db2 +c “select * from t2”
[db2inst1@oc6162546036 ~]$ db2 flush event monitor deadlock
[db2inst1@oc6162546036 ~]$ db2 set event monitor deadlock state=0
[db2inst1@oc6162546036 deadlock]$ db2evmon -path
/home/db2inst1/deadlock > deadlock2.txt
Reading /home/db2inst1/deadlock/00000000.evt …
[db2inst1@oc6162546036 deadlock]$ cat deadlock2.txt
.
.
5) Deadlocked Connection …
.
Deadlocked Statement:
.
Text     : select * from t1 《《《发生死锁回滚的SQL语句

其次个窗口:
[db2inst1@oc6162546036 ~]$ db2 +c “insert into t2 values(‘bbb’)”
[db2inst1@oc6162546036 ~]$ db2 +c “select * from t1”
SQL0911N  The current transaction has been rolled back because of a
deadlock 
or timeout.  Reason code “2”.  SQLSTATE=40001

死锁监察和控制器event monitor只好用一遍 

178)为了退换锁等 锁超时
死锁都亟待用分歧工具去检测,9.7运用统一抓取锁超时,锁等 和
死锁,那正是creat event monitor for locking 语句
[db2inst1@oc6162546036 deadlock]$ db2 get db cfg for sample
 Lock timeout events                   (MON_LOCKTIMEOUT) = NONE
 Deadlock events                          (MON_DEADLOCK) =
WITHOUT_HIST
 Lock wait events                         (MON_LOCKWAIT) = NONE
 Lock wait event threshold               (MON_LW_THRESH) = 5000000
能够把前3个参数改成hist_values,将mon_LW_thresh改成10000(10秒)

179) 参数设置达成后,就可以最早创建锁监察和控制器进行锁时间的抓取:
[db2inst1@oc6162546036 ~]$ db2 “create event monitor lockevmon for
locking write to unformatted event table(table locks)”
DB20000I  The SQL command completed successfully.
db2 set event monitor lockevmon state=1 拉开监察和控制开关

180)因为用了未格式化的表,所以须要深入分析,解析方法包蕴java程序和存款和储蓄进程(略),如下:
[db2inst1@oc6162546036 jdbc]$ cp db2evmonfmt.java DB2EvmonLocking.xsl
/home/db2inst1
《《《在samples目录下边自带三个java深入分析程序,需把这一个程序编译成class才具进行
[db2inst1@oc6162546036 ~]$ ~/sqllib/java/jdk64/bin/javac
db2evmonfmt.java 
[db2inst1@oc6162546036 ~]$ ls -alt db2evmon*
-rw-r–r–. 1 db2inst1 db2iadm1 16996 Apr 21 01:57 db2evmonfmt.class
-r-xr-xr-x. 1 db2inst1 db2iadm1 40360 Apr 21 01:55 db2evmonfmt.java
[db2inst1@oc6162546036 ~]$ ~/sqllib/java/jdk64/jre/bin/java
db2evmonfmt -d sample -ue locks -ftext -u db2inst1 -passwd >
db2locks.out
《《《出现锁等,锁超时,死锁的时候,就足以采纳刚编写翻译的java程序对未格式化的表实行分析,当中ue
<table>钦命未格式化的表名,-ftext将出口格式化为文本文件,-u
-p钦赐客户和密码

181)除了用java程序深入分析表还是可以够用存款和储蓄进程

182)假如无法从利用规模更改隔开分离等级(UTiggo>CS>宝马7系S>安德拉RAV4,隔绝级越低,并发越好),能够通过sql语句级通过with设置隔绝等级:select….from…with
U昂Cora 表示通过UWrangler隔断等第查询数据

183)有这么四个锁参数能够削减锁的行数,提升并发
[db2inst1@oc6162546036 ~]$ db2set -lr |grep -i ‘db2_eva*’
DB2_EVALUNCOMMITTED
[db2inst1@oc6162546036 ~]$ db2set -lr |grep -i ‘db2_skip*’
DB2_SKIPDELETED
DB2_SKIPINSERTED

DB2_EVALUNCOMMITTED:验证未提交数据,私下认可情形下决定某行数据是不是满意查询条件前,假使满意就加锁,借使不满足,则不加锁
DB2_SKIPDELETED:跳过插入行,在CS或景逸SUVS隔开等级下,借使插入的行未有付诸,那么另外多个应用程序扫描时会处于锁等,但假如用了那些参数,则忽略未提交的新插入数据
DB2_SKIPINSERTED:跳过删除行,在CS或PAJEROS隔绝等级下,假使除去的行未有付诸,那么其余二个应用程序扫描时会处于锁等,但倘使用了这几个参数,则倘若那多少尚未去除

后边多个参数其实在某种格局方面是脏读,要小心使用

###############################################################################################################################################################################################
###############################################################################################################################################################################################

184)db2 提供了相当的多督察工具,主要分为:实时监察和控制和追踪监察和控制

185)实时监察和控制记录数据库某二个每一日的快照消息:snapshot,db2pd,db2top和9.7本子的in-memory
metrics等工具,就如相机
     追踪监察提供了更详细的数据库活动:事件监察和控制器和9.7本子的activity
monitor,事件监察和控制器恐怕会发生比较大的数据量

186)snapshot能够监督的指标包含实例,数据库,每一种应用程序的运动,表空间,缓冲池,表,动态sql语句,锁和排序等音讯,最棒是把她们都展开,实例级其他要重启数据库生效
[db2inst1@oc6162546036 ~]$ db2 get dbm cfg |grep -i ‘dft’
 
   Buffer pool                         (DFT_MON_BUFPOOL) = OFF
   Lock                                   (DFT_MON_LOCK) = OFF
   Sort                                   (DFT_MON_SORT) = OFF
   Statement                              (DFT_MON_STMT) = OFF
   Table                                 (DFT_MON_TABLE) = ON
   Timestamp                         (DFT_MON_TIMESTAMP) = ON
   Unit of work                            (DFT_MON_UOW) = OFF
    

187)snapshot监察和控制命令相比轻易,深入分析结果才难,监控的结果是由一些监理元素构成:
计数器(counter)用来囤积攒计值,譬如自运维以来产生的总排序次数(total
sorts)死锁个数(dead locks)读的行数(rows read)
总计/刹那时值(gauge):记录有些监察和控制成分的眼下值。比如当前发出的次数(active
sorts),当前锁的个数(locks).
高水位(high water
mark),记录贰个监督元素在开拓监察和控制器开关最大的值或比异常的小值。
一般说来需求张开一再的抓取来深入分析一段时间内的数据库活动,能够用脚本

188)为了越来越直观的查阅snapshot的深入分析结果,v9之后能够用snapshot管理视图查看,那么些视图与snapshot命令行是应和的
[db2inst1@oc6162546036 ~]$ db2 list tables for schema sysibmadm|grep
-i ‘snap*’可查看
留心:snapshot管理视图必要将实例监察和控制按钮展开,不然无法抓取全体快速照相,在会话级设置无效。db2
reset monitor all 命令只对snapshot命令生效,对保管视图不起成效

189)db2pd无需db2内部锁(latches)和内燃机能源重临监察和控制数据,因而进度更加快,质量越来越好。db2pd直接调用shmat链接到数据库与实例的共享内部存款和储蓄器,不许要创设到数据库的链接,db2pd基本不会对系统产生显著的熏陶

190)db2pd工具包含大气当众与未公开的参数,借使急需越来越多新闻,能够运用db2pd-everything获得大多当面包车型大巴音信

191)db2pd在分区数据库能够使用dbp参数来内定分区:db2pd -db -sample -dbp
3

192)db2pd常用参数:

db2pd -db sample -appl,该参数列出数据库中当前线总指挥部是,这一部分消息一致db2
list applications show detail的出口
db2pd -edus ,EDU列表,即引擎管理单元(engine dispathched unit)
,用来监察和控制edu的cpu总消耗量,假如急需运用该命令检查实验特定时期内的cpu消耗,则须要做差,给定时期的启幕和安息计算差量
db2pd -edus
interval=3,还是能够运用interval参数来获得时间段内的cpu消耗量,user delta
和 sys delta
列是顾客cpu和系统cpu对于该线程的成本cpu时间差,那样就没有须求手动总括
db2pd -osinfo,操作系统消息
db2pd -bufferpool,缓冲池消息,该参数要开辟bufferpool监控器按钮,
db2pd -db sample -logs,日志音讯
db2pd -db sample -tablesapces,表空间音讯
db2pd -db sample -locks,锁信息
db2pd -db sample -agents,代理音讯
db2pd -db sample -static |more ,查看系统中留存的静态语句包音信
db2pd -db sample -dynamic,该消息富含数据库的包缓存中装有动态sql,
db2pd -db sample -tcbstats,表意况新闻

193)db2top的原理正是在后台各样一段时间搜集叁回快速照相,然后经过测算其与近些日子三次快照从前的多少差别于通过的时间,总结出一些列总括数据胡
db2top首要有八个职能:
实例检验系统
捕捉历史快速照相音讯,
实质上db2top对质量尤其在分区数据库上会影响系能,因为尚未点名的话,会对全局做快照,占用内部存款和储蓄器
相对于db2pd, db2top是抓取快速照相音讯,所以需要开拓监察和控制开关,db2pd
是从内存结构中抓取,不需求监察和控制按键

194)db2top -d sample

###############################################################################################################################################################################################
###############################################################################################################################################################################################

195)dba实现数据库安全陈设:身份认证(authentication);权限(authorizaiton);特权(privilege)

196)db2 server
数据库服务器是数据库实际所在机器(在分区数据库系统上可能是多台机器)
    db2 client
数据库顾客机是对服务器上的数目实践查询的机械,这一个客户能够是本地的(驻留在与数据库服务器一样的大意机械上),也能够是远程的(驻留在单独的机器上)

197)authentication决定了db2顾客在怎么地点实行身份认证

198)v9能够依靠分裂要求来设定认证机制,比如是进行实例连接和实例级操作,依旧只是连连数据库都有例外的参数内定
[db2inst1@oc6162546036 ~]$ db2 get dbm cfg |grep -i ‘authentication’
 Server Connection Authentication          (SRVCON_AUTH) = KERBEROS 
《《《廉洁数据库的印证
 Database manager authentication        (AUTHENTICATION) = SEEscortVEQashqai  
《《《连接实例的求证
那多个参数表达:客户在连年实例会用SEWranglerVE奥迪Q5,可是在接二连三数据库时会用kerberos身份认证,固然在服务器上并未有科学起始化kerberos,但是提供了有效的userid和passwd,那么允许那几个用户连接实例,但是分歧意连接数据库。

199)服务器上每种实例仅允许一种类型的地位,也便是说,设置适用于该实例下全体的数据库
    客商机上编指标各样数据库具备自个儿的地点验证项目,用catalog database
命令中的authentication参数钦赐:db2 catalog db test as test2 at node
db2inst1 authentication server 

200)authentication是
sever的时候,在本地连接的话不供给表明,假若是长途连接的话,需求将服务器上的db2user和db2passwd通过网络发送给服务端
    authentication是
client的时候,允许客商在客商机上举行身份验证,即能登录到顾客机,便得以绵亘不绝数据库,无需重复提供口令
    authentication是 client的时候,供给小心四个参数trust_allclnts ,
trust_clntauth ,这四个仅在authentication 为clinet的时候生效
    trust_allclnts 为yes(暗许设置),即在顾客段展开验证
    trust_allclnts 为no
,则信任的顾客机不供给提供口令,而不信任的客户机则依旧必要提供密码和userid以便在服务端举办身份认证
    trust_allclnts 为drdaonly
,则仅信任在iSeries和zSeries平台上运转的客商机,除了那些之外都要提供口令和id 
    trust_clntauth
为client,身份ID明在客商机处试行,没有必要顾客id和口令
    trust_clntauth
为server,身份验证在服务器处实现,必要提供客户id和口令(那是为了以任何身份在顾客机上登陆去施行别的特权的操作)
[db2inst1@oc6162546036 ~]$ db2 get dbm cfg |grep -i ‘trust’
 Trust all clients                      (TRUST_ALLCLNTS) = YES
 Trusted client authentication          (TRUST_CLNTAUTH) = CLIENT

201) 依据权限(authorization)
成效范围来分别,db第22中学国共产党包涵两类权限:实例权限和数据库权限。
     实例权限:sysadm,sysctrl,sysmaint,sysmon
[db2inst1@oc6162546036 ~]$ db2 get dbm cfg |grep -i ‘sys’
 
 SYSADM group name                        (SYSADM_GROUP) = DB2IADM1
 SYSCTRL group name                      (SYSCTRL_GROUP) = 
 SYSMAINT group name                    (SYSMAINT_GROUP) = 
 SYSMON group name                        (SYSMON_GROUP) = 

9.7自此sysadm的权位中对数据库对象的探访以及数据库对象上的管理权限分离给了数据库管理员(dbadm)和武威管理员(secadm).
dbadm也分为了dataacess和acessctrl
sysctrl 无法访问数据库中的任何数据唯有赋予特定的权限
sysmaint 也不能够访谈数据库中的任何数据,以及不能够去除成立数据库和表空间
     

202)
数据库权限:secadm,dbadm,accessctrl,dataacess,sqladm,wlmadm,explain,load,connect,createtab
9.7中,只有secadm才能grant/revoke dbadm权限 

203)db2 create db sample 《《《 
sample上边的dbadm将隐式的授予发此命令的顾客
     db2 grant dbm on database to user tom 《《《那是显得
     db2 grant dbadm with dataaccess without accessctrl on database to
user tom 《《《注意这里料定要已经连上钦赐的数据库
     db2 grant dbadm on database to group db2grp1
《《《也能够给一个组,同样那一个命令只有secadm客商发生

204)只有secadm和accessctrl权限顾客能力grant/revoke
顾客/客商组的load权限,以及对象的control特权,

205)特权概况上分三种:数据库特权(针对数据库中具备指标)和指标级特权(与一定目的相关联)
表空间特权:use(允许顾客在钦定表空间中成立表)(除了syscatspace或别的系统一时表空间)
格局特权:createin;alterin;dropin
表和视图特权:control;alter;delete;index;insert;references;select;update;
索引特权:control(允许顾客删除索引)
包特权:control;bind;execute
例程:execute
队列特权:usage;alter

206)于实例级权限相似,能够利用命令语法grant/revoke :db2 grant insert on
table test to user tom ;db2 grant select on table test to group
db2grp1

207)从 DB2 V9.1 起先,CREATE DATABASE 命令语法扩张了 REST翼虎ICTIVE
选项。假若该命令中总结了 RESTXC60ICTIVE 选项,那么会招致 REST帕杰罗ICT_ACCESS
数据库配置参数棉被服装置为 YES,同一时候不活动赋予 PUBLIC 任何特权。如若忽略了
RESTLX570ICTIVE 选项,那么 REST奥迪Q7ICT_ACCESS 数据库配置参数被安装为
NO,前述全体特权都将活动赋予 PUBLIC。
[db2inst1@oc6162546036 Security]$ db2 get db cfg for sample |grep -i
‘access’
 Restrict access                                         = NO

208)with grant option并不适用全体grant语句
,control特权也只好有secadm和accessctrl来予以,系统一编写目表也不得不由那七个客户授予。并且在予以数据库级权限,索引权限,表权限或视图的control权限是,with
grant option字句无效
裁撤dbadm权限,须求求有secadm权限

209)展现grant connect sample的权限给 tomzhhao

[db2inst1@oc6162546036 ~]$ db2 connect to sample user tomzhao 
Enter current password for tomzhao: 
SQL1060N  User “TOMZHAO ” does not have the CONNECT privilege. 
SQLSTATE=08004

[db2inst1@oc6162546036 ~]$ db2 grant connect on database to user
tomzhao
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 connect to sample user tomzhao 
Enter current password for tomzhao: 

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.1.1
 SQL authorization ID   = TOMZHAO
 Local database alias   = SAMPLE

210)突显赋予select 特权在table db2inst.t3

[db2inst1@oc6162546036 ~]$ db2 “select * from db2inst1.t3” 
SQL0551N  “TOMZHAO” does not have the required authorization or
privilege to 
perform operation “SELECT” on object “DB2INST1.T3”.  SQLSTATE=42501
[db2inst1@oc6162546036 ~]$ db2 grant select on db2inst1.t3 to user
tomzhao
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “select * from db2inst1.t3”

ID          NAME      


         15 tom       
         16 tim       
         17 tim       
         17 tim       

  4 record(s) selected.

210) 展现grant insert 在表t3上的特权 给tomzhao 组
[db2inst1@oc6162546036 ~]$ db2 “insert into db2inst1.t3
values(18,’sam’)”
DB21034E  The command was processed as an SQL statement because it was
not a 
valid Command Line Processor command.  During SQL processing it
returned:
SQL0551N  “TOMZHAO” does not have the required authorization or
privilege to 
perform operation “INSERT” on object “DB2INST1.T3”.  SQLSTATE=42501
[db2inst1@oc6162546036 ~]$ db2 grant insert on table db2inst1.t3 to
group tomzhao
DB20000I  The SQL command completed successfully.
[db2inst1@oc6162546036 ~]$ db2 “insert into db2inst1.t3
values(18,’sam’)”
DB20000I  The SQL command completed successfully.

211)显示grant dropin 在模式db2inst1的特权 给用户tomzhao 
[db2inst1@oc6162546036 ~]$ db2 drop table db2inst1.t3
DB21034E  The command was processed as an SQL statement because it was
not a 
valid Command Line Processor command.  During SQL processing it
returned:
SQL0551N  “TOMZHAO” does not have the required authorization or
privilege to 
perform operation “DROP TABLE” on object “DB2INST1.T3”.  SQLSTATE=4250
[db2inst1@oc6162546036 ~]$ db2 grant dropin on schema db2inst1 to
all
DB20000I  The SQL command completed successfully.

212)隐式的赋予权力:
始建数据库的时候,将dbadm,secadm权限以及bindadd.connect.createtab.create_external_rounte等授权于创造者
予以dbadm权限的时候,将bindadd.connect.createtab.implict_schema.load.quiesce_connect等授权于被予以dbadm权限者
显示创造方式的时候,将createin,alterin,dropin授予成立方式者
隐式创造方式的时候,将createin授予public
创立对象(表,索引,包),将control授予对象成立者
创办视图,将全体视图定义基础表视图小名control权限赋予control权限 

213)认证>>权限(实例,数据库)>>特权(对象)

214)db2将关于特权的消息囤积在7个连串编目视图里:
syscat.dbauth
syscat.colauth
syscat.indexauth
syscat.packageauth
syscat.schemaauth
syscat.tabauth
syscat.tbspaceatuh

###############################################################################################################################################################################################
###############################################################################################################################################################################################

1)固然系统生成的目录,删除主键就能够去除索引,alter table drop primary
key

2)打补丁此前要做的预备干活
       :备份数据库配置音讯和实例音讯:db2support . -d sample -cl 0 (-cl
0采摘数据库系统目录,数据库和实例配置参数,db2
注册参数变量,那几个都会卷入到db2support.zip)
         备份packages :db2 list packages for all show detail >
packages.txt
         备份数据库的ddl语句 :db2look -d sample -e -l -x -o sample.ddl
         备份数据库本人数据:db2 backup db sample 
  补丁之后的劳作
         使用补丁的新天性晋级数据库:db2updv10 -d sample
        
对工具实行绑定,path是绑定文件目录:比如:/home/db2inst1/sqllib/bnd (db2
bind path..)
         重新绑定packages:dbrbind dbname -l logfile all

3)查看数据库是还是不是足以进步
[db2inst1@oc6162546036 instance]$ ./db2ckupgrade sample -l
/tmp/db2chkupgrade.log -u db2inst1 -p guoguo0308
DBT5508I  The db2ckupgrade utility completed successfully. The database
or databases can be upgraded.

4)db2在读写数据的时候,是跨容器按梯次写的,以保障读写功用,数据均匀分布

5)容器能够是目录,文件 和裸设备,在那之中文件就好比是DMS的容器file ‘/’
,在那之中目录路线就好比SMS的器皿 ‘/’ 

6)db2 create database dbname automatice storage yes on /dbauto dbpath on
/database,个中数据库表空间数据的路子是足以钦命的(比如当中的活动表空间路线/dbauto),数据库路线也是足以钦赐的.
除非钦赐了automatic storage yes 技巧钦命自动储存管理表空间路线/dbauto

7)监察和控制表空间的措施:
  db2 list tablespaces show detail / db2 list tablespace containers for
tablespacesID show detail
  db2 get snapshot for tablespaces on sample 
  db2pd -d sample -tablepsaces
  sysibmadm.snaptbsp / sysibmadm.snapcontainer管理视图

8)怎么样删除归档日志中,不活动的存档日志(logarchmeth1 using disk):
先是步,list history backup all for db,找到最初的备份 ,
其次部,在备份中找到first log
其三部,删除fist log在此之前的存档日志 

一旦logarchmeth1
的值是logretain,那么些将要专心因为移动日志也在日记文件中,会误删

9)固然客户不想记录日志能够使用这些选项:alter table tbname activate not
logged initially 

10)SUBSTOdyssey 第四个参数是 字符串, 第三个参数 开始地点,  第多个参数  长度
假如第1个参数未有,私下认可到底

相关文章