AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

View Poll Results: Кто как решает проблемы с расползанием идентификаторов при Prod и Stage окружения в аксапте 2012.
Не используем stage (переносим через xpo, model, и.т.п.) 1 11.11%
Не разрешаем переносить проекты без релизов. Только stage. 2 22.22%
Сохраняем идентификаторы при переносе заполняя legacyId элементов. 2 22.22%
Пересоздаем stage при необходимости (если идентификаторы разъехались) 0 0%
Пересоздаем stage перед каждым релизом. 3 33.33%
Не используем 2012 4 44.44%
Свой вариант (в комментариях к теме) 0 0%
Multiple Choice Poll. Voters: 9. You may not vote on this poll

 
 
Thread Tools Search this Thread Display Modes
Old 15.06.2023, 14:15   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,985 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
? Расхождение идентификаторов Prod и Stage окружений для ax2012 (способы исправления/недопущения)
Привет всем.
Хотел провести опрос, кто как решает проблемы с расползанием идентификаторов при Prod и Stage окружения в аксапте 2012.

Если что, проблема описана тут
https://download.microsoft.com/downl...vironments.pdf

Quote:
If you use model store files to move metadata between two environments, it is critical to preserve common element IDs between both environments. To preserve common IDs between staging and production, adhere to the following guidelines:
• Initialize the model store of the staging system by importing the model store file from the production environment.
• Do not import new elements (by using XPOs or model files) or create new elements on the production system; otherwise, they will have a different element ID than they have on the staging system.
• Do not delete and re-import models to avoid generating new element IDs. Instead, import models without deleting the existing ones to update the metadata.
• Do not import a model store to the staging environment from a source other than the production system’s model store.
If you do not follow these guidelines, you will have to recreate the staging environment from the production environment.
т.е. официально, Microsoft предлагает только пересоздавать Stage если разъехались идентификаторы.

А как их еще можно выровнять или недопустить их расползания?

Просьба проголосовать.
Old 15.06.2023, 15:03   #2  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Join Date: 01.04.2004
Location: Москва
давным давно делал доработку экспорта для заполнения LegacyId. и все новые элементы создавались в одном приложении - ну в общем жили как в 2009

однако с 12-кой работал всего один проект (менее полугода) и возможно просто не успел тогда примириться с "новой реальностью"
This post has been rated by: Logger (10).
Old 15.06.2023, 15:16   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,985 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by db View Post
давным давно делал доработку экспорта для заполнения LegacyId. и все новые элементы создавались в одном приложении - ну в общем жили как в 2009
А! т.е. в момент экспорта проекта из DEV проходили по всем его элементам и заполняли LegacyId ?

Прикольно.
Но ведь в самом дев идентификаторы от этого не меняются. Вы их тоже перебивали ? Или оставляли как есть ?
Old 15.06.2023, 15:30   #4  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Join Date: 01.04.2004
Location: Москва
Quote:
Originally Posted by Logger View Post
А! т.е. в момент экспорта проекта из DEV проходили по всем его элементам и заполняли LegacyId ?

Прикольно.
Но ведь в самом дев идентификаторы от этого не меняются. Вы их тоже перебивали ? Или оставляли как есть ?
Да именно так. xpo модифицировался после экспорта (насколько я помню влезть в процедуру экспорта элемента не получилось) и добавлялся LegacyId для всех имеющих id элементов. В исходном приложении откуда производился экспорт ничего не менялось. Но создавать новые элементы разрешалось (административно с битьем по рукам) только в DEV и этот DEV-id потом переползал без изменений во все среды

Собственно повторил проверенную годами схему как жили в 2009, просто вернув выпиленную MS возможность экспортировать с id элементов
Old 15.06.2023, 18:04   #5  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by Logger View Post
А как их еще можно выровнять или недопустить их расползания?
А можно такой вопрос... может весьма наивный... ? )

Чем плох простой бекап / восстановление БД model со STAGE на PROD?

Сценарий:
1. Имеем STAGE + PROD с выровненными ID
2. Переносим XPO на PROD с новыми объектами. Собираем CIL (можно инкрементно). ID-шники разъехались
3. Делаем бекап / восстановление БД model со STAGE на PROD с последующей сборкой полного CIL. ID-шники снова выровнялись.

Ключевой минус - очевидно, что релиз через modelStore позволяет сократить время простоя рабочей базы в момент релиза. В указанном мною примере фактически ещё полчаса требуется на сборку CIL.
Однако, если данное решение рассматривать в первую очередь, как решение по выравниванию ID - то это решение вполне жизнеспособно. Также оно жизнеспособно в тот момент, когда XPO-шники в "горящем" режиме могут накатываться весьма часто.

Обновление PROD -> DEV можно вполне делать вместе с БД. В крайнем случае можно воспользоваться скриптом https://github.com/dodiggitydag/AX-2...model%20db.sql (проверял; рабочий. Но его нужно запускать строго при остановленном АОСе - иначе он некорректно отработает)
__________________
Возможно сделать все. Вопрос времени
Old 15.06.2023, 18:09   #6  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by db View Post
Но создавать новые элементы разрешалось (административно с битьем по рукам) только в DEV и этот DEV-id потом переползал без изменений во все среды
Если говорить про релиз через modelStore - то там всё хуже. ID-шники считаются "разъехавшимися", если я просто индекс создал на существующей таблице на PROD. Например, в рамках оптимизации производительности. Т.е. даже создание индекса в такой ситуации должно создаваться где-то на условном DEV / STAGE - в общем, на приложении, на котором генерятся ID-шники
__________________
Возможно сделать все. Вопрос времени
Old 15.06.2023, 18:46   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,985 / 3273 (117) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by sukhanchik View Post
Чем плох простой бекап / восстановление БД model со STAGE на PROD?
Ничем не плох. Работает хорошо. Даже быстрее чем через modelStore. (импорт при помощи modelStore посредством axUtil занимает около 6 - 7 минут. Восстановление из бекапа средствами SQL 10-30 секунд. Только требует больше прав на SQL для пользователя которые делает релиз.

Quote:
Originally Posted by sukhanchik View Post
2. Переносим XPO на PROD с новыми объектами. Собираем CIL (можно инкрементно). ID-шники разъехались
CIL собирать не обязательно. ID-ники могут разъехаться в момент переноса.

Quote:
Originally Posted by sukhanchik View Post
3. Делаем бекап / восстановление БД model со STAGE на PROD с последующей сборкой полного CIL. ID-шники снова выровнялись.
ID-ники между Stage и Prod выровнялись конечно, но не это нас волнует, так как при этом разъехались ID-ники между базами Prod (бизнесданные) и Prod_Model (приложение) и тогда при синхронизации можно потерять данные. В этом то и проблема !
Для некоторых сценариев возможно удаление столбца в БД и создание снова с дефолтными значениями. Итп.
В некоторых случаях ядро аксапты достаточно умное и само перебивает идентификаторы в SQLDictionary, проставляя их как в модели (т.е. удаления столбца в табличке не происходит). Но если у нас идентификатор используется в табличках с бизнесданными (такие случаи я описал выше в статье) - то там остаются предыдущие значения. Логическая целостность нарушена.

Quote:
Originally Posted by sukhanchik View Post
XPO-шники в "горящем" режиме могут накатываться весьма часто.
Вот именно. Именно поэтому мы и старались выработать "гибридный" режим подготовки релиза, чтобы можно было между релизами накатывать срочные проекты через Xpo, не делая строгих запретов. Но при этом приходится пересоздавать Stage модель перед подготовкой релиза, как и рекомендовано в документации от Microsoft. Плюс получается что нельзя в любое время между релизами накатывать проект на Stage, но возникает момент времени (за 1-2 дня до релиза) когда Stage пересоздали, а затем в авральном режиме (если проектов к переносу много) занимаемся только переносом их на Stage, при этом запрещая переносить на Prod через xpo. Это не очень удобно. Вот хочется найти способ, чтобы и идентификаторы Prod и Stage выровнять и авралов не создавать.

Last edited by Logger; 15.06.2023 at 19:16.
Old 15.06.2023, 21:02   #8  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Quote:
Originally Posted by Logger View Post
Ничем не плох. Работает хорошо. Даже быстрее чем через modelStore. (импорт при помощи modelStore посредством axUtil занимает около 6 - 7 минут. Восстановление из бекапа средствами SQL 10-30 секунд. Только требует больше прав на SQL для пользователя которые делает релиз.
Если дело только в правах, то этот вопрос решается достаточно просто:
1. Права на бекап / восстановление - это относительно небольшие права и их выдать (без права доступа к файлу бекапа со стороны Windows) не очень сложно. Есть определенные заморочки в части доступа к физическим файлам на диске, но они решаются (придется немного покорпеть в части составления прав).
2. Есть универсальный способ выдачи прав ... без их выдачи. Организуется запланированное задание (Task в Windows Sheduler), которое запускается от имени служебного пользователя с правами. Обычному пользователю даются лишь права на запуск этого задания (и само собой без выдачи пароля на этого служебного пользователя). У такого подхода есть минус - перечень команд, который выполняется шедулером сложно вставить в свой скрипт (нужно ожидать изменение статуса шедулерного задания). Поэтому выдача прав на бекап / восстановление без прав доступа к файлу со стороны Windows (т.е. когда пользователь, выполняющий релиз не может достучаться до этого файла) - проще, чем организация бекапа через шедулер.
Quote:
Originally Posted by Logger View Post
CIL собирать не обязательно
Да, согласен. Я упомянул про эту процедуру, как про обязательную - без которой перенос может быть бессмысленен (например, если переносится код для пакетника)
Quote:
Originally Posted by Logger View Post
так как при этом разъехались ID-ники между базами Prod (бизнесданные) и Prod_Model (приложение) и тогда при синхронизации можно потерять данные
Не... ну тут надо понимать "степень запущенности". Для лечения насморка антибиотики необязательны, а при воспалении лёгких без них уже не обойтись .
Переносить через XPO таблицы и поля - суть есть зло, потому что:
1. Это всё равно потребует рестарт АОСа в общем случае
2. Инкрементный CIL не всегда поможет (например, при удалении поля точно)
При этом остальные объекты (классы, формы, привилегии и т.д.) спокойно можно переносить с пониманием, что релиз со STAGE ничего не потеряет.
При этом те же таблицы / поля в принципе "лечатся" скриптом, на который и Вы и я - давали ссылку на Github. Т.е. если вот ну очень прям "надо-надо" было перенести табличку / поля - можно перенести, но потом запланировать релиз со STAGE с применением скрипта по выравниванию ID-шников без потери данных. Но в целом - просто стараться исключать ситуаций переноса таблиц / полей через XPO.

Quote:
Originally Posted by Logger View Post
Именно поэтому мы и старались выработать "гибридный" режим подготовки релиза, чтобы можно было между релизами накатывать срочные проекты через Xpo, не делая строгих запретов
.

Ну вот ещё со времен 2009-й (а там ещё "многое чего было по-старому") - я привык к таким правилам:
1. Если накат обновления требуется выполнить сегодня из-за того, что встанут какие-то критичные процессы в компании (платежи, продажи) - то обновление делается через XPO. Если туда добавляются таблички / поля - то снимается копия приложения (PREPROD), на него накатывается XPO и оно релизится.
2. Плановые релизы выполняются еженедельно, если выполняется одно из условий:
а) в течении недели хотя бы одна модификация была бы перенесена на STAGE
б) в течении недели хотя бы одна модификация была бы перенесена через XPO на PROD
3. Внеплановый релиз может быть сделан, если был накатан XPO с таблицей, чтобы поскорее привести ID-шники в норму.

Всё это делалось применительно к приложению, которое должно было работать в режиме 24х7. Если есть окна в работе системы - то релиз можно делать и чаще.
Проблемы массового переноса на STAGE были; поэтому от идеи переноса кода на STAGE непосредственно перед релизом отказались, но XPO накатывали на PREPROD и STAGE одновременно (для экстренных XPO).

Из побочных эффектов - т.к. иногда STAGE уходил на релиз внепланово - то некоторые модификации появлялись раньше запланированного времени. Поэтому в TFS (Team Foundation Server - сейчас это Azure DevOps) каждая задача, которая переносилась на STAGE переводилась в статус что-то типа "К обновлению" (точно не помню) с обязательным описанием действий при релизе (джобик запустить или еще чего). Т.о. при внеплановом или плановом релизе было понятно - какие задачи находятся на STAGE и какие действия нужно выполнить сразу после наката обновления.
__________________
Возможно сделать все. Вопрос времени
This post has been rated by: Logger (10).
Tags
ax2012, ax2012r3, axutil, idkeep, sysupgradeexportids

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Выравнивание идентификаторов (Prod --> Test --> Dev и Prod --> Stage) в Axapta 2012 R3 Logger DAX: Программирование 12 25.10.2023 20:26
AX2012, D365FO: Способы ограничения финансовых аналитик sukhanchik DAX: Функционал 7 09.03.2021 02:58
dynamicsaxse: November 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 15.11.2018 09:11
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 10:20.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.