Экспорт словаря

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Ogeeon
Новичок
Сообщения: 22
Зарегистрирован: 14 апр 2011, 11:46

Экспорт словаря

Сообщение Ogeeon »

Здравствуйте, уважаемые коллеги.
У нас "Галактика" крутится на оракле, мы периодически чистим журнал с загрузкой удалённых записей в первасивоскую базу.
Проблема такого подхода в том, что в словаре отсутствует куча "своих" таблиц, т.к. мы докомпилировали словарь.
Я пытался решить её так: поднял копию базы на тестовом сервере, truncate-нул таблицы скриптом, который сформировал вот так:

Код: Выделить всё

SELECT 'TRUNCATE TABLE GAL.' || XF$NAME||';' from GAL.X$FILES WHERE XF$CODE >200 OR XF$CODE=48 OR XF$CODE=63
union all
SELECT 'TRUNCATE TABLE GAL.x$journal;' from dual
union all
SELECT 'TRUNCATE TABLE GAL.SYS#MEMO;' from dual
union all
SELECT 'TRUNCATE TABLE GAL.' || table_name || ';' from dba_tables where owner='GAL' and table_name like 'J$%'
union all
SELECT 'TRUNCATE TABLE GAL.' || table_name || ';' from dba_tables where owner='GAL' and table_name like 'TMP#%'
union all
SELECT 'commit;' from dual;
потом утилитой exp_dbi вот с такими параметрами

Код: Выделить всё

[Export]
OutFile=d:\dictexp\currdict.dbi
Title='Current dict'
ExpType=0
Components=*
AllowUserTables=ON
создаю файл, который подсовываю утилите btrvinst.
Но она то падает с рантаймом, то говорит, что не может создать DSN: "Database is not compatible for create DSN. Not encoding in DB."
Может, есть более адекватный способ решить эту задачу? Или я чего-то перемудрил?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Экспорт словаря

Сообщение edward_K »

С первасива галактика начиналась. Может быть хватит просто словарные таблы подгрузить из папки dict? с ключами nfs.
Возможно нужно порядок изменить. Про dbi как то был вроде другой способ - через ASQL, но точно не помню. И таблы может не нужно удалять кодами 48 и 63.
Ogeeon
Новичок
Сообщения: 22
Зарегистрирован: 14 апр 2011, 11:46

Re: Экспорт словаря

Сообщение Ogeeon »

Может быть хватит просто словарные таблы подгрузить из папки dict?
У нас сейчас самый свежий словарь - на оракле. Экспортировать я могу, но импорт проходит только в варианте "без замещения". Это не дело.
А Events и Countourevents я чистил, чтобы expdbi их не экспортировала. Всё равно они не нужны для моей цели.
Ogeeon
Новичок
Сообщения: 22
Зарегистрирован: 14 апр 2011, 11:46

Re: Экспорт словаря

Сообщение Ogeeon »

edward_K писал(а): Про dbi как то был вроде другой способ - через ASQL
Где бы посмотреть? Потому что ASQL это вроде как оболочка для выполнения запросов. В .dbf я могу и из Support'a выгрузить по одной таблице.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Экспорт словаря

Сообщение edward_K »

Ogeeon
Новичок
Сообщения: 22
Зарегистрирован: 14 апр 2011, 11:46

Re: Экспорт словаря

Сообщение Ogeeon »

Спасибо, но я именно так и делаю. Приведя параметры exp_dbi в первом сообщении, я опустил список таблиц. Кроме прочего, данные из не-системных таблиц мне не нужны.
Ogeeon
Новичок
Сообщения: 22
Зарегистрирован: 14 апр 2011, 11:46

Re: Экспорт словаря

Сообщение Ogeeon »

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

Код: Выделить всё

select 'INSERT INTO X__FILES(XF$CODE, XF$NAME, XF$OWNERNAME, XF$TITLE, XF$LOC, XF$LOC2, XF$FLAGS, XF$FORMAT, XF$ATTR, XF$PAGESIZE, XF$RECORDFIXED, XF$RECORDSIZE, XF$CHECKSUM, XF$PRIMARYKEYNO, XF$COMPONENT, XF$FLAGS2) VALUES (' || XF$CODE ||', '''|| XF$NAME ||''', '''|| XF$OWNERNAME ||''', '''|| replace(XF$TITLE, '''', '''''') ||''', '''|| XF$LOC ||''', '''|| XF$LOC2 ||''', '|| XF$FLAGS ||', '|| XF$FORMAT ||', '|| XF$ATTR ||', '|| XF$PAGESIZE ||', '|| XF$RECORDFIXED ||', '|| XF$RECORDSIZE ||', '|| XF$CHECKSUM ||', '|| XF$PRIMARYKEYNO ||', '''|| XF$COMPONENT ||''', '|| XF$FLAGS2 ||');' 
from gal.x$files f where XF$CODE>=1000;
select 'INSERT INTO X__FIELDS(XE$CODE, XE$FILECODE, XE$NAME, XE$TITLE, XE$DATATYPE, XE$OFFSET, XE$SIZE, XE$PREC, XE$DEC, XE$ATTR) VALUES (' || XE$CODE ||', '|| XE$FILECODE ||', '''|| XE$NAME ||''', '''|| replace(XE$TITLE, '''', '''''') ||''', '|| XE$DATATYPE ||', '|| XE$OFFSET ||', '|| XE$SIZE ||', '|| XE$PREC ||', '|| XE$DEC ||', '|| XE$ATTR ||');' 
from gal.x$fields f where XE$FILECODE>=1000;
2. Устанавливаем через btrvinst тестовую базу.
3. Внешней утилитой (мне нравится DbVisualizer - даже в бесплатной версии хороший инструмент; но это уж точно дело вкуса) подключаемся к этой тестовой базе и выполяем очистку таблиц

Код: Выделить всё

delete from X__FILES where XF$CODE >= 1000;
delete from X__FIELDS where XE$FILECODE >= 1000;
и загрузку подготовленных описаний.
4. Осталось подменить папку Dict в той базе, куда загружается журнал.

Всё. Собственные таблицы видны, структура галактических актуализирована.
Ответить