Показать сообщение отдельно
Старый 09.06.2011, 17:28   #1  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Скрипт для переноса данных Ax3.0 (Oracle) - Ax2009 (MSSQL)
Возможно данный скрипт окажется полезным тем кто решит перенести данные из Oracle в MSSQL при переходе на новую версию.

В принципе, этот скрипт так же может перенсти данные из ORACLE в SQL в той же версии Axapta.
(Возможно, потребуются нектоторые изменения)

Данный скрипт был написан для конвертации Oracle --> SQL, хотя может использоваться (с изменениями конечно) как альтернатива утилиты
AxDbUpgrade при переносе данных из MSSQL (AX 3.0, Ax 4.0) в MSSQL (5.0) - потребуются более существенные изменения.

При этом :
- Не нужна подготовка исходной базы данных (можно делать сколь угодно много "тестовых" переносов данных, так как исходная база используется только на чтение)
- Весь перенос данных происходит в один заход, при этом происходят все необходимые этапы (Преобразование Unicode, Выравнивание влево, конвертация DateTime, конвертация типов int--> int64, конвертация спец символов Orale пустой строки в "")
- Переносятся только те данные которые используются в новой версии.
Например ряд таблиц, типа DataBaseLog, Xref*, SalesParm* и так далее при переносе пропускаются, что так же экономит время.
(есть возможность указать коды таблиц, которые переносить не нужно. Системные таблицы, Логи... Если кому будет интересно - могу приложить список...)

Скрипт лишь наполняет "пустую", подготовленную заранее базу данных Ax2009 данными, в уже существующие таблицы Ax2009 из базы Ax 3.0 средствами SQL (Bulk Copy).

При этом происходит сравнивание таблиц SQLDictionary исходной и итоговой базы,
и переносятся данные в соответствии с кодами таблиц и полей, даже если они были переименованы в новой версии Аксапта.
Заполняются данными "новые" поля RecVersion.
Конвертируются RecId из Int в int64

После работы скрипта остается лишь реиндексировать базу (скрипт удаляет индексы для ускорения переноса данных), так как база до этого уже полностью была синхронизована.

Скрипт позволяет перенести базу 150 GB за
- 9 часов при одно поточном запуске
- 4 часа (ели запустить скрипт в 3-х потока одновременно на разных серверах.)

+ 4 часа на полную индексацию...

Данный скрипт был использован для переноса реальных данных, ошибок вроде бы, пока не всплыло (прошло уже пол года).
Единственное - кажется что то напутал с часовыми поясами при конвертации date + time --> dateTime...

Для переноса нужно
1. Подготовить "чистую", пустую базу данных "новой" Аксапты (Ax2009), проведя синхронизацию на "рабочем" приложении.
(можно заливать данные и в "старую" базу, "поверх" старых данных но это будет несколько дольше, так как придется каждый раз удалять старые данные)

2. Указать настройки подключения к старой базе (Oracle) и новой (По умолчанию используется доменная аутентификация, можно применить и аутентификацию sql server)

3. На запускаемом сервере должны быть установлены:
- Net Framework
- Компоненты доступа ADO.NET для Oracle и SQL (Обычно они устанавливаются вместе с клиентской частью Oracle и MSSQL)

Скрипт написан в Visual Studio 2008, прилагается проект со всеми исходниками.

На выходе - консольное приложение.

В текст программы вставлены мои комментарии - они должны помочь разобраться.
Вложения
Тип файла: zip AxDbUpgrade07.zip (13.6 Кб, 163 просмотров)
За это сообщение автора поблагодарили: Wamr (5), Vadik (1), Logger (16), gl00mie (5).