Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
GVF112GVF
Guest
FYI ...

Oracle to DB2 Conversion Guide: Compatibility Made Easy -
http://publib-b.boulder.ibm.com/abstracts/sg247736.html?Open

Kind regards,
Vadim.
7 ноя 15, 15:33    [18382903]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
GVF112GVF,

предлагаю выполнить код на Oracle и DB2, сравнить время и предложить сделать что-нибудь, чтобы разница была поменьше.
(этот код взят из HammerDB, и я над ним ещё немного понадругался).

Я знаю, что замена number на integer, bigint и double там, где это имеет смысл, даёт некоторое улучшение, и полагаю, что переписывание кода на DB2-шные inline-функции позволит даже сильно обогнать (именно благодаря инлайнингу). Но если этим не заниматься?

Кстати, нашёл что-то TPC-C-подобное, расчитанное и на DB2: http://sourceforge.net/projects/tpccruner/?source=directory
(сомнительное, правда, потому что написано в стиле типичных Java-программистов - но, с другой стороны, может быть этим и ценно).

К сообщению приложен файл (tpc-c.7z - 6Kb) cкачать
7 ноя 15, 23:04    [18384105]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa,

Я вот пытаюсь перевести базу с Oracle на db2 и ряд вопросов.
(Вроде эту тему можно продолжать ибо она как раз об этом)
Я скачал явовский TPC...а для чего он? в readme написано.

Кстати очень неудобно что нет FAQ как в форуме оракле для новичков,чтобы вхождение было попроще.
(я например научался с поднятием базы(У меня linux) чтоб он порт прослушивал
пока
db2 update dbm cfg using svcename 50000 не сделал.
)

Я присоединился к базе через clpplus
select user from dual

Почему то не работает.
(погуглив)Надо использовать
select user from sysibm.sysdummy1

(а я то хотел нахрапом с оракле на db2 вскочить :-) )

И вот помогите понять парадигму(техническую философию).
Понять schema и user.
В оракле если database user имеет таблицы...это уже как schema.

create user operator identified by pass;



create user shop identified by pass;
connect shop/pass;
create table goods(.....)
grant select,insert,delete,update on goods to operator;


connect operator/pass;
select * from shop.goods

Как мне это в db2 повторить сделать.??
гугл про userа в db2 отвечает ,чтотон связан c linux userом...А
схема
https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000925.html
авторизуется...
Разъясните пожалуйста.
8 ноя 15, 13:19    [18385025]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Если вы создадите базу c Oracle-совместимостью, dual должен быть.
http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html

Что касается
select user from sysibm.sysdummy1
,
запрос
values(USER)
более db2-шный путь. (Здесь и далее под DB2 подразумевается DB2 for Linux,Unix,Windows (LUW))
select 1,2,3 from dual
union all
select 4,5,6 from dual

по-db2-шному более удобно записывать как
values(1,2,3),(4,5,6)

и, чтобы два раза не вставать,
update xxx
set a=x,b=y
where c=z and d=t

можно записать как
update xxx
set (a,b)=(x,y)
where (c,d)=(z,t)

А что касается юзеров, в базе их нет и потому create user тоже нет. Юзеров и группы определяют в операционной системе (кстати, для линуха очень большие ограничения в длине имени - 8 символов, преодолели совсем недавно - в DB2 10.5 fixpak 5). Когда коннектитесь (я традиционно использую connect to база user имя using пароль, хотя в ряде случаев работает connect to base - это как в Oracle connect /), DB2 спрашивает у операционки, есть ли такой с таким паролем, и интересуется также группами, в которых он состоит. Поэтому, в отличие от Oracle, схема и юзер не привязаны друг к другу, можно давать grant'ы несуществующим юзерам, удаление юзера никак не сказывается на базе и т.д. Текущая схема совпадает с именем юзера, её можно менять:
set current schema вашановаятекущаясхема
8 ноя 15, 15:01    [18385237]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Инсталляторов DB2 под линухом два (не считая rpm-пакет) - текстовый и GUI-вый. Второй, запускаемый от root'а, делает работу полностью, а первый, насколько я помню, только частично (т.е. он для любителей поэкономить байты и поработать руками). Я пользуюсь вторым.

TPC-C - http://www.tpc.org/tpcc/default.asp
HammerDB - http://www.hammerdb.com/
8 ноя 15, 15:11    [18385256]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa,
Если вы создадите базу c Oracle-совместимостью, dual должен быть.
http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html

Ну я только начинаю..до таких ньюансов ещё не дорос.(кстати? навскидку не увидел как создать с совместимостью dual)

И ещё для чего TPC?

А что касается юзеров, в базе их нет и потому create user тоже нет. Юзеров и группы определяют в операционной системе

Да..я уже до этого допёр...
Я соединяюсь с db2 любым OS юзером.
И это конечно первый "некомильфо".
Бывают случаи ,что надо просто перекинуть файлы базы данных на другой сервер.
В случае с ораклом нет проблем...тут же всё завелось.
а db2 надо учесть внешние зависимости(в частности os users)
А если юзеров много...запаришься создавать.

Помимо этого дополнительные тёрки между linux admin и admin db2...
Так же в нашей КИС привиллигированный пользователь мог созавать из своего сеанса(хоть из австралии) новых database user...
А тут сложность,которую мне предстоит решить.
8 ноя 15, 15:19    [18385272]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa,
а всё увидел по ссылке выше про tpc
8 ноя 15, 15:23    [18385282]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa
Инсталляторов DB2 под линухом два (не считая rpm-пакет) - текстовый и GUI-вый. Второй, запускаемый от root'а, делает работу полностью, а первый, насколько я помню, только частично (т.е. он для любителей поэкономить байты и поработать руками). Я пользуюсь вторым.

TPC-C - http://www.tpc.org/tpcc/default.asp
HammerDB - http://www.hammerdb.com/


У меня не было gui инстаоятора(db2 express-c)
после запуска в консоле(кстати порадовало,что на русском сообщения были в консоле..)
у меня создалось
/opt/ibm/V10.5/db2

Я создал пользователя ос db2.
под рутом
db2icrt -a server -u db2 db2

su db2
db2start
db2 update dbm cfg using svcename 50000
clpsqplus
create database db2
8 ноя 15, 15:30    [18385299]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
Dual
http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html
ищите в тексте ниже "Enabling to DB2 is as easy as drag and drop", как создавать базу с Oracle-совместимостью.

Коннект любым юзером.
См. по ссылке http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001941.html?cp=SSEPGG_10.5.0/3-6-2-4-21
слово RESTRICTIVE

Перенос юзеров.
а) насколько я понимаю линух, можно даже вырезать кусок файла с юзерами и паролями и вклеить на другой машине (если организационными мерами обеспечить непересекаемость UID и GID; без home-каталогов обойдутся)
б) есть такое слово LDAP - я его не осилил и никогда не пытался, но именно это должно быть ответом на ваш вопрос
в) тёрки с линухадминистратором - это, конечно, плохо, есть море тонкостей, что стоит учесть - что при работе с Oracle, что при работе с DB2, уже даже при начальной установке ОС на сервер, да ещё и до того, а линухадминистраторы, увы...

Инсталляторов в комплекте два - один, вроде бы, db2install, второй db2setup. Был ещё rpm-пакет, где ещё больше ручной работы...
8 ноя 15, 19:14    [18385768]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa,
Благодарю dual заработал
(Вдруг кому то надо будет)
Надо сделать
db2set DB2_COMPATIBILITY_VECTOR=ORA
8 ноя 15, 19:57    [18385889]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
DB2_COMPATIBILITY_VECTOR - как и многое, это серьёзная тема, требующая внимательного изучения. Как минимум, если нужна oracle-совместимость, задавайте ORA *до* создания базы.
8 ноя 15, 20:22    [18385958]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Victor Metelitsa
DB2_COMPATIBILITY_VECTOR - как и многое, это серьёзная тема, требующая внимательного изучения. Как минимум, если нужна oracle-совместимость, задавайте ORA *до* создания базы.


Да наверное, так и есть ибо ранее синтаксис(Number(1)
create table test (id number(1));

Не работало.
А после пересоздания заработало.
8 ноя 15, 20:49    [18386016]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
irbis_al,
Продолжаю изучать совместимость...
Простое..работает
Перешёл к менее банальным вещам.
пакет dbms_sql
Мой оракловый пакет(package body) даже скомпилился...но не отрабатывает.
ошибка.
Спо
SQL0286N  A table space could not be found with a page size of at least "4096"

Более того ...беру стандартый пример с сайта ibm
https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0055145.html#r0055145__desc_tab_dfn?lang=ru
Вот мой код(изменена только 4 строчка select * from table;
(таблица section существует...)
+

BEGIN
  DECLARE handle INTEGER;
  DECLARE col_cnt INTEGER;
  DECLARE col DBMS_SQL.DESC_TAB;
  DECLARE i INTEGER DEFAULT 1;
  DECLARE CUR1 CURSOR FOR S1;

  CALL DBMS_SQL.OPEN_CURSOR( handle );
  CALL DBMS_SQL.PARSE( handle, 
      'select * from section', DBMS_SQL.NATIVE );
CALL DBMS_SQL.DESCRIBE_COLUMNS( handle, col_cnt, col );

  IF col_cnt > 0 THEN
    CALL DBMS_OUTPUT.PUT_LINE( 'col_cnt = ' || col_cnt );
    CALL DBMS_OUTPUT.NEW_LINE();
    fetchLoop: LOOP
      IF i > col_cnt THEN
        LEAVE fetchLoop;
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'i = ' || i );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_name = ' || col[i].col_name );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_name_len = ' || 
          NVL(col[i].col_name_len, 'NULL') );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name = ' || 
          NVL( col[i].col_schema_name, 'NULL' ) );

      IF col[i].col_schema_name_len IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name_len = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name_len = ' || 
            col[i].col_schema_name_len);
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_type = ' || col[i].col_type );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_max_len = ' || col[i].col_max_len );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_precision = ' || col[i].col_precision );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_scale = ' || col[i].col_scale );

      IF col[i].col_charsetid IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetid = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetid = ' || col[i].col_charsetid );
      END IF;

      IF col[i].col_charsetform IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetform = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetform = ' || col[i].col_charsetform );
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_null_ok = ' || col[i].col_null_ok );
      CALL DBMS_OUTPUT.NEW_LINE();
      SET i = i + 1;
    END LOOP;
  END IF;
END;
/



И получаю ту же ошибку на стандартном примере
Ошибка рядом со строкой 1:
SQL0286N  A table space could not be found with a page size of at least "4096"
 that authorization ID "DB2" is authorized to use.

Ну как тут может какого-то ресурса не хватать??? ...у меня в этой тестовой базе "пол таблицы и одна восьмая pl/sql кода."
10 ноя 15, 23:19    [18397564]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
irbis_al,
И тут разобрался...там мелким почерком :-)
Usage notes
This procedure requires a user temporary table space with a page size of 4K; otherwise it returns an SQL0286N error. You can create the user temporary table space with this command:

CREATE USER TEMPORARY TABLESPACE DBMS_SQL_TEMP_TBS


10 ноя 15, 23:24    [18397574]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
По производительности -
между
create table test (id number(1));
и
create table test (id integer);
может быть существенная разница. Надо смотреть, на что "реальное" DB2-шное этот number смапится, у DB2, в отличие от Oracle, довольно много числовых типов с довольно разной точностью и производительностью.

Между
a) PL/SQL-ной процедурой/функцией (а также и SQL/PL-ной процедурой) и
b) SQL/PL-ной функцией с BEGIN ATOMIC..END (или, ещё лучше, вообще без этих скобок, чисто с одним RETURN)

может быть не просто существенная, а гигантская разница в скорости (во втором случае выражения инлайнятся, и это даёт эту разницу). (Очевидно, часть процедур наверняка можно переписать как функции, даже те, у которых много выходных параметров, и при проблемах с производительность имеет смысл это сделать).

То же самое относится к триггерам - они могут инлайниться или нет, в зависимости от того, как написаны.
10 ноя 15, 23:56    [18397635]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
irbis_al
irbis_al,
И тут разобрался...там мелким почерком :-)
Usage notes
This procedure requires a user temporary table space with a page size of 4K; otherwise it returns an SQL0286N error. You can create the user temporary table space with this command:

CREATE USER TEMPORARY TABLESPACE DBMS_SQL_TEMP_TBS




Вот тут даже не знаю что сказать...вчера "заводской" код отрабатывал (имлй отрабатывал)
сегодня запустил базу и мой код и "заводской примерный" что выше в спойлере.(сюда тоже положу)
+

BEGIN
  DECLARE handle INTEGER;
  DECLARE col_cnt INTEGER;
  DECLARE col DBMS_SQL.DESC_TAB;
  DECLARE i INTEGER DEFAULT 1;
  DECLARE CUR1 CURSOR FOR S1;

  CALL DBMS_SQL.OPEN_CURSOR( handle );
  CALL DBMS_SQL.PARSE( handle, 
      'select * from section', DBMS_SQL.NATIVE );
CALL DBMS_SQL.DESCRIBE_COLUMNS( handle, col_cnt, col );

  IF col_cnt > 0 THEN
    CALL DBMS_OUTPUT.PUT_LINE( 'col_cnt = ' || col_cnt );
    CALL DBMS_OUTPUT.NEW_LINE();
    fetchLoop: LOOP
      IF i > col_cnt THEN
        LEAVE fetchLoop;
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'i = ' || i );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_name = ' || col[i].col_name );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_name_len = ' || 
          NVL(col[i].col_name_len, 'NULL') );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name = ' || 
          NVL( col[i].col_schema_name, 'NULL' ) );

      IF col[i].col_schema_name_len IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name_len = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_schema_name_len = ' || 
            col[i].col_schema_name_len);
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_type = ' || col[i].col_type );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_max_len = ' || col[i].col_max_len );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_precision = ' || col[i].col_precision );
      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_scale = ' || col[i].col_scale );

      IF col[i].col_charsetid IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetid = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetid = ' || col[i].col_charsetid );
      END IF;

      IF col[i].col_charsetform IS NULL THEN
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetform = NULL' );
      ELSE
        CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_charsetform = ' || col[i].col_charsetform );
      END IF;

      CALL DBMS_OUTPUT.PUT_LINE( 'col[i].col_null_ok = ' || col[i].col_null_ok );
      CALL DBMS_OUTPUT.NEW_LINE();
      SET i = i + 1;
    END LOOP;
  END IF;
END;
/




Выдаёт блин ошибку
Ошибка рядом со строкой 1:
SQL0577N  User defined routine "SYSIBMADM.DBMS_SQL.IMP_DESCRIBE_COLUMNS"
(specific name "DBMS_SQL_IMP_DESCRIBE_COLUMNS") attempted to modify data but
 was not defined as MODIFIES SQL DATA.


Вообще не понятно...вчера вечером всё работало ...потушил базу db2stop штатно.
сегодня хотел продолжить изучение..такая лажа.
И на сайте по этой ошибке ничего толком то и нет.

Более того...перелогиниваюсь...запускаю этот же скрипт что выше и уже всё заработало...что за глюки...или я что-то не так делаю.
11 ноя 15, 13:23    [18399678]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
irbis_al,
Вот ещё небольшой такой взгляд глазами "ораклиста"
Выполняю скрипт
declare
lclob clob;
begin
lclob:=get_sqllitesript.get_sql('select name from section','section');
end;
/


Получаю ошибку
SQL0171N  The statement was not processed because the data type, length or value
of the argument for the parameter in position "1" of routine
 "DBMS_LOB.WRITE_CLOB" is incorrect. Parameter name: "LOB_LOC".


И вот "некомильфо" не выдаются весь стек ошибки.
Что где вызывалось на кокой строке в пакете и на какой последней строке в пакете споткнулся.
Оракле бы выдал типа

error on anonymouse pl/sql blok on line 2
error on get_sqllitesript.get_sql on line 12
error on get_sqllitesript.procone on line 237
error on line 432 on "DBMS_LOB.WRITE_CLOB" 
11 ноя 15, 14:08    [18400106]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
irbis_al,
По этой проблеме
Ошибка рядом со строкой 1:
SQL0577N User defined routine "SYSIBMADM.DBMS_SQL.IMP_DESCRIBE_COLUMNS"
(specific name "DBMS_SQL_IMP_DESCRIBE_COLUMNS") attempted to modify data but
was not defined as MODIFIES SQL DATA.


Я определил в чём дело.(влруг кто-то за мной из ораклистов будет пытаться переехать,чтоб дважды на грабли не наструпали)

я сделал вначале после запуска
select @ПРЕЦЕДУРА,что возвращает CLOB@  from dual.

По оракловскому.(я хотел сразу результат увидеть)
В этой процедуре было внутри dbms_sql.describe_cloumn.
Так по-оракловскому db2 не позволяет.
И дальше она блокирует все вызовы dbms_sql.describe_cloumn.(в том числе и штатные)
Пока не сделаешь rollback;
11 ноя 15, 14:34    [18400269]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Заливаю данные из оракловой базы и столкнулся с проблемой.
У меня есть таблица товаров
В ней есть Символьный уникальный столбец kod и barcode(штрихкод)
И эти столбцы могут быть в определённых записях пустыми.!!!!
(где есть штрихкод там пустой код)
Где есть код там как правило пустое поле штрихкод.
И вместе они могут быть пустыми.

И вот чудеса ,-DB2 меня обязывает,
для того чтобы создать unique constraint мне надо указать что столбец
NOT NULL....что в принципе, нарушает фундаментальную логику моей КИС.

Я погуглил и там советуют сделать unique index....
НО ...в DB2 он создаётся по типу INTEGER,
а у меня эти поля Varchar2. (и numberом их сделать нельзя ибо там есть и символы)
12 ноя 15, 21:16    [18409151]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4868
irbis_al,

И что, вот это не работает?
create table test_uniq(c1 varchar2(10), c2 varchar2(10)) in userspace1;
create unique index test_uniq on test_uniq(c1, c2) exclude null keys;
insert into test_uniq values ('',''), ('', '');
12 ноя 15, 22:02    [18409299]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Mark Barinstein
irbis_al,

И что, вот это не работает?
create table test_uniq(c1 varchar2(10), c2 varchar2(10)) in userspace1;
create unique index test_uniq on test_uniq(c1, c2) exclude null keys;
insert into test_uniq values ('',''), ('', '');


Благодарю получилось
ключевое слово тут exclude null keys;
В оракле такого выражения нет а в гугле что-то не попадалось.
И Вычисляемый столбец рекомендовали и триггер.
12 ноя 15, 22:25    [18409388]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Вот тоже не нашёл(возможно плохо искал..но примеры с таким же решением)
Можно ли организовать,чтобы DB2 мне "прокричало" ограничение.
чтоб пользователь сразу знал,где накосячил.
Сейчас мне если уникальный код нарушить отвечает
 unique constraint or unique index identified by "3"

а уникальный штрихкод нарушить отвечает
 unique constraint or unique index identified by "4"

цифры 3 и 4 вообще ни о чём не говорят.
Оракле например отвечает типа
constraint BARCODEUNIQUE  not valid

constraint KODUNIQUE  not valid
12 ноя 15, 22:42    [18409443]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4868
irbis_al,

+ $ db2 "? SQL0803N"



SQL0803N One or more values in the INSERT statement, UPDATE statement,
or foreign key update caused by a DELETE statement are not valid
because the primary key, unique constraint or unique index
identified by "<index-id>" constrains table "<table-name>" from
having duplicate values for the index key.

Explanation:

The INSERT or UPDATE object table "<table-name>" is constrained by one
or more UNIQUE indexes to have unique values in certain columns or
groups of columns. Alternatively, a DELETE statement on a parent table
caused the update of a foreign key in a dependent table "<table-name>"
that is constrained by one or more UNIQUE indexes. Unique indexes might
support primary keys or unique constraints defined on a table. The
statement cannot be processed because completing the requested INSERT,
UPDATE or DELETE statement would result in duplicate column values. If
the index is on an XML column, the duplicate values for the index key
may be generated from within a single XML document.

Alternatively, if a view is the object of the INSERT or UPDATE
statement, it is the table "<table-name>" on which the view is defined
that is constrained.

If "<index-id>" is an integer value, the index name can be obtained from
SYSCAT.INDEXES by issuing the following query:

SELECT INDNAME, INDSCHEMA
FROM SYSCAT.INDEXES
WHERE IID = <index-id>
AND TABSCHEMA = 'schema'
AND TABNAME = 'table'

where 'schema' represents the schema portion of "<table-name>" and
'table' represents the table name portion of "<table-name>".

Только имена схемы и таблицы в запросе - в верхнем регистре.
12 ноя 15, 23:30    [18409593]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
Victor Metelitsa
Member

Откуда: Тюмень
Сообщений: 2549
irbis_al
Благодарю получилось
ключевое слово тут exclude null keys;
В оракле такого выражения нет а в гугле что-то не попадалось.
И Вычисляемый столбец рекомендовали и триггер.

exclude null keys - для DB2 это довольно новая вещь, поэтому и не попадалось. И в Oracle, конечно, такого нет, потому что там все индексы такие. Кстати, если помните смысл ораклячьего create index ... compess XXX; у DB2 индексы такие по дефолту, т.е. на неуникальном индексе напротив одного index key может лежать куча RID'ов, что может сэкономить кучу места на диске.
13 ноя 15, 09:56    [18410477]     Ответить | Цитировать Сообщить модератору
 Re: Oracle to DB2 Conversion Guide: Compatibility Made Easy  [new]
irbis_al
Member

Откуда: Симферополь
Сообщений: 1545
Добрый день..
Подскажите а что я ещё должен знать для вот такой ситуации ,которая меня напрягла.
У меня не вся таблица товаров залилась в DB2 и я решил удалить.
delete from table goods

В таблице 20640 записей...совсем немного.
И субъективно заметил ,что db2 (у меня db2 express-c d в режиме compatible=ORA) удаляет уж очень долго.
Провёл эксперимент в бесплатном оракле xe(поставленному по дефолту без натроечного тюнига)
удаляет моментально 0.200 sec.
В db2 express-c тоже поставленной по дефолту(я пока вообще не знаю как её тюнить) более 3х минут .
Что мне тут надо подкрутить?
14 ноя 15, 15:46    [18417167]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить