powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение файлов через dbLink
19 сообщений из 19, страница 1 из 1
Получение файлов через dbLink
    #38621184
belor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!

Уже который день пытаюсь найти решение проблемы, пока безрезультатно.
Ситуация следующая:
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
Получение файлов через dbLink
    #38621199
belor,

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

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

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
Получение файлов через dbLink
    #38621225
belor,

Oracle Database Gateway for ODBC?
Документацию уже посмотрели, нет ничего?
...
Рейтинг: 0 / 0
Получение файлов через dbLink
    #38621290
belor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Получение файлов через dbLink
    #38621321
yens_gjytk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belor,

INSERT INTO TMP SELECT * FROM TMP@DBLINKNAME;

Есть подозрение, что у вас есть еще какой-то TMP (паблик синоним?), ибо при чем тут NUMBER
...
Рейтинг: 0 / 0
Получение файлов через dbLink
    #38621358
belor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Получение файлов через dbLink
    #38621371
belor,

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

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

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

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

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

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

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

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

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

т.е. положить тело файла получается только в переменную.
...
Рейтинг: 0 / 0
Получение файлов через dbLink
    #38621500
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
Получение файлов через dbLink
    #38621517
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
Получение файлов через dbLink
    #38621528
belor,

Погугли проблемы по своему ODBC драйверу.
Oracle Database Gateway for SQL Server работает нормально с long raw.
...
Рейтинг: 0 / 0
Получение файлов через dbLink
    #38621570
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belorт.е. обрезается до 32кб plsql -тип long ограничен 32К.
...
Рейтинг: 0 / 0
Получение файлов через dbLink
    #38623918
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На стороне скуля bcp экспорт, потом sql*loaderом импорт. Может пригодится
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Получение файлов через dbLink
    #40035989
DEBugger13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получение файлов через dbLink
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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