db2的操作命令使用汇总
更新时间:2024-01-30 09:52:01 阅读量: 教育文库 文档下载
- db2数据库操作命令推荐度:
- 相关推荐
目录
一、 实例管理 .......................................................................................................................... 5
1. 创建及删除实例 ........................................................................................................... 5 2. 启动实例 ....................................................................................................................... 5 3. 停止实例 ....................................................................................................................... 5 4. 列出所有实例 ............................................................................................................... 5 5. 列出当前实例 ............................................................................................................... 5 6. 查看示例配置文件 ....................................................................................................... 5 7. 列举、迁移和更新 DB2 实例 ..................................................................................... 5 8. 设置 DB2 环境 ............................................................................................................. 5 9. 设置配置文件注册库 ................................................................................................... 5 10. 设置系统环境变量 ....................................................................................................... 6 11. 设置配置参数 ............................................................................................................... 6 12. 联机设置配置参数 ....................................................................................................... 6 13. 强制停止实例和数据库 ............................................................................................... 7 二、 数据库管理 ...................................................................................................................... 7
1. 连接本地接点的数据库 ............................................................................................... 7 2. 连接本地接点到远端数据库 ....................................................................................... 7 3. 启动数据库 ................................................................................................................... 7 4. 停止数据库 ................................................................................................................... 7 5. 查看数据库的字符节 ................................................................................................... 7 6. 数据库使用utf-8编码 ............................................................................................... 8 7. 把远程数据库映射到本地接点(端口一般为50000) .............................................. 8 8. 远程数据库名称到本地接点 ....................................................................................... 8 9. 以用户
28. 列出所有活动的数据库 ............................................................................................... 9 29. 列出当前数据库下所有的表 ....................................................................................... 9 30. 列出当前数据库中schema为sysstat的表 ............................................................. 9 31. 查看版本 ....................................................................................................................... 9 32. 创建索引 ....................................................................................................................... 9 33. 创建视图 ....................................................................................................................... 9 34. 查询视图 ....................................................................................................................... 9 35. 节点编目 ....................................................................................................................... 9 36. 察看端口号 ................................................................................................................... 9 37. 测试节点的附接 ........................................................................................................... 9 38. 察看本地节点 ............................................................................................................... 9 39. 节点反编目 ................................................................................................................... 9 40. 数据库编目 ................................................................................................................... 9 41. 察看数据库的编目 ....................................................................................................... 9 42. 连接数据库 ................................................................................................................... 9 43. 数据库反编目 ............................................................................................................... 9 三、 数据库存储管理 .............................................................................................................. 9
1. 创建缓冲池 ................................................................................................................... 9 2. 创建表空间 ................................................................................................................. 10 3. 创建系统表空间 ......................................................................................................... 10 4. 查看表空间 ................................................................................................................. 10 5. 查看表空间的容器 ..................................................................................................... 12 6. 表空间状态 ................................................................................................................. 12 7. 修改表空间 ................................................................................................................. 12 8. 重命名表空间 ............................................................................................................. 15 9. 将表空间从脱机状态切换至联机状态 ..................................................................... 15 10. 删除表空间 ................................................................................................................. 15 11. 列出表空间 ................................................................................................................. 16 12. 查看当前数据库表空间分配状况 ............................................................................. 16 13. 查看tablespace id=2使用容器所在目录 ............................................................. 16 14. 显示当前数据库管理实例 ......................................................................................... 16 15. 设置实例系统启动时是否自动启动。 ..................................................................... 16 四、 表的管理 ........................................................................................................................ 16
1. 查看数据库中所有表结构 ......................................................................................... 16 2. 列出所有系统表 ......................................................................................................... 16 3. 查看表结构 ................................................................................................................. 17 4. 列出表中前10条数据 ............................................................................................... 17 5. 对是null的字段进行值转换 ................................................................................... 17 6. 计算出日期中是周几(1是周日,2是周一.......7是周六) .......................... 17 7. 计算出日期中是周几(1是周一.......7是周日) ................................................. 17 8. 一年中的第几天,范围在1-366范围之内 ............................................................. 17 9. 把参数1加上连接值组成一个新值 ......................................................................... 17 10. 整理表 ......................................................................................................................... 17 11. 执行一个批处理文件 ................................................................................................. 17
12. 自动生成批处理文件 ................................................................................................. 17 13. 自动生成建表(视图)语句 ..................................................................................... 17 14. 其他命令 ..................................................................................................................... 17 15. 查看表结构 ................................................................................................................. 17 16. 查看表的索引 ............................................................................................................. 18 17. 重命名表 ..................................................................................................................... 18 五、 数据管理和移动 ............................................................................................................ 18
1. 加载数据 ..................................................................................................................... 18 2. 卸载数据 ..................................................................................................................... 18 3. 查询数据结构及数据 ................................................................................................. 18 4. 删除表中数据 ............................................................................................................. 18 5. 修改表中数据 ............................................................................................................. 18 6. 数据库导出 ................................................................................................................. 18 7. 数据库导入 ................................................................................................................. 18 8. 在不同平台间进行数据迁移 ..................................................................................... 19 9. 备份整个数据库数据 ................................................................................................. 19 10. 还原整个数据库数据 ................................................................................................. 20 11. 绑定存储过程 ............................................................................................................. 20 六、 安全与优化 .................................................................................................................... 20
1. 概述 ............................................................................................................................. 20 2. 身份验证类型 ............................................................................................................. 20 3. 使用 SERVER 选项进行身份验证 ............................................................................. 20 4. 使用 Kerberos 进行身份验证 ................................................................................. 20 5. 在客户机上进行身份验证 ......................................................................................... 21 6. 信任客户机 ................................................................................................................. 21 7. 设置权限级别 ............................................................................................................. 21 8. 设置特权 ..................................................................................................................... 21 9. 查看死锁明细 ............................................................................................................. 22 10. bind命令: ................................................................................................................ 22 11. 数据库优化命令: ..................................................................................................... 22 12. 返回实例的正常快照信息 ......................................................................................... 22 13. 返回数据库 <数据库名> 的所有正常快照 ............................................................ 22 14. 返回会话监控开关的状态 ......................................................................................... 23 15. 设置会话监控开关的状态 ......................................................................................... 23 16. 复位性能监控程序值 ................................................................................................. 23 17. 返回实例级别的性能信息 ......................................................................................... 23 18. 在数据库级别返回所有性能信息 ............................................................................. 23 19. 返回动态 SQL 高速缓存的内容 ............................................................................. 23 20. 收集表
(一) DB2日常维护日操作 ................................................................................................ 23
1. 检查管理服务器是否启动 ..................................................................................... 23
2. 检查DB2实例是否已经启动 ............................................................................... 23 3. 查看表空间状态是否正常 ..................................................................................... 23 4. 查看表的状态 ......................................................................................................... 24 5. 查看磁盘空间 ......................................................................................................... 24 6. 检查存储管理软件是否正常 ................................................................................. 24 7. 检查数据库备份是否正常 ..................................................................................... 24 8. 检查归档日志是否正确归档了 ............................................................................. 24 9. 查看缓冲池的命中率 ............................................................................................. 24 10. 查看当前运行最频繁的SQL,其命中率是否正常 ........................................ 24 11. 查看当前连接的应用程序,有没有非法连接 ................................................. 24 12. 检查有没有死锁 ................................................................................................. 25 13. 对表和索引进行runstats .................................................................................. 25 14. 检查表是否需要重组 ......................................................................................... 25 15. 对需要重组的表进行重组 ................................................................................. 25 (二) DB2日常维护月操作 ................................................................................................ 25
1. 查看DB2日志 ....................................................................................................... 25 2. 检查备份和日志是否都保存好了 ......................................................................... 25 (三) DB2日常维护季度操作 ............................................................................................ 25
1. 通过快照监控器,查看系统性能如何 ................................................................. 25 2. 数据库补丁级别 ..................................................................................................... 26 (四) 注意事项 ..................................................................................................................... 26
1. 不要删除活动日志文件 ......................................................................................... 26 2. 注意交易日志存储空间 ......................................................................................... 26 3. 按照系统的实际工作量配置日志空间 ................................................................. 26 4. 设置正确数据库代码页 ......................................................................................... 26 5. 检查许可证(License)安装情况 ....................................................................... 26 6. 创建数据库前调整好系统时间 ............................................................................. 26 7. 不要随便执行 chown (chmod) –R (UNIX/Linux) ....................................... 26 8. 在归档日志模式下使用LOAD记得加NONRECOVERABLE参数 ............... 27 (五) 以脱机方式重组表 ..................................................................................................... 27
1. 使用 CLP 重组表 ................................................................................................. 27 2. 使用 SQL 调用语句重组表 ................................................................................. 27 3. 使用 DB2 管理 API 重组表 ............................................................................... 27 (六) 索引重组 ..................................................................................................................... 27 (七) 收集和更新统计信息的准则 ..................................................................................... 28 (八) 使用 CLP 捕获数据库运行状况快照 ..................................................................... 30 (九) DB2数据库性能查看 ................................................................................................ 30
一、实例管理
1. 创建及删除实例
DB2 实例是一种逻辑上下文,DB2 命令及函数在其中执行。您可将实例视为管理对数据库文件的访问的服务或守护进程。在一台服务器上可定义多个实例。各实例独立于其他实例,也就是说所有实例均可分别管理、操纵及调优。
要在 Windows 中创建实例,只需执行以下命令: db2icrt instance_name
在 Linux 和 UNIX 中,您必须另外提供一个用户 ID,用以创建 fenced 用户定义的函数和存储过程进程,形式如下:
db2icrt -u fenced_user_ID instance_name 默认情况下,用户定义的函数和存储过程是在 fenced 模式下创建的,因而这些进程运行在与 DB2 引擎不同的地址空间中,也称为系统控制器进程 db2sysc。这为数据库管理器提供了保护,使之免于被用户定义的例程意外地或恶意地破坏。
要删除一个实例,首先断开所有数据库连接,然后执行以下命令停止实例:
db2idrop -f instance_name 2. 启动实例 db2start 3. 停止实例 db2stop
4. 列出所有实例 db2ilist 5. 列出当前实例 db2 get instance
6. 查看示例配置文件
db2 get dbm cfg|more
7. 列举、迁移和更新 DB2 实例
要列举服务器上存在的 DB2 实例,可使用以下命令: db2ilist
若您决定转而使用比服务器上安装的 DB2 软件更新的版本,或者需要将 32 位实例迁移为 64 位实例,就需要进行实例迁移。在Windows 上,实例迁移是在必要的迁移过程中隐式完成的。在 Linux 和 UNIX 上,可使用以下命令显式地迁移已有实例: db2imigr instance_name
在为 DB2 安装修补程序包或补丁时,一旦在服务器上安装好了修补程序包,您就需要更新已有实例,以链接到新的修补程序文件。使用以下命令更新实例: db2iupdt instance_name 8. 设置 DB2 环境
恰当地设置 DB2 环境非常重要,这是因为它控制着 DB2 操作和活动的方式。DB2 环境由以下几部分构成:
? DB2 配置文件注册库 ? 操作系统环境变量
? DB2 数据库管理器配置参数 ? DB2 数据库配置参数 9. 设置配置文件注册库
DB2 配置文件注册库是特定于 DB2 的变量,它会影响 DB2 系统的管理、配置与性能。为使 DB2 配置文件注册库的更改生效,您通常需要停止并重启实例。 要列举所支持的全部 DB2 配置文件注册库: db2set -lr
要设置 DB2 配置文件注册库:
db2set registry_variable = value
请注意,在变量名、等号和变量值之间没有空格。下面给出一个将 DB2COMM 注册库变量设置为单一值的示例: db2set DB2COMM=TCPIP
将 DB2COMM 注册库变量设置为多个值的示例如下: db2set DB2COMM=TCPIP,NPIPE,LOCAL
要将 DB2 配置文件注册库重置为默认值,只需使用与上面相同的命令即可,但不指定任何值:
db2set registry_variable =
要显示服务器上当前设置的所有 DB2 配置文件注册库,请执行以下命令: db2set -all
10. 设置系统环境变量
要了解您当前工作在哪个 DB2 实例中,可运行以下 DB2 命令: db2 get instance
此命令的输出结果形式如下:
The current database manager instance is: DB2
绝大多数 DB2 环境设置都是由 DB2 配置文件注册库控制的。而那些未存储在配置文件注册库中的设置称为操作系统环境变量。设置系统变量的命令将根据您所使用的平台及 UNIX shell 而有所不同。
? 在 Windows 中: set DB2INSTANCE=DB2
? 在 Linux 和 UNIX 的 Korn shell 中: export DB2INSTANCE=DB2 DB2INSTANCE 是一个需要掌握的重要系统变量。它指定当前应用程序的会话或窗口的默认 DB2 实例。一旦设置好该变量,后续的所有 DB2 命令都将在该实例的作用域内执行。 11. 设置配置参数
在 DB2 中,存在两个配置 “级别”。在实例(或数据库管理器)级别,您可为该实例配置整个 DB2 环境,这将影响实例中的所有数据库和使用该实例中数据库的所有应用程序。在数据库级别,您可配置参数,而这些参数将影响到访问特定数据库的所有应用程序的行为。 获取 DBMS 或者 DB 的配置参数:
db2 get database manager configuration
db2 get database configuration for database_name 或者(后同)
db2 get database manager cfg
db2 get database cfg for database_name 更改 DBMS 或者 DB 的配置参数:
db2 update database manager configuration using 参数名 参数值
db2 update database configuration for database_name using 参数名 参数值 12. 联机设置配置参数
绝大多数配置参数均可在实例或数据库保持运行的情况下联机设置。只要可能,对这些联机配置参数的更改默认为立即生效。例如,若更改了sortheap 的值,所有新的SQL请求
将使用新值。为显式指定这种立即生效的行为,可将 immediate 关键字附加到 update 命令中:
db2 update database manager configuration using parameter new_value immediate db2 update database configuration for database_name using parameter new_value immediate
若您选择将此更改延迟至实例重启或数据库激活时,则应指定 deferred 关键字: db2 update database manager configuration using parameter new_value deferred db2 update database configuration for database_name using parameter new_value deferred 有时,您可能希望找出已确定并延迟了哪些更改。为显示数据库管理器配置参数的当前值和挂起值,首先进入实例,然后在 get database manager configuration 命令中指定 show detail 选项,方法如下(请注意,instance_name 是系统环境变量 DB2INSTANCE 设置的值):
db2 attach to instance_name
db2 get database manager configuration show detail 同样地,要列举数据库配置参数的当前值和挂起值,首先连接到数据库,然后使用 show detail 选项:
db2 connect to database_name
db2 get database configuration for database_name show detail 13. 强制停止实例和数据库
如果您需要使数据库或数据库管理器配置更改立即生效,而您所更改的参数并非动态,那么就需要停止并重启数据库或整个实例。若存在连接并使用此实例中一个或多个数据库的应用程序,您就无法停止并重启数据库或实例。此时,您可使用如下 DB2 命令,强行使用户断开与数据库的连接:
db2 force application all
您也可以在停止实例的同时断开所有用户的连接,命令如下: db2stop force
若您只希望强制停止一个特定的应用程序,则需要了解该应用程序的句柄。 使用以下命令查找句柄:
db2 list applications
强制停止该应用程序的连接,可使用如下 DB2 命令:
db2 force application (x) //(x 为该应用程序句柄)
二、数据库管理
1. 连接本地接点的数据库
db2 connect to <数据库名> 2. 连接本地接点到远端数据库
db2 connect to <数据库名> user <用户名> using <密码> 3. 启动数据库
db2start 4. 停止数据库 db2stop
5. 查看数据库的字符节
db2 get db cfg|grep code
6. 数据库使用utf-8编码
create database <数据库名> using codeset utf-8 territory CN 7. 把远程数据库映射到本地接点(端口一般为50000)
db2 catalog tcpip node <接点名称> remote <远程数据库地址> server <端口号> 8. 远程数据库名称到本地接点
db2 catalog db <远程数据库名称> as <接点名称> at node PUB11 9. 以用户
attach to
db2 catalog db <数据库名> on /db2catalog(目录) 11. 取消已编目的数据库
db2 uncatalog db <数据库名> 12. 查看数据库管理程序配置
db2 get dbm cfg|more 13. 更新数据库管理程序配置
db2 update dbm cfg using 参数名 参数值 14. 查看数据库的配置参数信息
db2 connect to <数据库名> user <用户名> using <密码> db2 get db cfg for <数据库名> 15. 写数据库的配置
db2 connect to <数据库名> user <用户名> using <密码> db2 update db cfg for <数据库名> using 参数名 参数值 16. 关闭所有应用连接
db2 force application all
db2 force application ID1,ID2,,,Idn MODE ASYNC
(db2 list application for db <数据库名> show detail) 17. 断开与数据库的连接
db2 connect reset 或 db2 terminate 18. 断开所有数据库连接
db2 force applications all 19. 修改页编码为1208
db2set db2codepage=1208 20. 创建数据库
db2 create db <数据库名> 21. 连接数据库
db2 connect to <数据库名> 22. 修改数据库参数
db2 update db cfg for <数据库名> using LOGBUFSZ 20 db2 update db cfg for <数据库名> using LOGFILSIZ 5120 改完后,应执行以下命令使其生效: db2 stop db2 start 23. 删除数据库
db2 drop db test
24. 修改当前模式为\
db2 set schema db2inst1 25. 强迫所有应用断开数据库连接
db2 force application all
26. 查看所有连接(需要连接到具体数据库才能查看)
db2 list application 27. 列出所有数据库
db2 list db directory 28. 列出所有活动的数据库
db2 list active databases 29. 列出当前数据库下所有的表
db2 list tables for all
30. 列出当前数据库中schema为sysstat的表
db2 list tables for schema sysstat 31. 查看版本 db2level 32. 创建索引
db2 create index idx1 on tb1(id); 33. 创建视图
db2 create view view1 as select id from tb1 34. 查询视图
db2 select * from view1 35. 节点编目
db2 catalog tcp node node_name remote server_ip server server_port 36. 察看端口号
db2 get dbm cfg|grep svcename 37. 测试节点的附接
db2 attach to node_name 38. 察看本地节点
` db2 list node directory 39. 节点反编目
db2 uncatalog node node_name 40. 数据库编目
db2 catalog db db_name as db_alias at node node_name 41. 察看数据库的编目
db2 list db directory 42. 连接数据库
db2 connect to db_alias user user_name using user_password 43. 数据库反编目
db2 uncatalog db db_alias
三、数据库存储管理
1. 创建缓冲池
(8K): create bufferpool ibmdefault8k IMMEDIATE SIZE 5000 PAGESIZE 8 K ;
(16K)(OA_DIVERTASKRECORD):create bufferpool ibmdefault16k IMMEDIATE SIZE 5000 PAGESIZE 16 K ;
(32K)(OA_TASK):create bufferpool ibmdefault32k IMMEDIATE SIZE 5000 PAGESIZE 32 K ; 2. 创建表空间
CREATE TABLESPACE exoatbs IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 8K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT8K OVERHEAD 24.10 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
CREATE TABLESPACE exoatbs16k IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 16K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer16k') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT16K OVERHEAD 24.1 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
CREATE TABLESPACE exoatbs32k IN DATABASE PARTITION GROUP IBMDEFAULTGROUP PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/exoa2/exoacontainer32k') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT32K OVERHEAD 24.1 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
GRANT USE OF TABLESPACE exoatbs TO PUBLIC; GRANT USE OF TABLESPACE exoatbs16k TO PUBLIC; GRANT USE OF TABLESPACE exoatbs32k TO PUBLIC;
3. 创建系统表空间
CREATE TEMPORARY TABLESPACE exoasystmp IN DATABASE PARTITION GROUP IBMTEMPGROUP PAGESIZE 8K MANAGED BY SYSTEM USING
('/home/exoa2/exoasystmp' ) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL
IBMDEFAULT8K OVERHEAD 24.10 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
CREATE TEMPORARY TABLESPACE exoasystmp16k IN DATABASE PARTITION GROUP IBMTEMPGROUP PAGESIZE 16K MANAGED BY SYSTEM USING
('/home/exoa2/exoasystmp16k' ) EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT16K OVERHEAD 24.10 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
CREATE TEMPORARY TABLESPACE exoasystmp32k IN DATABASE PARTITION GROUP
IBMTEMPGROUP PAGESIZE 32K MANAGED BY SYSTEM USING ('/home/exoa2/exoasystmp32k') EXTENTSIZE 32 PREFETCHSIZE 16 BUFFERPOOL IBMDEFAULT32K OVERHEAD 24.10 TRANSFERRATE 0.90 DROPPED TABLE RECOVERY OFF;
4. 查看表空间
可以使用db2 list tablespaces[show detail]来查看表空间的详细信息。 list tablespaces命令的输出信息如下: Tablespaces for Current Database
Tablespace ID = 0 (系统) Name = SYSCATSPACE
Type = System managed space Contents = Any data State = 0x0000
Detailed explanation: Normal Tablespace ID = 1 (系统临时) Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data State = 0x0000
Detailed explanation: Normal Tablespace ID = 2 (用户) Name = USERSPACE1
Type = System managed space Contents = Any data State = 0x0000
Detailed explanation: Normal
上面所示的这3个表空间是通过CREATE DATABASE命令自动创建的。用户可以通过在该命令中定制表空间选项来覆盖默认的表空间创建选项。但是在创建数据库时必须创建一个系统编目表空间和至少一个常规表空间,以及至少一个系统临时表空间。通过使用CREATE DATABASE命令或以后使用CREATE TABLESPACE命令,可以创建更多的所有类型的表空间(系统表空间除外)。上述3个表空间中,系统编目表空间和系统临时表空间都是只读的,用户不可以在上面创建用户表,如下所示:
C:\\Program Files\\IBM\\SQLLIB\\BIN>db2 create table t(i int) in SYSCATSPACE DB21034E 该命令被当作SQL语句来处理,因为它是无效的\命令行处理器\命令。在SQL 处理期间,它返回:SQL0287N SYSCATSPACE 不可用于用户对象。 SQLSTATE=42838 查看表空间及容器的属性
指定LIST TABLESPACES命令的SHOW DETAIL选项将显示其他信息:
db2 list tablespaces show detail默认情况下,将列出创建数据库时所创建的那3个表空间。list tablespaces show detail命令的输出信息如下:
Tablespaces for Current Database Tablespace ID = 2
Name = USERSPACE1
Type = Database managed space Contents = Any data State = 0x0000 Detailed explanation: Normal
Total pages = 25000---------总页数 Useable pages = 24904--------可用页数 Used pages = 336--------使用页数 Free pages = 24568----空闲页数 High water mark (pages) = 336
Page size (bytes) = 4096 Extent size (pages) = 32 Prefetch size (pages) = 16 Number of containers = 1
要列出容器,我们需要使用以上输出中的Tablespace ID: db2 list tablespace containers for 2查看表空间容器的情况,使用list tablespace containers命令输出信息如下:
Tablespace Containers for Tablespace 2 Container ID = 0
Name = C:\\DB2\\NODE0000\\SQL00003\\SQLT0002.0 Type = Path
该命令将列出指定表空间中的所有容器。如上所示的路径指向容器物理上所在的位置。 5. 查看表空间的容器
db2 list tablespace containers for 1 6. 表空间状态
查看一个数据库中的表空间的状态,可以使用命令:list tablespaces show detail 一个表空间可以有多种不同的状态,如下所示:
0x0 Normal
0x1 Quiesced:SHARE 0x2 Quiesced:UPDATE 0x4 Quiesced:EXCLUSIVE 0x8 Load pending 0x10 Delete pending 0x20 Backup pending
0x40 Rollforward in progress 0x80 Rollforward pending 0x100 Restore pending
0x100 Recovery pending(not used) 0x200 Disable pending 0x400 Reorg in progress 0x800 Backup in progress
0x1000 Storage must be defined 0x2000 Restore in progress
0x4000 Offline and not accessible 0x8000 Drop pending
0x2000000 Storage may be defined
0x4000000 StorDef is in 'final' state
0x8000000 StorDef was changed prior to rollforward 0x10000000 DMS rebalancer is active 0x20000000 TBS deletion in progress 0x40000000 TBS creation in progress 0x8 For service use only 7. 修改表空间
可使用控制中心或命令行来改变表空间。要使用命令行来改变表空间,可使用ALTER TABLESPACE语句。可以改变SMS、DMS和自动存储器容器,还可以重命名表空间,并将它从脱机方式切换至联机方式。
对SMS表空间,我们只能增加容器,对于DMS表空间,可以添加、扩展、重新平衡、删除或减少容器,或者调整容器大小。我们重点讲解DMS表空间的修改。
5.1、添加或扩展DMS容器
通过将一个或多个容器添加至DMS表空间(即使用MANAGED BY DATABASE子句创建的表空间),可以增大该表空间的大小。
当将新容器添加到表空间或扩展现有容器时,可能会发生表空间重新平衡(rebanlance)。重新平衡过程涉及将表空间扩展数据块从一个位置移至另一位置。在此过程中,将尝试在表空间内分割数据。重新平衡不必在所有容器上进行,但这取决于许多因素,例如现有容器配置、新容器的大小和表空间满的程度。
在重新平衡期间,不限制对该表空间的访问。如果需要添加多个容器,那么应该同时添加这些容器,以减少重新平衡的次数。虽然重新平衡期间表空间仍然可以访问,但是我们还是尽量避免在业务高峰期间增加容器,因为数据重新平衡期间系统上有很大的I/O活动。关于表空间重新平衡其实DB2还有一些高级选项,但这部分内容超出了本书讲解范围。如果读者感兴趣可以参见《深入解析DB2》一书。
要使用命令行将容器添加到DMS表空间,请输入以下内容: ALTER TABLESPACE
以下示例说明如何将两个新设备容器(各含10 000页)添加到Linux和UNIX系统上的表空间:
ALTER TABLESPACE TS1 ADD (DEVICE '/dev/rhd9' 10000, DEVICE '/dev/rhd10' 10000) 添加容器会涉及到表空间容器的重新平衡,如果您不想这样,可以使用表空间扩展来修改容器大小,因为extend不会重新平衡表空间数据。
以下示例说明如何将所有容器扩展10 000页(各含10 000页)添加到Linux和UNIX系统上的表空间:
ALTER TABLESPACE TS1 EXTEND (ALL,10000)
调整DMS容器的大小不能手动调用自动存储器表空间中容器的大小,否则将报错,如下所示:
C:\\>db2 alter tablespace userspace1 extend (all 20) DB21034E 该命令被当作SQL语句来处理,因为它是无效的\命令行处理器\命令。在SQL 处理期间,它返回:SQL20318N 不能使用\操作改变类型为\的表空间\。 SQLSTATE=42858
只能将每个操作系统裸设备用作一个容器。创建了裸设备之后,其大小是固定的。当您考虑使用调整大小或扩展选项来增大裸设备容器时,应先用操作系统命令检查裸设备大小以确保您使用ALTER TABLESPACE命令并未将裸设备容器大小增大到大于裸设备大小。
要缩小现有容器的大小,可使用RESIZE选项或 REDUCE选项。使用RESIZE选项时,作为语句的一部分列示的所有容器都必须增大大小或减小大小。不能在同一语句中增大某些容器而缩小其他容器。如果知道容器大小的新下限,应考虑调整大小方法。如果不知道(或不关心)容器的当前大小,那么应该考虑缩小方法。
要使用命令行来缩小DMS表空间中一个或多个容器的大小,请输入: ALTER TABLESPACE
以下示例说明如何在Windows 系统上的表空间中缩小文件容器(原来为1000页): ALTER TABLESPACE PAYROLL REDUCE (FILE 'd:\\hldr\\finance' 200) 在此操作之后,文件大小就从1000页减少至800页。
要使用命令行来增大DMS表空间中一个或多个容器的大小,请输入: ALTER TABLESPACE
以下示例说明如何在Linux和UNIX系统上的表空间中增大两个设备容器(原来大小为1000 页):
ALTER TABLESPACE HISTORY RESIZE (DEVICE '/dev/rhd7' 2000, DEVICE '/dev/rhd8' 2000) 在此操作之后,两个设备的大小都从1000页增加至2000页。
要使用命令行来扩展DMS表空间中一个或多个容器,请输入:
ALTER TABLESPACE
以下示例说明如何在Windows系统上的表空间中增大文件容器(原来大小为1000页): ALTER TABLESPACE PERSNEL EXTEND (FILE 'e:\\wrkhist1' 200 FILE 'f:\\wrkhist2' 200)
5.2、删除或减少DMS容器
对于DMS表空间,可以使用ALTER TABLESPACE语句从表空间中删除容器或缩小容器的大小。要缩小容器,在ALTER TABLESPACE语句上使用REDUCE或RESIZE选项。要删除容器,在ALTER TABLESPACE语句上使用DROP选项。
仅当正在删除或缩小其大小的扩展数据块数目小于或等于表空间中\高水位标记\之上的可用数据块数目时,才允许删除现有表空间容器以及缩小现有容器的大小。高水位标记是表空间中分配的最高页的页数。此标记与表空间中已使用的页的数目不同,高水位标记下的某些扩展数据块可能可供复用。
表空间中高水位标记之上的可用扩展数据块数非常重要,原因是直至高水位标记(包括高水位标记)的所有扩展数据块必须位于表空间内的同一逻辑位置。结果表空间必须有足够的空间才能容纳所有数据。如果没有足够的可用空间,那么会产生一条错误消息(SQL20170N或SQLSTATE 57059)。
要删除容器,可在ALTER TABLESPACE语句上使用DROP选项。例如: ALTER TABLESPACE TS1 DROP (FILE 'file1', DEVICE '/dev/rdisk1')
改变自动存储器表空间: 对于自动存储器表空间,不能手动调整自动存储器表空间的大小,数据库管理器将在需要时自动调整容器大小。
8. 重命名表空间
可以使用RENAME TABLESPACE语句来重命名表空间。不能重命名 SYSCATSPACE表空间。不能重命名处于\前滚暂挂\或\正在前滚\状态的表空间。
可以给予现有表空间新名称,而无需关心该表空间中的个别对象。重命名表空间时,将更改所有引用该表空间的目录记录。例如:
RENAME TABLESPACE TS1 TO TS2 注意:
当复原在备份后已被重命名的表空间时,必须在RESTORE DATABASE命令中使用新的表空间名。如果使用先前的表空间名,那么将找不到该名称。同样,如果使用ROLLFORWARD DATABASE命令前滚该表空间,也需确保使用新名称。如果使用先前的表空间名,那么将找不到该名称。
9. 将表空间从脱机状态切换至联机状态
如果与表空间相关的容器不可访问,这时表空间处于OFFLINE状态,要使用命令行从表空间中除去OFFLINE状态,请输入:
ALTER TABLESPACE
10. 删除表空间
当删除表空间时,也会删除该表空间中的所有数据,释放容器,除去目录条目,并导致该表空间中定义的所有对象都被删除或标记为无效。可以通过删除表空间来重用空表空间中的容器,但是,在试图重用这些容器之前,必须落实DROP TABLESPACE语句。
8.1用户表空间
可删除一个包含所有表数据的用户表空间,包括在该单个用户表空间中的索引和LOB数据。也可删除所包含的表跨几个表空间的用户表空间。即,可能表数据在一个表空间,索引在另一个表空间且任何LOB数据在第3个表空间。必须在一条语句中同时删除所有3个表空间。包含跨越的表的所有表空间必须全部纳入此单条语句中,否则该删除请求将失败。例如创建表的定义如下:
create table yang_pic(picno int,pic clob(1g)) in data_space index in index_space long in lob_space
只能同时删除3个表空间:
DROP TABLESPACE DATA_SPACE,INDEX_SPACE,LOB_SPACE
8.2、删除用户临时表空间
仅当用户临时表空间中当前未定义已声明临时表时,才能删除该表空间。当删除表空间时,不会尝试删除该表空间中的所有已声明临时表。
注意:已声明临时表是在说明它的应用程序与数据库断开连接时隐式删除的。s
8.3、删除系统临时表空间
如果不首先创建另一系统临时表空间,那么不能删除页大小为4KB的默认系统临时表空间。新的系统临时表空间必须具有4KB页大小,原因是数据库必须始终存在至少一个具有4KB页大小的系统临时表空间。例如,如果具有页大小为4KB的单个系统临时表空间,并且您想要将一个容器添加到该表空间(它是SMS表空间),那么您必须首先添加一个具有适当数目的容器的新4KB页大小的系统临时表空间,然后删除旧的系统临时表空间(如果正在使用DMS,那么可以添加容器而不必删除并重新创建表空间)。
默认系统临时表空间页大小是创建数据库时使用的页大小(默认情况下为4KB),但也可以为8KB、16KB或32KB。
下面是用来创建系统临时表空间的语句:
CREATE SYSTEM TEMPORARY TABLESPACE
创建之后,要使用命令行删除系统表空间,请输入: DROP TABLESPACE
以下SQL语句创建一个称为TEMPSPACE2的新的系统临时表空间:
CREATE SYSTEM TEMPORARY TABLESPACE TEMPSPACE2 MANAGED BY SYSTEM USING ('d:\\systemp2')
一旦创建了TEMPSPACE2,那么就可使用以下命令删除原来的系统临时表空间 TEMPSPACE1:
DROP TABLESPACE TEMPSPACE1
11. 列出表空间
db2 list tablespaces
12. 查看当前数据库表空间分配状况
db2 list tablespaces show detail 13. 查看tablespace id=2使用容器所在目录
db2 list tablespace containers for 2 show detail 14. 显示当前数据库管理实例 db2 get instance
15. 设置实例系统启动时是否自动启动。 db2iauto -on 自动启动 b2iauto -off 不自动启动
四、表的管理
1. 查看数据库中所有表结构
db2 list tables 2. 列出所有系统表
list tables for system 3. 查看表结构
db2 describe table <表名> 4. 列出表中前10条数据
fetch first 10 rows only
例如:select * from <表名> fetch first 10 rows only 5. 对是null的字段进行值转换
coalesce(字段名,转换后的值)
例如:select coalesce(id,1) from <表名> --对表中id如果为null转换成1 6. 计算出日期中是周几(1是周日,2是周一.......7是周六)
dayofweek(日期)
7. 计算出日期中是周几(1是周一.......7是周日)
dayofweek_iso
例如:dayofweek(date(2008-01-16)) --它会返回是4,代表星期三 dayofweek_iso(date(2008-01-16)) --它会返回是3,代表星期三 8. 一年中的第几天,范围在1-366范围之内
dayofyear(日期)
注意:参数中日期的格式是YYYY-MM-DD的形式,如果不是需要进行转换,否则函数不能使用 ,例如:日期是20080116必须要进行转换
dayofweek(concat(concat(concat(substr(openDate,1,4),'-'),concat(substr(openDate,5,2),'-')),substr(openDate,7,2))) as week),样格式正确的。 9. 把参数1加上连接值组成一个新值
concatt(参数1,连接值)
例如: concat('aa','b') --返回是aab 10. 整理表
db2 connect to <数据库名> user <用户名> using <密码> db2 reorg table <表名>
db2 runstats on table <表名> with distribution and indexes all 11. 执行一个批处理文件
db2 –tf 批处理文件名
文件中每一条命令用 ;结束) 12. 自动生成批处理文件
建文本文件:temp.sql
select 'runstats on table DB2.' || tabname || ' with distribution and detailed indexes all;' from syscat.tables where tabschema='DB2' and type='T';
db2 –tf temp.sql>runstats.sql 13. 自动生成建表(视图)语句
在服务器上:C:\\sqllib\\misc目录中
db2 connect to o_yd user db2 using pwd
db2look –d o_yd –u db2 –e –p –c c:\\o_yd.txt 14. 其他命令
grant dbadm on database to user <用户名> 15. 查看表结构
db2 describe select * from user.tables
16. 查看表的索引
Db2 describe indexes for table <表名> show detail 17. 重命名表
rename table_old to table_new
五、数据管理和移动
1. 加载数据
a) 以默认分隔符加载,默认为“,”号
db2 \表文件名>.txt of del insert into <表名> b) 以指定分隔符“|”加载
db2 \表文件名>.txt of del modified by coldel| insert into <表名>\2. 卸载数据
a) 卸载一个表中全部数据
db2 \表名>\
db2 \表名>\
b) 带条件卸载一个表中数据
db2 \表文件名>.txt of del select * from <表名> where <条件> db2 \表文件名>.txt of del select * from <表名> where <条件> db2 \表文件名>.txt of del modified by coldel| select * from <表名> where <条件> 3. 查询数据结构及数据
db2 \表名>\
db2 \表名> where <查询条件>\db2 \列出情况> passwd from <表名> \4. 删除表中数据
db2 \表名>\
db2 \表名> where .. and ..\5. 修改表中数据
db2 \表名> set <修改条件> where <查询条件> \6. 数据库导出
db2 export to c:\\<表文件名>.txt of del select * from <表名> db2 export to c:\\<表文件名>.ixf of ixf select * from <表名> 导出数据库的表结构,其中用户空间一般为db2admin/db2inst1 db2look -d <数据库名> -u <用户> -e -o <脚本名称>.sql 导出数据库中表1和表2的表结构
db2look -d <数据库名> -u <用户> -t <表1> <表2> -e -o <脚本名称>.sql 导出数据库数据
db2move <数据库名> export 导出数据库中表和表数据
db2move <数据库名> export -tn <表1>,<表2> 7. 数据库导入
import from c:\\123.txt of del insert into ylbx.czyxx
db2 import to c:\\dftz.txt of del commitcount 5000 messages c:\\dftz.msg insert into dftz
db2 import to c:\\dftz.ixf of ixf commitcount 5000 messages c:\\dftz.msg insert into dftz
db2 import to c:\\dftz.ixf of ixf commitcount 5000 insert into dftz
db2 import to c:\\dftz.ixf of ixf commitcount 5000 insert_update into dftz db2 import to c:\\dftz.ixf of ixf commitcount 5000 replace into dftz
db2 import to c:\\dftz.ixf of ixf commitcount 5000 create into dftz (仅IXF) db2 import to c:\\dftz.ixf of ixf commitcount 5000 replace_create into dftz (仅IXF)
把上述导出的表结构导入到数据库表结构 db2 -tvf <脚本名称>.sql
把上述“db2move <数据库名> export “导出的数据导入到数据库中并把相同的数据替换掉
db2move <数据库名> load -lo replace
在实际使用过程中,如果用到db2自增主键,需要使用by default, 而不是always,功能是一样的,但这样在数据移植时候会很方便!
8. 在不同平台间进行数据迁移
在不同平台间进行数据迁移,通常使用PC/IXF文件格式为中间转换格式,使用DB2MOVE与DB2LOOK结合进行数据迁移. 1) 使用DB2MOVE的不足:
因DB2MOVE只是一个表的移动工具,对于约束、触发器、索引、序列、表空间、缓冲池等则无法进行迁移
2) 使用DB2MOVE与DB2LOOK进行数据迁移的步骤,举例以JBPMDEV为旧数据库,JBPMDB为
新数据库
a.建立数据备份目录 mkdir temp20090728 b.连接数据库
db2 connect to jbpm c.导出数据
db2move jbpmdev export
d.导出数据库中所有对象的DDL语句
db2look -d jbpmdev -e -a -l -o db2look.sql e. 创建数据库
db2 create db jbpmdb using codeset GBK territory CN f. 创建数据库对象
db2 -tvf db2look.sql g.导入数据
db2move jbpmdb load h.将挂起的表解锁
db2 set integrity for jbpm.jbpm_id_appinfo all immediate checked
9. 备份整个数据库数据
db2 backup db db2name<数据库名>
如:
db2 force application all
backup database <数据库名> [to
10. 还原整个数据库数据
db2 restore db
db2 restore db <数据库名> [from
11. 绑定存储过程
db2 connect to <数据库名> user <用户> using <密码>
db2 bind c:\\dfplus.bnd
拷贝存储过程到服务器上的C:\\sqllib\\function目录中
六、安全与优化
1. 概述
DB2 安全性是通过组合外部安全性服务与内部 DB2 授权机制来处理的。外部安全性服务对希望访问 DB2 服务器的用户进行身份验证,DB2 外部的安全性软件负责处理身份验证。该软件可以是操作系统的安全性设施,也可是 Kerberos 等独立产品。成功校验了用户 ID 和口令后,内部 DB2 进程将接管控制,并确保用户有权执行所请求的操作。 2. 身份验证类型
身份验证类型确定在何处验证用户 ID/口令对。所支持的身份验证类型有: a. SERVER(默认) b. SERVER_ENCRYPT c. KERBEROS
d. KRB_SERVER_ENCRYPT e. CLIENT
身份验证类型是在服务器和客户机处同时设置的。
服务器:每个实例仅允许一种类型的身份验证,也就是说,设置适用于该实例下定义的所有数据库。在数据库管理器配置文件中使用 AUTHENTICATION 参数指定该设置。
db2 update database manager configuration authentication auth_type 客户机:在客户机处编目的各数据库拥有自己的身份验证类型,使用 catalog database 命令指定。
db2 catalog database db_name at node node_name authentication auth_type 3. 使用 SERVER 选项进行身份验证
使用 SERVER 选项时,用户 ID 和口令将发送到服务器进行校验。校验的步骤如下: (1). 用户使用用户名 OS_UserName 和口令 OS_PWD 登录到工作站。
(2). 该用户随后使用用户 ID db2user 和口令 db2pwd 连接到 SAMPLE 数据库,这是在远程 DB2 服务器上定义的。
(3). db2user 和 db2pwd 通过网络发送到服务器。 (4). db2user 和 db2pwd 在 DB2 服务器上校验。
若您想保护用户 ID 和口令免于被窃听,可使用身份验证类型 SERVER_ENCRYPT,这样用户 ID 和口令就都会被加密。 4. 使用 Kerberos 进行身份验证
Kerberos 是一种外部安全性设施,它使用通用密码术创建共享的加密密钥。Kerberos 提供了安全的身份验证机制,这是因为用户 ID 和口令不再需要以明文形式通过网络传输。通过使用加密密钥,它使单点登录到远程 DB2 服务器成为可能。
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. 通过快照监控器,查看系统性能如何
通过快照监控器,抓取数据库的信息,分析数据库性能是否合理:
# db2 get snapshot for all on 数据库名 > log.txt 2. 数据库补丁级别
# db2level
(四) 注意事项
1. 不要删除活动日志文件
DB2 的活动日志文件不能被删除。一旦 DB2 的活动日志文件被删除,或者所在的存储设备出现问题,则不可避免地造成 DB2 数据库系统宕机。 2. 注意交易日志存储空间
在归档日志模式下,如果没有使用自动归档方式,则存储的日志文件会不断增多,有可能造成日志所在的文件系统空间满。 当这种情况发生时,会根据参数 BLK_LOG_DSK_FUL 的配置而有不同的现象:
1)如果该参数启用,则 DB2 数据库可继续读操作,但是写操作会挂起 2)如果该参数没有启用,则 DB2 数据库会停止工作
两种情况下,都需要到日志所在的文件系统添加了空间才恢复正常。 3. 按照系统的实际工作量配置日志空间
DB2数据库通过日志文件维护数据的完整性和一致性。DB2 数据库的日志空间可通过如下公式计算:
日志空间 = (主日志文件 + 二级日志文件) * 日志文件尺寸 其中:
1) 主日志文件由参数 LOGPRIMARY 控制 2) 二级日志文件由参数 LOGSECOND 控制 3) 日志文件尺寸由参数 LOGFILSIZ 控制
4) LOGPRIMARY + LOGSECOND < 256 (不同的 DB2 版本略有不同,请参看相同版本的 DB2 手册确认) 4. 设置正确数据库代码页
由于数据库的代码页在数据库创建之后是无法修改的,所以在创建数据库时一定要选择正确的代码页。
错误的数据库代码页会造成 JDBC/ODBC 访问时中文字段被截断(包括控制中心),这种情况需要重建数据库以修改数据库代码页。
从全局规划来说,如果应用需要访问多个数据库,那么这多个数据库的代码页应该是一致的。 5. 检查许可证(License)安装情况
许可证过期会造成不必要的服务中断,所以在 DB2 安装完毕后,建议检察许可的安装情况
6. 创建数据库前调整好系统时间
在数据库创建好之后,调整系统时间会造成数据库内部时间戳的异常。数据库中一些对象和时间相关,一旦时间不准确要调整需要很小心。错误的时间调整可能会造成很多问题,如:
1)某些对象失效,例如 :
SQL0440N,找不到具有兼容自变量的类型为 “<例程类型>” 的名为 “<例程名>” 的已授权例程
2)数据库日志逻辑错误 -> 宕机
3)常见错误 – 只调整时间,未调整时区
7. 不要随便执行 chown (chmod) –R (UNIX/Linux)
在实例目录下chown (chmod) -R 会造成:
1) 在数据库服务器上 db2 connect to
8. 在归档日志模式下使用LOAD记得加NONRECOVERABLE参数
(五) 以脱机方式重组表
以脱机方式重组表是整理表碎片的最快方法。重组可减少表所需的空间量并提高数据访问和查询性能。
必须具有 SYSADM、SYSCTRL、SYSMAINT 或 DBADM 权限,或者必须具有对表的 CONTROL 权限才能重组表。必须具有数据库连接才能重组表。
标识需要重组的表之后,可以对这些表运行 REORG 实用程序,并且可以选择对在这些表上定义的任何索引运行该实用程序。 1. 使用 CLP 重组表
请发出 REORG TABLE 命令: db2 reorg table test.employee
要使用临时表空间 mytemp 重组表,请输入: db2 reorg table test.employee use mytemp
要重组表并根据索引 myindex 对行进行重新排序,请输入: db2 reorg table test.employee index myindex 2. 使用 SQL 调用语句重组表
请使用 ADMIN_CMD 过程发出 REORG TABLE 命令:
call sysproc.admin_cmd ('reorg table employee index myindex') 3. 使用 DB2 管理 API 重组表
请使用 db2REORG API。 在重组表之后,应收集有关表的统计信息,以便优化器具有最准确的数据来评估查询访问方案。
(六) 索引重组
通过删除和插入操作对表进行更新后,索引的性能会降低,其表现方式如下: 叶子页分段
叶子页被分段之后,由于必须读取更多的叶子页才能访存表页,因此 I/O 操作成本会增加。
物理索引页的顺序不再与这些页上的键顺序相匹配(此称为不良集群索引)
叶子页出现不良集群情况后,顺序预取操作的效率将降低,因此会导致更多的 I/O 等待。
形成的索引大于其最有效的级别数
在此情况下应重组索引。如果在创建索引时设置了MINPCTUSED 参数,则在删除某个键且可用空间小于指定的百分比时,数据库服务器会自动合并索引叶子页。此过程称为联机索引整理碎片。但是,要复原索引集群和可用空间以及降低叶级别,请使用下列其中一种方法:
? 删除并重新创建索引。
? 使用 REORG INDEXES 命令联机重组索引。
因为此方法允许用户在重建表索引期间对表进行读写操作,所以在生产环境中可能需要选择此方法。
? 使用允许脱机重组表及其索引的选项运行REORG TABLE 命令。 联机索引重组
在使用 ALLOW WRITE ACCESS 选项运行 REORG INDEXES 命令时,如果同时允许对指定的表进行读写访问,则会重建该表的所有索引。进行重组时,对基础表所作的任何将会影响到索引的更改都将记录在 DB2? 日志中。另外,如果有任何内部内存缓冲区空间可供使用,则还将这些更改放在这样的内存空间中。重组将处理所记录的更改以便在重建索引时与当前写活动保持同步更新。内部内存缓冲区空间是根据需要从实用程序堆中分配的指定内存区域,它用来存储对正在创建或重组的索引所作的更改。使用内存缓冲区空间使索引重组操作能够通过这样的方式来处理更改,即先直接从内存读取,然后读取日志(如有必要),但读取日志的时间要晚得多。在重组操作完成后,将释放所分配的内存。重组完成后,重建的索引可能不是最佳集群的索引。如果为索引指定 PCTFREE,则在重组期间,每页上均会保留相应百分比的空间。
对于分区表,支持对各个索引进行联机索引重组和清除。要对各个索引进行重组,指定索引名:REORG INDEX index_name for TABLE table_name
对于空间索引或多维集群(MDC)表,不支持采用 ALLOW WRITE 方式的联机索引重组。
注:REORG INDEXES 命令的 CLEANUP ONLY 选项不能完全重组索引。CLEANUP ONLY ALL 选项将除去那些标记为“删除”且被认为要落实的键。此外,它还将释放所有标记为“删除”且被认为要落实的键所在的页。在释放页后,相邻的叶子页将会合并,前提是这样做可以在合并页上至少留出 PCTFREE 可用空间。PCTFREE 是指在创建索引时为其定义的可用空间百分比。CLEANUP ONLY PAGES 选项仅删除那些标记为“删除”且被认为要落实的所有键所在的页。
使用 CLEANUP ONLY 选项对分区表的索引进行重组时,支持任何访问级别。如果未指定 CLEANUP ONLY 选项,则缺省访问级别 ALLOW NO ACCESS 是唯一支持的访问级别。
REORG INDEXES 具有下列要求:
? 对索引和表具有 SYSADM、SYSMAINT、SYSCTRL 或 DBADM 权限,或者具有 CONTROL 特权。
? 用于存储索引的表空间的可用空间数量等于索引的当前大小
在发出 CREATE TABLE 语句时,考虑在大型表空间中重组索引。 ? 其他日志空间
REORG INDEXES 需要记录其活动。因此,重组可能会失败,尤其是在系统繁忙和记录其他并发活动时。
注: 如果具有 ALLOW NO ACCESS 选项的 REORG INDEXES ALL 命令运行失败,则会标记索引无效并且此项操作不可撤销。但是,如果具有 ALLOW READ ACCESS 选项的 REORG 命令或具有 ALLOW WRITE ACCESS 选项的 REORG 命令运行失败,则可以复原原来的索引对象。
(七) 收集和更新统计信息的准则
RUNSTATS 命令收集表、索引和统计信息视图的统计信息,以为优化器提供准确信息进行访问方案选择。
在下列情况下,使用 RUNSTATS 实用程序来收集统计信息: ? 当数据已装入表中且已创建适当的索引时。
? 当在表中创建新的索引时。如果自从上次在表中运行 RUNSTATS 以来尚未修改表,则只需要对新的索引执行 RUNSTATS。
? 当一个表已用 REORG 实用程序重组时。
? 当通过数据修改、删除和插入已大量更新表及其索引时。(此处所指的“大量”可能表示有 10% 到 20% 的表和索引数据受影响。)
? 在绑定性能非常重要的应用程序之前
? 当您想要比较当前和先前统计信息时。如果定期更新统计信息,则可以及早发现性能问题。
? 当预取量更改时。
? 当使用了 REDISTRIBUTE DATABASE PARTITION GROUP 实用程序时。
注:在先前版本的 DB2? 中,此命令使用了 NODEGROUP 关键字,而不是 DATABASE PARTITION GROUP 关键字。
? 使用 RUNSTATS 实用程序来收集关于 XML 列的统计信息。 使用 RUNSTATS 仅收集 XML 列的统计信息时,将保留 LOAD 或上一次执行 RUNSTATS 实用程序已收集的非 XML 列的现有统计信息。如果先前已收集关于一些 XML 列的统计信息,则在当前命令未收集关于该 XML 列的统计信息时,将删除先前收集的 XML 列的统计信息;在当前命令收集了关于该 XML 列的统计信息时,将替换先前收集的 XML 列的统计信息。
要提高 RUNSTATS 性能并保存用来存储统计信息的磁盘空间,考虑仅指定应该收集其数据分布统计信息的列。
理论上,您应在运行统计信息之后重新绑定应用程序。如果查询优化器具有新的统计信息,则它可以选择不同的访问方案。
如果您没有足够的时间一次收集全部的统计信息,则可以运行 RUNSTATS 来每次仅更新几个表、索引或统计信息视图的统计信息,并轮流完成该组对象。如果对选择性部分更新运行 RUNSTATS 期间由于表上的活动而产生了不一致性,则在查询优化期间将发出警告消息(SQL0437W,原因码 6)。例如,如果执行 RUNSTATS 来收集表分布统计信息,以及在某个表活动后,再次执行 RUNSTATS 来收集该表的索引统计信息,则可能发生这种情况。如果由于表上的活动产生了不一致并且在查询优化期间检测到这些不一致,则发出该警告消息。当发生这种情况时,应再次运行 RUNSTATS 来更新分布统计信息。
要确保索引统计信息和表同步,执行 RUNSTATS 来同时收集表和索引统计信息。索引统计信息保留自上次运行 RUNSTATS 以来收集的大部分表和列的统计信息。如果自上次收集该表的统计信息以来已对该表做了大量修改,则只收集该表的索引统计信息将使两组统计信息不能在所有节点上都同步。
对生产系统调用 RUNSTATS 可能会对生产工作负载的性能产生负面影响。RUNSTATS 实用程序现在支持调速选项,在执行较高级别的数据库活动期间,可以使用调速选项来限制执行 RUNSTATS 的性能影响。
在分区数据库环境中收集表的统计信息时,RUNSTATS 仅收集执行该命令的数据库分区上的表的统计信息。将此数据库分区的 RUNSTATS 结果推广到其他数据库分区。如果执行 RUNSTATS 的数据库分区不包含特定表的一部分,则将请求发送到数据库分区组中包含该表一部分的第一个数据库分区。
收集统计信息视图的统计信息时,将收集所有包含该视图引用的基本表的数据库分区的统计信息。
考虑以下技巧来提高 RUNSTATS 的效率和已收集的统计信息的有效性: ? 仅对用来连接表的列或 WHERE、GROUP BY 以及查询的类似子句中的列收集统计信息。如果对这些列建立了索引,则可以用 RUNSTATS 命令的 ONLY ON KEY COLUMNS 子句指定列。
? 为特定表和表中特定列定制 num_freqvalues 和 num_quantiles 的值。
? 使用 SAMPLE DETAILED 子句收集 DETAILED 索引统计信息,以减少对详细的索引统计信息执行的后台计算量。SAMPLE DETAILED 子句减少收集统计信息所需要的时间,并在大多数情况下产生足够的精度。
? 当创建已填写的表的索引时,添加 COLLECT STATISTICS 子句来在创建索引时创建统计信息。
? 当添加或除去了大量表行时,或如果更新了收集其统计信息的列中的数据,则再次执行 RUNSTATS 来更新统计信息。
? 因为 RUNSTATS 仅收集单个数据库分区的统计信息,所以,如果数据不是在所有数据库分区中一致分发的,则统计信息将不太准确。如果您怀疑存在变形数据分发,则您可能想要在执行 RUNSTATS 之前使用 REDISTRIBUTE DATABASE PARTITION GROUP 命令来在各数据库分区之间再分发数据。
(八) 使用 CLP 捕获数据库运行状况快照
可从 CLP 使用 GET HEALTH SNAPSHOT 命令来捕获运行状况快照。该命令语法支持检索运行状况监视器监视的不同对象类型的运行状况快照信息。
先决条件
必须具有实例连接才能捕获运行状况快照。如果没有实例连接,则创建缺省实例连接。要获取远程实例的快照,必须先连接至该实例。
过程
要使用 CLP 捕获数据库运行状况快照
? CLP 发出带有期望参数的 GET HEALTH SNAPSHOT 命令。
在以下示例中,将在启动数据库管理器之后立即捕获数据库管理器级别运行状况快照。 db2 get health snapshot for dbm
? 于分区数据库系统,可为特定分区捕获专门的数据库快照,或者为所有分区捕获全局的数据库快照。
要对特定分区(如分区号 2)上的数据库捕获运行状况快照,请发出以下命令: db2 get health snapshot for db on sample at dbpartitionnum 2
要对所有分区上的所有应用程序捕获数据库快照,请发出以下命令: db2 get health snapshot for db on sample global 以下命令捕获的运行状况快照带有附加详细信息,包括公式、附加信息和运行状况指示器历史记录:
db2 get health snapshot for db on sample show detail
? 于基于集合状态的运行状况指示器,可对所有集合对象捕获数据库快照,而不考虑这些对象的状态。常规 GET HEALTH SNAPSHOT FOR DB 命令返回所有集合对象,这些对象需要针对所有基于集合状态的运行状况指示器的警报。
要对列示了所有集合对象的数据库捕获运行状况快照,请发出以下命令: db2 get health snapshot for db on sample with full collection (九) DB2数据库性能查看
? 用实例用户登录。
? 输入db2 list active databases,查看当前实例下正在使用的数据库名。 ? 输入命令“db2top –d 数据库名”(),【回车】。系统显示如下帮助窗口。
? 选择不同的字母,可查看不同的数据库信息。 ? 输入d,显示DataBase的信息。
? 输入l
? 输入t
? 输入b
? 输入T
? 输入D
从左往右的字段一次为:哈希值(句柄)、SQL语句、执行次数、执行时间、平均执行时间、CPU时间、平均CPU时间、行数。
主要看平均执行时间、总行数(当总行数超过1万条时,可能是没建索引或索引没有用到,此时需要查看语句)。
排序:z为降序,Z为升序。排序时,输入排序方式(z或Z),然后输入列数,【回车】,其中计算列数时,按0,1,2,3,4….计算。
粗体记录:表示正在执行的语句。 非粗体记录:表示历史执行语句。
总执行时间:若超过10秒,可能有问题。 查看语句:按L,记录保持当前状态不变,不根据实际情况变化,然后将记录的hashvalue值复制粘贴,【回车】,此时出现一个子窗口显示语句,可将该子窗口中的内容以行为单位拷到本地。或者按【E】后,将内容一次性复制,然后粘贴到本地。也可将内容写入文件,方法为:
按【W】,将文件写入系统自命名的文件,记下文件名,然后在当前目录路径下将文件下载到本地查看,或者通过命令more直接查看。
? 输入u
? 输入U
? 输入m
? 输入s
? 输入p
? 输入F
? 输入B
? 输入J
正在阅读:
db2的操作命令使用汇总01-30
关于中秋节的散文03-30
高考数学(文科)常用公式【推荐关注 @高中学习资料库】03-08
写梅花的作文400字04-01
被老师打屁屁作文共3篇04-01
党建工作绩效考评的实践与探索12-14
纯真的我作文600字06-20
《童年的游戏》作文教学设计05-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 汇总
- 命令
- 操作
- 使用
- db2
- 内部控制鉴证的对象与内容
- 《财经公文写作》教学大纲
- 3RRR并联机器人机构奇异性分析
- 长沙市教育局民办学校申办审批办法及设置标准
- 词汇1
- 2009届高考数学140分难点突破训练 - 数列与数学归纳法(含详解)
- 夏商周考古
- 2017年露天采石场安全生产试题题库(十套附答案)
- 材料力学(填空、、判断、选择)超好
- 2014年4735数据库系统原理复习题
- 2013年全国大学生数模竞赛广东赛区专科组初评成绩 - 图文
- 历史文献学大纲
- 中式宴会摆台比赛规则和评分标准
- 走进清华简读书报告
- 水文考试复习参考题含答案
- 《单片机技术》实验(2012级自动化1201~02、电气1201~02)教案
- 2016年证券从业《证券市场基本法律法规》真题汇编(一)
- D35地下室电渣压力焊报验申请表
- 五强两比钢筋考卷1
- 巴菲特名言