09.06.2011, 17:28 | #1 |
Участник
|
Скрипт для переноса данных 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, прилагается проект со всеми исходниками. На выходе - консольное приложение. В текст программы вставлены мои комментарии - они должны помочь разобраться. |
|
|
За это сообщение автора поблагодарили: Wamr (5), Vadik (1), Logger (16), gl00mie (5). |
09.06.2011, 17:45 | #2 |
Модератор
|
Одно небольшое уточнение - иногда XXXParmXXX таблицы нужно переносить - в них хранится запрос для пакетной разноски
__________________
-ТСЯ или -ТЬСЯ ? |
|
14.06.2011, 14:53 | #3 |
Участник
|
Цитата:
все пакетные задачи по разноске завершены. Кроме того на момент переноса данных в старой базе данных не должно происходить никаких изменений, иначе перенесенные данные будут противоречивы. Вот список таблиц, данные которых я не переносил из 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 |
|