Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
Здравствуйте!
М.б. я плохо искал на форуме, но ответа не нашел.
Задача моя интегрировать работу моей информационной системы на основе MS SQL SERVER 2005 на плптформе W2003 server с
базой на Oracle 10g одного из заказчиков. Он нам предоставил 2 интерфейсные таблицы, условно говоря Т1 и Т2. У Т1 общая длина записи где то в 3 раза больше,чем у Т2. Я установил драйвер провайдера оракла родной, создал связанный сервер [ORACLE]на основе этого поставщика. В менедж студио, в отделном окне тестирую запросы и получаю результаты:
SELECT * FROM [ORACLE]..[схема].[Т1] - зависает
UPDATE [ORACLE]..[схема].[Т1] SET [Поле1]='S' WHERE [Поле2]='w23' - звисает
SELECT [Поле1], [Поле2] FROM [ORACLE]..[схема].[Т1] - выполняется через 4 сек
SELECT * FROM [ORACLE]..[схема].[Т2] - выполняется через 4 сек
UPDATE [ORACLE]..[схема].[Т2] SET [Поле1]='S' WHERE [Поле2]='w23' - выполняется через 4 сек
Такое впечатление, что размера какого то буфера памяти не хватает.
В свойствах объектов (сервер, поставщик) ни чего такого не обнаружил.

Создал для пробы связанный сервер на основе MSDAORA.
Все запросы работают, но select выдает вместо русских букв знаки вопроса.
Что интересно where по русским буквам в запросе работает, но при добавлении в таблицы ms sql 2005 прописывает знаки вопроса.
И сортировку выбирал совместимую и перебрал collation cirillic... - результатов нет.

Наведите на мысль пожалуйста.
Заранее спасибо.
11 май 12, 15:03    [12536948]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
Ставьте родной оракловый провайдер, лучше 11g.
11 май 12, 16:17    [12537685]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
Такой и был установлен с ораклового сайта
11 май 12, 19:19    [12538747]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
настройте координатор распределённых транзакций,
также рекомендую использовать OPENQUERY вместо прямого обращения.
12 май 12, 11:06    [12540830]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
В нете говорят, что msdaora подходит только к ораклу до версии 8i.
Посмотрел ссылку http://support.microsoft.com/kb/301600
и не понял как это связано с моей проблемой в частности по оракловому драйверу.
12 май 12, 23:26    [12544881]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
После проб с OPENQUERY ситуация прояснилась действительно у клиента оракла 11g ограниченный буфер.
Прямое обращение к таблицам через связанный сервер т.е. сервер..схема.таблица данные всей таблицы закачиваются для обработки в какой то буфер.
Оператор OPENQUERY решает данную проблему и отзывается мгновенно.
Спасибо Geep.
14 май 12, 13:53    [12549944]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
Ха столкнулся с проблемой
как перехватить количество записей возвращенных командой EXECUTE (@TSQL)
где @TSQL ='select count(*) from openquery(svr, ''select p1 from t1 where p1='''''+@p1+''''' '')'
пробовал так
declare
@cnt int,
@tsql varchar(max)
set @tsql='set @cnt=select count(*) from openquery(svr, ''select p1 from t1 where p1='''''+@p1+''''' '')'

print @cnt

ошибка требует определить @cnt
16 май 12, 12:49    [12562341]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
sp_executesql
16 май 12, 12:54    [12562411]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
	DECLARE	@iResult	int
	,	@nvServer	nvarchar(128)
	,	@nvQueryString	nvarchar(4000)
	,	@iDateDiff	int
	;
	SELECT  @iResult	= NULL
	,	@nvServer	= N'AXAPTA'
	,	@iDateDiff	= NULL
	;
	SELECT	@nvQueryString	= N'SET @DateDiff=('
	+   N'SELECT DATEDIFF(ss,GETDATE(),a.[SYSDATE]) FROM OPENQUERY([' 
	+   @nvServer + N'],''SELECT SYSDATE FROM DUAL'') a);'
	;
	EXECUTE	@iResult	= sp_executesql 
		@Stmt		= @nvQueryString
	,	@Params		= N'@DateDiff int OUT'
	,	@DateDiff	= @iDateDiff OUT
	;
	PRINT	@iDateDiff;
16 май 12, 13:08    [12562545]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Draginsv
Member

Откуда:
Сообщений: 457
вообще то да через неё можно перехватить
как все закручено
Спасибо.
16 май 12, 13:18    [12562645]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2005 & ORACLE 10G  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
либо через временную таблицу.
16 май 12, 13:38    [12562833]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить