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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.07.2009, 12:32   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Truncate части таблицы
Коллеги подскажите, возможно средствами оракла грохнуть быстро часть таблицы ?
Стоит задача почистить salesDataBaseLog.

Самый просто вариант это сделать truncate - но нужно часть записей (10% объема сохранить)
DELETE_from - не подходит, так как сильно напрягается движок БД.

Возможен некий гибрид этих операций ? Чтобы удалить только часть таблицы, но так же ненапряжно для БД как при truncate ?
Старый 30.07.2009, 12:43   #2  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
скопировать нужную часть в другую таблицу, старую инфу грохнуть, а потом перелить нужную ;-)
За это сообщение автора поблагодарили: Logger (1).
Старый 30.07.2009, 12:47   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да, рабочий способ. Спасибо.
Но так влом заниматься переливом, созданием, удалением, переименованием.

Попроще есть что-нибудь ?
Старый 30.07.2009, 12:54   #4  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от Logger Посмотреть сообщение
Попроще есть что-нибудь ?
Если для Оракла, то почти также, но быстрей ;-) - expdp таблицы -> truncate -> impdp с условием (where ...)
Других вариантов ИМХО нет - на то он и trunk !
Старый 30.07.2009, 13:15   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Если не уходить в Оракл, не пробовали ли вы попробовать отключить:

X++:
    SalesTable      salesTable;
    ;

    salesTable.skipDatabaseLog(false);
    salesTable.skipAosValidation(false);
    salesTable.skipDataMethods(false);
    salesTable.skipDeleteActions(false);
    salesTable.skipDeleteMethod(false);
    salesTable.skipEvents(false);
    
    delete_from salesTable;
Т.е. тут правда определяющий метод .skipDatabaseLog(false); Остальное так, для наглядности.
Старый 30.07.2009, 13:21   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Медленно и печально, но совершенно незаметно для окружающих, если есть индекс по RecId
X++:
SELECT TOP 1 * 
FROM SysDatabaseLog (NOLOCK)
WHERE CreatedDate < DATEADD(m, -1, GETDATE());
GO
WHILE @@ROWCOUNT > 0
BEGIN
	DELETE FROM SysDatabaseLog
	WHERE RecId IN (SELECT TOP 1000 RecId 
					FROM SysDatabaseLog (NOLOCK)
					WHERE CreatedDate < DATEADD(m, -1, GETDATE()) );
END
GO

Последний раз редактировалось Wamr; 30.07.2009 в 13:23.
Старый 30.07.2009, 13:49   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Если не уходить в Оракл, не пробовали ли вы попробовать отключить:

X++:
    SalesTable      salesTable;
    ;

    salesTable.skipDatabaseLog(false);
    salesTable.skipAosValidation(false);
    salesTable.skipDataMethods(false);
    salesTable.skipDeleteActions(false);
    salesTable.skipDeleteMethod(false);
    salesTable.skipEvents(false);
    
    delete_from salesTable;
Т.е. тут правда определяющий метод .skipDatabaseLog(false); Остальное так, для наглядности.
Да я в принципе такой способ и подразумевал под delete_from - но как показывает практика, он для БД все равно тяжелый. Тяжко ей когда удаляется 90% объема. Видимо она весь его пытается в лог транзакций (или что там у оракла есть) пихать и давится.
Старый 30.07.2009, 15:01   #8  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от egorych Посмотреть сообщение
скопировать нужную часть в другую таблицу, старую инфу грохнуть, а потом перелить нужную ;-)
Зачем же переливать? Можно переименовыть!

А вообще это стандарт для таких ситуаций, лучше не придумаете, тем более что тут нет констрэинтов:
- CTAS (Create Table As Select) нужной части данных
- Drop <table>
- Rename <inter_table> to <table>
- Create <нужные индексы> - в случае Аксапты - синхронизация

Что приятно, в отличие от удаления ещё и "соптимизируется" занимаемое таблицей и её индексами место...
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Logger (3).
Теги
oracle, как правильно, truncate, удаление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересоздание таблицы при синхронизации Serg16 DAX: Администрирование 1 26.08.2009 13:55
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Две таблицы в одном datasource Turetskiy DAX: Программирование 10 16.09.2008 16:35
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Как решить проблему с правами на вновь создаваемые записи таблицы. AY DAX: Прочие вопросы 4 02.10.2003 12:44

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:31.