UML软件工程组织

 

 

用 pdsql 管理和部署 IBM Rational ClearQuest 数据库
 
2008-03-21 作者:高 伟斌 来源:IBM
 
本文内容包括:
IBM Rational ClearQuest 是一个强大的缺陷和变更跟踪系统,可以管理所有软件开发生命周期中的任何变更类型。pdsql 是 ClearQuest 自带的一个管理数据库的强大工具。本文主要介绍使用 pdsql 管理数据库,如何远程部署 ClearQuest 数据库。

1 ClearQuest 和 pdsql 概述

IBM Rational ClearQuest 是一个强大的缺陷和变更跟踪系统,可以管理所有软件开发生命周期中的任何变更类型。ClearQuest 支持健全的变更管理过程,使用的是用户容易掌握的和可自定制的关系型数据库,可以对变更请求进行优先级管理和监控。ClearQuest 还是一个可以实时进行项目状态沟通的平台。

每一个 ClearQuest 应用都最少有一个模式库(Schema Repository)和一个用户数据库(User Database),

下图 1 是一个 ClearQuest 模式库和用户数据库架构示例图:

图 1:IBM Rational ClearQuest 模式库和用户数据库架构示例图
IBM Rational ClearQuest 模式库和用户数据库架构示例图

ClearQuest 通过连接(Connection)将模式库和用户数据库集合在一起,下图 2 是一个 ClearQuest 连接数据库集合示例图:

图 2:IBM Rational ClearQuest 连接数据库集合示例图
IBM Rational ClearQuest 连接数据库集合示例图

ClearQuest 支持 DB2、Oracle、SQL Server 和 Microsoft Access(不推荐将 MS_ACCESS 用于商业实际应用)等数据库,而且并不需要安装各个数据库的客户端。pdsql 是 ClearQuest 自带的一个管理数据库的强大工具。本文主要介绍使用 pdsql 管理数据库,如何远程部署 ClearQuest 数据库。

2 pdsql 基本功能

pdsql 的基本功能是可以执行标准的 Structural Query Lanuage(SQL)语句,还提供一些增强命令使不同厂商的数据库变的统一,管理起来更容易。

本章介绍 pdsql 的基本功能,包括如何连接数据库、如何执行 SQL 语句和 pdsql 增强命令的用法。

2.1 连接数据库

1. 连接 DB2 数据库

pdsql 连接 DB2 数据库的语法是:
pdsql -v db2 -db <dbname> -u <user> -p <pass> -s <hostname>

如果数据库端口不是缺省的 50000,那就在 -co 连接选项上指定端口号,如果数据库服务器需要加密的用户名和密码,则还要在-co 连接选项上指定 DB2_SECURE_LOGIN 选项,下面是两个连接 DB2 数据库的示例:

pdsql -v db2 -s db2server -db cqdatabase -u db2admin -p IBMDB2
pdsql -v db2 -s db2server -db cqdatabase -u db2admin -p IBMDB2 
      -co PORT=50001;DB2_SECURE_LOGIN

2. 连接 Oracle 数据库

pdsql 连接 Oracle 数据库的语法是:

pdsql -v ora -db <sid> -u <user> -p <pass> -s <host>

如果数据库端口不是缺省的 1521,那就在 -co 连接选项上指定端口号,下面是两个连接 Oracle 数据库的示例:

pdsql -v ora -s oracleserver -db cqdbsid -u cquser -p cqpassword
pdsql -v ora -s oracleserver -db cqdbsid -u cquser -p cqpassword -co PORT=1983

3. 连接 SQL Server 数据库

pdsql 连接 SQL Server 数据库的语法是:

pdsql -v ss -db <database> -u <user> -p <pass> -s <server>

如果数据库端口不是缺省的 1433,那就在 -co 连接选项上指定端口号,如果数据库使用的是非缺省的实例名,则还要在-co 连接选项上指定实例名,下面是两个连接 SQL Server 数据库的示例:

pdsql -v ss -s sqlserver -db cqdatabase -u cquser -p cqpassword
pdsql -v ss -s sqlserver -db cqdatabase -u cquser -p cqpassword 
      -co PORT=5000;INSTANCE=clearquest

4. 连接 Microsoft Access 数据库

pdsql 连接 Access 数据库的语法是:

pdsql -v access -db <valid access path> -u admin

下面是两个连接 Access 数据库的示例:

pdsql -v access -db "C:\Documents and Settings\Rational\My Documents\CQUser.mdb" -u admin
pdsql -v access -db "\\cqserver\databases\CQUser.mdb" -u admin

5. 使用 ODBC DSN 连接数据库

pdsql 也支持使用已有的 ODBC DSN 连接数据库,语法是:pdsql -dsn <ODBC-DSN>,下面是个使用 ODBC DSN 连接数据库的示例:

pdsql -v dsn TestDB

2.2 执行标准 SQL 语句

pdsql 支持所有的标准 SQL 语句,如 select、insert、delete、update、create、drop、grant、commit 和 rollback 等等,可以在登陆后提示符“>”下执行,也可以在文件中批处理执行。下面是两个执行标准 SQL 语句的示例:

>select id, version from defect;
C:\>pdsql -v ora -s oracleserver -db cqdbsid -u cquser -p cqpassword < sql.txt

pdsql 也支持调用数据库的存储过程,语法是:{call [arg=]<storedproc>(arg,arg,arg)};,下面是个调用 Oracle 数据库存储过程的示例:

>select id, version from defect;

2.3 执行指定数据库特有语句

pdsql 也支持不同厂商数据库特有的语句,例如对于 SQL Server 数据库可以使用 use 命令在不同的数据库之间自由切换,如:>use cqmasterdb;

如果要在一个通用的命令文件中执行指定数据库特有的语句,可以用 vendor_filter 命令开始和 end_vendor_filter 命令结束从而对特定数据库进行筛选,下面是一个筛选功能的示例:

>vendor_filter SQL_SERVER ORACLE MS_ACCESS;
>create unique index master_schemas_name on master_schemas (name);
>end_vendor_filter;
>vendor_filter DB2;
>create unique index mast_schemas_name on master_schemas (name);
>end_vendor_filter;

2.4 执行 pdsql 增强命令

所有的 pdsql 命令都要以分号“;”结束,你可以用多行来表达一个长的命令,只有到分号此长命令才会被执行。以“#”开始到行末尾表示是注释(如果要用“#”号而不是注释就用“\#”转义即可)。

下面是一些 pdsql 增强命令和相应的描述:

time_on; time_off;
启用或禁用显示命令执行时间,可以在 pdsql 登陆时用 -time 选项启用该功能。
echo_on; echo_off;
启用或禁用回显所执行的命令,可以在 pdsql 登陆时用 -echo 选项启用该功能。
prompt_on; prompt_off;
启用或禁用显示命令执行时间,可以在 pdsql 登陆时用 -noprompt 选项启用该功能。
fatal_on; fatal_off;
启用或禁止命令执行错误后终止 pdsql,可以在 pdsql 登陆时用 -errors_are_fatal 选项启用该功能。
autocommit_on; autocommit_off;
启用或禁用命令执行后自动提交,可以在 pdsql 登陆时用 -autocommit 选项启用该功能。
whatdb;
输出当前连接数据库信息。

例如:

>whatdb;
DATA_SOURCE_NAME:
DRIVER_NAME: rkdb222.dll
DRIVER_VER: 05.20.0059 (b0036, u0023)
DRIVER_ODBC_VER: 03.52
SERVER_NAME: DB2SERVER
DBMS_NAME: UDB DB2 for Windows, UNIX, and Linux
DBMS_VER: 09.10.0000
DATABASE_NAME: CQUSERDB
USER_NAME: db2admin
INTERNAL VENDOR TYPE: DB2
driver_features;
输出当前使用的 ODBC 功能驱动详细信息。

例如:

>driver_features;
ACCESSIBLE_PROCEDURES 78
SQL_ACCESSIBLE_TABLES 78
SQL_ACTIVE_CONNECTIONS 0
SQL_ACTIVE_STATEMENTS 100
*SQL_ALTER_TABLE 61545
*SQL_BOOKMARK_PERSISTENCE 80
SQL_COLUMN_ALIAS 89
SQL_CONCAT_NULL_BEHAVIOR 0
*SQL_CONVERT_BIGINT 0
*SQL_CONVERT_BINARY 0
*SQL_CONVERT_BIT 0
*SQL_CONVERT_CHAR 98310
*SQL_CONVERT_DATE 1
... ...
tables;
输出当前用户在当前数据库下的所有表名。
views;
输出当前数据库下的所有视图。
procedures;
输出当前数据库下的所有存储过程。
types;
输出当前数据库管理系统支持的所有数据类型信息。

例如:

>types;
LONGVARBINARY:
BLOB (precision = 2147483647)
LONG VARCHAR FOR BIT DATA (precision = 32700)
LONGVARCHAR:
CLOB (precision = 2147483647)
LONG VARCHAR (precision = 32700)
TIMESTAMP:
TIMESTAMP (precision = 26)
CHAR:
CHAR (precision = 254)
VARCHAR:
VARCHAR (precision = 32672)
INTEGER:
INTEGER (precision = 10)
FLOAT:
FLOAT (precision = 15)
DOUBLE:
DOUBLE (precision = 15)
REAL:
REAL (precision = 7)
DECIMAL:
DECIMAL (precision = 31)
NUMERIC:
NUMERIC (precision = 31)
WLONGVARCHAR:
DBCLOB (precision = 1073741824)
LONG VARGRAPHIC (precision = 16336)
WCHAR:
GRAPHIC (precision = 127)
WVARCHAR:
VARGRAPHIC (precision = 16336)

以 SQL_ 开头的数据类型是 ClearQuest 用来统一不同数据库厂商的数据类型,例如 SQL_VARCHAR 可以代替 VARCHAR (DB2/SQL Server) 和 VARCHAR2 (Oracle), SQL_DECIMAL 可以代替 DECIMAL (DB2/SQL Server)、和 NUMBER (Oracle),SQL_LONGVARCHAR 可以代替 CLOB (DB2/Oracle) 和 text (SQL Server) 等等,这样就方便了客户不用顾虑不同数据库厂商之间的差异了。

columns、indices、primary_keys 和 foreign_keys 分别是输出当前用户所拥有指定表的字段信息、索引信息、主键约束信息和外键约束信息。例如:

>columns defect;
RATL_MASTERSHIP                         INTEGER (10,0)
DBID                                    INTEGER (10,0)
IS_ACTIVE                               INTEGER (10,0)
ID                                      VARCHAR (13,0)
STATE                                   INTEGER (10,0)
VERSION                                 INTEGER (10,0)
LOCK_VERSION                            INTEGER (10,0)
LOCKED_BY                               INTEGER (10,0)
IS_DUPLICATE                            INTEGER (10,0)
UNDUPLICATE_STATE                       VARCHAR (50,0)
HEADLINE                                VARCHAR (125,0)
DESCRIPTION                             CLOB (104857600,0)
PRIORITY                                VARCHAR (30,0)
SEVERITY                                VARCHAR (30,0)
SUBMITTER                               INTEGER (10,0)
SUBMIT_DATE                             TIMESTAMP (26,6)
OWNER                                   INTEGER (10,0)
OLD_ID                                  VARCHAR (50,0)
KEYWORDS                                CLOB (104857600,0)
SYMPTOMS                                CLOB (104857600,0)
NOTE_ENTRY                              CLOB (104857600,0)
NOTES_LOG                               CLOB (104857600,0)
RESOLUTION                              VARCHAR (50,0)
PROJECT                                 INTEGER (10,0)
CUSTOMER_SEVERITY                       VARCHAR (50,0)

>indices defect;
Unique              Index Name          Column
Y                   DEFECT_UC           DBID
Y                   DEFECT_UK           ID
N                   IX_16777254         RATL_MASTERSHIP
N                   IX_16777314         STATE
N                   IX_16777325         SUBMITTER
N                   IX_16777327         OWNER
N                   IX_16777924         PROJECT

>primary_keys defect;
Key                 Name                Column Sequence
DEFECT_PK           DBID                1

>foreign_keys defect;
FK Column           PK                  Table PK Column
RATL_MASTERSHIP     RATL_REPLICAS       DBID
UCM_PROJECT         UCM_PROJECT         DBID
SUBMITTER           USERS               DBID
OWNER               USERS               DBID

3 pdsql 高级功能

有了上述 pdsql 的基本功能,就可以满足普通 ClearQuest 数据库的管理需求了。pdsql 还有一些高级功能,如数据库的清理、表结构的维护、大对象(LOB)字段的支持、ClearQuest 记录中附件的转储等等。

本章介绍 pdsql 的高级特殊命令和对不同厂商数据库环境的部署。

3.1 pdsql 特殊命令

1. 猛烈魔法 (nuke_all_tables):nuke_all_tables 命令可以删除所有当前用户可访问的表和所有数据,请慎重使用,确认数据都没用或已经有好的备份。用法如下:

>nuke_all_tables;

2. SQL Server 数据库特有创建数据库和增加数据库属主的命令:create_database 和 add_as_dbo。用法如下:

>create_database dbname device size;
>add_as_dbo loginname;

关于这两个命令的示例参考下面 3.4 用 pdsql 为 ClearQuest 部署 SQL Server 数据库环境

3. 映射 id 命令 map_ids,有些数据库不支持嵌套 select 的 update 语句,此命令就用来实现统一的“update set x = (select..)”语句。map_ids 命令用法为:

>map_ids test_table field maptable

要用 map_ids 命令,首先创建一个临时映射表,表字段 old 和 new 分别对应旧值和新值 , 表记录就是一组新旧值映射表。

4. 断言语句 assert,此命令将会生成一个条件检查语句,然后执行,如果不满足就抛异常信息(Exception)。assert 命令语法为:

>assert string_equal table field value;

检查表中指定的字符串字段值是否和想要的值相等,如果不相等就抛包含表名、该字段名和实际值等异常信息。

>assert integer_equal table field value;

检查表中指定的整型字段值是否和想要的值相等,如果不相等就抛包含表名、该字段名和实际值等异常信息。

>assert empty table;

检查表是否为空,如果不为空就抛包含表名和实际记录数的异常信息。

>assert unique_index name on table (fields, field);

检查是否可以在指定的字段上创建唯一约束索引,如果不能创建就抛包含表名和该字段的异常信息。

>assert unused_value table field value;

检查表中指定字段中是否有和想比较的值相等的记录,如果有就抛包含表名、该字段名、比较的值和记录数等异常信息。

>assert unused_state_value table field value stringval;

检查表中指定字段中是否有和想比较的值相等的记录,如果有就抛包含表名、该字段名、指定的状态值和记录数等异常信息。

>assert undefined_column table column;

检查指定的字段是否包含在表中,如果不在就抛包含表名和该字段的异常信息。

>assert undefined_table table;

检查是否当前用户没有定义指定的表,如果定义了就抛包含表名的异常信息。

>assert defined_table table;

检查是否当前用户定义指定了的表,如果没有定义就抛包含表名的异常信息。

>assert alter_table table;

检查是否可对指定的表进行改变操作,可用来判断是否该表被锁了,如果该表不能被执行改变操作就抛异常信息。

5. 统一的表删除命令 drop_table:

>drop_table test_table;

6. 统一的索引删除命令 drop_index:

>drop_index test_table test_idx;

7. 统一的增加新表字段命令 add_column:

>add_column test_table new_column SQL_VARCHAR 36 NULL;

此命令是给表 test_table 中增加一个新字段 new_column,该字段数据类型为变长字符串型,最大长度为 36 ,该字段缺省值为空。

8. 统一的表字段改名命令 rename_column:

>rename_column test_table old_column_name new_column_name SQL_VARCHAR(50) NULL;

此命令是将表 test_table 中的字段 old_column_name 名改成 new_column_name,字段类型改成最大长度为 50 的变长字符串类型。

9. 统一的表字段维护命令 alter_column:

>alter_column test_table column_name SQL_VARCHAR 100 default;

此命令是将表 test_table 中字段 column_name 的数据类型调整为最大长度是 100 的变长字符串型。

10. 统一的主键添加命令 add_pkey_constraint_ix:

>add_pkey_constraint_ix test_table field;

此命令是给表 test_table 中字段 field 增加一个数据库主键约束。

11. 统一的主键删除命令 drop_pkey_constraint_ix:

>drop_pkey_constraint_ix test_table field;

此命令是删除表 test_table 中字段 field 上的数据库主键约束。

12. 统一的外键添加命令 add_fkey_constraint_ix:

>add_fkey_constraint_ix from_table from_field from_field_id to_table to_field;

此命令是给表 from_table 中字段 from_field 增加一个数据库外键约束,外键名后缀为 from_field_id,外键参考到 to_table 表中的 to_field 字段。

13. 统一的外键删除命令 drop_fkey_constraint_ix:

>drop_fkey_constraint_ix from_table from_field_id;

此命令是删除表 from_table 中后缀为 from_field_id 的数据库外键约束。

14. 统一的转储数据库二进制大对象到文件的命令 dump_longbinary:

>dump_longbinary product.jpg select data from attachments_blob where attachments_ dbid 
    = (select dbid from attachments where filename= 'product.jpg');

此命令是将 ClearQuest 附件中文件名为 product.jpg 的内容转储到数据库外的新文件 product.jpg 中。

15. 统一的转储数据库文本大对象到文件的命令 dump_longchar:

>dump_longchar description.txt select description from defect where id = 'SAMPL00000001';

此命令是将 defect 表中 id 是 SAMPL00000001 的记录描述内容转储到数据库外的新文件 description.txt 中。

16. 统一的从文件插入或更新数据库中的文本或二进制大对象命令 insert_file:

>insert_file text C:\Temp description.txt update defect set description 
    = ? where id = 'SAMPL00000001';

此命令是将 C:\Temp 或 SOURCE_FILE_PATH 环境变量定义的路径下文件 description.txt 的内容放到 defect 表中 id 是 SAMPL00000001 的记录描述中。

上述示例中的 C:\Temp 还可以用 $SOURCE_FILE_PATH 变量代替,该变量的值可以通过执行 pdsql 的命令行选项 -sourcefilepath 指定,缺省值时当前路径。

17. 显示控制大对象数据类型在 pdsql 中输出的最大长度命令 longmax:

>longmax 1024;

此命令是将大对象数据类型在 pdsql 中输出的最大值设为 1024,然后你再用 select 语句在 pdsql 中查询大对象时,最大输出就是 1024 了。

Longmax 缺省是 50,最大可以设置到 64000。

18. 创建日历表命令 makecal:

>makecal 1976 2008;

此命令是在 ClearQuest 中创建从 1976 年到 2008 年的日历,将会设置好正确的年月日和星期的开始及结束时间。

第一个开始年要大于等于 1950 年,第二个结束年要小于等于 2050 年。此功能可以通过环境变量 CQ_NOCAL(Windows)或者 NOCAL(UNIX / Linux)禁止使用。

19. 更新日期时间字段偏移特定分钟数命令 update_timestamp_minutes :

>update_timestamp_minutes 120 defect submit_date;

此命令是将 defect 表中所有记录的 submit_date 字段值向后偏移 120 分钟。你也可以用 where 语句过滤为特定的记录。

3.2 用 pdsql 为 ClearQuest 部署 DB2 数据库环境

用 pdsql 为 ClearQuest 部署 DB2 数据库的步骤是先创建为 ClearQuest 专用数据库,再用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库。

下面是一个利用 pdsql 为 ClearQuest 部署 DB2 数据库环境的示例:

db2cmd -c -w -i db2 uncatalog node "cqserver"
db2cmd -c -w -i db2 catalog tcpip node "cqserver"
        remote "cqserver" server "50000" remote_instance "db2"
db2cmd -c -w -i db2 uncatalog database "masterdb"
db2cmd -c -w -i db2 catalog database "masterdb" at node "cqserver"
db2cmd -c -w -i db2 uncatalog database "userdb"
db2cmd -c -w -i db2 catalog database "userdb" at node "cqserver"

pdsql -v db2 -s db2server -db masterdb -u db2admin -p IBMDB2

>nuke_all_tables;

pdsql -v db2 -s db2server -db userdb -u db2admin -p IBMDB2

>nuke_all_tables;

下面示例图就是再用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库:

图 3:IBM Rational ClearQuest 维护工具为 DB2 数据库环境创建模式库和用户数据库示例图
IBM Rational ClearQuest 维护工具为 DB2 数据库环境创建模式库和用户数据库示例图 IBM Rational ClearQuest 维护工具为 DB2 数据库环境创建模式库和用户数据库示例图

3.3 用 pdsql 为 ClearQuest 部署 Oracle 数据库环境

用 pdsql 为 ClearQuest 部署 Oracle 数据库的步骤是先创建为 ClearQuest 模式库和用户库专用的两个用户,再赋予这两个用户相应的权限,最后用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库。

下面是一个利用 pdsql 为 ClearQuest 部署 Oracle 数据库环境的示例:

pdsql -v ora -s oracleserver -db oraclesid -u system -p manager

>create user cqmaster identified by cqpassword default tablespace 
     CQSPACE temporary tablespace CQTEMP;

>create user cquser identified by cqpassword default tablespace 
     CQSPACE temporary tablespace CQTEMP;

>>grant connect, resource, ctxapp, 
     select on ctxsys.ctx_servers to cqmaster, cquser;

下面示例图就是再用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库:

图 4:IBM Rational ClearQuest 维护工具为 Oracle 数据库环境创建模式库和用户数据库示例图
IBM Rational ClearQuest 维护工具为 Oracle 数据库环境创建模式库和用户数据库示例图 IBM Rational ClearQuest 维护工具为 Oracle 数据库环境创建模式库和用户数据库示例图

3.4 用 pdsql 为 ClearQuest 部署 SQL Server 数据库环境

用 pdsql 为 ClearQuest 部署 SQL Server 数据库的步骤是先创建 ClearQuest 专用数据库,再创建 ClearQuest 数据库用户和赋予相应的权限,最后用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库。

下面是一个利用 pdsql 为 ClearQuest 部署 SQL Server 数据库环境的示例:

pdsql -v ss -s sqlserver -db master -u sa -p cqdba

>create_database SchemaRepo test_pool 12 COLLATE Chinese_PRC_BIN;

>{call sp_addlogin('cqmaster', 'cqpassword', 'SchemaRepo')};

>use SchemaRepo;

>add_as_dbo cqmaster;

>use master;

>create_database CQUserDB test_pool 12 COLLATE Chinese_PRC_BIN;

>{call sp_addlogin('cquser', 'cqpassword', 'CQUserDB')};

>use CQUserDB;

>add_as_dbo cquser;

下面示例图就是再用 ClearQuest 维护工具(Maintenance Tool)创建相应的模式库和用户数据库:

图 5:IBM Rational ClearQuest 维护工具为 SQL Server 数据库环境创建模式库和用户数据库示例图
IBM Rational ClearQuest 维护工具为 SQL Server 数据库环境创建模式库和用户数据库示例图 IBM Rational ClearQuest 维护工具为 SQL Server 数据库环境创建模式库和用户数据库示例图

4 总结

本文主要介绍了 pdsql 工具的基本功能和高级功能。利用 pdsql 的基本功能可以实现对数据库的日常管理,除了支持标准的 SQL 语句外,还提供了丰富便捷的与数据库厂商无关的增强命令。利用 pdsql 的高级功能可以对数据库进行清理,对表结构进行维护、对大对象(如附件)的转储等等,还介绍了用 pdsql 为 ClearQuest 部署相应的数据库。

使用 pdsql 简化了我们的工作,提高了我们的效率,不需要登陆到远程操作系统,甚至不需要安装客户端,利于管理和维护 IBM Rational ClearQuest 数据库。

参考资料

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号