Запити до баз даних ClearQuest Oracle 10g

У середовищах IBM Rational ClearQuest, що використовують БД Oracle версії 10g і більш пізніх версій, адміністратор може за допомогою однієї з функцій ClearQuest версії 7.0.1 дозволити користувачам виконувати запити до багаторядковим текстових полів і отримувати регістронезавісімие результати. У цій статті також пояснюється, як повернутися до регістру запитів для всього індексу бази даних або тільки для одного поля.

За замовчуванням, запити в IBM Rational ClearQuest, які звертаються до багаторядковим текстових полів в базі даних Oracle, можуть повертати лише регістру результати, тому що ця база даних для зберігання таких полів використовує регістру тип даних Character Large Object (CLOB). Отже, запит по слову Test не видасть збігів зі словами test або TEST.


Однак якщо ви використовуєте СУБД Oracle Database 10g або більш пізніх версій, то для отримання регістронезавісімих результатів можна скористатися функцією, доступною в ClearQuest і ClearQuest MultiSite версії 7.0.1. Якщо ви задіюєте цю функцію, то запит по слову Test виявить збіги з test, TEST, І будь-яким іншим поєднанням букв верхнього та нижнього регістрів, якщо в іншому написання цих слів не відрізняється.


Примітка: Ця функція ClearQuest недоступна для баз даних Oracle більш ранніх версій, ніж Database 10g.


Для того щоб дозволити регістронезавісімие запити, необхідно виконати наступні кроки:



  1. Ідентифікувати всі багаторядкові текстові поля в призначеній для користувача базі даних;
  2. Отримати необхідні дозволи від адміністраторів бази даних і ClearQuest;
  3. Створити індекси для всіх багаторядкових текстових полів, які будуть індексуватися;
  4. Включити функцію, додавши прапор поведінки в таблицю, попередньо створивши її, якщо вона не існує;
  5. Виконати сценарій SQL, щоб створити індекси для всіх багаторядкових полів, які будуть використовуватися для запитів.

У нашій статті цей процес описується більш детально, і, крім того, пояснюється, як повернутися до регістру запитів за замовчуванням.


Необхідні умови





Таблиця 1. Кодові сторінки та асоційовані з ними мови





C:	estpdsql.scr columns defect;



  1. Перенаправьте цей файл у PDSQL за допомогою оператора перенаправлення < і передайте на вхід команди grep для пошуку полів CLOB;
  2. Потім перенаправьте цей файл утиліті командного рядка PDSQL за допомогою оператора перенаправлення < і передайте висновок на вхід команди grep для пошуку багаторядкових текстових полів CLOB Нижче наводиться приклад такої команди:





 C: ClearQuest> pdsql-v ora-s <host>-db <dbname>-u <cqschema_user>
-p <pw> < c: estpdsql.scr / grep CLOB



Система згенерує список всіх полів CLOB, виявлених в таблиці defect (див. таблицю 2).


Таблиця 2. Поля CLOB, виявлені в таблиці defect





 > Sqlplus <oracle_DBA_user> / <password> @ <tnsnamesentry> @ setup_cq_ora_user_clob.sql
<oracle_user>



Крок 3. Створення індексів для всіх багаторядкових текстових полів, які будуть індексуватися.


У Oracle Database 10g багаторядкові текстові поля, які не мають індексів, не можуть використовуватися в запитах. При створенні індексу для дозволу регістронезавісімих запитів по будь-якого з багаторядкових текстових полів ви повинні створити індекс для кожного багаторядкового текстового поля, яке використовується в запитах. Однак не всі запити повинні бути регістронезавісімимі. Крім того, не кожному багаторядковому текстового поля потрібна підтримка регістронезавісімих запитів. При створенні індексів для кожного з полів ви можете вирішити, чи будуть запити для цього поля регістру або регістронезавісімимі. Виконуючи сценарій SQL setup_cq_clob_index, Ви можете вибрати, які поля будуть підтримувати регістронезавісімие запити, а які – від регістру.


Наприклад, можна створити індекс, що підтримує регістронезавісімие запити, у полі Description , І індекс, що підтримує регістру запити, у полі Keyword . Однак якщо ви не створите індекс для поля Keyword, а потім спробуєте виконати до нього запит, цей запит не буде виконано, а система виведе звіт про помилку.


Використовуйте сценарій setup_cq_clob_index.sql, Щоб створити індекси для багаторядкових текстових полів. Необхідно створити індекс для всіх багаторядкових текстових полів в призначеній для користувача базі даних, якщо текстовий запит використовується в якості фільтра.


Порада: Індекси для регістру і регістронезавісімих запитів створюються за допомогою одного й того ж сценарію.


Сценарій setup_cq_clob_index.sql зберігається в каталозі Rational ClearQuest, який у вашій системі може мати вказаний нижче або інший шлях:
C:Program FilesRationalClearQuest


Для кожного з багаторядкових текстових полів запустіть сценарій setup_cq_clob_index.sql і виконайте наступні кроки:



  1. Вкажіть ім'я користувача і пароль для Oracle адміністратора ClearQuest та ім'я TNSname користувача бази даних:





 > Sqlplus <oracle_user> / <password> @ <tnsnamesentry> @ setup_cq_clob_index.sql




  1. Сценарій запропонує або видалити існуючий індекс, або створити новий. Вкажіть, що потрібно створити новий індекс для багаторядкового текстового поля;
  2. Введіть ім'я для типу запису Rational ClearQuest ,наприклад, defect;
  3. Введіть ім'я поля Rational ClearQuest ,наприклад, description;
  4. Вкажіть, що призначена для користувача база даних має версію Oracle 10 або більш пізню;
  5. Введіть BASIC_LEXER. Лексичний аналізатор – це програмний компонент, який ділить рядок тексту на окремі слова, або лексеми, щоб можна було проіндексувати окремі слова. Нижче наводиться список підтримуваних типів лексичних аналізаторів. (Інші лексичні аналізатори підтримують індексацію для мов, у яких немає розподілу на букви верхнього та нижнього регістра, а пробіл не є роздільником між словами);
  6. Вкажіть, що індекс повинен бути регістронезавісімим. Індекс для багаторядкового поля створений.

Список підтримуваних лексичних аналізаторів:



Інформацію про ці лексичних аналізаторах можна знайти в документації по Oracle.


Крок 4. Включення функції шляхом додавання прапора поведінки в таблицю; з попереднім створенням таблиці при необхідності.


Перш ніж ви зможете створити індекс для багаторядкового текстового поля, ви повинні створити в базі даних нову таблицю і додати прапор поведінки, що дозволяє індексацію в цій таблиці. Виконайте наступні кроки за допомогою інтерфейсу Oracle "s SQL * Plus:



  1. Виконайте вхід в призначену для користувача базу даних з ідентифікатором входу користувача Oracle, який має дозвіл на створення таблиць, і вкажіть TNSname. Ім'я користувача і пароль Oracle – це ті самі ім'я та пароль, які ви вводите при створенні бази даних за допомогою інструменту обслуговування Ratonal ClearQuest. Елемент команди tnsnamesentry це ім'я бази даних, що зберігається у файлі tnsnames.ora;





 > Sqlplus <oracle_user> / <password> @ <tnsnamesentry>




  1. Створіть таблицю з вказаними значеннями в рядках і стовпцях;





 > Sqlplus create table ratl_diagnostics (diag_name VARCHAR2 (16), diag_value 
VARCHAR2(255));



Примітка: Система не зможе створити таблицю, якщо таблиця з вказаним ім'ям вже існує в призначеній для користувача базі даних.



  1. Вставте в таблицю ratl_diagnostics наступний рядок. Цей рядок містить значення, яке дозволяє створювати індекси для багаторядкових текстових полів;





 > Sqlplus insert into ratl_diagnostics (diag_name, diag_value) 
values (“Behavior”, “CLOB_CASE_AND_INDEX”);




  1. Зафіксуйте зміна в базі даних.





> sqlplus commit;



Примітка: Інформацію про параметри синтаксису для SQL * Plus можна знайти в документації по Oracle.


Додаткові вказівки по індексах






Відключення функції


Дозволивши регістронезавісімие запити, можна скористатися процедурами для зміни всіх або частини зроблених декількома способами:



Примітка: Відключення функції необхідно провести до видалення всіх індексів і до відкликання повноважень облікового запису користувача (якщо планується), щоб уникнути помилок користувачів.


Видалення індексів


Після того, як індекси для вирішення регістронезавісімих запитів будуть створені, цілком імовірно, що вам знадобиться можливість видалити окремі індекси. Це можна зробити наступним чином:



  1. Визначте ідентифікатор користувача і пароль адміністратора ClearQuest для Oracle та ім'я TNSname користувача бази даних, а потім виконайте сценарій setup_cq_clob_index.sql:





 > Sqlplus <oracle_user> / <password> @ <tnsnamesentry> @ setup_cq_clob_index.sql




  1. Сценарій запропонує або видалити існуючий багаторядковий текстовий індекс, або створити новий. Вкажіть, що потрібно видалити багаторядковий текстовий індекс;
  2. Введіть ім'я типу запису Rational ClearQuest ,наприклад, defect;
  3. Введіть ім'я поля Rational ClearQuest ,наприклад, description.

Важливо: Після видалення індексу для багаторядкового текстового поля це поле більше не може бути використано для запитів. Отже, вам доведеться інформувати про це користувачів і змінити запити, що використовують це поле.


Повернення до регістру запитів тільки для одного поля


Після дозволу регістронезавісімих запитів для багаторядкового текстового поля ви можете повернутися до регістру запитам. Якщо ви більше не хочете вирішувати регістронезавісімие запити для будь-яких полів таблиці, можна відключити індекси для всієї таблиці. Можна також повернутися до регістру запитам лише для одного багаторядкового текстового поля, змінивши індекс:



  1. Скористайтеся сценарієм setup_cq_clob_index.sql для видалення наявного індексу;
  2. Знову запустіть сценарій setup_cq_clob_index.sql;
  3. В останньому кроці вкажіть, що новий індекс повинен підтримувати регістру запити.

Відключення функції


Якщо вам більше не потрібно використовувати регістронезавісімие запити до будь-яких полів таблиці, можна повернутися до налаштувань Oracle за замовчуванням (регістру запити), відключивши індекси для всіх багаторядкових текстових полів у таблиці. Щоб відключити використання всіх індексів в таблиці, видаліть в таблиці ratl_diagnostics значення, яке дозволяє створення індексів для багаторядкових текстових полів:



  1. Після запрошення виконайте вхід в призначену для користувача базу даних з ідентифікатором і паролем користувача Oracle і TNSname користувацької бази даних:





 > Sqlplus <Oracle_user> / <password> @ <tnsnamesentry>



Параметр tnsnamesentry – Це ім'я бази даних, що зберігається у файлі tnsnames.ora .



  1. Введіть наступну команду, щоб видалити з таблиці значення, яке дозволяє створення індексів для багаторядкових текстових полів;





> sqlplus delete from ratl_diagnostics where diag_name
“Behavior” and diag_value = “CLOB_CASE_AND_INDEX”




  1. Зафіксуйте зміна в базі даних.





> sqlplus commit;



Відкликання повноважень на створення індексів


Адміністратор бази даних може відкликати дозвіл на створення індексів, раніше надане користувачеві Rational ClearQuest. Він повинен вказати ідентифікатор та пароль цього користувача. Щоб відкликати дозвіл на створення індексів, використовуйте наступні команди SQL:






 > Sqlplus <Oracle_DBA_user> / <password> @ tnsnamesentry> 

> Sqlplus revoke SELECT ON ctxsys.ctx_indexes from <cq_username>;

> sqlplus revoke ctxapp from <oracle_user>;

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*