AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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).
Старый 09.06.2011, 17:45   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от someOne Посмотреть сообщение
Переносятся только те данные которые используются в новой версии.
Например ряд таблиц, типа DataBaseLog, Xref*, SalesParm* и так далее при переносе пропускаются, что так же экономит время
Одно небольшое уточнение - иногда XXXParmXXX таблицы нужно переносить - в них хранится запрос для пакетной разноски
Миниатюры
Нажмите на изображение для увеличения
Название: lateselection.png
Просмотров: 441
Размер:	10.2 Кб
ID:	6914  
__________________
-ТСЯ или -ТЬСЯ ?
Старый 14.06.2011, 14:53   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 423 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Vadik Посмотреть сообщение
Одно небольшое уточнение - иногда XXXParmXXX таблицы нужно переносить - в них хранится запрос для пакетной разноски
Да конечно, предполагается что перед переносом данных
все пакетные задачи по разноске завершены.

Кроме того на момент переноса данных в старой базе данных
не должно происходить никаких изменений, иначе перенесенные данные будут противоречивы.

Вот список таблиц, данные которых я не переносил из Ax3.0 в Ax2009
(При использовании данного скрипта, конечно же)

Коды этих таблиц следует внести в таблицу "delSkipTableList" перед запуском.
Возможно, кто то захочет добавить еще таблицы в этот список при необходимости.

X++:
13-Batch
342-PurchParmLine
343-PurchParmTable
360-SalesParmTable
361-SalesParmLine
513-xRefNames
515-xRefPaths
516-xRefReferences
535-xRefTableRelation
554-xRefTypeHierarchy
855-SysUserLog
1061-SysTraceTable
1263-XMLPortalLog
1293-SalesParmSubTable
1428-SalesParmUpdate
1431-PurchParmUpdate
1432-PurchParmSubTable
1608-SysTraceTableSQL
1609-SysTraceTableSQLTabRef
1610-SysTraceTableSQLExecPlan
65493-UNKNOWN
65495-UNKNOWN
65496-UNKNOWN
65497-UNKNOWN
65498-UNKNOWN
65499-UNKNOWN
65500-UNKNOWN
65501-UNKNOWN
65502-UNKNOWN
65503-UNKNOWN
65504-UNKNOWN
65505-SysRecordLevelSecurity
65508-DatabaseLog
65509-CompanyDomainList
65510-DomainInfo
65513-SqlStatistics
65514-SysConfig
65515-SqlStorage
65516-SystemSequences
65517-SqlParameters
65518-SqlDictionary
65524-PrintJobPages
65525-PrintJobHeader
Теги
axdbupgrade, oracle, sql

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Миграция AX3(Oracle) -> AX2009(MSSQL) Shamil DAX: Администрирование 16 11.01.2010 18:36
MSSQL и Oracle BokarevSS DAX: Администрирование 24 04.12.2009 15:20
axcoder: AxPath pugin for Tabax which works with Ax3, Ax4, Ax2009 Blog bot DAX Blogs 0 08.11.2008 02:11
Обновление данных при переходе на Ax3 SP5 - ошибка. Караул ! Logger DAX: Программирование 1 28.04.2008 15:34
"On MSSQL" or "On Oracle" alpine DAX: Прочие вопросы 5 19.03.2002 11:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:04.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.