db2 administration(2)

在网上找到一篇不错的db2介绍的文章,贴过来以供学习。文中简单明了的介绍了一些概念,比较清晰。如果你对db2想有一个感性的认识,可以参考一些。

链接:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0811chengy1/

 

DB2 日常维护指南,第 1 部分

检查 DAS、实例、表空间、表、磁盘的状态

程永, 高级信息工程师, IBM
王雪梅 (xuemay_2000@163.com), 高级数据库工程师, 自由撰稿人

 

简介: 本文主要介绍数据库管理员(DBA)在日常维护中如何形成自己的维护规范,一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常、安全、高效运行,防止一些错误重复发生。“ DB2 日常维护指南 , 第 1 部分”具体包括检查管理服务器(DAS)是否启动、检查 DB2 实例是否启动、查看表空间的状态是否正常、检查表的状态是否正常、查看磁盘空间是否有异常、查看存储管理软件、数据库备份、日志归档是否正常等。通过明确日常中的每一天该做什么,形成完善的日常管理维护规范,从而更好对数据库进行维护。

 

 

发布日期: 2008 年 11 月 20 日
级别: 初级
访问情况 : 2572 次浏览
评论: 0 (查看 | 添加评论 – 登录)

平均分 0 星 共 0 个评分 平均分 (0个评分)
为本文评分

 

检查管理服务器是否启动

DB2 管理服务器( DAS )是用于辅助 DB2 实例上任务的一个控制点,如果想使用 DB2 提供的图形化工具(如“控制中心”、“配置顾问程序”等)、工具目录数据库( Tools Catalog )、数据库发现等功能,则必须有一个正在运行的 DAS 。

DAS 主要有以下功能:

  1. 企业 DB2 数据库实例的远程管理。
  2. 提供用于作业管理的工具,包括调度 DB2 数据库管理器和操作系统命令脚本运行的能力,这些命令脚本是用户定义的。
  3. 使用“任务中心”来对 DAS 的远程或本地做到定义作业的安排,查看已完成作业的结果以及执行其他管理任务。
  4. 与 DB2 发现实用程序一起提供一种查找关于 DB2 实例、数据库以及其他 DB2 管理服务器配置信息的方法。“配置助手”和“控制中心”使用此信息来简化和自动执行客户机与 DB2 数据库的连接配置。

一个数据库物理服务器包括一个管理服务器( Admin Server )以及一个或多个实例,每个实例 ( 数据库管理器 database manager) 是一个逻辑服务器,可以拥有一个到多个数据库。每个数据库服务器有且只能有一个 DAS ,如果没有 DAS ,需要发出 dascrt 命令(这个命令只是在 UNIX 平台有效,在 Windows 平台需要使用“ db2admin create ”命令)或者 db2admin create 命令(在 windows 和 UNIX 平台都可以使用)来创建一个 DAS 。如果创建了不止一个 DAS ,则需要通过发出 dasdrop 命令 ( 这个命令只是在 UNIX 平台有效,在 Windows 平台需要使用“ db2admin drop ”命令 ) 或 db2admin drop 命令(在 windows 和 UNIX 平台都可以使用)来删除多余的 DAS 。

Windows 和 UNIX 上的 DAS 包括一个调度程序,以运行使用任务中心定义的任务(例如, DB2 数据库和操作系统命令脚本)。任务信息(例如,要运行的命令,与任务相关联的安排、通知和完成操作)以及运行结果存储在 DB2 数据库中称为工具目录的一组表和视图中。工具目录是作为安装的一部分创建的。还可以通过控制中心或通过 CLP 使用 CREATE TOOLS CATALOG 命令创建和激活它。

DAS 服务器如图 1 所示,一个 DAS 可以有多个实例,每个实例可以有一个或多个数据库,具体如图 1 所示:
图 1. DB2 Admin Server(DAS)
 图 1. DB2 Admin Server(DAS
以 UNIX 平台为例,我们来看一下如何确定 DAS 已经启动,以管理员身份登录操作系统,在 shell 窗口中用 ps 命令查看是否有 dasusr1 后台进程来确定 DAS 是否正常启动,如果有这个进程,说明 DAS 正常启动了,如果没有,说明 DAS 没有正常启动,具体如清单 01 所示:
清单 1. 检查是否存在 dasusr1 进程,以便得知 DAS 是否启动 


#ps -ef | dasusr1

请确保管理服务器已经启动,如果没有启动,则按以下步骤启动管理服务器:

  1. 以管理服务器用户 (UNIX 默认是 DASUSR1) 登录
  2. 发出 db2admin start 命令
  3. 如果是 HA 环境,则要保证在脚本中正确配置了启动命令

对于 Windows 平台,也可以通过服务的方式来查看 DAS 是否启动,如果发现其没有启动,可以通过服务的方式将其启动起来,具体如图 02 所示:
图 2. 在服务中启停 DAS
 图 2. 在服务中启停 DAS

回页首

检查 DB2 实例是否已经启动

实例是逻辑数据库管理器环境,您可以在此环境中对数据库进行编目和设置配置参数。根据需要,可以在同一台物理服务器上创建多个实例,该服务器为每个实例提供唯一的数据库服务器环境。只有实例正常启动,其下的数据库才能正常使用,以 UNIX 平台为例,我们来看一下如何确定实例已经启动,以管理员身份登录操作系统,用 ps 命令查看是否有 db2sysc 后台进程,每个 db2sysc 进程代表启动了一个实例,具体命令如清单 02 所示:
清单 2. 检查是否存在 db2sysc 进程,以便得知实例是否启动 


#ps -ef | db2sysc

也可以以 DB2 实例所有者身份登录,通过发出 db2start 命令来确保启动了实例(如果实例已经启动,则会告知 SQL1026N 数据库管理器已激活;否则,将把实例启动起来)。

启动实例时,在 UNIX 平台需要以 DB2 实例所有者身份登录,否则将无法顺利执行 db2start 命令。如果想停止实例,可以先断开所有的连接(通过 force applications all 命令断开连接,此命令为异步的,可能未能立即生效,想查看当前还有多少连接可以通过 list applications 命令查看),再发出 db2stop 命令停下实例。如果你需要强制停止实例,你可以使用 db2stop force 命令。

在 UNIX 环境下,默认创建的实例是 DB2INST1 ,在 Windows 平台,默认创建的实例是 DB2 ,如果想切换实例:

  1. UNIX : 用“ su – 实例用户名 ”进行切换 ,需要注意的是实例用户所属的“ .profile ” 文件里需要包含调用 db2profile 的脚本,比如在 UNIX 环境下, DB2INST1 实例用户的 profile 文件中将有调用“ /home/db2inst1/sqllib/db2profile ” 的脚本。如果是图形化界面方式安装,一般实例所有者用户的“ .profile ” 都会有相应的脚本,如果是手工方式安装,需要保证“ .profile ” 都会有相应的脚本。
  2. WINDOWS :通过设置环境变量 DB2INSTANCE 进行切换,也就是使用“ set DB2INSTANCE= 实例名”的方式进行切换实例。在 Windows 平台,启停实例还可以在服务窗口使用图形化的方式进行,具体如图 3 所示:

图 3. 在服务中启停实例 
 图 3 . 在服务中启停实例

回页首

查看表空间状态是否正常

DB2 使用表和表空间的状态来控制对数据的访问(也就是帮助保护数据库的完整性),目前 DB2 至少支持 25 种表或表空间的状态。与恢复相关的最常见表空间状态是:

  1. 备份暂挂。 
    在前滚操作的某个时间点后,或不带有复制选项的装入操作后,表空间将置于此状态。在可使用该表空间之前必须对其备份。(如果未进行备份就不能更新表空间,但允许只读操作。)
  2. 复原暂挂。 
    如果取消了对表空间的前滚操作,或对表空间的前滚操作遇到了不可恢复错误(此时必须再次复原并前滚表空间),会将表空间置于此状态。在复原操作期间,如果无法复原表空间,该表空间也会处于此状态。
  3. 正在前滚。 
    表空间在对它进行的前滚操作正在进行中时,被置于此状态。一旦前滚操作成功完成,表空间就不再处于“正在前滚”状态。如果取消了对表空间的前滚操作,表空间也会结束此状态。
  4. 前滚暂挂。 
    表空间在复原后可能发生了输入/输出( I/O )错误后被置于此状态。复原后,表空间可前滚到日志的末尾可某时间点。发生了 I/O 错误后,表空间必须前滚到日志的末尾。

可以使用 LIST TABLESPACES 命令确定连接数据库中表空间的当前状态,使用 SHOW DETAIL 选项查看表空间的详细信息。比如我们打开一个 DB2CLP 窗口,连上示例数据库 SAMPLE ,发出 list tablespaces show detail 命令,可以看到表空间的状态的返回值为“ 0x0000 ”,接着用 db2tbst 来查看状态编号对应的含义,可以知道,其代表“正常”,部分信息具体如清单 3 所示:
清单 3. 查看示例数据库 SAMPLE 的表空间状态 


 C:> db2 connect to sample  数据库连接信息

数据库服务器  = DB2 / NT 9.1.0
 SQL 授权标识  = RHETTE
本地数据库别名  = SAMPLE

 C:> db2 list tablespaces show detail  当前数据库的表空间

表空间标识  = 0
名称  = SYSCATSPACE
类型  = 数据库管理空间
内容 = 所有持久数据。常规表空间。
状态  = 0x0000  详细解释:  正常
总计页数  = 8192
可用页数  = 8188
已用页数  = 7776
可用页数  = 412
高水位标记(页) = 7776
页大小(以字节计)  = 8192
扩展数据块大小(页)  = 4
预取大小(页)  = 4
容器数  = 1

表空间标识  = 1
名称  = TEMPSPACE1
类型 = 系统管理空间
内容  = 系统临时数据
状态  = 0x0000  详细解释:  正常
总计页数  = 1
可用页数  = 1
已用页数  = 1
可用页数  = 不适用
高水位标记(页)  = 不适用
页大小(以字节计)  = 8192
扩展数据块大小(页)  = 32
预取大小(页)  = 32
容器数  = 1

表空间标识  = 2
名称  = USERSPACE1
类型 = 数据库管理空间
内容  = 所有持久数据。大型表空间。
状态  = 0x0000  详细解释:  正常
总计页数  = 4096
可用页数  = 4064
已用页数  = 1824
可用页数 = 2240
高水位标记(页)  = 1824
页大小(以字节计)  = 8192
扩展数据块大小(页)  = 32
预取大小(页)  = 32
容器数  = 1

 ....................

 C:> db2tbst 0x0000
 State = Normal

命令成功完成。在清单 3 中我们可以看到,状态编号 0x0000 代表的状态是正常( Notmal )。我们可以使用 db2tbst 查看状态编号对应的状态含义,具体语法如清单 4 所示:
清单 4.db2tbst 语法 


db2tbst <tablespace state>

db2tbst 命令接收十六进制的状态值,并返回相应的表空间状态。表空间的状态可以是由单个状态值之和构成,比如如果表空间的状态是 Quiesced Share (状态编码 0x00001 )和 Quiesced Update (状态编码 0x00002 ),那么所返回的十六进制值就是 0x00003 ( 0x00001 + 0x00002 )。

所有的表空间状态如表 1 所示:
表 1. 表空间状态 

十六进制值 十进制值 State
0x0 0 正常
0x1 1 停顿:SHARE
0x2 2 停顿:UPDATE
0x4 4 停顿:EXCLUSIVE
0x8 8 装入暂挂
0x10 16 删除暂挂
0x20 32 备份暂挂
0x40 64 正在前滚
0x80 128 前滚暂挂
0x100 256 复原暂挂
0x200 512 禁用暂挂
0x400 1024 正在重组
0x800 2048 正在备份
0x1000 4096 必须定义存储器
0x2000 8192 正在复原
0x4000 16384 脱机并且不可访问
0x8000 32768 删除暂挂
0x2000000 33554432 可以定义存储器
0x4000000 67108864 存储器定义处于“最终”状态
0x8000000 134217728 在前滚之前已更改存储器定义
0x10000000 268435456 DMS 重新平衡程序处于活动状态
0x20000000 536870912 正在进行 TBS 删除
0x40000000 1073741824 正在进行 TBS 创建

下面我们以 Unix 系统上的 DB2 为例,来看一下如何查看实例 DB2INST1 下数据库 MYDB 的表空间状态是否正常,首先我们以 DB2INST1 实例的实例所有者 ( 也就是 db2inst1 用户 ) 身份登录,连上数据库 MYDB ,发出 list tablespaces show detail 命令,查看表空间的状态是否正常,具体如清单 5 所示:
清单 5. 检查表空间状态是否正常示例(UNIX)


 #db2 list tablespaces show detail
 // 在单分区上查看表空间的状态 , 正常返回 0x0000

 # db2_all list tablespaces show detail
 // 在所有分区上查看表空间的状态

在 Windows 平台,想查看数据库的状态,同样使用 list tablespaces show detail 命令。

回页首

查看表的状态

在 DB2 V9.1 中“设置完整性暂挂”( Set integrity pending )替换了“检查暂挂表”( check pending )状态。在 V8 中,带有尚未验证的约束的表处于“检查暂挂”状态。在 V9.1 中,“设置完整性暂挂”替代了“检查暂挂”状态。这些是等价的状态。在大多数情况下, LOAD 实用程序使用表级别锁定功能来限制对表的访问。 LOAD 实用程序不会停顿装入操作所使用的表空间,并且仅对指定了 COPY NO 选项的装入操作使用表空间状态。锁定级别取决于装入操作是否允许进行读访问。 ALLOW NO ACCESS 方式的装入操作在装入期间将对表使用互斥锁定。 ALLOW READ ACCESS 方式的装入操作将获取更新锁定并在装入操作期间维护该锁定,落实数据时,将把该锁定升级为互斥锁定。在 ALLOW READ ACCESS 方式的装入操作开始之前, LOAD 实用程序将等待所有在该装入操作前开始的应用程序释放对目标表挂起的锁定。由于锁定不是持久的,而在装入操作中止后仍会保持表状态,所以使用表状态对它们进行补充。可以使用 LOAD QUERY 命令来检查这些状态。通过使用 LOCK WITH FORCE 选项, LOAD 实用程序将强制应用程序释放对它将要装入数据的目标表的冲突锁定。

LOAD QUERY 的语法具体如清单 6 所示:
清单 6.LOAD QUERY 语法 

 >>-LOAD QUERY--TABLE--table-name--+------------------------+---->
                               '-TO--local-message-file-'

>--+-------------+--+-----------+------------------------------><
          +-NOSUMMARY---+  '-SHOWDELTA-'
           '-SUMMARYONLY-'

LOAD QUERY 命令在其运行时检 查载入操作的状态,并返回表的状态。如果载入操作完成(或异常终止)了,那么该命令只返回表的状态。 LOAD QUERY 命令返回的状态如下所示:

  1. 正常 :
    没有任何表状态影响该表。
  2. 设置完整性暂挂 :
    该表有未经验证的约束。使用 SET INTEGRITY 语句以使该表脱离设置完整性暂挂状态。当 LOAD 实用程序开始对带有约束的表执行装入操作时,它就会使该表处于设置完整性暂挂状态。
  3. 正在装入 :
    正在对此表执行装入操作。
  4. 装入暂挂 :
    已经对此表执行了装入操作,但该操作在落实数据前已终止。通过发出 LOAD TERMINATE 、 LOAD RESTART 或 LOAD REPLACE 命令,可以使该表脱离此状态。
  5. 只读访问 :
    表数据可用于读访问查询。使用 ALLOW READ ACCESS 选项的装入操作将使表处于只读访问状态。
  6. 不可用 :
    该表不可用。只能废弃该表或者从备份文件中复原该表。通过不可恢复的装入操作执行前滚将使表处于不可用状态。
  7. 不可重新启动装入 :
    表处于部分装入状态,不允许执行装入重新启动操作。该表还将处于装入暂挂状态。发出 LOAD TERMINATE 或 LOAD REPLACE 命令来使该表脱离“不可重新启动装入”状态。如果在未成功重新启动或终止的失败装入操作后执行前滚操作,或者根据表处于“正在装入”或“装入暂挂”状态时创建的联机备份执行复原操作,表就会处于“不可重新启动装入”状态。在这两种情况下,装入重新启动操作所需的信息都是不可靠的,“不可重新启动装入”状态导致无法执行装入重新启动操作。
  8. 1 类索引 :
    表当前使用 1 类索引。在对那些索引使用 REORG 实用程序时,可以使用 CONVERT 选项将它们转换为 2 类索引。
  9. 未知 :
    LOAD QUERY 命令无法确定表状态。

LOAD QUERY 命令可以用来查询单个表的状态。如果想查询多个表的状态,可以写个批处理或 shell 脚本,使用 LOAD QUERY 命令多次查询,也可以通过查看系统目录视图获取相关信息。比如在 Windows 平台我们想查看 SAMPLE 数据库 org 表的状态,我们可以发出如清单 7 所示的命令:
清单 7.使用 LOAD QUERY 查询表的状态

 C:> db2 connect to sample  数据库连接信息

 数据库服务器  = DB2 / NT 9.1.0
 SQL 授权标识  = RHETTE
 本地数据库别名  = SAMPLE
 C:> db2 load query table org
表状态:  正常

命令成功完成。

也可以通过查询系统目录视图以获得关于数据库的有用信息。例如,下面的语句使用 NOT LIKE 选项,返回在 SYSCAT.TABLES 中所有用户定义的表的名称,以及每个表的列数和表的状态( N = 正常; C = 设置完整性暂挂( Set integrity pending ); X = 不起作用 ( Inoperative ) ),具体如清单 8 所示:
清单 8. 通过查看 SYSCAT.TABLES 查询表的状态 

 C:> db2 connect to sample  数据库连接信息

 数据库服务器  = DB2 / NT 9.1.0
 SQL 授权标识  = RHETTE
 本地数据库别名  = SAMPLE
 C:> db2 select tabname, colcount, status FROM syscat.tables
WHERE tabschema NOT LIKE 'SYS%'  ORDER BY tabname

 TABNAME COLCOUNT  STATUS
 - - - - - - - - - - - - - - - - - - - - - - - - - - -
 TABNAME                 COLCOUNT   STATUS
- - - - - - - - - - - - - - - - - - - - - - - - - - -
ACT                         3          N
ADEFUSR                    2          N
CATALOG                    2          N
CL_SCHED                   4          N
CUSTOMER                   3          N
DEPARTMENT                 5          N
DEPT                       0           N
EMP                        0           N
EMPACT                     0          N
EMPLOYEE                  01          N
EMPMDC                     3           N
EMPPROJACT                 6          N
EMP_ACT                    0           N
EMP_PHOTO                  3           N
EMP_RESUME                 3           N
INVENTORY                  3           N
IN_TRAY                    4           N
ORG                        5            N
PRODUCT                    7           N
PRODUCTSUPPLIER            2          N
PROJ                       0            N
PROJACT                    5           N
PROJECT                    8           N
PURCHASEORDER              6          N
SALES                      4            N
STAFF                      7            N
STAFFG                     7            N
SUPPLIERS                  2           N
TEST                       1            N
VACT                       3            N
VASTRDE1                  13           N
VASTRDE2                  13           N
VDEPMG1                    7           N
VDEPT                      4            N
VEMP                       5            N
VEMPDPT1                   7           N
VEMPLP                     2            N
VEMPPROJACT                6           N
VFORPLA                    7            N
VHDEPT                     5            N
VPHONE                     7            N
VPROJ                      8            N
VPROJACT                   5           N
VPROJRE1                   8           N
VPSTRDE1                  12           N
VPSTRDE2                  12           N
VSTAFAC1                  11           N
VSTAFAC2                  11           N
V_ORG                      5           X
V_STAFF                    7           N

  50 条记录已选择。

命令成功完成。如清单 8 所示,表的状态为 N 表示正常, V_ORG 表的状态为 X , 表示不可用。

回页首

查看磁盘空间

在使用归档日志模式的情况下,如果脱机活动日志不能顺利归档到第三方路径,比如磁带机上时,数据库容易出现磁盘满错误,另外,在使用 SMS 表空间模式的情况下,由于表空间所需实际空间是按需分配的,所以也有可能会出现磁盘满的问题。所以, DBA 每天需要查看活动日志目录所在的文件夹是否还有空间,以及 SMS 表空间对应的容器目录是否还有空间等。

关于数据库的活动日志目录可以使用 get db cfg 命令查看,找到活动日志目录后,可以使用操作系统命令(比如,“ df – k ”等)查看该目录是否还有磁盘空间,注意一定不要手工删除活动日志。

对 SMS 表空间对应的容器目录,也需要经常查看,防止 DB2 数据库管理器没有足够的空间来给 SMS 表空间分配新页。

对 DMS 表空间来说,由于其空间是预分配的(在创建表空间的时候,其空间已经提前分配),所以通过查看磁盘的方式,不能正确得知其是否还有空余空间,而是应该使用 list tablespaces show detail 命令进行查看。比如在 Windows 平台,我们连上示例数据库 SAMPLE ,发出 list tablespaces show detail 命令,会得到每个表空间情况的列表,比如对表空间 USERSPACE1 来说,总计页数 = 4096 ,总可用页数 = 4064 ,已用页数 = 1824 ,还剩可用页数 = 2240 ,具体如清单 9 所示:
清单 9. 通过 list tablespaces show detail 查看 DMS 表空间是否还有可用空间 

 C:> db2 connect to sample  数据库连接信息

数据库服务器 = DB2 / NT 9.1.0
 SQL 授权标识  = RHETTE
 本地数据库别名  = SAMPLE
 C:> db2 list tablespaces show detail  当前数据库的表空间
 ...........................................
 表空间标识  = 2
 名称  = USERSPACE1
 类型 = 数据库管理空间
 内容  = 所有持久数据。大型表空间。
 状态  = 0x0000  详细解释:  正常
 总计页数  = 4096
 可用页数  = 4064
 已用页数  = 1824
 可用页数 = 2240
 高水位标记(页)  = 1824
 页大小(以字节计)  = 8192
 扩展数据块大小(页)  = 32
 预取大小(页)  = 32
 容器数  = 1
 表空间标识  = 3
 名称 = IBMDB2SAMPLEREL
 类型  = 数据库管理空间
 内容  = 所有持久数据。大型表空间。
 状态  = 0x0000  详细解释:  正常
 总计页数  = 4096
 可用页数  = 4064
 已用页数  = 672
 可用页数  = 3392
 高水位标记(页)  = 672
 页大小(以字节计)  = 8192
 扩展数据块大小(页)  = 32
 预取大小(页)  = 32
 容器数  = 1
 ............................ .

命令成功完成。在单分区上查看 DMS 表空间是否还有可用页可以使用“ db2 list tablespaces show detail ”,如果想在在所有分区上查看表空间是否还有可用页,可以使用“ db2_all list tablespaces show detail ”命令。

回页首

检查存储管理软件、数据库备份、日志归档是否正常

我们一般会使用第三方存储管理软件,比如 TSM ,把归档日志和备份文件映像从磁盘转移到磁带上。设置的方法有很多种,比较常见的有,写一个 shell 脚本,放到操作系统 crontab 中定期执行。 Shell 脚本中写下了多长时间使用 TSM 进行备份等操作。作为 DBA ,我们需要经常检查(或者由其他相关管理人员告知)磁带机是否运行正常,第三方管理软件是否运行正常,备份映像文件是否正常放到了磁带上,归档日志是否正常放到了磁带上等等。只有在保证这些正常的情况下,我们才能保证备份映像文件和归档日志都被正确处理了,当我们数据库发生故障的时候,我们才能利用备份映像文件和归档日志进行数据库的还原和恢复。

DB2 会对整个数据库上发生过的备份情况进行记录,可以通过“ list history backup all for 数据库名”命令进行查看,比如在 Windows 平台,我们连上示例数据库 SAMPLE ,发出 list history backup all 命令,具体如清单 10 所示:
清单 10. 通过 list history backup all 查看数据库备份情况 

C:>db2  list history backup all for sample  列示 sample 的历史记录文件
匹配的文件条目数 = 1

 - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Op 对象 时间戳记+序列     类型 设备 最早日志    当前日志     备份标识
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  B  D  20080218191000001   F    D  S0000000.LOG S0000000.LOG
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - -
  包含 5 表空间:

  00001 SYSCATSPACE
  00002 USERSPACE1
  00003 IBMDB2SAMPLEREL
  00004 SYSTOOLSPACE
  00005 IBMDB2SAMPLEXML
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     注释:DB2 BACKUP SAMPLE OFFLINE
 开始时间:20080218191000
 结束时间:20080218191012
     状态:A
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - -
EID:8 位置:C:

参考资料

学习

获得产品和技术

讨论

db2 uninstall

在db2的安装目录中,例如:/opt/ibm/db2/v9.5/install中执行db2_deinstall命令,尝试卸载已经安装的db2可能遇到如下错误:

—————————————————————————————————————————————–

ERROR:There still exists DB2 instances related to the current installation directory where DB2 files are going to be completely uninstalled. The deinstallation process can’t continue because of this. If the deinstallation is for moving up or down DB2 level for the current DB2 installation, you need to use installFixPack in the DB2 images of the desired DB2 Level to update the current DB2 installation. If the purpose is to just uninstall DB2 in the current location, you need to drop the DB2 instances related to the installation directory if they are not needed any more. Or you need to update the DB2 instances to other DB2 installation location for the same version of DB2 and then restart db2_deinstall.

——————————————————————————————————————————————

解决的方法可以参考ibm官网的一些page,如下:

http://www-01.ibm.com/support/docview.wss?uid=swg21469364

Problem(Abstract)

When uninstalling an unused DB2 installation path after an upgrade to a new version or fix pack the db2_deinstall command fails stating instances still exist for the install path you wish to uninstall.

Symptom

The following message is seen:
ERROR:There still exists DB2 instances related to the current installation directory where DB2 files are going to be completely uninstalled. The deinstallation process can’t continue because of this. If the deinstallation is for moving up or down DB2 level for the current DB2 installation, you need to use installFixPack in the DB2 images of the desired DB2 Level to update the current DB2 installation. If the purpose is to just uninstall DB2 in the current location, you need to drop the DB2 instances related to the installation directory if they are not needed any more. Or you need to update the DB2 instances to other DB2 installation location for the same version of DB2 and then restart db2_deinstall.

Cause

The profiles.reg file in the installation path still contains references to the upgraded instance.

 

Environment

This is applicable to DB2 V9.1 and V9.5. Starting in V9.7 the profiles.reg file as been removed.

 

Diagnosing the problem

First, check to make sure your instance does not belong to the level you wish to uninstall by running “db2level” as the instance owner. You can also use “db2greg -dump” to verify the current level of the instance. If the instance no longer appears to be on the level you wish to uninstall then view the profiles.reg file to see if the instance is listed. The profiles.reg file is located under the DB2 installation path.

Example:

/opt/ibm/db2/V9.5

 

Resolving the problem

Remove the entry in the profiles.reg file using an editor, such as vim. Or, you can rename the file and create a new, blank profiles.reg file. Example:

 

mv /opt/ibm/db2/V9.5/profiles.reg /opt/ibm/db2/V9.5/profiles.bak

touch /opt/ibm/db2/V9.5/profiles.reg

db2 administration(1)

1.command line processor

db2和oracle一样,都是具备命令行环境的。如何进入db2的命令行环境?可以参考如下:

以windows平台为例子,在cmd环境下,输入db2cmd,然后就进入了db2的clp环境了,输入db2,cmd窗口就会变成以

“db2=>”为启示符的样子,这个类似”SQL>”,你可以开始输入sql以及一些管理命令了,例如create database,create tablespace等等。

2.create database

db2的逻辑结构为,一个服务器上只能有1个instance,instance下面可以有多个”库”,每个库下面有不同的tablespace,schema等等,你可以理解为objects…

 

 

db2 => CREATE DATABASE new1 AUTOMATIC STORAGE YES ON ‘E:’ DBPATH ON ‘E:’ USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM PAGESIZE 4096
DB20000I CREATE DATABASE命令成功完成。

创建数据库的脚本命令需要”tablespace name”,”storage”,”charset”,”地域”,”pagesize”等要素。

3.create bufferpool(缓冲池)

缓冲池在创建tablespace的时候会指定bufferpool,所以需要有一个bufferpool,否则创建表空间的时候,会使用缺省的bufferpool

CONNECT TO NEW1
CREATE BUFFERPOOL NEWPOOL2 IMMEDIATE SIZE 250 AUTOMATIC PAGESIZE 4K

连接到新创建的库NEW1,然后创建新的bufferpool(NEWPOOL2)。注意一些:automatic的keywords

4.create tablespace

CONNECT TO NEW1
CREATE REGULAR TABLESPACE NEWTBS PAGESIZE 4 K MANAGED BY AUTOMATIC STORAGE EXTENTSIZE 16 OVERHEAD 12.67 PREFETCHSIZE 16 TRANSFERRATE 0.18 BUFFERPOOL NEWPOOL DROPPED TABLE RECOVERY ON

5.create schema

//连接到库new1,然后创建schema。schema一般给用户使用。来逻辑划分、方便管理。

CONNECT TO NEW1
CREATE SCHEMA NEWSCHEMA AUTHORIZATION DB2ADMIN
CONNECT RESET

6.create database users

//db2的数据库用户需要寄生在一个表空间上,一个schema上,同时必须属于某一个”库”,这样方便管理。

//连接到库new1上,执行一些”授权”操作(难道这些就叫创建用户吗?)
CONNECT TO NEW1;
GRANT CREATETAB,BINDADD,CONNECT,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT ON DATABASE TO USER NEWUSER;
GRANT CREATEIN,DROPIN,ALTERIN ON SCHEMA NEWSCHEMA TO USER NEWUSER;
GRANT USE OF TABLESPACE NEWTBS TO USER NEWUSER;
CONNECT RESET;
//发现没有,db2的用户创建,在db层面没有显示的创建用户语句,仅仅是”授权”,拿来就直接使用了。

db2的”数据库”用户概念:db2弱化了数据库级别用户的概念,不像sqlserver,oracle,mysql,这些rdbms有数据库级别用户的概念,db2的数据库级别用户就是OS级别的用户。db2是ibm的产品,aix是ibm的OS,可能db2的设计理念就认为,用户的验证交给OS级别来做就行了,数据库不用操心这些。

所以:想创建db2数据库层面的用户,需要在db2所在的OS上创建OS级别的用户,然后在db2命令行中授权访问即可。

联系到上面的操作例子,只需要在windows上创建os级别用户newuser即可。

DB2的用户理念让人印象深刻。

-EOF-