Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Апдейт поля BLOB  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48461

chavchipav
перед тем как писать здесь, я прочитал документацию, но там не нашел описание поведения
как в частности описал я.

Плохо искал. Стандартный паттерн для старых приложений: вставка EMPTY_LOB, а потом его
изменение через OCI.

Posted via ActualForum NNTP Server 1.5

7 фев 19, 13:38    [21803473]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
Elic
Stax
імхо, если он fire , то должен отрабатывать как с update и dbms_lob.getlength>0
Ты безнадёжен.


есть такое

раз о блобах зашло
не могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства

.....
stax
7 фев 19, 14:02    [21803492]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
chavchipav
Member

Откуда:
Сообщений: 11
Dimitry Sibiryakov,

понятно, спасибо!
7 фев 19, 14:04    [21803499]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9606
Stax
не могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


А ты попробуй:

SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL;
  7      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-22920: row containing the LOB value is not locked
ORA-06512: at "SYS.DBMS_LOB", line 1163
ORA-06512: at line 7


SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL
  7        FOR UPDATE;
  8      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  9  END;
 10  /

PL/SQL procedure successfully completed.

SQL> 


SY.
7 фев 19, 17:13    [21803716]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9606
Stax
не могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


Локатор по опредeлению да и переводе есть местонахождение. Ты ведь не удивляешься что навигатор в твоем телефоне или машине знает ктo ты и где ты есть.

SY.
7 фев 19, 17:20    [21803729]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
SY
Stax
не могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


А ты попробуй:

SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL;
  7      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-22920: row containing the LOB value is not locked
ORA-06512: at "SYS.DBMS_LOB", line 1163
ORA-06512: at line 7


SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL
  7        FOR UPDATE;
  8      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  9  END;
 10  /

PL/SQL procedure successfully completed.

SQL> 


SY.


SY я ето знаю/знал

вопрос как он (DBMS_LOB) определяет что value is not locked?

....
stax
7 фев 19, 18:49    [21803793]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
-2-
Member

Откуда:
Сообщений: 14922
Stax
как он (DBMS_LOB) определяет что value is not locked?
У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки?
7 фев 19, 19:19    [21803814]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
-2-
Stax
как он (DBMS_LOB) определяет что value is not locked?
У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки?


и то, и то
я переводил locator как указатель
гугль по другому

Іменник
локатор - locator
землемер - surveyor, locator, land-surveyor

мне больше интересно как (с помощью чего) dbms_lob узнает что запись заблокирована (захвачена)

....
stax
8 фев 19, 09:29    [21804025]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
Stax
интересно как (с помощью чего) dbms_lob узнает что запись заблокирована

Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал.
8 фев 19, 11:34    [21804168]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous
Stax
интересно как (с помощью чего) dbms_lob узнает что запись заблокирована

Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал.


если чесно, то я не понял что показал SY

чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,
поетому и интересно каким механизмом dbms_lob проверяет наличие блокировки

....
stax
8 фев 19, 11:43    [21804174]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
Stax
чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,

Если только читать - не обязательна.
8 фев 19, 12:00    [21804195]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous
Stax
чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,

Если только читать - не обязательна.

и писать (dbms_lob.write) тоже, главное чтоб запись было залочена
вот етот момент мне и интересен, как dbms_lob.write проверяет

.....
stax
8 фев 19, 12:32    [21804245]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
Stax
как dbms_lob.write проверяет

Берет и пишет. А SQL engine его посылает, как показывал SY.
8 фев 19, 12:46    [21804258]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous,

табличка с одной строкой (для упрощения)
SQL> set lines 80
SQL> desc stax_blob
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 B                                                  BLOB

SQL> declare
  2    v_data raw(32000);
  3    V_bb blob;
  4    v_id int;
  5  begin
  6    commit;
  7    select id,b into v_id,v_bb from stax_blob ; --for update of id;
  8    --получили локатор незаблокированной записи
  9    update stax_blob set id=1;
 10    --заблокировали
 11    v_data := utl_raw.cast_to_raw(rpad('Stax',v_id*10,'!'));
 12    --откуда знает что уже заблакировали?
 13    dbms_lob.write(
 14      lob_loc => v_bb,
 15      amount => utl_raw.length(v_data),
 16      offset => 1,
 17      buffer => v_data
 18      );
 19  end;
 20  /

PL/SQL procedure successfully completed.

SQL> select * from stax_blob;

        ID B
---------- --------------------
         1 53746178212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121


SQL>


....
stax
8 фев 19, 13:30    [21804305]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48461

Stax
--откуда знает что уже заблакировали?

Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает.

Posted via ActualForum NNTP Server 1.5

8 фев 19, 13:43    [21804327]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
Dimitry Sibiryakov
Stax
--откуда знает что уже заблакировали?

Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает.


етого я и не знаю (туплю, на ручнике)
как проверяет? какими средствами?

.....
stax
8 фев 19, 13:53    [21804339]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
-2-
Member

Откуда:
Сообщений: 14922
Stax
какими средствами?
dbms_lob по локатору определяет роуид строки, по роуид номера файла и блока, где лежит строка. Делает дамп блока в трейс, регекспами вытаскивает из трейса заголовок строки, оттуда берет номер позиции в itl, из itl выкусывает флаг lock=1.
Или тебе прислать машинные коды oracle.exe на 400 мб?
8 фев 19, 14:07    [21804358]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
-2-,

спасибо

теперь понятно,
ето внутренний (закрытый) механизм оракля

на sql, pl/sql етого не добится

я пытался с имитировать средствами языка sql

....
stax
8 фев 19, 14:32    [21804392]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
Stax
имитировать средствами языка sql

Ммм?
Имитировать - так имитировать.
Блокировать строку, можно даже dbms_lock для большей имитационности :).
8 фев 19, 14:36    [21804396]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous,

не блокировать, а проверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще

теперь я верю, что используется внутренний механизм

просто надеялся что проверяется с помощью "sql"

еще раз спасибо, мое любопытство удовлетворено

.....
stax
8 фев 19, 14:55    [21804419]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
Stax
проверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще

select for update nowait в автономке не сработал?
8 фев 19, 15:23    [21804464]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
andrey_anonymous
Stax
проверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще

select for update nowait в автономке не сработал?

не сработал
....
stax
8 фев 19, 15:26    [21804473]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
-2-
Member

Откуда:
Сообщений: 14922
andrey_anonymous
select for update nowait в автономке не сработал?
Автономка с и не покажет, чья блокировка.
Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть!
8 фев 19, 15:29    [21804483]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1983
-2-
andrey_anonymous
select for update nowait в автономке не сработал?
Автономка с и не покажет, чья блокировка.
Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть!

если блокировки не было, то for update наложит

....
stax
8 фев 19, 15:32    [21804491]     Ответить | Цитировать Сообщить модератору
 Re: Апдейт поля BLOB  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17682
-2-
Автономка с и не покажет, чья блокировка.

Речь-то ведь про имитацию, а не про работу :)
8 фев 19, 17:06    [21804672]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить