Ошибка при записи BLOB в оракле (ORA-00600: internal error code, arguments: [kokegPi)

alienzzzz

интернет бизнес
Ошибка при записи BLOB в оракле (ORA-00600: internal error code, arguments: [kokegPi)

Вот код:
PHP:
$sStr = 'update wb_archive_file set wbarf_data = :var0 where wbarf_file_id = :var1';
$iStatem 	= oci_parse($iLink,$sStr);
$Blob = oci_new_descriptor($iLink,OCI_D_LOB);
$Blob->writeTemporary(file_get_contents($sFileName),OCI_TEMP_BLOB);
oci_bind_by_name($iStatem,':var0',$Blob,filesize($sFileName),OCI_B_BLOB);
oci_bind_by_name($iStatem,':var1',$Id);
$bOk = oci_execute($iStatem);
$Blob->free();
oci_free_statement($iStatem);
При тестирование с одного компа (запрос происходит 1 раз в секунду) работает без сбоев.
при тестирование одновременно с 2-3-N компов появляется ошибка(иногда сразу, иногда не сразу, т.е. по разному) :

"ORA-00600: internal error code, arguments: [kokegPinLob1], [], [], [], [], [], [], [] "

Оракл у меня :
Oracle9i Enterprise Edition Release 9.2.0.1.0 (windows 2003)

ПХП :
5.0.4
Апач :
Apache/2.0.52 (Win32)
____
Все под винды =(
Пробовал писать по другому, через инсерт, но появляется другая ошибка :
"LOB locators cannot span transactions "
____
Коннекчусь вот так :
oci_connect( $sUser, $sPass,$aConn['alias']);
_____
 

Falc

Новичок
Если вы хотите привязать абстрактный тип данных (LOB/ROWID/BFILE), то вам необходимо сначала создать дескриптор с помощью oci_new_descriptor(). Параметр length не используется с абстрактными типами данных и должен быть равен -1
Не уверен что поможет но правельнее всетаки заменить:
oci_bind_by_name($iStatem,':var0',$Blob,filesize($sFileName),OCI_B_BLOB);
на:
oci_bind_by_name($iStatem,':var0',$Blob,-1,OCI_B_BLOB);
 

alienzzzz

интернет бизнес
Было. Уже менял, не помогает.
Говорят, что помогает пач на оракл.
Я его уже скачал . сейчас поставлю и сообщю в форуме !

-~{}~ 24.08.05 14:20:

Все ровно тоже самое. пач помог только тем, что теперь говорит ошибку. (ORA-22922 nonexistent LOB value)
___
Я сделал так, если возникает ошибка, секунду ждать, и повтор операции.
___
В такой теме все заработало, но работает не более 3-х часов непрерывной нагрузки на сервер(6 машин с интервалом 1 секунда кладут на сайт файлы размером до 1024 б), после около трех часов работы апач наедается, точней не апач, а OCI (т.е. я не могу сконектица к ораклу, но апач и пхп работают(проверял по phpinfo()))
___
Вот так.
 

Falc

Новичок
>> после около трех часов работы апач наедается, точней не апач, а OCI

Задай MaxRequestsPerChild
 

alienzzzz

интернет бизнес
Автор оригинала: Falc
>> после около трех часов работы апач наедается, точней не апач, а OCI

Задай MaxRequestsPerChild
Задал
Стоит так :

<IfModule mpm_winnt.c>
ThreadsPerChild 400
MaxRequestsPerChild 0
</IfModule>
Как надо ? то ?
 

Falc

Новичок
alienzzzz
Если ты прямым запросом апдейтишь базу то можно блоб как обычную строку в базу пихать, попробуй может поможет.

-~{}~ 24.08.05 15:01:

alienzzzz
0 - Это значит нет ограничения, у меня так на всякий случай 1000 стоит.
 

alienzzzz

интернет бизнес
не помогает =( говорит Invalid Hex. Я уже пробовал .
Кароче плюнул я на это . Я сделал все на SQLITE =)))
Все бегает =)
 

alienzzzz

интернет бизнес
ну не совсем все . . Я имею ввиду все что связано с блобами я в лайт пихаю !
___
По тестам уже работает ночь =) посмотрим как будет далее
 
Сверху