Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Добрый день!
Помогите пожалуйста решить следующую проблему:

Есть в MS SQL 2008 R2 линк к Oracle 11g.
В базе MS SQL есть таблица
CREATE TABLE [dbo].[PROPVALUE](
	[BOLD_ID] [int] NULL,
	[BOLD_TYPE] [smallint] NULL,
	[BU_MAX] [float] NULL,
	[BU_MIN] [float] NULL,
	[BU_ORIGIN] [float] NULL,
	[FORMATTYPE] [int] NULL,
	[TEXTVALUE] [varchar](255) NULL,
	[ENUMITEM] [int] NULL,
	[CONTEXT] [int] NULL,
	[PROPHAVINGOBJECT] [int] NULL,
	[PROPDEF] [int] NULL,
	[OPTIONS] [int] NULL
) ON [PRIMARY]

В базе Oracle есть идентичная таблица.
На таблицу в MS SQL есть тригер
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create TRIGGER [dbo].[CHANGE_PROPVALUE] ON [dbo].[PROPVALUE]
AFTER INSERT, DELETE, UPDATE
as 
BEGIN
 
  SET NOCOUNT ON;

	IF EXISTS(SELECT * FROM DELETED) AND EXISTS(SELECT * FROM INSERTED)
	update MISORA..DBMISIMP.PROPVALUE  
	set [BOLD_TYPE] = INSERTED.BOLD_TYPE,
	[BU_MAX] = INSERTED.BU_MAX,
	[BU_MIN] = INSERTED.BU_MIN,
	[BU_ORIGIN] = INSERTED.BU_ORIGIN,
	[FORMATTYPE] = INSERTED.FORMATTYPE,
	[TEXTVALUE] = INSERTED.TEXTVALUE,
	[ENUMITEM] = INSERTED.ENUMITEM,
	[CONTEXT] = INSERTED.CONTEXT,
	[PROPHAVINGOBJECT] = INSERTED.PROPHAVINGOBJECT,
	[PROPDEF] = INSERTED.PROPDEF,
	[OPTIONS] = INSERTED.OPTIONS
	from INSERTED where PROPVALUE.BOLD_ID in (select BOLD_ID from INSERTED)

	IF EXISTS(SELECT * FROM DELETED) AND NOT EXISTS(SELECT * FROM INSERTED)
	delete from MISORA..DBMISIMP.PROPVALUE where bold_id in (select bold_id from DELETED)
  

  IF NOT EXISTS(SELECT * FROM DELETED) AND  EXISTS(SELECT * FROM INSERTED)
	insert MISORA..DBMISIMP.PROPVALUE([BOLD_ID],[BOLD_TYPE],[BU_MAX],[BU_MIN],[BU_ORIGIN],[FORMATTYPE],[TEXTVALUE],[ENUMITEM],[CONTEXT],[PROPHAVINGOBJECT],[PROPDEF],[OPTIONS])
	select [BOLD_ID],[BOLD_TYPE],[BU_MAX],[BU_MIN],[BU_ORIGIN],[FORMATTYPE],[TEXTVALUE],[ENUMITEM],[CONTEXT],[PROPHAVINGOBJECT],[PROPDEF],[OPTIONS] from INSERTED
 
END

GO

Проблема следующая, если удалять строку в таблице или обновлять, то с включенным триггером одна строка обрабатывается 1,5 минуты. Всего в таблицах 375549 строк.
Можно ли как нибудь ускорить? Такое ощущение, что проблема в транзакции, которую создает тригер.
Если выполнить запрос
delete from MISORA..DBMISIMP.PROPVALUE where bold_id=12345

То он выполняется моментально.
Вставка строки триггером отрабатывается тоже быстро.
20 май 15, 06:48    [17664487]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Андрей Ч.
Если выполнить запрос
delete from MISORA..DBMISIMP.PROPVALUE where bold_id=12345


То он выполняется моментально.

А так
begin transaction
delete from MISORA..DBMISIMP.PROPVALUE where bold_id=12345
commit transaction
20 май 15, 08:19    [17664651]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Glory, тоже за секунду выполнилось, значит не в транзакциях дело, что может быть еще, куда копать?
20 май 15, 10:33    [17665232]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Андрей Ч.
значит не в транзакциях дело, что может быть еще, куда копать?

Как вы вообще измерили время выполнения команд в триггере ?
20 май 15, 10:34    [17665240]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Glory, в студии выполнял удаление одной строки из таблицы в MS SQL (при этом отрабатывал тригер который удалял в Oracle), тоесть у меня есть общее время удаления и в MS SQL и в Oracle, которое пишет студия.
20 май 15, 11:27    [17665503]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Андрей Ч.
Glory, в студии выполнял удаление одной строки из таблицы в MS SQL (при этом отрабатывал тригер который удалял в Oracle), тоесть у меня есть общее время удаления и в MS SQL и в Oracle, которое пишет студия.

И что вам студия дает временную раскладку по каждой команде триггера ?
20 май 15, 11:29    [17665509]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Glory, нет только общее время выполнения запроса.
20 май 15, 11:41    [17665578]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Андрей Ч.
Glory, нет только общее время выполнения запроса.

Тогда зачем вы так ответили на вопрос "Как вы вообще измерили время выполнения команд в триггере ?" ?
20 май 15, 11:43    [17665590]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8353
Зачем это вообще тригером делать?
20 май 15, 12:16    [17665754]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Владислав Колосов, задача вообще состоит в том, чтобы обеспечить идентичность таблиц на MS SQL и Oracle.
Есть еще варианты решения?
20 май 15, 13:03    [17666039]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104751
Андрей Ч.
задача вообще состоит в том, чтобы обеспечить идентичность таблиц на MS SQL и Oracle.
Есть еще варианты решения?

Про репликацию слышали ?
20 май 15, 13:05    [17666055]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с прилинкованым Oracle  [new]
Андрей Ч.
Member

Откуда: Челябинск
Сообщений: 173
Glory, спасибо большое уже читаю.
20 май 15, 13:29    [17666241]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить