Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Портирование DB2 / 8 сообщений из 8, страница 1 из 1
07.06.2002, 05:33
    #32031993
petr13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
Как здесь многолюдно :).
На ответ сильно не расчитываю, но все таки. Сталкнулся с проблемой портирования DB2 v7.2. Нужно перенести базу с
платформы Intel/W2k на Sparc/Sun. Попытка сделать это в лоб,
через backup и restore провалилась, хотя в свое время для
Informix это у меня проскочило за один день.
Люди добрые, дайте совет.
...
Рейтинг: 0 / 0
18.06.2002, 06:16
    #32032999
gena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
В доке написано что бэкапы платформозависимы. Пробуй IMPORT/EXPORT команды. С ними проблем быть не должно...
...
Рейтинг: 0 / 0
23.06.2002, 06:36
    #32033543
petr13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
К сожелению процедуры экспорта - импорта тащат только данные. А есть еще процедуры, триггера. Backup в DB2 не может быть платформенно независимым принципиально. Так как хранимые процедуры в DB2 есть фактически не объект базы данных, а объект сервера, и соотвественно платформенно зависимы. Так на NT это dll'ки, а под UNIX это библиотека. Я нашел продукт DBARTSian, который этими вопросами занимается значительно лучше, чем средства DB2, но там тоже есть маленькие проблемы. В основном достает ошибка c кодом 3306N.
Я за жто время уже стал, можно сказать специалистом по миграции DB2, правда очень маленьким :)
...
Рейтинг: 0 / 0
24.06.2002, 05:16
    #32033569
gena
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
Не вижу проблем - создай скрипт БД и все SP/Triggers готовы. А данные перетаскиваются IMPORT/EXPORT/LOAD

Я конвертил с SQL Server to DB2 - вот это был процесс!
...
Рейтинг: 0 / 0
28.06.2002, 14:12
    #32034280
passm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
В версии 7.X есть Generate DDL - создает набор SQL предложений для создания таблиц, триггеров etc.
Пробовал - понравилось, только ручками кое-что в скрипте пришлось менять, но это уже "производственные" нужды :)
...
Рейтинг: 0 / 0
03.07.2002, 03:35
    #32034835
petr13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
Gene:
Увы, все не так просто. Скрипт с хранимой процедурой,
выполнявшейся на одной платформе, может на другой не выполниться. Я на эти грабли наступил, при переносе с
W2K на Solaris. W2K больше шалостей допускает.
Кроме того, для создания части процедур, необходимо предварительно запустить некоторые из них. Ну вот так
вот у нас сделанно. Понятно, что винить то особенно
некого, как говорил Воробей из фильма Александр Невский - сам ковал, не бог дал. Но тем неменее
...
Рейтинг: 0 / 0
04.07.2002, 03:10
    #32035047
Gena G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
Скрипт с хранимой процедурой, выполнявшейся на одной платформе, может на другой не выполниться. Я на эти грабли наступил, при переносе с W2K на Solaris. W2K больше шалостей допускает.

Можно пример?

как говорил Воробей из фильма Александр Невский

Я русские фильмы уже лет 5 почти не смотрю. И жить легче, поверь :)
...
Рейтинг: 0 / 0
04.07.2002, 03:55
    #32035052
petr13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Портирование DB2
Gene: ну я и остальные тоже не смотрю. :)
А насчет процедуры, пожалуйста:
DROP SPECIFIC PROCEDURE KZK.SQL020319115706790
~
CREATE PROCEDURE KZK.GET_AU_STRUCT (OUT P_RESULT INT)
LANGUAGE SQL
------------------------------------------------------------------------
--
-- П.А0.01.20.001 Версия 2 от 11.02.2002
-- Набор состава ДСЕ
-- ГСА
-- последняя модификация 09.03.2002
--
------------------------------------------------------------------------
P1: BEGIN
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE L_LEVEL INTEGER DEFAULT 0;
DECLARE L_RCOUNT INTEGER;

-- Обработчик ошибок
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SET P_RESULT = SQLCODE;

DECLARE CONTINUE HANDLER FOR NOT FOUND
SET P_RESULT = SQLCODE;
-- По умолчанию все нормально
SET P_RESULT = 0;

-- Declare global temporary table
-- Ошибки набора состава
DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_STRUCT_ERR (
ID_STRUCT INTEGER,
ID_AU INTEGER,
LEVEL SMALLINT,
ID_UNIT INTEGER,
ID_PART INTEGER,
ID_DEPT INTEGER,
NROUTE SMALLINT,
AMOUNT_UNIT DOUBLE,
AMOUNT DOUBLE)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

-- Набранный состав
DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_STRUCT (
ID_STRUCT INTEGER,
ID_AU INTEGER,
LEVEL SMALLINT,
ID_UNIT INTEGER,
ID_PART INTEGER,
FIRST_DEPT INTEGER,
ID_DEPT INTEGER,
LAST_NDEPT SMALLINT,
NROUTE SMALLINT,
AMOUNT_UNIT DOUBLE,
AMOUNT DOUBLE)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

-- Промежуточная таблица для набора состава
DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_STRUCT_WORK (
ID_STRUCT INTEGER,
LEVEL SMALLINT,
ID_AU INTEGER,
ID_UNIT INTEGER,
ID_PART INTEGER,
ID_SRC INTEGER,
AUTHOR CHAR(1),
NROUTE SMALLINT,
FIRST_DEPT INTEGER,
LAST_DEPT INTEGER,
LAST_NDEPT SMALLINT,
COUNT INTEGER,
AMOUNT_UNIT DOUBLE,
AMOUNT DOUBLE)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

-- формирование свернутых маршрутов
CALL KZK.CONVOLUTION_ROUTES();

-- Набираем состав
INSERT INTO SESSION.TMP_STRUCT_WORK
SELECT
ROOT.ID AS ID_STRUCT,
0 AS LEVEL,
ROOT.ID_AU,
ROOT.ID_AU AS ID_UNIT,
ROOT.ID_AU AS ID_PART,
AU.ID_SRC,
AU.AUTHOR,
ROOT.NROUTE,
RT.FIRST_DEPT,
RT.LAST_DEPT,
RT.LAST_NDEPT,
RT.COUNT,
0,
ROOT.AMOUNT
FROM
SESSION.TMP_FOR_STRUCT ROOT
LEFT JOIN SESSION.FIRST_LAST_DEPT RT ON RT.ID_AU = ROOT.ID_AU
AND RT.NROUTE = ROOT.NROUTE
AND RT.LAST_DEPT = ROOT.ID_DEPT
LEFT JOIN KZK.T_AU AU ON AU.ID = ROOT.ID_AU
WHERE
((AU.AUTHOR <> 'Т' AND ROOT.FORTEH = 0) OR (ROOT.FORTEH <> 0));

-- Итерации по уровням вложенности при наборе состава изделия
LEVEL_LOOP:
REPEAT

INSERT INTO SESSION.TMP_STRUCT_WORK
SELECT
PARENT.ID_STRUCT,
PARENT.LEVEL + 1,
PARENT.ID_AU,
PARENT.ID_PART AS ID_UNIT,
SPEC.ID_PART AS ID_PART,
AU.ID_SRC,
AU.AUTHOR,
RT.NROUTE,
RT.FIRST_DEPT,
PARENT.FIRST_DEPT AS LAST_DEPT,
RT.LAST_NDEPT,
RT.COUNT,
PARENT.AMOUNT,
CASE
WHEN ROOT.FORTEH = 1 THEN PARENT.AMOUNT * SPEC.AMOUNT_T
ELSE PARENT.AMOUNT * SPEC.AMOUNT
END AS AMOUNT
FROM
SESSION.TMP_STRUCT_WORK PARENT
JOIN SESSION.TMP_FOR_STRUCT ROOT ON ROOT.ID = PARENT.ID_STRUCT
JOIN KZK.T_SPEC SPEC ON SPEC.ID_UNIT = PARENT.ID_PART
JOIN KZK.T_AU AU ON AU.ID = SPEC.ID_PART
LEFT JOIN SESSION.FIRST_LAST_DEPT RT ON RT.ID_AU = SPEC.ID_PART
AND RT.LAST_DEPT = PARENT.FIRST_DEPT
WHERE
-- Брем очередной слой
PARENT.LEVEL = L_LEVEL
-- Отслеживаем зданный уровнь вложенности
AND PARENT.LEVEL < ROOT.LEVEL
-- Ошибочные маршруты не разузловываем
AND ((ROOT.NROUTE IS NULL) OR (PARENT.NROUTE > 0))
-- Коды принадлежности, которые не разузловываем (покупные)
AND PARENT.ID_SRC NOT IN (SELECT ID_SRC FROM SESSION.TMP_SRC SR WHERE SR.ID_STRUCT = PARENT.ID_STRUCT)
-- Берем ДСЕ только с заданным приоритетом
AND SPEC.PRIORY = ROOT.PRIORY
-- Технологический или конструкторский состав
AND SPEC.FORTEH * ROOT.FORTEH = ROOT.FORTEH
-- Коды классов ДСЕ, которые не учитывается (документация, покупные и т.д.)
AND (AU.ID_CLS1 IS NULL
OR (AU.ID_CLS1 NOT IN (SELECT ID_CLS1 FROM SESSION.TMP_CLS1 CL WHERE CL.ID_STRUCT = PARENT.ID_STRUCT)))
-- Авторство для конструкторского состава
AND ((AU.AUTHOR <> 'Т' AND ROOT.FORTEH = 0) OR (ROOT.FORTEH <> 0))
-- Принадлежность к заданному цеху (цех первый и единственный в маршруте)
AND ((ROOT.ID_DEPT1 = PARENT.FIRST_DEPT AND (PARENT.LEVEL = 0 OR PARENT.COUNT = 1))
-- Если цех задан
OR (ROOT.ID_DEPT1 IS NULL)
-- Только для технологического состава с учетом маршрутов
OR (ROOT.FORTEH = 0) OR (ROOT.NROUTE IS NULL));

-- посмотрим число обработанных в INSERT записей
GET DIAGNOSTICS L_RCOUNT = ROW_COUNT;

-- номер слоя для следующей итерации
SET L_LEVEL = L_LEVEL + 1;

-- условие выхода из цикла
UNTIL L_RCOUNT = 0

END REPEAT LEVEL_LOOP;

-- заполнение таблицы ошибок
INSERT
INTO SESSION.TMP_STRUCT_ERR
SELECT
ST.ID_STRUCT,
ST.ID_AU,
ST.LEVEL,
ST.ID_UNIT,
ST.ID_PART,
ST.LAST_DEPT,
ST.NROUTE,
ST.AMOUNT_UNIT,
ST.AMOUNT
FROM
SESSION.TMP_STRUCT_WORK ST
JOIN SESSION.TMP_FOR_STRUCT ROOT ON ROOT.ID = ST.ID_STRUCT
WHERE
-- ошибка - превышен уровень вложенности - возможен цикл
ST.LEVEL = ROOT.LEVEL
-- ошибки маршрутов
OR ((ROOT.NROUTE IS NOT NULL) AND (ST.NROUTE IS NULL))
-- в спецификации не задана входимость
OR ST.AMOUNT IS NULL;

-- формируем результат
INSERT
INTO SESSION.TMP_STRUCT
SELECT
ST.ID_STRUCT,
ST.ID_AU,
ST.LEVEL,
ST.ID_UNIT,
ST.ID_PART,
ST.FIRST_DEPT,
ST.LAST_DEPT,
ST.LAST_NDEPT,
ST.NROUTE,
ST.AMOUNT_UNIT,
ST.AMOUNT
FROM
SESSION.TMP_STRUCT_WORK ST
JOIN SESSION.TMP_FOR_STRUCT ROOT ON ROOT.ID = ST.ID_STRUCT
WHERE
-- кроме ошибoк маршрутов
(ROOT.NROUTE IS NULL OR ST.NROUTE IS NOT NULL)
-- кроме неизвестной потребности
AND ST.AMOUNT IS NOT NULL;

IF P_RESULT = 100 THEN
SET P_RESULT = 0;
END IF;

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


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