powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dg4odbc to Postgres (BLOB)
21 сообщений из 21, страница 1 из 1
dg4odbc to Postgres (BLOB)
    #40081209
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Возникла такая необходимость (обусловлена многими причинами:) - перенести таблицу с блоб-полем из оракла в постгрес и там ее хранить как архивную, обращаясь к ней напрямую из хранимой процедуры оракла.
Обращение очень простое: нужно в оракловой хранимке получить из такой таблицы из постгреса по id соотв. блоб из этой строки. Все.
Решили делать через dg4odbc.
Покурил доки.
Создал БД постгреса, там табличку с полями id integer и message bytea (аналог blob в постгресе), написал перекачку, перелил из оракла туда данные.
В оракловой БД поднял и настроил dg4odbc, создал dblink pgarc, запросы через dblink к постгресу работают, поля типа id, date и пр. простые выбираются.
А вот поле bytea никак не хочет передаваться в оракл в двоичном виде. Через строки передается, но нужно в двоичном (эти данные нужно передать парсеру as is, кроме того, размер может исчисляться мегабайтами (но не гигабайтами)).
Вот текст хранимки, в итоге уже уже поле raw1 тупо null (смотрю по этому id в постгресе - норм, там есть данные, передаю в оракл через дблинк как строку - тоже норм, а в двоичном виде - пусто).
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace function GetBlobFromArc(msg_id$ in number) return blob
is
  raw1 long raw;
  blob1 BLOB;
begin
  select t."message" into raw1 from "arc"."messages_arc"@pgarc t where t."id"=msg_id$;
  if raw1 is not null then
    blob1 := to_blob(raw1);
  end if;
  return (blob1);
end;


Что посоветуете? Как передать bytea из постгреса в оракл через этот самый odbc gateway без преобразований в строку? Нигде этого не нашел в нете.
Может, есть более интересные способы обращаться из хранимок оракла в БД постгрес?
БД оракла - 11.2 SE на win2008R2, постгрес 13й.
В оракле есть условие: поменьше трогать логику PL/SQL, на которой много чего завязано, ну и БД 24*7 продакшн.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081220
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, в свойствах DSN выставить "Bytea as LO".
Во-вторых, всё равно обломаться, поскольку dg4odbc в принципе не понимает блобы, он их
видит как long raw.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081229
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000,

строки >32k тож нормально передаются?

.....
stax
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081334
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle и по своим линкам не может подобное, не говоря уже о линках к другим базам:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:696224943687

Как вариант использовать java stored procedure.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081367
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000,

blob как bfile не?
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081371
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf
Tol2000,

blob как bfile не?

Спс, над этим вариантом думал, но пока не хотят, да и слишком много будет файлов, боюсь, ФС не потянет в ОС.
Или ты про передачу как бин. файл, а не про хранение?
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081373
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
Tol2000,

строки >32k тож нормально передаются?

.....
stax

Не пробовал, но как строки и так передавать не вариант, только в крайнем случае попытаться как-то типа в hex... Но это стремно)
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081377
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алымов Анатолий
Oracle и по своим линкам не может подобное, не говоря уже о линках к другим базам:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:696224943687

Как вариант использовать java stored procedure.

Спасибо!
Я анг. бегло не читаю, там многа букв) И, смотрю, что оракл еще 8й, может в 11ке что-то расширили, т.к. в доках вроде ограничений не встречал по своей простой ситуации, там по инсертам спрашивают в конце, а у меня тупо прочитать лонг рав один из одного столбца, пусть лонг рав, в блоб преобразую)
Но я почитаю внимательнее...
По поводу хранимок на яве, тоже норм вариант, если сработает, у нас, правда, еще нет ни одной хранимки на яве, но лиха беда начало, как говорится )) Можно для такого случая и запилить одну, покопаю в этом направлении.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081381
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Во-первых, в свойствах DSN выставить "Bytea as LO".
Во-вторых, всё равно обломаться, поскольку dg4odbc в принципе не понимает блобы, он их
видит как long raw.

Bytea as LO уже стояло. Эх, а я уж было раскатал... )
Да можно и в long raw получить, условие-то моей задачи простое, подходит и лонг рав, потом можно преобразовать в блоб и вернуть из функции.
Мне ведь только нужно одна пл/скл процедура в оракле, которая внутри полезет к постгресу и прочитает винарную инфу оттуда по айдишнику, а наружу вернет как блоб. Все. Больше ничего не нужно.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081387
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000
Алымов Анатолий
Oracle и по своим линкам не может подобное, не говоря уже о линках к другим базам:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:696224943687

Как вариант использовать java stored procedure.

Спасибо!
Я анг. бегло не читаю, там многа букв) И, смотрю, что оракл еще 8й, может в 11ке что-то расширили, т.к. в доках вроде ограничений не встречал по своей простой ситуации, там по инсертам спрашивают в конце, а у меня тупо прочитать лонг рав один из одного столбца, пусть лонг рав, в блоб преобразую)
Но я почитаю внимательнее...
По поводу хранимок на яве, тоже норм вариант, если сработает, у нас, правда, еще нет ни одной хранимки на яве, но лиха беда начало, как говорится )) Можно для такого случая и запилить одну, покопаю в этом направлении.

Есть и нас тут статейка https://www.sql.ru/blogs/oracleandsql/1633

Если кратко, то получить LOB через линк можно только через insert select, т.е. как минимум временная таблица нужна
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081400
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000
Или ты про передачу как бин. файл, а не про хранение?
Хранить в ФС. Современные ос могут много файлов хранить. А если по папкам разложить.. И не нужен постгресс...
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081425
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf
Tol2000
Или ты про передачу как бин. файл, а не про хранение?
Хранить в ФС. Современные ос могут много файлов хранить. А если по папкам разложить.. И не нужен постгресс...

Такая идея очень меня прельщает, я сам давно над ней подумываю.
У нас типа LTS )), ну, т.е. win2008R2, не оч современно) Я точно не знаю. какая там версия нтфс.
Честно говоря, я побаиваюсь доверять ФС хранение этих данных... может, и зря.
Но плюсов есть много: это же уйдет забота о консистентности (она тут не нужна), можно будет бэкапить, дублировать отдельно от БД...
Позволю себе сослаться на этот форум на работе, а то они тоже побаиваются bfile)
Меня смущает во всем этом только один момент: потери на остатках кластера, с большим к-вом записей они будут большими.
Пока у нас на быстрых дисках БД для этого мало места.
Подумаю тогда над тем, как подключить другой диск, сделать там маленький размер кластера, и туда.
Кстати, сорян можете ткнуть в ртфм), но спрошу: bfile не включается в стандартный оракловый в бэкап, надо бэкапить средствами ОС, или все-таки включается или есть опция?)
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081496
BTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BTM
Гость
Tol2000

bfile не включается в стандартный оракловый в бэкап, надо бэкапить средствами ОС, или все-таки включается или есть опция?)

Оракл хранит только BFILE locator, сами файлы надо бэкапить отдельно.

Попробуйте обсудить эти вопросы, чтобы были понятны агрументы против и страхи использования bfile:
Что может случиться с файлами в ФС, чего не может с ними случиться в БД?
Почему вы уверены, что при хранении в БД файлы будут занимать меньше места?
Зачем для архивного хранилища использовать быстрые диски?
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40081504
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000,

В винде есть чудесная утилита robocopy
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40082283
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BTM,

Спасибо за ответ.
По поводу дисков я, наоборот, имел в виду медленные для архива конечно же)
По поводу того, что места будет занимать больше в ФС, я уверен, т.к. при большом размере диска в ФС будет большой размер кластера, не говоря уже о LBA. Я немного знаю эту тему. Потери на мелких файлах будут существенны. Просто, если диски будут достаточной емкости, нам на это будет все равно)
В оракле ведь настраивается, когда небольшие блобы хранятся прямо в блоках таблицы, а большие уже в отдельной, в этом случае, насколько я понимаю, нет особых потерь, когда блоб размером в 100 байт, занимает 4к.
В общем, компромиссы конечно.
Но вариант с binary file мне все больше нравится)
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40082287
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,

Та это понятно, чем бэкапить файлы - найдем :)
Главное, что они будут бэкапиться отдельно от основного бэкапа, что в моем случае большой плюс.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40083651
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, спасибо, что поддержали с bfile, это отличная штуковина (тьфу три раза!!!))
Прорабатываю сейчас этот вариант.
Если кому интересно, на что я неприятно наткнулся и героически решил))
Дело в том, что я фактически переливаю из одной оракловой таблицы в другую, из таблицы с блобами в таблицу с bfile.
Так вот, заливаю я, например, инсертами в pl/sql прямо на сервере это дело и наивно полагаю, что при помощи utl_file я создам всю структуру подкаталогов, а именно: у меня oracle directory установлен, скажем, на /oradir, а файлы пишутся в эту директорию в соотв. подкаталоги (год/мес/день/час).
Если для каждого подкаталога, как читал у Кайта, создавать свою оракловую директорию (хотя бы временную), это же с ума сойти :)
А utl_file это дело не позволяет, видите-ли, сесурити, все такое.
В общем, я вышел из пложения, создав эту загрузку при помощи питонячего скрипта через cx_Oracle, запуская его прямо на сервере с необходимыми правами, и после выполнения инсерта записываю файл в соотв. директорию, имя которой мне сам же оракл при помощи dbms_lob.getfilename и возвращает, отакое! :)
А далее с уже созданными файлами спокойно проходит
Код: plsql
1.
 bfilename('dir', '2021/01/02/15/file1.jpg') 


При создании локатора и чтении оракл прекрасно понимает внутренние каталоги!
Так что, utl_file меня немного подверг фрустрации)), но все равно грузить это дело было лучше внешней утилитой, так что все ок.
Вопрос с постгресом все-таки пока еще открыт )
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40083693
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utl_file умеет * (что, естественно, не рекомендуется, как и сама установка utl_file)
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40083710
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
utl_file умеет * (что, естественно, не рекомендуется, как и сама установка utl_file)

Вы про INIT.ORA UTL_FILE_DIR? Ну да, это стремновато ставить, хоть я и использую это дело только на сервере под сисом и только в своих скриптах.
Честно говоря, я сначала удивился, что у оракла нет апи для создания физ. файлов, на которые указывает bfile, но потом понял, что оно создавалось для подключения уже существующих файлов.
Неисповедимы пути наши )
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40083714
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tol2000,

Некоторые создают java классы для создания/удаления/перемещения файлов в файловой системе и т.п. и plsql обертку для них. Но это, конечно, не acid путь.
...
Рейтинг: 0 / 0
dg4odbc to Postgres (BLOB)
    #40083722
Tol2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf
Tol2000,

Некоторые создают java классы для создания/удаления/перемещения файлов в файловой системе и т.п. и plsql обертку для них. Но это, конечно, не acid путь.

:) Ну, я вот пытаюсь эти WORM-блобы (хм, каламбур получился))) вывести из-под acid и задышать чуть свободнее, но только потому что оно архивное и worm )
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / dg4odbc to Postgres (BLOB)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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