Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

Откуда:
Сообщений: 979
мне нужно убедится что по табл с которой идёт работа нет активности(ins/upd/del), активные транзакции как я понял можно увидеть в v$transaction
28 дек 11, 16:01    [11840454]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
-2-
Member

Откуда:
Сообщений: 15330
фыв
мне нужно убедиться что по табл с которой идёт работа нет активности(ins/upd/del), активные транзакции как я понял можно увидеть в v$transaction
lock table
28 дек 11, 16:03    [11840469]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

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

не хотелось бы лочить пишущие процессы
28 дек 11, 16:07    [11840514]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
-2-
Member

Откуда:
Сообщений: 15330
фыв
не хотелось бы лочить пишущие процессы
не "лочить пишущие", но "нет активности(ins/upd/del)" - то есть можно делать только merge?
28 дек 11, 16:11    [11840542]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

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

дождаться когда никто не пишет, прочитать максимальный id и обработать записи до него, это надо чтобы избежать ситуацию когда запись с id=3 уже вставлена и закомичена, а id=2 вставлена но не закомичена(или будет откат)
28 дек 11, 16:15    [11840577]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
очередной велосипедист...))
задачу сформулируй. и в поиск по форуму)
28 дек 11, 16:17    [11840587]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
-2-
Member

Откуда:
Сообщений: 15330
фыв
дождаться когда никто не пишет, прочитать максимальный id и обработать записи до него, это надо чтобы избежать ситуацию когда запись с id=3 уже вставлена и закомичена, а id=2 вставлена но не закомичена(или будет откат)
lock table nowait.

Но обычно проще вести список обработанных или признак обработки.
28 дек 11, 16:18    [11840597]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кстати, полагаться, что меньший id вставляется всегда раньше, чем закомичен больший не стоит.

стоит глянуть на CDC или CQN.
28 дек 11, 16:20    [11840625]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

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

согласен, но приходиться экстренно исправлять то о чём не подумали... как думаете вот такой запрос покажет мне правильное время когда началась последняя транзакция по нужной мне таблице?
SELECT t.start_time -- min
  FROM v$locked_object l,
       v$transaction t
 WHERE l.oracle_username = USER
   AND l.object_id = <table_object_id>
   AND t.xidusn = l.xidusn
   AND t.xidslot = l.xidslot
   AND t.xidsqn = l.xidsqn

чтобы можно было взять данные на обработку по start_time-1 second
28 дек 11, 16:24    [11840666]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

Откуда:
Сообщений: 979
Vint
очередной велосипедист...))
задачу сформулируй. и в поиск по форуму)
абсолютно согласен с вами
28 дек 11, 16:25    [11840681]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
StarBlade
Member

Откуда: Хорошо хоть не из МСК
Сообщений: 415
фыв,
SELECT lk.SID,
se.username,
se.OSUser,
se.Machine,
ob.owner,
ob.object_type,
ob.object_name,
DECODE (lk.Block,
0,
'Ну нет',
1,
'Ну да',
2,
'Да ну - Global')
block,
se.lockwait
FROM v$lock lk JOIN dba_objects ob ON lk.id1=ob.object_id,
v$session se
WHERE lk.TYPE IN ('TM', 'UL')
AND lk.SID=se.SID
28 дек 11, 16:28    [11840705]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
-2-
Member

Откуда:
Сообщений: 15330
фыв
start_time-1 second
чтобы гарантировать, что от селекта до обработки не вклинится транзакция, вставляющая строку со временем старее секунды, нужно все равно поотрезать руки всем изменятелям
Вообще, время никогда не повод для отбора изменений, ид из сиквенса не многим лучше. Есть ora_rowscn, но он не индексируется.

Не надо бояться стандартных механизмов отлова изменений. Они не так очевидны, как устройство велосипедов, но значительно проще, производительнее и надежнее, позволяя ловить именно commit_scn.
28 дек 11, 16:44    [11840855]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
фыв
Member

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

про ora_rowscn в курсе, но для его использования всё равно нужно некоторое селективное поле, в будущем вероятно перейдём на oracle cdc(сейчас проводим нагрузочные испытания)... а вот про CQN не понял можете расшифровать?
28 дек 11, 16:49    [11840903]     Ответить | Цитировать Сообщить модератору
 Re: можноли определить какие таблицы сечас используются в открытых транзакциях?  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
В 11.2 есть DBMS_UTILITY.WAIT_ON_PENDING_DML
29 дек 11, 10:59    [11844241]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить