Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение файлов через dbLink / 19 сообщений из 19, страница 1 из 1
22.04.2014, 10:51
    #38621184
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
Всем добрый день!

Уже который день пытаюсь найти решение проблемы, пока безрезультатно.
Ситуация следующая:
1. Есть сервер с Oracle 11g.
2. Есть сервер с MS SQL SERVER 2008 R2.
3. Пользователи вносят информацию (включая файлы, которые хранятся в varbinary(max)) в БД SQL SERVER.
4. Необходимо в одностороннем порядке забирать всю информацию в БД ORACLE.

Решение:
Т.к. инициатором должен быть ORACLE, был сделан dbLink к SQL SERVER.

Проблема:
Файлы через dbLink приходят в Long Raw. При попытке их получения приходится использовать промежуточную переменную с типом Long Raw, а потом уже конвертировать в BLOB. В итоге, после всех этих действий остается только 32к от тела файла.

В итоге вопрос:
Есть ли способ через dbLink получить varbinary(max) из SQL SERVER и сохранить их в BLOB поле ORACLE?
Или, возможно есть более красивый способ организовать данное взаимодействие?
...
Рейтинг: 0 / 0
22.04.2014, 10:58
    #38621199
Получение файлов через dbLink
belor,

Начните с описания, через что осуществляется соединение с MS SQL SERVER.
...
Рейтинг: 0 / 0
22.04.2014, 11:03
    #38621202
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
ееуекцукцу,

На сервере с ORACLE сделано ODBC соединение, на основе которого создан dbLink.
...
Рейтинг: 0 / 0
22.04.2014, 11:04
    #38621205
dobrinator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
Как вариант (цитата с форума):

W>Ну и что, собственно, непонятно? LOB-ы через dblink не передаются.

Не передаются, если их явно указывать, но отлично идут между прочими данными, т.е. например, такое работает:
INSERT INTO report SELECT * FROM report@dblink_name WHERE rid_report = 1.

P.S. http://yandex.ru/yandsearch?lr=213&text=как передать blob через dblink oracle
...
Рейтинг: 0 / 0
22.04.2014, 11:16
    #38621225
Получение файлов через dbLink
belor,

Oracle Database Gateway for ODBC?
Документацию уже посмотрели, нет ничего?
...
Рейтинг: 0 / 0
22.04.2014, 11:54
    #38621290
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
dobrinator,

Для эмуляции сделал простой пример:
Таблица TMP на стороне SQL SERVER с единственным полем: DOC VARBINARY(MAX) .
Таблица TMP на стороне ORACLE с единственным полем: DOC BLOB .

Результат обращения к таблице TMP через dbLink:
SELECT * FROM TMP@DBLINKNAME;
| doc |
|<Long Raw> |
|<Long Raw> |
|<Long Raw> |

Если попытаться сохранить содержимое поля DOC в файл через PL/SQL DEVELOPER - то все хорошо. Т.е. dbLink отрабатывает корректно.

Попытка сохранить содержимое поля DOC в таблицу TMP в ORACLE:
INSERT INTO TMP SELECT * FROM TMP@DBLINKNAME;

Возникает ошибка: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено LONG BINARY;
...
Рейтинг: 0 / 0
22.04.2014, 12:11
    #38621321
yens_gjytk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
belor,

INSERT INTO TMP SELECT * FROM TMP@DBLINKNAME;

Есть подозрение, что у вас есть еще какой-то TMP (паблик синоним?), ибо при чем тут NUMBER
...
Рейтинг: 0 / 0
22.04.2014, 12:30
    #38621358
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
yens_gjytk,

Нет, дело не в этом. Но на всякий случай создал новую табличку.
INSERT INTO my_tmpTable SELECT * FROM TMP@DBLINKNAME;

Ошибка та же.

Единственный выход который я нашел следующий:

declare
filebody long raw;
begin
select "doc" into filebody from tmp@DBLINKNAME t;
insert into tmp
(doc) values (filebody);
end;

Но в итоге тело файла обрезается до 32к.
...
Рейтинг: 0 / 0
22.04.2014, 12:37
    #38621371
Получение файлов через dbLink
belor,

Ты бы почитал, как long raw в blob перегонять. Поиск рулит.
...
Рейтинг: 0 / 0
22.04.2014, 13:17
    #38621458
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
уувуукукуку,

Я бы конечно с удовольствием использовал конструкцию вроде вот этой:

insert into tmp select TO_LOB("doc") from tmp@DBLINKNAME,

если ты это имел ввиду.

Но при ее выполнении у меня возникает ошибка "Неверное использование типа данных LONG".
Поэтому, я сначала пытаюсь положить в переменную типа long raw. А после этого тело файла режется, как я и писал выше.

p.s. поиском пользовался, если неправильно понял, дай пожалуйста ссылку.
...
Рейтинг: 0 / 0
22.04.2014, 13:28
    #38621473
Получение файлов через dbLink
belor,

Ну а скопировать поле в таблицу oracle с long raw и потом перегнать с помощью TO_LOB кто мешает?
...
Рейтинг: 0 / 0
22.04.2014, 13:40
    #38621493
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
уувуукукуку,

create table tmp_long (doc long raw);
--
insert into tmp_long select * from tmp@DBLINKNAME t;

Возникает ошибка: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено LONG BINARY;
...
Рейтинг: 0 / 0
22.04.2014, 13:42
    #38621497
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
уувуукукуку,

т.е. положить тело файла получается только в переменную.
...
Рейтинг: 0 / 0
22.04.2014, 13:43
    #38621500
Получение файлов через dbLink
belor,

Своей процедурой сделай, только запись в long raw

declare
filebody long raw;
begin
select "doc" into filebody from tmp@DBLINKNAME t;
insert into tmp
(doc) values (filebody);
end;
...
Рейтинг: 0 / 0
22.04.2014, 13:53
    #38621517
belor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
уувуукукуку,

declare
filebody long raw;
begin
select "doc" into filebody from tmp@DBLINKNAME t;
insert
into tmp_long --таблица с полем "doc" типа long raw
(doc) values (filebody);

В итоге размер файла получается 31.9 кб. т.е. обрезается до 32кб. Это и есть основная проблема, которую я в начале темы описал.
...
Рейтинг: 0 / 0
22.04.2014, 14:02
    #38621528
Получение файлов через dbLink
belor,

Погугли проблемы по своему ODBC драйверу.
Oracle Database Gateway for SQL Server работает нормально с long raw.
...
Рейтинг: 0 / 0
22.04.2014, 14:28
    #38621570
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
belorт.е. обрезается до 32кб plsql -тип long ограничен 32К.
...
Рейтинг: 0 / 0
24.04.2014, 07:21
    #38623918
Melkomyagkii_newbi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
На стороне скуля bcp экспорт, потом sql*loaderом импорт. Может пригодится
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
14.01.2021, 23:17
    #40035989
DEBugger13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение файлов через dbLink
belor
уувуукукуку,

declare
filebody long raw;
begin
select "doc" into filebody from tmp@DBLINKNAME t;
insert
into tmp_long --таблица с полем "doc" типа long raw
(doc) values (filebody);

В итоге размер файла получается 31.9 кб. т.е. обрезается до 32кб. Это и есть основная проблема, которую я в начале темы описал.


Проблему победить никому не удалось?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение файлов через dbLink / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]