Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Начинаем изучать DB2  [new]
Maxim Ragozin
Member

Откуда: New York, NY
Сообщений: 50
После свалившейся шары от производителей DB2 и ORACLE. Шары в виде free 4 комершал юз их express editions.
Возникло желание перевести личный ecommerse сайт на DB2. 2 CPU это то что мне надо, ORACLE дает раскатить губу только на 1CPU.

Вопрос #1. Как запустить обычный batch. Есть ли у DB2 вообще такая концепция?

Например это то что было для Sybase. Объявил переменную, зделал в нее SELECT INTO, потом используешь это позже для INSERT. Все запускалось через любой JDBC tools: Aqua Data Studio, Toad или обычный <sql/> (ant task)

C DB2 так не получаеться. На подобный запрос материться что нельзя выполнить SELECT INTO. Я так понимаю что все переменные должны быть внешними. Т.е. надо написать что-то либо программы на одном из языков и выполнять этот батч уже оттуда. Это так и надо делать или я ошибаюсь?

/********************************************************************************/
/* IC IP-TELECOM                                                                */
/********************************************************************************/
DECLARE @PROVIDER_ID INTEGER
DECLARE @PRODUCT_ID INTEGER

PRINT 'INFO: checking...'
SELECT @PROVIDER_ID = PROVIDER_ID FROM IC_PROVIDER WHERE NAME_EN = 'IP-Telecom'
SELECT @PROVIDER_ID 
IF @PROVIDER_ID IS NOT NULL 
BEGIN
	PRINT 'INFO: deleting IC Provider with provider_id equals %1!...', @PROVIDER_ID
	DELETE FROM IC_PROVIDER WHERE PROVIDER_ID = @PROVIDER_ID
END
PRINT 'INFO: creating...'
INSERT INTO IC_PROVIDER (
NAME_EN, NAME_RU, 
WEBSITE, 
SMTP_AVAILABLE_FLAG, POP_AVAILABLE_FLAG,WEB_MAIL_AVAILABLE_FLAG, IMAP_AVAILABLE_FLAG 
) 
VALUES ( 
'IP-Telecom', 'IP-Телеком', 
'www.i.com.ua', 
1, 1, 0, 0 
)
SELECT @PROVIDER_ID = @@IDENTITY
PRINT 'INFO: IC Provider is created. provider_id is %1!', @PROVIDER_ID
14 фев 06, 23:05    [2356520]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ggv
Member

Откуда:
Сообщений: 1810
ну впору курсы для начинающих здесь открывать.
А может, поставите вопрос по-другому - что почитать?
Так ссылок есть здесь море, может, кто и повторит их, если лень искать.
Но вот с такими вот вопросами - я не знаю как надо, читать не буду, покажите мне, как это сделать - только очень спокойные и терпеливые люди (gardenman, Viktor) могут ответить.
А мы, нервные горячие парни, вряд ли :)
15 фев 06, 11:01    [2357525]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ggv
Member

Откуда:
Сообщений: 1810
О!
Я щас 10К строк сырцов Сишных выложу, кто-нить мне их на Java переведет?
Самом влом Java учить, там все не так, как на Сях.
Может, начнем с малого, по функциям отдельным?
15 фев 06, 11:02    [2357536]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Тогда лучше перенаправлять к кулинарной книжке (http://mysite.verizon.net/Graeme_Birchall/id1.html).

Переменные можно объявлять внутри compound-блока (BEGIN ... END или BEGIN ACOMIC END).

Вместо
SELECT ... INTO :xxx
используйте там
SET xxx = (SELECT ... )

читая про командный процессор (DB2CLP), обязательно обратите внимание на сепараторы и с опцию -t, которую придётся использовать в виде -tdSEPARATOR,

напр.
файл XXX.DB2

CONNECT TO dbname USER username USING somepassword
@
BEGIN ATOMIC
DECLARE xxx INTEGER;
SET xxx = (SELECT 1 FROM zzz);
END
@


запускать как
db2 -f XXX.DB2 -td@ -v
15 фев 06, 14:44    [2359063]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Причём db2 (командный процессор) пускается из db2cmd,
реально строчка запуска будет чем-нибудь вроде

db2cmd/c db2 -f XXX.DB2 -td@ -v

или с вариациями

(напр., из db2cmd запустить Far, а из Far'а уже db2 -f XXX.DB2 -td@ -v)
15 фев 06, 14:48    [2359081]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Maxim Ragozin
Member

Откуда: New York, NY
Сообщений: 50
Victor спасибо за инфу. Лед тронулся (да еще как).
Наступный вопрос. Можно ли настроить DB2 так чтобы в дополнение к UNIX user list, брать их список из какого-н. внешнего источника. По мере предпочтения - internal to database, внешний фаил, LDAP.
15 фев 06, 17:55    [2360247]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ппм
Guest
для *nix - без проблем.
Только не DB2 надо настраивать.
А ОС.
Чтобы аутентифицировала юзера из нужного источника.
Если используете PAM - настраиваете его.
Задача то тривиальна для sys admin.
Прочитайте главу по безопастности в DB2, чтобы понять концепцию.
15 фев 06, 17:59    [2360262]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Maxim Ragozin
Member

Откуда: New York, NY
Сообщений: 50
Да с UNIX-ом то все понятно. Для своего личного сайта все настроил, да и пользователя добавить нет проблем. Согласовывать ведь ни скем не надо. А вот на работе у клиента, секьюрити никак не может понять - как можно созадть корпоротивного пользователя у котороге нет SSN (уже вторая неделя пошла)
15 фев 06, 18:29    [2360388]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Herr Developer
Guest
ggv
О!
Я щас 10К строк сырцов Сишных выложу, кто-нить мне их на Java переведет?
Самом влом Java учить, там все не так, как на Сях.
Может, начнем с малого, по функциям отдельным?

Неужели на Java переходим.
Кто-бы мог подумать
15 фев 06, 19:32    [2360558]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Maxim Ragozin
Можно ли настроить DB2 так чтобы в дополнение к UNIX user list, брать их список из какого-н. внешнего источника. По мере предпочтения - internal to database, внешний фаил, LDAP.
Про это не в курсе (хотя слово LDAP я где-то видел и какие-то штуки были в v8 обещаны) - мне никогда не было нужно.
15 фев 06, 22:59    [2360908]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ggv
Member

Откуда:
Сообщений: 1810
Herr Developer
ggv
О!
Я щас 10К строк сырцов Сишных выложу, кто-нить мне их на Java переведет?
Самом влом Java учить, там все не так, как на Сях.
Может, начнем с малого, по функциям отдельным?

Неужели на Java переходим.
Кто-бы мог подумать

Не. Не переходим.
Но если кто-нить переведет - интересно бы посмотреть, что получится.
Но вот часть логики уйдет на Message Broker в виде Message Flows, при чем часть из них интересно бы сделать User Defined Node. На Сях, конечно.
Прикольно - распространять функционал в виде User Defined Nodes для Message Broker, который клиент сам может связать в Message Flows в любой последовательности, или не связать.
16 фев 06, 09:19    [2361364]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Кстати,
1. сравнение и присваивание возможно "векторами", наподобие
SET (locvar1, locvar2, locvar3) = (SELECT fld1, fld2, fld3
  FROM sometable
  WHERE (xfld1, xfld2) = (param1,param2)
);
Если SELECT вернёт 0 строк, присвоятся NULL'ы (а в Oracle надо ловить exception).
Если SELECT может вернуть более 1-й строки, в ряде случаев уместно FETCH FIRST
SET (locvar1, locvar2, locvar3) = (SELECT fld1, fld2, fld3
  FROM sometable
  WHERE (xfld1, xfld2) = (param1,param2)
  ORDER BY 1,2,3
  FETCH FIRST 1 ROW ONLY
);

2. Сколько-нибудь сложную логику (с savepoint и т.п.) можно использовать только внутри хранимых процедур; вне их язык урезан.

3. Полного аналога DBMS_OUTPUT (Oracle) для вывода отладочных сообщений нет, но на developerworks описываются некие суррогаты. Я использую PUT_LINE.
16 фев 06, 10:01    [2361497]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Maxim Ragozin
Member

Откуда: New York, NY
Сообщений: 50
Victor спасибо.

День №2. Преподнес сюрприз в виде
>[Error] Script lines: 1-435 ------------------------
 DB2 SQL error: SQLCODE: -101, SQLSTATE: 54001, SQLERRMC: null
 Message: The statement is too long or too complex. 

 [Executed: 2/15/06 9:11:34 PM EST ] [Execution: 0/ms]

Скрипт небольшой - всего 15К. Аналогичный в 6КВ и на 213 строк - выполнился без проблем.

Увеличение stmtheap в 2 раза не к чему не превели. Рестарт сервера делал. Может еще что-н. увеличить и растянуть?
16 фев 06, 17:51    [2364482]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2550
Не стесняйтесь и увеличьте stmtheap в 10 раз. Или в 20. Пока ошибка не пропадёт. Если она хочет увеличения stmtheap, то пусть же она это и получит.
16 фев 06, 21:52    [2365202]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
Maxim Ragozin
Member

Откуда: New York, NY
Сообщений: 50
А как вообще распределяеться память между базами данных кон. запущены на одном экземпляре(instance)? Я видел что там есть параметры отвечающее за память на обоих уровнях - и на уровне инстанса и на кровне баз даныых.
16 фев 06, 22:50    [2365319]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ggv
Member

Откуда:
Сообщений: 1810
на developerworks есть прекрасная статья о распределении памяти, с рисунками :)
Приду на работу - кину ссылку.
17 фев 06, 07:54    [2365686]     Ответить | Цитировать Сообщить модератору
 Re: Начинаем изучать DB2  [new]
ggv
Member

Откуда:
Сообщений: 1810
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0406qi/
Ну и это тоже может пригодится (упреждая следующий вопрос :)
http://www-128.ibm.com/developerworks/db2/library/techarticle/0304chong/0304chong.html
17 фев 06, 15:03    [2368143]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить