Разработки / Как решить проблему с генерацией ID новых объектов в ODI on 14 March 2008 13:45
ODI генерирует ID новых объектов инкрементально, но при этом не использует встроенные в СУБД Sequences, а хранит последнее сгенерированной значение в таблицах SNP_ID и SNP_ENT_ID репозиториев.
Когда производится импорт данных из резервоной копии, то данные в этих таблицах могут сбится. Чтобы починить репозитории надо установить значения ID_NEXT в максимальное значение ID — без последних трёх цифр для каждого объекта ODI.
Это можно сделать и руками, но я предлагаю скрипт, который сгенерирует запросы, нужные для обновления репозиториев:
Для SNP_ID
select 'update SNP_ID set ID_NEXT = (select substr(max('||
a4.column_name||'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||') where ID_TBL=''' ||a3.id_tbl ||
''' and ID_NEXT != (select substr(max('||a4.column_name||
'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||')
 GO'  q from SNP_ID a3, (select a2.table_name, a2.COLUMN_NAME
from dba_constraints a1, DBA_CONS_COLUMNS a2
where a1.OWNER = 'ODI_REP' and a1.CONSTRAINT_TYPE ='P' and a2.OWNER = 'ODI_REP'
and a1.CONSTRAINT_NAME = a2.CONSTRAINT_NAME) a4 where a3.id_tbl = a4.table_name
Для SNP_ENT_ID
select 'update SNP_ENT_ID set ID_NEXT = (select substr(max('||
a4.column_name||'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||') where ID_TBL=''' ||a3.id_tbl ||
''' and ID_NEXT != (select substr(max('||a4.column_name||
'),1,LENGTH(max('||A4.COLUMN_NAME||
'))-3) from '||a3.id_tbl||')
 GO'  q from SNP_ENT_ID a3, (select a2.table_name, a2.COLUMN_NAME
from dba_constraints a1, DBA_CONS_COLUMNS a2
where a1.OWNER = 'ODI_REP' and a1.CONSTRAINT_TYPE ='P' and a2.OWNER = 'ODI_REP'
and a1.CONSTRAINT_NAME = a2.CONSTRAINT_NAME) a4 where a3.id_tbl = a4.table_name
Author: Макс

Tags: Sunopsis, ODI

Add comment / Comments (180)
Rating: 3.00 / Rate 1 2 3 4 5

    Search: 
    Hello, Guest. ( Login / Create account )