UpGrade Базы с изменением структуры таблиц

 
0
 
Oracle
ava
Се ля ви | 27.05.2005, 17:37
Дано:

Есть какая-то программа версии 1.0. Для неё есть скрипт для оракла, который создал структуру этой базы. Программа с ним сконнектилась и долго работала в боевом режиме.

Вышла новая версия программы - 2.0 . В ней структура базы немного (!!!) изменена (предположительно, поля только добавлены - типы полей не изменены и поля не удалались). Для неё так же имеется скрипт, создающий новую структуру.

Версия прошла тестовую эксплуатацию и её база какие-то данные уже содержит.

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

Пока всё это делаю в-ручную и есть ощущение, что займёт 2-3 дня. Есть ли какие-нибудь утилиты, которые могут мне в этом помочь?

P.S. У всех знакомых, кто занимается базами, спрашивал - никто не знает. Может, тут кто-то поможет?.. :(
Comments (7)
ava
LSD | 27.05.2005, 17:46 #
Цитата
Задача: сравнить структуры базы, выявить различия, перенести данные из первой версии во вторую, дополнив те поля, которые не достают (новые поля) и скопировать данные из первой боевой базы туда, дополнив их данными из второй базы для тех полей, которые в первой - отсутствовали.

Не понял, как нужно дополнять реальные данные (те которые из первой базы)? Данными из второй тестовой?

Перенести можно например создав database link и выполнив простой insert, если же требуется некая програмная доработка данных, то можно попробовать написать PL/SQL процедуру.
ava
Се ля ви | 27.05.2005, 18:28 #
Цитата (LSD @ 27.5.2005, 17:46)
Не понял, как нужно дополнять реальные данные (те которые из первой базы)? Данными из второй тестовой?

Угу. Если там несколько разных значений, то устроит первое попавшееся (скажем, поле первой записи при сортировке по первичному ключу)
ava
LSD | 27.05.2005, 18:37 #
Я так и не понял, можно ли это реализовать простым SQL запросом, можно приблизительный пример?
ava
Се ля ви | 27.05.2005, 18:54 #
Цитата (LSD @ 27.5.2005, 18:37)
Я так и не понял, можно ли это реализовать простым SQL запросом, можно приблизительный пример?

Вообще-то это движок форума.

Старый форум уже работает пол-года и вот - вышла новая версия движка с немного изменённой БД.

Вот файл со структурой старой базы:
ava
Се ля ви | 27.05.2005, 18:56 #
Вот файл со структурой новой базы:
added later:
В новой базе немного записей есть и думаю, что к данным от старой можно прибавить в новых полях эти и ничего страшного не будет.

Проблема - перейти на новый движок. Хотелось бы сделать это автоматически - разве нету для этого специальных средств? :(
ava
LSD | 28.05.2005, 19:16 #
Я взял для примера две таблички
create table forum_old.mvnforumMessageFolder
(
FolderName VARCHAR2(30) not null,
MemberID INT not null,
FolderOrder SMALLINT not null,
FolderCreationDate TIMESTAMP not null,
FolderModifiedDate TIMESTAMP not null,
primary key (FolderName, MemberID)
);

CREATE TABLE forum_new.mvnforumMessageFolder
(
FolderName VARCHAR2(30) not null,
MemberID INT not null,
FolderOrder SMALLINT not null,
FolderStatus INT not null,
FolderOption INT not null,
FolderType INT not null,
FolderCreationDate TIMESTAMP not null,
FolderModifiedDate TIMESTAMP not null,
primary key (FolderName, MemberID)
);

забил туда тестовые данные и перенес данные из схемы forum_old в forum_new
SQL> select * from forum_old.mvnforummessagefolder;

FOLDERNAME MEMBERID FOLDERORDER FOLDERCREATIONDATE FOLDERMODIFIEDDATE
---------- -------- ----------- ------------------------ ------------------------
FOLDER 1 11 11.01.01 00:00:00,000000 11.01.01 00:00:00,000000
FOLDER 2 22 12.02.02 00:00:00,000000 12.02.02 00:00:00,000000
FOLDER 3 33 13.03.03 00:00:00,000000 13.03.03 00:00:00,000000
FOLDER 4 44 14.04.04 00:00:00,000000 14.04.04 00:00:00,000000
FOLDER 5 55 15.05.05 00:00:00,000000 15.05.05 00:00:00,000000


SQL> select * from forum_new.mvnforummessagefolder;

FOLDERNAME MEMBERID FOLDERORDER FOLDERSTATUS FOLDEROPTION FOLDERTYPE FOLDERCREATIONDATE FOLDERMODIFIEDDATE
---------- -------- ----------- ------------ ------------ ---------- ------------------------ ------------------------
FOLDER 1 1 1 1 1 01.01.20 00:00:00,000000 01.01.20 00:00:00,000000
FOLDER 2 2 2 2 2 02.02.02 00:00:00,000000 02.02.02 00:00:00,000000
FOLDER 3 3 3 3 3 03.03.03 00:00:00,000000 03.03.03 00:00:00,000000


SQL> update forum_new.mvnforummessagefolder n
2 set
3 n.folderorder = (select folderorder from forum_old.mvnforummessagefolder o where o.foldername = n.foldername and o.memberid = n.memberid),
4 n.foldercreationdate = (select foldercreationdate from forum_old.mvnforummessagefolder o where o.foldername = n.foldername and o.memberid = n.memberid),
5 n.foldermodifieddate = (select foldermodifieddate from forum_old.mvnforummessagefolder o where o.foldername = n.foldername and o.memberid = n.memberid)
6 where
7 n.foldername in (select foldername from forum_old.mvnforummessagefolder) and
8 n.memberid in (select memberid from forum_old.mvnforummessagefolder);

3 строк обновлено.

SQL> select * from forum_new.mvnforummessagefolder;

FOLDERNAME MEMBERID FOLDERORDER FOLDERSTATUS FOLDEROPTION FOLDERTYPE FOLDERCREATIONDATE FOLDERMODIFIEDDATE
---------- -------- ----------- ------------ ------------ ---------- ------------------------ ------------------------
FOLDER 1 11 1 1 1 11.01.01 00:00:00,000000 11.01.01 00:00:00,000000
FOLDER 2 22 2 2 2 12.02.02 00:00:00,000000 12.02.02 00:00:00,000000
FOLDER 3 33 3 3 3 13.03.03 00:00:00,000000 13.03.03 00:00:00,000000

если базы находятся в разных то надо использовать database link.
ava
Се ля ви | 31.05.2005, 14:14 #
LSD, спасибо большое!

Хотя ващет, это я стормозил - как выяснилось, там запрятанный в одной папке, поставлялся скрипт для перехода. Вобщем, задача отпала, но встать ещё где-нибудь может smile
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit