powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопросы:
14 сообщений из 14, страница 1 из 1
Вопросы:
    #34154275
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос№1:
мне дали задание по DB2:
(выполняется при помощи 2-х экземпляров приложения Command Center, моделирующих конкурирующие транзакции Т1 и Т2)
Выполнить в транзакции T1 запрос из таблицы "Сотрудники" с уровнем изоляции CS. Изменить одну из записей таблицы "Сотрудники" из транзакции Т2. Подтвердить транзакцию Т2, после чего вновь выполнить запрос из таблицы "Сотрудники" в транзакции Т1 с уровнем изоляции CS. Завершить транзакцию T1.Объяснить результат.
а)Выполнить в транзакции T1 запрос из таблицы "Сотрудники" с уровнем изоляции CS:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from employers with cs

CODE        FIO                   DEPATMENT                        AGE        
----------- -------------------- -------------------- -----------
         123  Иванов                Работа с клиентами             25 
         124  Петров                Маркетинг                          27 
         125  Сидоров              Планирование                     35 
         126  Липовах              менеджмент                        42 

   4  записей выбрано.
б)Изменить одну из записей таблицы "Сотрудники" из транзакции Т2:

Код: plaintext
1.
update employers set depatment='менеджмент2' where code= 126 
DB20000I  Команда SQL выполнена успешно.
в)Подтвердить транзакцию Т2:

Код: plaintext
1.
commit
DB20000I  Команда SQL выполнена успешно.
г)выполнить запрос из таблицы "Сотрудники" в транзакции Т1 с уровнем изоляции CS:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from employers with cs

CODE        FIO                  DEPATMENT            AGE        
----------- -------------------- -------------------- -----------
         123  Иванов                Работа с клиентами             25 
         124  Петров                Маркетинг                          27 
         125  Сидоров              Планирование                     35 
         126  Липовах              менеджмент2                      42 

   4  записей выбрано.
д)Завершить транзакцию T1:
Код: plaintext
1.
commit
DB20000I  Команда SQL выполнена успешно.
Как объяснить результат? Для чего всё это? Что в конце концов мы получили? Или тут что-то не так?
...
Рейтинг: 0 / 0
Вопросы:
    #34154325
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос №2:
как запускать курсор с оператором FOR UPDATE:
Код: plaintext
1.
declare curs1 cursor for update employers set age=age+ 2 
DB20000I  Команда SQL выполнена успешно.
...
Рейтинг: 0 / 0
Вопросы:
    #34154360
НГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а Вы в Command Center autocommit отключили?
...
Рейтинг: 0 / 0
Вопросы:
    #34154454
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
где это? что-то не нашёл. на какой вкладке?
...
Рейтинг: 0 / 0
Вопросы:
    #34154493
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это "Автоматически запускать локальную систему DB2 при запуске инструментов"?
...
Рейтинг: 0 / 0
Вопросы:
    #34154544
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инструменты-> параметры инструментов-> редактор команд.
галочка Автоматическое принятие операторов эскуэль доллжна бать снята.

Неважно.

db2 9.1.0 356
Уровень конпиляции s060629

в джавяном контрол центре.

connect to xx
create table xx ( xx char(10))
commit
insert into xx values( 'xx')
select * from xx <-- здесть висним видимо на блокировке(не дождался).
commit



не пользуйтесь Сontrol Center!
...
Рейтинг: 0 / 0
Вопросы:
    #34154762
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос №1:

Все отработало так, как и ожидалось.
И не важно, был автокоммит включен или нет, в данном случае эти 2 транзакции ни за что не конкурируют:
При чтении с уровнем изоляции CS мы блокируем только ту строку, на которой позиционирован курсор в данный момент.
Приложения же обычно, чтоб вернуть результат запроса, делают так:
1. Посылают запрос.
2.
Получив курсор, прокручивают его до конца и показывают результат клиенту.
При этом указатель курсора в конце чтения будет располагаться за последней записью.

Т.е. T1, прочитав все записи, не будет блокировать строк.
Т2 после этого сделает update и закоммитится. Никто ей не мешает.
T1 после этого читает изменившееся значение и коммитится. Никто ей не мешает.

Вот если бы command center (T1) решил бы остановиться на какой-нибудь записи и не прокручивать курсор дальше, то эту запись не смогла бы обновить T2.
Тоже самое произошло бы, если бы T1 работала бы с RS (RR).

Вопрос №2:

DECLARE C1 CURSOR FOR
SELECT *
FROM EMPLOYERS
FOR UPDATE OF AGE
...
Рейтинг: 0 / 0
Вопросы:
    #34154800
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как потом с помощью этого курсора производить изменения в таблице? Например, с помощью курсора увеличить возраст на 3?
...
Рейтинг: 0 / 0
Вопросы:
    #34156856
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create procedure tst()
language sql
begin atomic
 declare at_end int;
 declare a int;
 declare c1 cursor for 
   select age
   from employers
--where <условие_выборки>
   for update of age;
 declare continue handler for sqlstate '02000' set at_end= 1 ;

 open c1;
 set at_end= 0 ;
 fetch c1 into a;
 while (at_end= 0 ) do
   update employers
   set age=age+ 3 
   where current of c1;
   set at_end= 0 ;
   fetch c1 into a;
 end while;
close c1;
end@
...
Рейтинг: 0 / 0
Вопросы:
    #34156942
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попытался создать процедуру, получилось следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
------------------------------ Введенные команды ------------------------------
create procedure tst()
language sql
begin atomic
 declare at_end int;
 declare a int;
 declare c1 cursor for 
   select age
   from employers
--where <условие_выборки>
   for update of age;
 declare continue handler for sqlstate '02000' set at_end= 1 ;

 open c1;
 set at_end= 0 ;
 fetch c1 into a;
 while (at_end= 0 ) do
   update employers
   set age=age+ 3 
   where current of c1;
   set at_end= 0 ;
   fetch c1 into a;
 end while;
close c1;
end;
------------------------------------------------------------------------------
create procedure tst()
language sql
begin atomic
declare at_end int
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "c 
declare at_end int".  Список правильных элементов: "<psm_semicolon>".  LINE 
NUMBER= 4 .  SQLSTATE= 42601 

declare a int
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "int" после текста "declare a ".  
Список правильных элементов: "END-OF-STATEMENT".  SQLSTATE= 42601 

declare c1 cursor for select age from employers for update of age
DB20000I  Команда SQL выполнена успешно.

declare continue handler for sqlstate '02000' set at_end= 1 
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "declare CONTINUE handler for 
sqlstate" после текста "BEGIN-OF-STATEMENT".  Список правильных элементов: 
"<create_proc>".  SQLSTATE= 42601 

open c1
DB20000I  Команда SQL выполнена успешно.

set at_end= 0 
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "at_end" после текста "set ".  Список 
правильных элементов: "JOIN <joined_table>".  SQLSTATE= 42601 

fetch c1 into a
SQL0104N  Обнаружен неправильный элемент "into" после текста 
"<идентификатор>".  Список правильных элементов: "END-OF-STATEMENT".  
SQLSTATE= 42601 

while (at_end= 0 ) do update employers set age=age+ 3  where current of c1
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "while (at_end=0) do" после текста 
"BEGIN-OF-STATEMENT".  Список правильных элементов: "<space>".  SQLSTATE= 42601 

set at_end= 0 
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "at_end" после текста "set ".  Список 
правильных элементов: "JOIN <joined_table>".  SQLSTATE= 42601 

fetch c1 into a
SQL0104N  Обнаружен неправильный элемент "into" после текста 
"<идентификатор>".  Список правильных элементов: "END-OF-STATEMENT".  
SQLSTATE= 42601 

end while
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "end 
while".  Список правильных элементов: "JOIN <joined_table>".  SQLSTATE= 42601 

close c1
DB20000I  Команда SQL выполнена успешно.

end
DB21034E  Данная команда обрабатывалась как оператор SQL, поскольку она не 
является допустимой командой процессора командной строки.  При обработке SQL 
было получено сообщение:
SQL0104N  Обнаружен неправильный элемент "END-OF-STATEMENT" после текста 
"end".  Список правильных элементов: "JOIN <joined_table>".  SQLSTATE= 42601 

SQL0104N  Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "end".  Список правильных элементов: "JOIN <joined_table>                              ".

Объяснение: 

Обнаружена синтаксическая ошибка в операторе SQL, где указанный 
элемент следует после текста "<текст>".  В поле "<текст>" 
показаны  20  символов оператора SQL непосредственно перед неверным 
элементом.  

 В качестве подсказки программисту поле SQLERRM области SQLCA 
содержит частичный список правильных элементов в виде 
"<список-элементов>".  При составлении этого списка 
подразумевается, что предыдущая часть оператора не содержит 
ошибок.  

 Оператор невозможно обработать.  

Действия пользователя: 

Проверьте и исправьте оператор в области указанного элемента.  

 sqlcode :  - 104  

 sqlstate :   42601  
...
Рейтинг: 0 / 0
Вопросы:
    #34156983
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установите statement termination character (кажется так) в вашем command center вместо ';' в '@'.
...
Рейтинг: 0 / 0
Вопросы:
    #34157343
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё, спасиб, получилось!
...
Рейтинг: 0 / 0
Вопросы:
    #34169546
Bean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как создать пользователя БД?
Написано:
В Центре управления раскрывайте дерево объектов, пока не найдете папку Пользователи баз данных .

Щелкните правой кнопкой по папке Пользователи баз данных и из всплывающего меню выберите Создать . Откроется записная книжка Создать пользователя базы данных.

Но проблема в том, что в дереве объектов в центре управления нет папки Пользователи баз данных. Есть только:

таблицы

производные таблицы

триггеры

объекты программ,
в которых:

Пользовательские ф-и

хранимые процедуры
...
Рейтинг: 0 / 0
Вопросы:
    #34172267
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В моём Control Center искомые User and Group Objects находятся как раз между Application Objects и Federation Database Objects. Быть может, у вас версия стара?

Но всё равно, на самом-то деле юзера создаются не там, а в операционной системе.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопросы:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]