本文内容包括: |
在 IBM® Rational® ClearQuest® 环境中使用 Oracle® 版本 10g或者更高级的版本,管理程序可以利用 ClearQuest 版本 7.0.1 中的一个功能部件在多行文本域中运行查询功能,并且可以返回区分大小写的结果。这篇文章还描述了对于您的整个数据库索引或者仅仅一个域怎样转换到区分大小写的查询。
默认情况下,在 Oracle 数据库中运行多行文本域的 IBM® Rational® ClearQuest® 查询系统只能返回区分大小写的结果,因为这个数据库是利用区分大小写的 Character Large Object (CLOB) 数据类型来储存那些域的。因此,查询一个 Test 将不会得到与之相匹配的 test 或者 TEST。
然而,如果您使用 Oracle Database 10g 或者更高版本,您可以利用 ClearQuest 和 ClearQuest MultiSite Version 7.0.1 中都有的一个功能来获取区分大小写的结果。当这个功能被激活时,一个关于 Test 的查询将会找到与之相匹配的 test,TEST, 以及其它由大小写字母的组合,只要是相同的拼写。
注意: 这个 ClearQuest 功能对于早于Database 10g 版本的 Oracle 数据库是不可利用的。
启用区分大小写查询系统包括以下四个基本步骤:
- 在用户数据库中确定多行文本域。
- 从数据库和 ClearQuest 管理程序中获取必要的权限。
- 为所有将被索引的多行文本域建立索引。
- 如果事先需要,可通过在一个表格中添加一个行为标志来激活这个功能特性。
- 运行一个 SQL 脚本来为所有将要被查询的多行文本域建立索引。
这篇文章描述了关于这个过程更详细的细节,同时还阐述了如何归还到默认的区分大小写的查询中来。
先决条件
- 您将需要特殊的软件工具为 Oracle 数据库中多行文本域的大小写查询创建索引。因此,您必须访问这个软件:
- Rational ClearQuest Designer
- Oracle 客户软件,Version 10 或者更高版本
- Oracle SQL*Plus 界面,Version 10 或者更高版本
- 要运行建立索引的实用工具,Rational ClearQuest 管理主机必须在Microsoft Windows 上安装版本 7.0.1 。ClearQuest 软件可作为 Oracle 客户程序和 SQL*Plus 界面运行在同一个系统上,但不是必须这样。
- 要激活能够返回大小写结果的查询程序,您必须一个带有代码页的语言,这个代码页包括由 Rational ClearQuest 支持的 ASCII 字符。这些语言和它们相关的代码页列在表格 1中。
表格 1. 代码页和相关语言
代码页 | 语言 |
---|---|
20127 (US_ASCII) | English |
Safe Shift-JIS (60932) | Japanese |
932 | Japanese |
936 | Simplified Chinese |
949 | Korean |
950 | Traditional Chinese |
1250 (Eastern Europe) | Czech, Croatian, Hungarian, Polish, Romanian, Slovak, Slovenian, Albanian |
1251 (Cyrillic) | Belarussian, Bulgarian, Macedonian, Russian, Serbian, Ukrainian |
1252 (Western Europe) | Spanish, Danish, German, English, French, Italian, Norwegian, Dutch, Portuguese, Swedish |
1253 | Greek |
1254 | Turkish |
1255 | Hebrew |
1257 (Baltic) | Estonian, Lithuanian, Latvian |
要得到更多关于代码页的信息,请在 ClearQuest在线文档的引导下参看参考资料部分中的 Administering Rational ClearQuest。
激活不区分大小写的查询系统
这些任务通常情况下是由 Rational ClearQuest 程序管理员来执行,他了解用来查询的模式和域,并且有了解 Oracle 数据库和 SQL*Plus 界面的 Oracle 数据库管理员的帮助。
要开始激活区分大小写查询程序的过程,首先要复审用户数据库的模式,并确定所有的多行文本域。有些域看起来是短字符串,实际上是多行文本域,例如, Defect Tracking 模式中的 Keywords 和 Symptom 域。决定哪个域是多行文本域的方法之一是使用 Fields 格栅。可以这样操作:
- 启动 Rational ClearQuest Designer。
- 打开 schema。
- 展开每一个记录类型。
- 在 Workspace 版面中点击这个 Fields 图标来显示这个 Fields 网格。
- 在 Fields 网格中,复选 Type 栏中的 MULTILINE_STRING ,并将属于 MULTILINE_STRING 的域列成表格。
如果您的数据库中有大量的多行文本域,您可以利用 PDSQL 工具来确定多行文本域,它与 Rational ClearQuest 一起安装在 Windows 上。利用 PDSQL 命令行工具可以确定所有的多行文本域:
- 创建一个带有分号终止命令列的文档 <tablename>。例如:
C:\testpdsql.scr columns defect; |
- 利用 < 重定向运算符将文件重新定位到 PDSQL,并通过 grep 命令导入,查找 CLOB 域。
- 然后通过 < 重定向运算符将文件重新定位到PDSQL 命令行工具,并通过 grep 命令导入,查找 CLOB 多行文本域。这里是一个命令的例子:
C: ClearQuest>pdsql -v ora -s <host> -db <dbname> -u <cqschema_user> -p <pw> < c:\testpdsql.\scr | grep CLOB |
系统产生了所有 CLOB 字段的一个列表,这些字段列在 defect 表中(参见表 2)。
表 2. 列在 defect 表中的 CLOB 字段类型 | CLOB 字段 |
---|---|
DESCRIPTION | CLOB (2147483647,0) |
KEYWORDS | CLOB (2147483647,0) |
SYMPTOMS | CLOB (2147483647,0) |
NOTE_ENTRY | CLOB (2147483647,0) |
NOTES_LOG | CLOB (2147483647,0) |
IMPL_COMPLETED_BY | CLOB (2147483647,0) |
要获得更多关于如何使用 PDSQL 工具的信息,请查看 IBM Technote 145079, 关于 PDSQL 的信息以及如何使用它。
在您开始为多行文本域建立索引之前,数据库管理员必须授管理用户数据库的 Rational ClearQuest 予权限来建立索引。通过详细说明 Oracle 数据库管理员的用户名和密码,以及用户数据库的 TNSname数据管理员才会授予这些权限。然后这个数据库管理员就会运行 setup_cq_ora_user_clob.sql 脚本并确定为用户数据库创建的 Oracle 用户登陆 ID。句法如下(这是一个可能在屏幕上跨行换行的单个命令):
> sqlplus <oracle_DBA_user>/<password>@<tnsnamesentry>@setup_cq_ora_user_clob.sql <oracle_user> |
在 Oracle Database 10g 中,没有索引的多行文本域在查询系统中是不可能被检索到的。当您在 任何一个 多行文本域中建立一个索引来激活区分大小写的查询程序时,您必须为查询系统使用的 每一个多行文本域建立一个索引。然而,并不是所有的查询都需要是区分大小写的。然而,也并不是每一个多行文本域都需要支持区分大小写的查询。当您为每个域创建索引时,您可以决定查询是否要支持区分大小写。当您运行 setup_cq_clob_index SQL 脚本时,您可以选择哪些域需要区分大小写的查询,哪些查询不需要区分大小写。
例如,您可以建立一个在 Description 域支持不区分大小写查询的索引和一个在 Keyword 域支持区分大小写查询的索引。然而,如果您不为 Keyword 域建立要个索引,您就尝试在它上面运行查询,那么这个查询将不能执行,这个系统将报告一个错误。
使用 setup_cq_clob_index.sql 脚本为多行文本域建立索引。 您必须在用户数据库中为每一个多行文本域建立一个索引,在这个数据库中文本查询相当域一个筛选程序。
提示: 相同的脚本可以同时为区分大小写的和不区分大小写的查询创建索引。
这个 setup_cq_clob_index.sql 脚本存储在 Rational ClearQuest
目录中,并可能在您的安装程序中有一个这样的或不同的路径:
C:\Program Files\Rational\ClearQuest
对于每一个多行文本域,运行 setup_cq_clob_index.sql 脚本并按照以下操作:
- 确定 ClearQuest 管理员的 Oracle 用户登陆 ID 和密码,以及用户数据库的 TNSname,如下所示:
> sqlplus <oracle_user>/<password>@<tnsnamesentry>@setup_cq_clob_index.sql |
- 这个脚本将会提示您要么删除现存的索引要么创建一个新的索引。这表明您想要创建一个新的多行文本索引。
- 键入 Rational ClearQuest 记录 类型名称。例如,键入 defect。
- 键入 Rational ClearQuest 域名称。例如,键入 description。
- 这表明用户数据库是 Oracle Version 10 或者更高级版本。
- 键入 BASIC_LEXER 类型。 lexer 是一个能将文本字符串分成单个命令,或者标记的软件组分,这样使得单个命令可以被检索到。下面是一个支持 lexer 类型的清单。(其它的选择支持没有案例的非空白分隔语言的检索。)
- 这表明索引应该是不区分大小写的。还有最后一个步骤,您的多行文本域索引就完成了。
这些是被支持的 lexers 的类型:
- BASIC_LEXER: English 以及大多数西方欧洲语言的 lexers 使用白色空白分隔命令。
- CHINESE_VGRAM: 一个从 Chinese 文本在中提取标记的 lexer 。
- CHINESE_LEXER: >一个从 Chinese 文本在中提取标记的 lexer 。一个 CHINESE_VGRAM 的改良版本。
- JAPANESE_VGRAM: 一个从 Japanese 文本在中提取标记的 lexer 。
- JAPANESE_LEXER:一个从 Japanese 文本在中提取标记的 lexer 。一个 JAPANESE_VGRAM 的改良版本。
- KOREAN_LEXER:一个从 Korean 文本在中提取标记的 lexer 。
- KOREAN_MORPH_LEXER: 一个从 Korean 文本在中提取标记的 lexer 。一个 KOREAN_LEXER 的改良版本。
要想获得关于 lexers 的信息,可以参考 Oracle 的文档。
步骤 4. 通过在表格中添加一个行为标志来激活这个功能特性,如果事先需要的话可以创建。
在您为多行文本域建立索引之前,您必须添加一个新表格到这个数据库,并添加一个行为值允许为那个表格进行检索。利用 Oracle 的 SQL*Plus 界面,按照以下步骤进行:
- 用 Oracle 用户的一个登陆 ID 登陆到这个用户数据库,这个用户拥有创建表格和确定 TNSname 的权限。当您利用 Rational ClearQuest Maintenance Tool 创建用户数据库时,您进入的这个 Oracle 用户是同一个用户名和密码数据库名称 tnsnamesentry 储存在 tnsnames.ora 文档中。
> sqlplus <oracle_user>/<password>@<tnsnamesentry> |
- 使用这些列和行条目添加一个表。
> sqlplus create table ratl_diagnostics (diag_name VARCHAR2(16), diag_value VARCHAR2(255)); |
注意: 如果这个表格的名称与这个用户数据库中已经存在的名称相同,这个系统就不能创建这个表格。
- 将下面的行插入到 ratl_diagnostics 表格中。这个行包括一个允许为多行文本域创建索引的值。
> sqlplus insert into ratl_diagnostics(diag_name, diag_value) values ("Behavior", "CLOB_CASE_AND_INDEX"); |
- 将变更提交到数据库。
> sqlplus commit; |
注意: 要得到关于 SQL*Plus 句法变量的信息,请参考 Oracle 的文档。
- 测试性能:确保利用一个测试数据库来测试索引性能。索引很好地加快了查询地速度,有时将执行的时间减少到以前占用时间的一小部分。然而,索引要么增加要么减少了添加,变更,以及删除数据库记录的操作执行。为了确保索引没有对您的用户数据库的这些操作进行不当地减少,可以创建一个测试数据库,建立索引, 然后当您添加,变更以及删除 Rational ClearQuest 记录时来测量性能。在所有数据库性能都是否定地这种不太可能地情况下,您可以考虑从一些域中删除一些索引并通知用户哪些多行文本域是不能用来查询的。
- ClearQuest MultiSite 的检索: 如果您使用的是 Rational ClearQuest MultiSite, 那么当您创建并移动数据库时您必须重新检索这个新数据库中所有的多行文本域。支持多行域的索引并没有从工作主要数据库中复制到用户数据库中。 因此您必须经历为每个用户数据库激活不区分大小写查询的整个过程。要简化这个过程的第一个步骤(在用户数据库中确定所有的多行文本域),可以保留已经在工作主要数据库中检索过的所有多行文本域的清单。
- 移动数据库时重新检索:只要用户的数据库被移动,支持多行文本域的索引就会丢失。因此,您必须在移动数据库之后对所有的多行文本域进行检索。您可以 通过下面的与在原始用户数据库上创建索引一样的步骤来对多行文本域进行重新检索。保留原始数据库中所有多行文本域的清单,这样您就不必在每次移动一个数据库时重新创建它。作为可选条件,您可以编写一个脚本来建立所有的索引,当数据库被移动或者更新时就会随之传递下去。请看下载 部分中的一个样例脚本。
- 干扰字:当您创建索引时,您需要考虑 Oracle 所称的 "噪声码。" 它们是语法上必须的代码,只能提供少量有用的信息,比如 of, the, it, is, 或者 you。要保留空格,噪声码基准并没有保存在索引中,但是它们按照语言保存在可制订的列表中。当您创建索引时,它们将会自动地利用一个默认地停止列表来忽略掉这些噪声码。一个默认地噪声码列表可供每个主要的欧洲语言使用。您可以更改这个噪声码的供应列表或者定义您自己的噪声码。要获得更多关于噪声码的信息,可以参考 Oracle 文档。
使功能失效
当不能区分大小写的查询程序激活以后,可以用以下几种方法对您的设置进行全部或者部分的更改:
- 删除索引
- 为每个域归还可区分大小写的查询
- 使功能失效
- 取消用户的权限来建立索引
注意:使功能失效要在删除所有索引之前进行,如果需要可以取消用户帐户权限,这样就不会导致用户的错误。
当您建立索引激活不能区分大小写查询程序以后,您稍后可能希望能够删除单个的索引。您可以通过以下这些步骤来删除索引:
- 确定 ClearQuest 管理员的 Oracle 用户登陆 ID 和密码以及用户数据库的 TNSname,然后运行 setup_cq_clob_index.sql 脚本:
> sqlplus <oracle_user>/<password>@<tnsnamesentry>@setup_cq_clob_index.sql |
- 这个脚本将提示您要么删除一个现存的多行文本索引要么创建一个新的多行文本索引。这表明您想要 删除 一个现存的多行文本索引。
- 键入 Rational ClearQuest 记录类型名称。例如,键入 defect。
- 键入 Rational ClearQuest 域名称。例如,键入 description。
重点: 当您删除一个多行文本域的索引时,这个域将不再在查询程序中使用。因此,您可能需要通知用户并修改查询程序来使用这个域。
当您为一个多行文本域激活不能区分大小写查询程序后,您可以归还到区分大小写查询的程序。如果您不再想在这个表格的任何一个域上激活不能区分大小写查询程序,您可以使整个表格的索引功能失效。您还可以通过更改这个索引为一个多行文本域归还到可区分大小写的查询程序:
- 利用 setup_cq_clob_index.sql 脚本来删除现存的索引。
- 再次运行 setup_cq_clob_index.sql 脚本
- 最后的步骤中,表明新的索引应该支持区分大小写查询程序。
如果您不再想在这个表格的任何一个域上激活不能区分大小写查询程序,您可以通过使这个表格中所有多行文本域的索引失效从而归还到可区分大小写查询程序的默认设置。要使一个表格中的所有索引功能失效,可以删除 ratl_diagnostics 表格中允许为多行文本域创建索引的值:
- 在提示下,用您的 Oracle 用户登陆 ID,密码,以及用户数据库的 TNSname 登陆到用户数据库中,如下所示:
> sqlplus <Oracle_user>/<password>@<tnsnamesentry> |
tnsnamesentry 是数据库名称,储存在 tnsnames.ora 文档中。
- 键入这个命令来删除表格中允许为多行文本文件创建索引的值。
> sqlplus delete from ratl_diagnostics where diag_name "Behavior" and diag_value = "CLOB_CASE_AND_INDEX" |
- 将变更提交给数据库:
> sqlplus commit; |
数据库管理员可以取消允许 Rational ClearQuest 用户建立索引的权限。这个人需要确定 Oracle 用户的登陆 ID。要取消建立索引的权限,可以使用这些 SQL 命令:
> sqlplus <Oracle_DBA_user>/<password>@tnsnamesentry> > sqlplus revoke SELECT ON ctxsys.ctx_indexes from <cq_username>; > sqlplus revoke ctxapp from <oracle_user>; |
下载
描述 | 名字 | 大小 | 下载方法 |
---|---|---|---|
Sample script to build database indexes | ClearQuestScript-OracleDB10g.zip | 2KB |
参考资料
学习- 您可以参阅本文在 developerWorks 全球网站上的 英文原文。
- 阅读 IBM 技术说明,关于 PDSQL 以及如何使用它的信息。技术说明提供了关于访问 IBM Rational ClearQuest 中备份数据的 PDSQL 命令行工具的解释。
- 在 IBM Software Information Center 可以获得 ClearQuest 用户和管理员的在线文档。
- 访问 Rational 专区 获得 Rational Software Delivery Platform 的技术资源和最佳实践。
- 浏览 技术书店 寻找关于技术话题的书籍。
- ClearQuest 用户和管理员可以在 developerWorks Rational 区域的 ClearQuest 部分中找到更多信息,包括hook,Eclipse 插件,产品文档,文章以及白皮书。
- 下载 Rational 软件的试用版。
- 下载 IBM 产品评估版本 并从 DB2®、Lotus®、Rational®、Tivoli®,以及 WebSphere® 获得应用开发软件和中间产品。
- 查看developerWorks Rational 讨论组上的 ClearQuest 讨论论坛。
- 查看 developerWorks Blogs,并加入到 developerWorks 社区。