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

Откуда: Russia, Новосибирск
Сообщений: 252
Добрый день, товарищи. Не спешите кидать тапками и отправлять на RTFM ) Не могу разобраться с концептуальным вопросом.
Допустим, у нас есть некая табличка
SELECT * FROM TBL


ID | VALUE
-------------
1 | BLABLA

Я выполняю запрос:
UPDATE TBL SET VALUE = 'BLABLA' WHERE ID = 1

Иными словами новое значение = старому значению.
И вот тут у меня возникает вопрос - а генерируется ли вектор изменения значения этого поля в журналах?
8 май 14, 10:02    [15989230]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
уувуукукуку
Guest
chameleon82,

При DML redo генерится всегда, даже при nologging.
Вопрос только в количестве и размере.
8 май 14, 10:13    [15989315]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
В том то и вопрос, генеруется ли при этом вектор изменения конкретного поля записи или нет? То что сам ДМЛ в редо попадает и так понятно
8 май 14, 10:15    [15989342]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
уувуукукуку
Guest
chameleon82
В том то и вопрос, генеруется ли при этом вектор изменения конкретного поля записи или нет? То что сам ДМЛ в редо попадает и так понятно


Ну, так напиши, что туда по твоему попадает при данном update и то, насчет чего ты сомневаешься.
8 май 14, 10:20    [15989383]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
chameleon82,
Должно быть два вектора изменений
8 май 14, 10:23    [15989405]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
Kamael,

должно, или точно будет? :)

Понятно, что при апдейте с одного значения на другое будет нечто:

CHANGE #1 
Array Update of 1 rows:
KDO undo record:
tabn: 0 slot: 123 ..
vect = 9

col 2:  тут BLABLA

CHANGE #2
Array Update of 1 rows:
...
tabn: 0 slot: 123 ..
vect = 9

col 2:  тут BLABLABLA



Будут ли вектора если :OLD_VALUE = :NEW_VALUE?
8 май 14, 10:32    [15989464]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
rimall
Member

Откуда:
Сообщений: 40
проводить операции сравнения нового и старого, разве не слишком накладно для СУБД
8 май 14, 10:43    [15989541]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
chameleon82,
Должно быть, всмысле точно будет, минимум два. Посмотри у Льюиса, oracle internals книга,
там эти ветора расписаны от а до я.
8 май 14, 11:00    [15989676]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
упыръ
Guest
log miner'ом посмотреть 3 минуты займёт
8 май 14, 11:21    [15989841]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
inred
Member

Откуда:
Сообщений: 41
chameleon82,

Ну, по идее, когда открываем транзакцию, то устанавливается LockByte, а это уже изменение в блоке данных.
8 май 14, 11:43    [15990037]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Bauer
Member

Откуда: МСК +3
Сообщений: 584
Kamael, скажите - Алмата это где?

з.ы. сорри за офф...
8 май 14, 11:44    [15990055]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Wolverines
Member

Откуда:
Сообщений: 118
Есть табличка из 2х строк.

Name Null? Type
----------------------------------------- -------- ----------------------------
ZONE_ID NOT NULL NUMBER
ZONE_NAME NOT NULL VARCHAR2(128)

SQL> select * from FS_MONITORING.T_ZONES where zone_id = 1;

   ZONE_ID ZONE
---------- ----
         1 ВЦ


Делаем обновление на тоже самое значение

update T_ZONES set zone_name = 'ВЦ' where zone_id = 1


Смотрим XID транзакции select xid from v$transaction (Бд тестовая, это единственная транзакция)

SELECT undo_sql
FROM FLASHBACK_TRANSACTION_QUERY
WHERE XID = '0015000F0000AA52';

update "SCHEMA"."T_ZONES" set "ZONE_NAME" = 'ВЦ' where ROWID = 'AAAcuMAAEAAAF8cAAA';

То есть скрипт отката есть в UNDO.
8 май 14, 12:01    [15990208]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
Bauer
Kamael, скажите - Алмата это где?

з.ы. сорри за офф...

Казахстан
8 май 14, 12:16    [15990347]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Bauer
Member

Откуда: МСК +3
Сообщений: 584
Kamael
Bauer
Kamael, скажите - Алмата это где?

з.ы. сорри за офф...

Казахстан


В Казахстане нет населенного пункта с таким названием, есть город Алматы, который ранее именовался как Алма-Ата (а еще ранее - Верный).
8 май 14, 12:40    [15990581]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
Bauer,
У каждого своё мнение. Вы мне это для чего рассказываете?
8 май 14, 12:56    [15990712]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Bauer
Member

Откуда: МСК +3
Сообщений: 584
Kamael
Bauer,
У каждого своё мнение. Вы мне это для чего рассказываете?


Kamael, если Вы достойный гражданин города Алматы - как-то нелепо допускать орфографические ошибки подобного рода...
Я знаю многих сограждан, которые и поныне пользуются старым названием - Алма-Ата, мое уважение к ним от этого не уменьшилось...

з.ы. Опять-таки - мои извинения модератору,.... - не нашел я как тут отправить ЛС.
8 май 14, 13:31    [15991090]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Kamael
Member

Откуда: Алмата
Сообщений: 374
+
Bauer
Kamael
Bauer,
У каждого своё мнение. Вы мне это для чего рассказываете?


Kamael, если Вы достойный гражданин города Алматы - как-то нелепо допускать орфографические ошибки подобного рода...
Я знаю многих сограждан, которые и поныне пользуются старым названием - Алма-Ата, мое уважение к ним от этого не уменьшилось...

з.ы. Опять-таки - мои извинения модератору,.... - не нашел я как тут отправить ЛС.

Это не орфографическая ошибка . Засим, оставим эту тему.
8 май 14, 13:59    [15991340]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
chameleon82
Member

Откуда: Russia, Новосибирск
Сообщений: 252
упыръ
log miner'ом посмотреть 3 минуты займёт

Нет возможности.
В общем, проверил другим способом ) проапдейтил табличку в 200млн строк , журналы переключились несколько десятков раз.
8 май 14, 19:49    [15993126]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Aliona
Member

Откуда: Питер
Сообщений: 4031
chameleon82
упыръ
log miner'ом посмотреть 3 минуты займёт

Нет возможности.
В общем, проверил другим способом ) проапдейтил табличку в 200млн строк , журналы переключились несколько десятков раз.


На изучение вопроса, как работать с лог-минёром, который входит в ПО oracle, уйдёт несколько больше времени.
http://docs.oracle.com/cd/B19306_01/server.102/b14215/logminer.htm

Количество переключений журналов зависит ещё и от размера журнала и от размеров изменяемой строки.
Ваш эксперимент не отвечает на ваш первоначальный вопрос.
12 май 14, 13:53    [16004205]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18487
Зачем для этого логмайнер, дампы, трассировки и прочие сложности?
Достаточно включить SET AUTOTRACE ON STATISTICS и все будет наглядно видно
13 май 14, 02:42    [16007892]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Elic
Member

Откуда:
Сообщений: 29991
Вячеслав Любомудров
Достаточно включить SET AUTOTRACE ON STATISTICS и все будет наглядно видно
А у меня лыжи не поехали.
+
SQL> create table tmp as select rpad('A',4000, 'A') as s from dual;

Table created.

SQL> set autot on stat
SQL> update tmp set s = lower(s);

1 row updated.


Statistics
----------------------------------------------------------
         11  recursive calls
          3  db block gets
         12  consistent gets
          1  physical reads
          0  redo size
       1128  bytes sent via SQL*Net to client
       1272  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> /

1 row updated.


Statistics
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
       1129  bytes sent via SQL*Net to client
       1272  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> drop table tmp purge;

Table dropped.
13 май 14, 08:46    [16008120]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18487
Что-то как-то было по этому поводу
Толи с версией глюки, толи V$SESSTAT подменена, толи EXE-шник поправлен (добиться можно было разными способами)
Вроде как STATISTICS_LEVEL на это влиять не должен
+
tst> update tmp set s = lower(s);

1 row updated.


Statistics
----------------------------------------------------------
          9  recursive calls
          2  db block gets
         12  consistent gets
          1  physical reads
       8492  redo size
        378  bytes sent via SQL*Net to client
        311  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed

tst> /

1 row updated.


Statistics
----------------------------------------------------------
          0  recursive calls
          3  db block gets
          3  consistent gets
          0  physical reads
       8372  redo size
        379  bytes sent via SQL*Net to client
        311  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
          1  rows processed
13 май 14, 10:07    [16008512]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Elic
Member

Откуда:
Сообщений: 29991
Вячеслав Любомудров
Толи с версией глюки, толи V$SESSTAT подменена, толи EXE-шник поправлен (добиться можно было разными способами)
У меня 0 воспроизводится на абсолютно всех серверах (10gR2, 11gR2, 12cR1) при подключении плюсом версии, соответствующей серверу. Т.е. не-0 увидеть не удалось ни разу.
13 май 14, 10:16    [16008559]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1635
По всем признакам, это private redo. redo size не нулевое на таком примере после commit или большего кол-ва изменений.
+
SQL> commit;

Commit complete.

SQL> select sn.name, pt.value
  2    from sys.v_$mystat pt, sys.v_$statname sn
  3   where sn.name in ('redo size', 'redo entries')
  4     and sn.statistic# = pt.statistic#
  5   order by pt.statistic#;

NAME                                                                        VALUE
---------------------------------------------------------------- ----------------
redo entries                                                                  105
redo size                                                                  593160

SQL> update tmp set s=lower(s);

1 row updated.

SQL> select sn.name, pt.value
  2    from sys.v_$mystat pt, sys.v_$statname sn
  3   where sn.name in ('redo size', 'redo entries')
  4     and sn.statistic# = pt.statistic#
  5   order by pt.statistic#;

NAME                                                                        VALUE
---------------------------------------------------------------- ----------------
redo entries                                                                  105
redo size                                                                  593160

SQL> commit;

Commit complete.

SQL> select sn.name, pt.value
  2    from sys.v_$mystat pt, sys.v_$statname sn
  3   where sn.name in ('redo size', 'redo entries')
  4     and sn.statistic# = pt.statistic#
  5   order by pt.statistic#;

NAME                                                                        VALUE
---------------------------------------------------------------- ----------------
redo entries                                                                  106
redo size                                                                  601796
13 май 14, 11:47    [16009155]     Ответить | Цитировать Сообщить модератору
 Re: Генерация REDO при UPDATE  [new]
Elic
Member

Откуда:
Сообщений: 29991
SeaGate
По всем признакам, это private redo.
Спасибо. Похоже.
13 май 14, 12:55    [16009621]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить