IBM Rational ClearQuest 是一个强大的缺陷和变更跟踪系统,可以管理所有软件开发生命周期中的任何变更类型。pdsql
是 ClearQuest 自带的一个管理数据库的强大工具。本文主要介绍使用 pdsql 管理数据库,如何远程部署 ClearQuest
数据库。
IBM Rational ClearQuest 是一个强大的缺陷和变更跟踪系统,可以管理所有软件开发生命周期中的任何变更类型。ClearQuest
支持健全的变更管理过程,使用的是用户容易掌握的和可自定制的关系型数据库,可以对变更请求进行优先级管理和监控。ClearQuest
还是一个可以实时进行项目状态沟通的平台。
每一个 ClearQuest 应用都最少有一个模式库(Schema Repository)和一个用户数据库(User Database),
下图 1 是一个 ClearQuest 模式库和用户数据库架构示例图:
图 1:IBM Rational ClearQuest 模式库和用户数据库架构示例图
ClearQuest 通过连接(Connection)将模式库和用户数据库集合在一起,下图 2 是一个 ClearQuest
连接数据库集合示例图:
图 2:IBM Rational ClearQuest 连接数据库集合示例图
ClearQuest 支持 DB2、Oracle、SQL Server 和 Microsoft Access(不推荐将 MS_ACCESS
用于商业实际应用)等数据库,而且并不需要安装各个数据库的客户端。pdsql 是 ClearQuest 自带的一个管理数据库的强大工具。本文主要介绍使用
pdsql 管理数据库,如何远程部署 ClearQuest 数据库。
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 连接数据库的示例:
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
|
有了上述 pdsql 的基本功能,就可以满足普通 ClearQuest 数据库的管理需求了。pdsql 还有一些高级功能,如数据库的清理、表结构的维护、大对象(LOB)字段的支持、ClearQuest
记录中附件的转储等等。
本章介绍 pdsql 的高级特殊命令和对不同厂商数据库环境的部署。
3.1 pdsql 特殊命令
1. 猛烈魔法 (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 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:
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:
此命令是将大对象数据类型在 pdsql 中输出的最大值设为 1024,然后你再用 select 语句在 pdsql 中查询大对象时,最大输出就是
1024 了。
Longmax 缺省是 50,最大可以设置到 64000。
18. 创建日历表命令 makecal:
此命令是在 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 数据库环境创建模式库和用户数据库示例图
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 数据库环境创建模式库和用户数据库示例图
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 数据库环境创建模式库和用户数据库示例图
本文主要介绍了 pdsql 工具的基本功能和高级功能。利用 pdsql 的基本功能可以实现对数据库的日常管理,除了支持标准的
SQL 语句外,还提供了丰富便捷的与数据库厂商无关的增强命令。利用 pdsql 的高级功能可以对数据库进行清理,对表结构进行维护、对大对象(如附件)的转储等等,还介绍了用
pdsql 为 ClearQuest 部署相应的数据库。
使用 pdsql 简化了我们的工作,提高了我们的效率,不需要登陆到远程操作系统,甚至不需要安装客户端,利于管理和维护 IBM
Rational ClearQuest 数据库。
|