DB2 客户机和服务器均支持 Kerberos 安全协议时,即可使用 KERBEROS 身份验证类型。某些客户机可能并不支持 Kerberos,但依然需要访问 DB2 服务器。为确保所有类型的客户机均能安全地连接,将 DB2 服务器的身份验证类型设置为 KRB_SERVER_ENCRYPT。 这将允许所有启用了 Kerberos 的客户机使用 Kerberos 进行身份验证,而其他客户机则使用 SERVER_ENCRYPT 身份验证。 5. 在客户机上进行身份验证
这一选项允许在客户机上进行身份验证。用户成功登录到客户机后,即可轻松连接到数据库,而无需再次提供口令。
需要注意:存在不具有可靠的安全性设施的客户机系统,例如 Windows 9x 和 Classic Mac OS。它们叫做不受信任的客户机。任何人只要可以访问这些系统,就可以不经过身份验证直接连接到 DB2 服务器。
为提供允许受信任的客户机自行执行身份验证、同时强制不受信任的客户机在服务器处进行身份验证的灵活性,DB2 引入了另外两种数据库管理器配置参数:
a. TRUST_ALLCLNTS b. TRUST_CLNTAUTH
这两个参数仅在身份验证设置为 CLIENT 时被评估。 6. 信任客户机
TRUST_ALLCLNTS 确定信任哪种类型的客户机。参数有以下可能值: a. YES —— 信任所有客户机。这是默认设置。身份验证将在客户机处执行。但有一个例外,我们将在介绍 TRUST_CLNTAUTH 时更详细地予以讨论。
b. NO —— 仅信任具备可靠的安全性设施的客户机(受信任的客户机)。若不受信任的客户机连接,则必须提供用户 ID 和口令,以便在服务器进行身份验证。
c. DRDAONLY —— 仅信任在 iSeries 或 zSeries 平台上运行的客户机(例如,DRDA 客户机)。其他任何客户机都必须提供用户 ID 和口令。
可使用 TRUST_CLNTAUTH 来指定,当在 connect 语句或 attach 命令中提供了用户 ID 和密码时将在何处进行身份验证。允许使用的值有两个:
d. CLIENT —— 身份验证在客户机处执行,不需要用户 ID 和口令。 e. SERVER —— 身份验证在服务器处完成,需要提供用户 ID 和口令。 7. 设置权限级别
权限级别控制执行数据库管理器维护操作和管理数据库对象的能力。在 DB2 中共有 5 种权限:
a. SYSADM:具有管理实例的完整特权,还可访问底层数据库中的数据。 b. SYSCTRL 和 SYSMAINT:拥有管理实例、其数据库和数据库对象的特定特权。这些权限不含 访问数据的权限。例如,像 'SELECT * FROM mytable' 或 'DELETE FROM mytable' 这样的语句是不允许的。
c. DBADM:拥有在特定数据库上执行管理任务的特权。还具有数据库的完整数据访问权限。
d. LOAD:拥有对指定数据库运行加载实用工具的特权。
其中,前三个权限是实例级别的,后两个权限是数据库级别的。以下是一些示例: grant dbadm on database to user john; grant load on database to group dbagrp; revoke load on database from group dbagrp;
请注意,具有 LOAD 权限的用户也需要表上的 INSERT 特权,之后才能加载数据。 8. 设置特权
特权给予用户通过特定方式访问数据库对象的权力。不同的数据库对象特权特性不同,这里不再详细叙述。
(1). 授予显式特权
授予特权 with grant option 允许授权 ID 将特定特权扩展给他人。该选项仅对包、例程、模式、表、表空间和视图可用。注意,尽管特权的授予是可扩展的,但撤销特权并非如此。若通过 with grant option 获得了特权,用户不能撤销他人的特权。例如:
grant select, update, delete on table employee to user john with grant option 说明,该语句允许 john 在表 employee 上执行 select、update 或 delete 操作,并可将这些特权授予他人。
(2). 授予隐式及间接特权 以下一些场景足以说明:
a. 被授予 DBADM 权限的用户还被隐式地授予 BINDADD、CONNECT、CREATETAB、CREATE_NOT_FENCED 和 IMPLICIT_SCHEMA 权限。
b. 当用户创建数据库时:
DBADM 权限将被授予数据库创建者。
CONNECT、CREATETAB、BINDADD 和 IMPLICIT_SCHEMA 特权将被授予 PUBLIC。 USERSPACE1 表空间上的 USE OF TABLESPACE 特权将被授予 PUBLIC。 各成功绑定实用工具上的 BIND 和 EXECUTE 特权将被授予 PUBLIC。
SYSFUN 模式中所有函数的 EXECUTE 特权 with grant option 将被授予 PUBLIC。 c. 创建表、视图、索引、模式或包的用户将自动获得他/她所创建的数据库对象上的 CONTROL 特权。
d. 当用户执行一个包含静态 SQL 语句的包时,语句中所引用的数据库对象的显式特权是不需要的。用户仅需要包上的 EXECUTE 特权来执行语句。但这并不表示该用户有权直接访问底层数据库对象。
9. 查看死锁明细
db2 get snapshot for locks on yourdatdabasename 用df -k命令看看是否有些文件系统没有空间.
10. bind命令:
将应用程序与数据库作一捆绑,每次恢复数据库后,建议都要做一次bind (1) db2 bind
/btp/bin/bndall /btp/tran/bnd
11. 数据库优化命令:
reorg、runstats
当数据库经过一段时间使用,数据空间会变得越来越庞大。一些delete掉的数据仍存放在数据库中,占用数据空间,影响系统性能。因此需要定期运行reorg、runstats命令,清除已delete的数据,优化数据结构。
db2 reorg table <表名>
db2 runstats on table <表名> with distribution and indexes all
因为要优化的表比较多,所以在/btp/bin目录下提供了一个sh程序runsall,可在当天业务结束后,运行runsall,对数据库进行优化。 12. 返回实例的正常快照信息
get health snapshot for dbm(仅适用于 V8)。 13. 返回数据库 <数据库名> 的所有正常快照
14. 15. 16. 17. 18. 19. 20. 21. 22.
get health snapshot for all on <数据库名>(仅适用于 V8)。 返回会话监控开关的状态 get monitor switches
设置会话监控开关的状态
update monitor switches using
返回实例级别的性能信息 get snapshot for dbm
在数据库级别返回所有性能信息 get snapshot for all on <数据库名> 返回动态 SQL 高速缓存的内容
get snapshot for dynamic sql on <数据库名> 收集表
runstats on table
reorgchk on table all 这对于对所有表自动执行 runstats 很有用。 对表进行重组
reorg table 通过重构行来消除“碎片”数据并压缩信息,对表进行重组。
七、 DB2的日常维护
(一) DB2日常维护日操作 1. 检查管理服务器是否启动
用ps命令查看是否有dasusr1后台进程 #ps -ef | dasusr1
请确保管理服务器已经启动,如果没有启动,则按以下步骤启动管理服务器: 以管理服务器用户(UNIX默认是DASUSR1)登录 发出db2admin start命令
如果是HA环境,则要保证在脚本中正确配置了启动命令 2. 检查DB2实例是否已经启动
用ps命令查看是否有db2sysc后台进程 #ps -ef | db2sysc
也可以以DB2实例所有者登录,通过发出db2start命令来确保启动了实例(如果实例已经启动,则会告知SQL1026N 数据库管理器已激活;否则,将把实例启动起来)
3. 查看表空间状态是否正常
以db2实例所有者登录
#db2 list tablespaces show detail //在单分区上查看表空间的状态,正常返回0x0000 # db2_all list tablespaces show detail //在所有分区上查看表空间的状态
可以使用LIST TABLESPACES 命令确定连接数据库中表空间的当前状态,可以使用SHOW DETAIL选项查看表空间的详细信息。比如,我们连上SAMPLE数据库,执行list tablespaces show detail ,可以看到状态返回值是0x0000,此时,使用db2tbst可以查看状态编号对于的状态含义,具体语法如下:
db2tbst 可以查看编号所代表的状态
db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态。例如,命令 db2tbst 0x0008 返回 State = Load Pending 。而该十六进制的状态值反过来又是LIST TABLESPACES命令输出的组成部分。表空间的外部可见状态是由单个状态值的十六进制总和构成的。例如,如果表空间的状态是 Backup Pending和 Load in Progress,那么所返回的十六进制值就是 0x20020(0x00020 + 0x20000) 4. 查看表的状态
查询系统目录视图以获得关于数据库的有用信息。例如,下面的语句使用NOT LIKE 断言,返回在 SYSCAT.TABLES 中有项的所有用户定义的表的名称,以及每个表的列数和表的状态(N = 正常;C = 待审核(check pending))
#db2 select tabname, colcount, status FROM syscat.tables HERE tabschema NOT LIKE 'SYS%' ORDER BY tabname
也可以使用load query命令查看单个表的状态,比如对表TEST1,我们可以发出如下命令:
#db2 load query table test1 5. 查看磁盘空间
查看数据库活动日志目录是否已满,活动日志目录可以使用get db cfg查看,注意一定不要手工删除活动日志
#df -k
查看SMS表空间对应的容器目录空间是否满了 #df -k
查看DMS表空间中是否还有可用页
#db2 list tablespaces show detail //在单分区上查看表空间的是否还有可用页 # db2_all list tablespaces show detail //在所有分区上查看表空间是否还有可用页 6. 检查存储管理软件是否正常
请检查TSM或其他存储管理软件是否正常,以及磁带机是否运行正常。 7. 检查数据库备份是否正常
请查看TSM或第三方存储管理软件,看备份映像文件是否完整的保存到了磁带机上了,想在DB2上查看备份情况,可以使用LIST命令
# db2 list history backup all for 数据库名 8. 检查归档日志是否正确归档了
请确保活动日志目录下没有的日志文件都已经正确归档到了带机上(查看TSM或第三方存储管理软件)。
查看活动目录里的日志文件: #ls -l
9. 查看缓冲池的命中率
# db2 get snapshot for bufferpools on 数据库名
查看缓冲池的命中率,看其是否低于95%(命中率越高越好) 10. 查看当前运行最频繁的SQL,其命中率是否正常
# db2 get snapshot for bufferpools on 数据库名 > log.txt
用grep命令查看\执行次数最频繁的语句,看其命中率是否正常。比如:
grep -n \ 11. 查看当前连接的应用程序,有没有非法连接
#db2 list applications show detail
看这些连接的情况,看有没有不合适的IP连上来,或者不被允许的第三方工具连上来,比如一些第三方工具连上来会对表进行锁定,影响业务系统正常运行,这个时候可以用FORCE APPLICATIONS (应用程序句柄)停下来。 12. 检查有没有死锁
# db2 get snapshot for all(locks) on 数据库名 > log.txt 用grep命令查看输出的文件中是否有死锁的记录,比如: grep -n \ 13. 对表和索引进行runstats
#db2 runstats on table 表名 and index all
对系统表以及变化比较频繁的表运行统计信息,建议写成shell脚本自动运行。 14. 检查表是否需要重组
使用REORGCHK命令,通过统计数据检查表是否需要重组,语法如下:
REORGCHK [UPDATE | CURRENT ]STATISTICS ON [TABLE SYSTEM| TABLE USER | TABLE ALL | TABLE table_name | SCHEMA schema_name]
UPDATE STATISTICS: 更新表的统计数据,根据该统计数据判断是否需要重组表 CURRENT STATISTICS:根据当前表统计数据判断是否需要重组表 TABLE table_name : 对单个表进行分析 TABLE ALL: 对数据库所有的表进行分析 TABLE SYSTEM: 对系统表进行分析
TABLE USER : 对当前用户模式下的所有表进行分析 #db2 reorgchk update statistics on table all 15. 对需要重组的表进行重组
#db2 reorg table 表名 //通过重构行来消除“碎片”数据 #db2 reorg indexes all for table 表名 //只重组索引 比如:
reorg table db2inst1.org index by_id
将根据索引by_id,如果不加INDEX选项将重组表和所有的索引 reorg table db2inst1.org index by_id use tempspace1
使用指定的临时表空间重组表
表重组完成后需要进行RUNSTATS。另外,记住在分区数据库环境中,如果想在所有节点运行命令,需要使用db2_all命令。
(二) DB2日常维护月操作 1. 查看DB2日志
请至少每月查看一次db2diag.log文件,看其中是否有异常。 2. 检查备份和日志是否都保存好了
通过TSM或第三方存储管理软件,查看备份和归档日志是否都保存好了,在数据库级别查看备份,可以使用:
# db2 list history backup all for 数据库名 (三) DB2日常维护季度操作
1. 通过快照监控器,查看系统性能如何
通过快照监控器,抓取数据库的信息,分析数据库性能是否合理: