[ОТВЕТИТЬ]
03.02.2013 20:27
Pblcb
 
Доброго времени суток, коллеги.
Попытался использовать пример из FAQ на sql ru, добавил в него методы:
Код:
public static oracle.sql.BLOB smBlobChunk2blob(oracle.sql.BLOB src) throws SQLException, IOException {
        InputStream in = null;
        OutputStream out = null;
        BLOB outputBLOB = null;
        try {
            outputBLOB = BLOB.createTemporary(getConnection(),true, BLOB.DURATION_SESSION);
            float f = 1/0;
            in = src.getBinaryStream();
            out = outputBLOB.getBinaryOutputStream();
            int length;
            byte[] rbuf = new byte[src.getChunkSize()];
            byte[] wbuf;
            boolean firstChunk = true;
            while( (length = in.read(rbuf)) != -1 ) {
                if( firstChunk ) {
                    firstChunk = false;
                    // конвертим 4 последовательных байта в int
                    int name_size = ((rbuf[0x0C + 3] & 0xFF) << 24) + ((rbuf[0x0C + 2] & 0xFF) << 16) + ((rbuf[0x0C + 1] & 0xFF) << 8) + (rbuf[0x0C] & 0xFF);
                    int offset = 0x0C + name_size + 7;
                    wbuf = ShiftBuffer(rbuf, offset);
                    length -= offset;
                } else {
                    wbuf = rbuf;
                }
                out.write(wbuf, 0, length);
            }
        } finally {
            if( out != null )
                out.close();
            if( in != null )
                in.close();
        }
        return outputBLOB;
    }
    private static byte[] ShiftBuffer(byte[] src, int shift) {
        if( shift > src.length )
            return new byte[0];

        byte[] trg = new byte[src.length - shift];
        for( int i = 0; i < src.length - shift; i++ ) {
            trg[i] = src[i + shift];
        }
        return trg;
    }
соответственно добавил описание этого дела в package lob_utils:
Код:
function smBlobChunk2blob(src blob) return blob as
  language java name 'LobUtils.smBlobChunk2blob(oracle.sql.BLOB) return oracle.sql.BLOB';
В результате при каждом вызове любого из описанных методов получаю ORA-03113, но в alert.log никаких следов этого события не остается. При трассировке сессии тоже ничего странного не записывается.
Подскажите откуда ноги у проблемы могут расти?

P.S. Сервер БД Oracle 9.2.0.8, крутится все это дело на win2003r2.
03.02.2013 21:04
OlegON
 
При всей моей бывшей любви, в 9ке много всяческих багов было. Это первая нога. Извини, вникать в текст и догадываться, что ты хочешь сделать, лень. Но, как мне кажется, проблема в том, что ты долбишься через thin и это еще и на винде. Посмотри, что у тебя с shared-серверами. Зачем тебе внутренняя Java? Вытащи наружу, будешь хоть как-то контролировать процесс и лучше видеть ошибки, не говоря уж о том, что внешнюю жабу ты сможешь нормально профилировать и обновить без обновления 9i. Думаю, что косяк в коннекторе, поэтому и предлагаю внешний job. Потом переставишь на 10ку и без лишнего головняка проапгрейдишься.
03.02.2013 21:13
Pblcb
 
Спасибо, Олег, за советы. Но как мне кажется без внутренней явы никак, потому что кто-то в сервис-плюсе захотел хранить картинку вместе с названием этой картинки. А мне в голову другого решения для извлечения картинки в голову не приходит.
03.02.2013 21:38
OlegON
 
Я так и подумал, что несчастные фотки товара :) На самом деле пошукай по форуму, Белый лев уже что-то выкладывал на тему выдергивания картинок. И должен тебя опечалить, что, судя по Ораклу 9, ты еще и на старой версии СМ. А это значит, что все твои старания пойдут под нож, поскольку в новых версиях опять что-то поменялось, я плюнул и не вникал, поскольку чисто по логике веб-сервера предпочел бы статику на диске, а не в базе, если что.
Что касается "решения для извлечения", то куда извлекать-то? На Delphi с полпинка я эти картинки доставал, как помню.
04.02.2013 00:19
Pblcb
 
Цитата:
куда извлекать-то?
в 1C как это не прискорбно... там для работы с картинками только ХранилищеЗначения существует.
04.02.2013 08:15
OlegON
 
Так я и пытаюсь выяснить, оперативная работа? Или задание по ночам? Может, можно жабу воткнуть снаружи? В любом случае интересно к чему придешь.
04.02.2013 13:22
vdm
 
Как-то не пойму, зачем тут обязательно java нужна.
Через DBMS_LOB не получится сделать тоже самое?

И ошибка действительно сразу при вызове или где-то дальше при выборке в 1С?
Проверил на аналогичной конфигурации (2003+9.2.0.8) вызов без возврата результата наружу
Код:
declare
  src blob;
  bb blob;
begin
  SELECT theimage
    into src
    FROM supermag.smcardimage
   where article='016651';
  bb :=  supermag.usrLob_Utils.smBlobChunk2blob(src);
end;
не падает (деление на 0 убрал :) ).
04.02.2013 22:17
Pblcb
 
Цитата:
vdm Как-то не пойму, зачем тут обязательно java нужна.
Через DBMS_LOB не получится сделать тоже самое?
(деление на 0 убрал :) ).
Прошу прощения за деление на ноль.
Я с его помощью место падения поймать пытался. У меня если деление на ноль до создания временного ЛОБа; выскакивает ексепшн оделении на ноль. если после, то возникает EOF(и никаких следов в алертах).
А DBMS_LOB позволяет кусок LOBa выделить?

vdm, выполнил твой сценарий, получил тот же результат. можешь показать найстройки оракла дабы сравнить?
05.02.2013 11:17
vdm
 
Компоненты и spfile:

Oracle9i Catalog Views 9.2.0.8.0
Oracle9i Packages and Types 9.2.0.8.0
Oracle Workspace Manager 9.2.0.1.0
JServer JAVA Virtual Machine 9.2.0.8.0
Oracle XDK for Java 9.2.0.10.0
Oracle9i Java Packages 9.2.0.8.0

compatible='9.2.0.0.0'
db_block_size=8192
db_cache_size=629145600
db_domain=''
db_file_multiblock_read_count=16
fast_start_mttr_target=300
hash_join_enabled=TRUE
java_pool_size=16777216
job_queue_processes=2
large_pool_size=8388608
log_archive_start=TRUE
log_buffer=2097152
O7_DICTIONARY_ACCESSIBILITY=TRUE
open_cursors=300
optimizer_features_enable='9.2.0.1'
optimizer_index_caching=90
optimizer_index_cost_adj=20
pga_aggregate_target=209715200
processes=150
query_rewrite_enabled='FALSE'
remote_login_passwordfile='EXCLUSIVE'
sessions=50
sga_max_size=832569344
shared_pool_size=159383552
sort_area_size=4194304
star_transformation_enabled='TRUE'
timed_statistics=TRUE
transactions=50
undo_management='AUTO'
undo_retention=10800
undo_tablespace='UNDOTBS1'

Есть в dbms_lob read, createtemporary, copy.
06.02.2013 05:06
Pblcb
 
Из параметров отличается только star_transformation_enabled и память по мелочам.
а в остальном вроде одинаково.
а и java_* все установлены в 32мегабайта
Подскажи пожалуйста а как узнать какие установлены компоненты?
06.02.2013 07:58
OlegON
 
Обрати еще внимание на всякий, динамическая ли регистрация в listener. Т.е. прописана ли база в listener.ora
06.02.2013 09:59
vdm
 
Цитата:
Pblcb Подскажи пожалуйста а как узнать какие установлены компоненты?
select * from dba_registry;

Еще версии и опции:


select * from sys.v$version;

Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
CORE 9.2.0.8.0 Production
TNS for 32-bit Windows: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production

SELECT * FROM v_$option;

Partitioning TRUE
Objects TRUE
Real Application Clusters FALSE
Advanced replication TRUE
Bit-mapped indexes TRUE
Connection multiplexing TRUE
Connection pooling TRUE
Database queuing TRUE
Incremental backup and recovery TRUE
Instead-of triggers TRUE
Parallel backup and recovery TRUE
Parallel execution TRUE
Parallel load TRUE
Point-in-time tablespace recovery TRUE
Fine-grained access control TRUE
Proxy authentication/authorization TRUE
Change Data Capture TRUE
Plan Stability TRUE
Online Index Build TRUE
Coalesce Index TRUE
Managed Standby TRUE
Materialized view rewrite TRUE
Materialized view warehouse refresh TRUE
Database resource manager TRUE
Spatial TRUE
Visual Information Retrieval TRUE
Export transportable tablespaces TRUE
Transparent Application Failover TRUE
Fast-Start Fault Recovery TRUE
Sample Scan TRUE
Duplexed backups TRUE
Java TRUE
OLAP Window Functions TRUE
Block Media Recovery TRUE
Fine-grained Auditing TRUE
Application Role TRUE
Enterprise User Security TRUE
Oracle Data Guard TRUE
Oracle Label Security FALSE
OLAP TRUE
Heap segment compression TRUE
Join index TRUE
Trial Recovery TRUE
Oracle Data Mining TRUE
Online Redefinition TRUE
Streams TRUE
File Mapping TRUE
07.02.2013 11:40
Pblcb
 
vdm, у клиента все точь-в-точь как у тебя.
OlegON, нет не прописана. А может повлиять?
07.02.2013 19:58
OlegON
 
попробуй... много сюрпризов динамическая регистрация приносит, мало ли...
Опции темы


Часовой пояс GMT +3, время: 10:24.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.