|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
Всем добрый день! Уже который день пытаюсь найти решение проблемы, пока безрезультатно. Ситуация следующая: 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? Или, возможно есть более красивый способ организовать данное взаимодействие? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 10:51 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Начните с описания, через что осуществляется соединение с MS SQL SERVER. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 10:58 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
ееуекцукцу, На сервере с ORACLE сделано ODBC соединение, на основе которого создан dbLink. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 11:03 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
Как вариант (цитата с форума): 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 11:04 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Oracle Database Gateway for ODBC? Документацию уже посмотрели, нет ничего? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 11:16 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
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; ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 11:54 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, INSERT INTO TMP SELECT * FROM TMP@DBLINKNAME; Есть подозрение, что у вас есть еще какой-то TMP (паблик синоним?), ибо при чем тут NUMBER ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 12:11 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
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к. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 12:30 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Ты бы почитал, как long raw в blob перегонять. Поиск рулит. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 12:37 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
уувуукукуку, Я бы конечно с удовольствием использовал конструкцию вроде вот этой: insert into tmp select TO_LOB("doc") from tmp@DBLINKNAME, если ты это имел ввиду. Но при ее выполнении у меня возникает ошибка "Неверное использование типа данных LONG". Поэтому, я сначала пытаюсь положить в переменную типа long raw. А после этого тело файла режется, как я и писал выше. p.s. поиском пользовался, если неправильно понял, дай пожалуйста ссылку. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:17 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Ну а скопировать поле в таблицу oracle с long raw и потом перегнать с помощью TO_LOB кто мешает? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:28 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
уувуукукуку, create table tmp_long (doc long raw); -- insert into tmp_long select * from tmp@DBLINKNAME t; Возникает ошибка: ORA-00932: несовместимые типы данных: ожидается NUMBER, получено LONG BINARY; ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:40 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
уувуукукуку, т.е. положить тело файла получается только в переменную. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:42 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Своей процедурой сделай, только запись в long raw declare filebody long raw; begin select "doc" into filebody from tmp@DBLINKNAME t; insert into tmp (doc) values (filebody); end; ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:43 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
уувуукукуку, 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кб. Это и есть основная проблема, которую я в начале темы описал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 13:53 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belor, Погугли проблемы по своему ODBC драйверу. Oracle Database Gateway for SQL Server работает нормально с long raw. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 14:02 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
belorт.е. обрезается до 32кб plsql -тип long ограничен 32К. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2014, 14:28 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
На стороне скуля bcp экспорт, потом sql*loaderом импорт. Может пригодится ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2014, 07:21 |
|
Получение файлов через dbLink
|
|||
---|---|---|---|
#18+
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кб. Это и есть основная проблема, которую я в начале темы описал. Проблему победить никому не удалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2021, 23:17 |
|
|
start [/forum/topic.php?fid=52&fpage=27&tid=1880524]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 163ms |
0 / 0 |