Чтение изменений объектов за период 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		Reddom Участник со стажем
 
  Вступление в Клуб: 25.01.2013
  | 
		
			
				 Вт Июл 22, 2014 09:10   Чтение изменений объектов за период | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Доброго времени суток, разработчики.
 
 
Прошу помочь в вопросе:
 
Необходимо проработать механизм для оповещения внешних систем об изменениях в некоторых ТБП, например клиента, договора, адреса и т.п. – сейчас очевидны решения:
 
1. обработка изменений (добавлений/удалений) в триггерах на таблицах. Есть минус в замедлении dml операций.
 
2. чтение job`ом значений из  aud.ibs_valsh. В таблице есть индекс по объекту, соответственно для ускорения запроса предполагаю, что необходимо будет создать индекс по полям id либо time. 
 
 
Может быть у вас уже есть какие-то испытанные решения?
 
 
Можно конечно пойти oracle`овыми методами с нагрузкой системы через dbms_logmnr или dbms_wm. Пока даже не анализировал их. Надеюсь найти способ более очевидный. | 
			 
		  | 
	 
	
		  | 
	 
	
		Damir Участник - экстремал
 
  Вступление в Клуб: 29.03.2013
  | 
		
			
				 Вт Июл 22, 2014 10:05   Re: Чтение изменений объектов за период | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Reddom пишет: | 	 		  
 
1. обработка изменений (добавлений/удалений) в триггерах на таблицах. Есть минус в замедлении dml операций.
 
 | 	  
 
 
В триггер надо не саму обработку изменений сувать, а только помечать запись как измененную.
 
Как помечать - возможны варианты: 
 
- поле-флажок выставлять, а обработчик изменений потом скидывать будет флаг. Минус подхода - при удалении флаг выставить не получится.
 
- Таблица Ид-ов измененных записей (тогда можно Ид удаленной записи получить). 
 
Как определять изменившиеся записи - возможны варианты:
 
- заставляете программистов помечать изменившиеся записи (при вызове операций). Очень жестокий метод
 
- вешаете триггер на вставку-изменений-удаление записи и помечаете эти записи
 
- для неленивых - в триггере анализируете OLD и NEW значения полей - тогда 'холостые' апдейты не будут восприниматься как изменений записи
 
- ну и хит сезона - триггер заполняет подобную табличку - все поля + операция (вставка-удаление-изменение) + время и кто изменил. Это уже на детальный аудит больше похоже. | 
			 
		  | 
	 
	
		  | 
	 
	
		Reddom Участник со стажем
 
  Вступление в Клуб: 25.01.2013
  | 
		
			
				 Вт Июл 22, 2014 15:03    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Тут нужно учитывать момент, что таблицы дистрибутивные (не одна) и хотелось бы общий механизм и все таки может быть какие-то более "легальные" подходы, чем делать oracle`овые триггеры. | 
			 
		  | 
	 
	
		  | 
	 
	
		svn Профи
 
  Вступление в Клуб: 04.02.2008
  | 
		
			
				 Вт Июл 22, 2014 16:10    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| стандартными средствами журналирвоания реквизитов не пробовали обойтись? | 
			 
		  | 
	 
	
		  | 
	 
	
		Alexsey Эксперт
 
  Вступление в Клуб: 06.09.2007
  | 
		
			
				 Вт Июл 22, 2014 16:15    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				В клиентах есть операция "Создать триггеры истории изменений реквизитов" затем просто следить за наполнением таблицы с историей на появление новых записей. _________________ всегда есть как минимум 2 выхода | 
			 
		  | 
	 
	
		  | 
	 
	
		Reddom Участник со стажем
 
  Вступление в Клуб: 25.01.2013
  | 
		
			
				 Вт Июл 22, 2014 16:29    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | svn пишет: | 	 		  | стандартными средствами журналирвоания реквизитов не пробовали обойтись? | 	  
 
 
Журналирование кладет изменения в таблицу aud.ibs_valsh, о которой я писал. В таблице есть проблема, что индекс есть только по id объекта, а мне нужен список объектов на дату и время. Также в таблице есть патиции, но они месячные, т.е. запрос будет все равно долго искать.
 
 
 	  | svn пишет: | 	 		  | В клиентах есть операция "Создать триггеры истории изменений реквизитов" затем просто следить за наполнением таблицы с историей на появление новых записей. | 	  
 
 
Мне нужно фиксировать изменения не только в клиентах, но и в других ТБП, например, договора. Да и в РБО нет этой операции, она только в ИБСО. | 
			 
		  | 
	 
	
		  | 
	 
	
		Reddom Участник со стажем
 
  Вступление в Клуб: 25.01.2013
  | 
		
			
				 Чт Июл 31, 2014 08:54    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Ответ от ЦФТ. пишет: | 	 		  
 
К сожалению, о готовых решениях с подобным функционалом мне не известно, скорее всего таких задач ранее не ставилось.
 
Что касается создания дополнительных индексов на таблице ibs_valsh, то каких-либо серьезных рисков на данный момент не вижу. Конечно стоит помнить, что дополнительные индексы будут требовать больше дискового пространства для хранения. | 	  
 
 
Реализовал через индекс на тесте. Работает быстро, проблем пока не обнаружено, кроме той что индекс необходимо создать под пользователем AUD. | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |