30.06.2010, 08:11 | #1 |
Участник
|
Вопрос по удалению компании из Аксапты
Всем привет!
Вопрос: при удалении компании из аксапты происходит ли ее реальное удаление из SQL базы? Или записи в бд только помечаются как "неактивные" и перестают отображаться в аксапте? Если данные только помечаются как неактивные, то как их реально удалить из базы SQL? Может кто уже сталкивался с подобным? Используется AX 4.0, база крутится на SQL 2008. |
|
30.06.2010, 09:16 | #2 |
Модератор
|
По выбранной компании удаляются данные из всех таблиц.
Удалить компанию DAT не получится: Цитата:
Компания DAT не может быть удалена, поскольку содержит необходимую системную информацию.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. |
|
30.06.2010, 09:56 | #3 |
Участник
|
Удаление компании, при большом количестве данных, процесс достаточно длительный, и никак себя для пользователя не проявляющий.
Создается полное впечатление что все взвисло. Часто так и думают, что, мол, все повисло, надо что-то делать, и завершают процесс Аксапты принудительно. После этого, компания оказывается удалена (данные в DataArea), но данные для этой компании во всех таблицах удалится не успевают. Остается мусор, и иногда достаточно объемный. Если процесс не прерывать и дождаться успешного завершения удаления компании, то данные компании во всех таблицах должны быть удалены из базы. |
|
30.06.2010, 10:03 | #4 |
Участник
|
ясно. спасибо за ответ
|
|
30.06.2010, 14:49 | #5 |
Участник
|
Цитата:
Похоже опять надо идти в Аксапту и проверять. |
|
30.06.2010, 15:28 | #6 |
Участник
|
В 4-ке ещё не пробовал, но в 3-ке наблюдал неоднократно, что штатное удаление компании оставляет в базе достаточно много хвостов в виде данных во многих таблицах с dataareaid = id удалённой компании. Т.е. для полного удаления данных компании после процедуры в Аксе приходилось ещё дочищать средствами SQL.
__________________
Здесь могла быть Ваша реклама! |
|
30.06.2010, 16:12 | #7 |
int 20h
|
Всем привет!
Частенько сталкиваясь с этой бедой используем SQL скриптик на той Базе Данных откуда приходится удалить компанию. Выкладываю на обозрение может кому пригодится. X++: declare @name nvarchar(128) declare tables_cursor cursor for select [name] from sysobjects where type = 'U' open tables_cursor fetch next from tables_cursor into @name while @@fetch_status = 0 begin --print @name exec('delete ' + @name + ' where dataareaid in ( select id from dataarea where id like ''ТУТ ИМЯ УДАЛЯЕМОЙ КОМПАНИИ например tst'' )' ) fetch next from tables_cursor into @name end close tables_cursor deallocate tables_cursor
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
|
За это сообщение автора поблагодарили: Qaz Qwerty (1). |
30.06.2010, 16:24 | #8 |
Участник
|
Не покатит, если есть виртуальные компании.
|
|
30.06.2010, 16:47 | #9 |
int 20h
|
Согласен на счет виртуальных, но если их нет - можно юзать
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
30.06.2010, 17:18 | #10 |
Member
|
А я не согласен. Удаление конкретной реальной компании, IMHO, не должно сопровождаться удалением данных, общих для нескольких компаний (о виртуальных ли компаниях идет речь или о таблицах, данные в которых хранятся не в разрезе компаний).
С мусором от удаления компаний встречался в 3.0. Я тогда сделал заключение, что если удалить компанию в двухзвенке, то при остановке АОСа он сливает свой кэш в базу, не зная о том, что ее уже нет (по крайней мере мусор у меня не создавался на локальной инсталляции, но регулярно создавался на рабочей БД). Вообще я не уверен точно. Но мусор я заметил в тех таблицах, для которых включено кеширование (типа клиентов, поставщиков, плана счетов), и только в тех, с которыми наверняка могли работать в день удаления компании. При работе через АОС в 4.0 эффект с мусором мне не удалось воспроизвести. Нужно попробовать такой финт если есть кластер из АОСов. Что касается удаления... я тогда пробовал просто импортировать пустой .DAT файл (кажется, создавал новую компанию и выгружал все данные в .DAT файл) в компанию с удалением компании перед импортом. В смысле это непрограмистский вариант.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
30.06.2010, 19:11 | #11 |
Участник
|
В своё время написал скрипт для удаления мусора. С виртуальными компаниями работало тоже корректно, но давно не тестировал
Может, пригодится... Код: ----------------------------------------- -- М.Андреев 28.04.2005 -- Скрипт удаляет все данные "чужих" компаний, которых не должно быть в текущей базе -- Запускать нужно от пользователя-владельца таблиц аксапты ----- BEGIN OF SCRIPT ------------------ declare @name varchar(1000); DECLARE CT CURSOR FOR select name from dbo.sysobjects where xtype = 'U' and id in (select id from dbo.syscolumns where name = 'DATAAREAID'); OPEN CT WHILE 1=1 begin FETCH FROM CT INTO @name IF @@fetch_status=-1 BREAK; IF @@fetch_status=-2 CONTINUE; exec ('delete from '+@name+ ' where NOT DATAAREAID IN (select id from DATAAREA)'); PRINT @name; end; DEALLOCATE CT --------- END OF SCRIPT ---------- |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
30.06.2010, 20:06 | #12 |
Модератор
|
Я сейчас наверное какую-нибудь глупость спрошу, но не проще ли штатно заново создать компанию и удалить, чем терзать БД всякими скриптами с форумов?
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
01.07.2010, 00:36 | #13 |
Гость
|
А мне вот интересно, в каком случае на рабочем (не тестовом) приложении возникает необходимость удаления компании?
|
|
01.07.2010, 01:31 | #14 |
Участник
|
Цитата:
В 2.5 и 3-ке действительно данные вместе с компанией не удалялись. Самый простой путь - создать новую группу определений "Всё", выгрузить пустышку и тут же загрузить её в нужную компанию, а потом уже саму компанию удавить. В 4-ке данные уже удаляются в транзакции. |
|
01.07.2010, 02:26 | #15 |
Member
|
Цитата:
Сообщение от AX2009
...
рабочем (не тестовом) приложении возникает необходимость удаления компании? ... Эффективным это было только на ранних этапах промышленной эксплуатации и до нее, пока размер базы небольшой. Дублирование (до 5.0) работало очень быстро, не требовалось лазить в MS SQL для дублирования базы. По мере роста размера базы такой подход терял эффективность и стало быть целесообразность. Раз или два путем дублирования и удаления оригинала компания переименовывалась.
__________________
С уважением, glibs® |
|
01.07.2010, 12:23 | #16 |
Участник
|
Коллеги, поделитесь опытом, а что делать в Ax 2009? Только скрипты в СУБД?
Проблема описана тут.
__________________
Ivanhoe as is.. |
|