Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обращение из триггера к удаленной базе данных  [new]
Гостяра
Guest
Есть триггер, к примеру такой
USE [Base1]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[AddPerson]
ON [dbo].[person] FOR INSERT
AS 
--IF @@ROWCOUNT = 1
BEGIN
	SET NOCOUNT ON;
	INSERT INTO [dbo].[person2] (id) VALUES ((SELECT id FROM inserted))

END

Как реализовать сие, учитывая что таблица person2 находится на удаленном сервере в некой Base2
Поскольку вычитал, что
Цитата
Триггер может быть создан только в текущей базе данных, но допускается обращение внутри триггера к другим базам данных, в том числе и расположенным на удаленном сервере.

Как реализовать обращение к Base2 буду признателен, если кто подскажет

P.S. СУБД и там и там MS SQL 2008 R2
28 июн 11, 12:19    [10885830]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Гостяра
Как реализовать обращение к Base2 буду признателен, если кто подскажет
Ну, добавить к имени таблицы имя базы?
INSERT INTO [Base2].[dbo].[person2] (id)
28 июн 11, 13:19    [10886218]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Гостяра
Guest
alexeyvg
Ну, добавить к имени таблицы имя базы?
INSERT INTO [Base2].[dbo].[person2] (id)


Ну это если в пределах одной СУБД, а если вторая находится вообще на другом серваке, в другом месте, тогда как? Вообще такое возможно? Или вы имеете ввиду что все равно надо будет удаленную базу приатачить?
28 июн 11, 13:33    [10886341]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
-=DiM@n=-
Member

Откуда: Москва
Сообщений: 1564
Создаете LinkedServer на удаленную БД и вперед
28 июн 11, 13:36    [10886375]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Гостяра
alexeyvg
Ну, добавить к имени таблицы имя базы?
INSERT INTO [Base2].[dbo].[person2] (id)


Ну это если в пределах одной СУБД, а если вторая находится вообще на другом серваке, в другом месте, тогда как? Вообще такое возможно?
Ну так укажите ещё имя другого сервака :-)

Гостяра
Или вы имеете ввиду что все равно надо будет удаленную базу приатачить?
Нет, нужно этот другой сервер зарегистрировать (sp_addlinkedserver)
28 июн 11, 13:38    [10886397]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Будет весело, когда связь с LinkedServerом буде то и дело рваться!
28 июн 11, 13:43    [10886436]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Я не уверен, что тригер будет работать - потому как это распределённая трансакция получается. Возможно нужно будет её в конфиге включить.

П.С. MSSQL to MSSQL возможно и будет работать, но MSSQL to MySQL/Acceess в тригере не работают...
28 июн 11, 13:48    [10886477]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Гостяра
Guest
iap
Будет весело, когда связь с LinkedServerом буде то и дело рваться!


А что делать буду пробовать, на данном этапе приходится с двумя базами работать да еще на разных серверах, да чтоб еще целостность данных обеспечить!!! Разрывы соединения из головы не выходят...
28 июн 11, 14:01    [10886562]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Шыфл
Я не уверен, что тригер будет работать - потому как это распределённая трансакция получается. Возможно нужно будет её в конфиге включить.

П.С. MSSQL to MSSQL возможно и будет работать, но MSSQL to MySQL/Acceess в тригере не работают...
Если нужна распределённая транзакция, то её нужно настроить. Если не нужна, то не нужно использовать...
iap
Будет весело, когда связь с LinkedServerом буде то и дело рваться!
Ну да, недостаток у такого подхода есть :-(
28 июн 11, 14:02    [10886569]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Обращение из триггера к удаленной базе данных  [new]
Lavrov_Yura
Member

Откуда:
Сообщений: 34
Шыфл
Я не уверен, что тригер будет работать - потому как это распределённая трансакция получается. Возможно нужно будет её в конфиге включить.

П.С. MSSQL to MSSQL возможно и будет работать, но MSSQL to MySQL/Acceess в тригере не работают...

У меня MSSQL 2008 R2 на 2х серваках (в идеале вторым сервером будет оракловский). Распределённая транзакция в триггере не работает, а вне триггера работает:
ALTER trigger [dbo].[trg_tt_i] 
on [dbo].[tt]	
for insert as
begin 
	insert into [oz-dbsql1].changes.dbo.tt2 (id,qq)  
	select id,qq from inserted
           --либо--execute [oz-dbsql1].Predpriyatie.dbo.Update_all_lists
end

где [oz-dbsql1] прилинкованный MS SQL сервер. Триггер сохраняет, а на
insert into tt (qq) select 'aa1'

выдаёт ошибку
Поставщик OLE DB "SQLNCLI10" для связанного сервера "oz-storage" вернул сообщение "Партнерский диспетчер транзакций отключил поддержку удаленных и сетевых транзакций.".
Сообщение 7391, уровень 16, состояние 2, процедура trg_tt_i, строка 6
Операция не может быть выполнена, так как поставщику OLE DB "SQLNCLI10" для связанного сервера "oz-storage" не удалось начать распределенную транзакцию.

Как включить распределённые транзакции в триггере? это вообще возможно?
20 ноя 12, 12:03    [13499224]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Lavrov_Yura,

сначала на обоих серверах проверьте состояние и настройки DTC
20 ноя 12, 12:04    [13499239]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
beaver06
Member

Откуда:
Сообщений: 681
alexeyvg,

Надо Service Broker - ом, чтобы разрыв связи не мешал...
20 ноя 12, 14:19    [13500425]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Crimean
Member

Откуда:
Сообщений: 13147
beaver06
Надо Service Broker - ом, чтобы разрыв связи не мешал...


так им небось, как обычно, "в транзакции" надо. и пусть оба сервака повисят.
20 ноя 12, 14:21    [13500435]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Lavrov_Yura
Member

Откуда:
Сообщений: 34
Crimean, спасибо.
После совета таки наткнулся на подходящую инструкцию по настройке DTC (до этого пытался, но бестолку), теперь работает.

Но я так и не понял почему при этом распределённые транзакции вне триггера работали.

Service Broker буду иметь ввиду, спасибо. Пока тестим, так что пусть висят.

Теперь на оракл надо. Тоже самое. DTC настроен, видимо в оракле дело. А ещё надо на оракл, который на линуксе установлен. Если кто сталкивался и есть опыт может поделитесь? Заранее спасибо.
20 ноя 12, 16:42    [13501939]     Ответить | Цитировать Сообщить модератору
 Re: Обращение из триггера к удаленной базе данных  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Lavrov_Yura
так и не понял почему при этом распределённые транзакции вне триггера работали


а кто был инициатором? часто в этом вопрос
20 ноя 12, 16:45    [13501965]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить