|
|
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
Есть таблица. Надо перелить данные в другую аналогичную таблицу и создать триггер, который бы после заливки выполнял бы синхронизацию данных. С переливкой и триггером проблем нет, но таблица часто изменяемая (много update и insert) и есть вероятность, что не все данные перельются. Как полностью заблокировать таблицу пока происходит переливка данных и создание триггера? Таблица имеет построчную схему блокировки, а пользователи работают на уровне изоляции транзакции 1. И еще маленький вопрос: Как в триггере (если он вызывается при update и insert) определить какая команда его вызвала? Можно конечно разнести по двум отдельным триггерам или проверять таблицу deleted на наличие строк, но может, есть более простой способ (через глобальную переменную, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2008, 15:34 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > Есть таблица. Надо перелить данные в другую аналогичную таблицу и > создать триггер, который бы после заливки выполнял бы синхронизацию > данных. С переливкой и триггером проблем нет, но таблица часто > изменяемая (много update и insert) и есть вероятность, что не все данные > перельются. Как полностью заблокировать таблицу пока происходит > переливка данных и создание триггера? Таблица имеет построчную схему > блокировки, а пользователи работают на уровне изоляции транзакции 1. begin transaction lock table MYTABLE .... commit/rollback Но lock table действует только в транзакции и до конца данной транзакции. > двум отдельным триггерам или проверять таблицу deleted на наличие строк, > но может, есть более простой способ (через глобальную переменную, например). Это вот не знаю. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2008, 18:45 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
можно еще во время переливки использовать более высокий уровень изоляции - serializable. Why CORBA is DEAD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2008, 19:08 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
MasterZivbegin transaction lock table MYTABLE а "create trigger" можно использовать в транзакции? Ggg_oldможно еще во время переливки использовать более высокий уровень изоляции - serializable. а serializable избавит меня от инсертов которые не блокируют таблицу с построчной схемой блокировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 08:55 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
Ggg_old wrote: > можно еще во время переливки использовать более высокий уровень изоляции > - serializable. 1) Это тоже в транзакции (одной) надо делать. 2) Результат отнюдь не гарантирован. так что lock table. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 13:20 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
cherrex_Den wrote: > а "create trigger" можно использовать в транзакции? > В многостейтментной транзакции создать триггер ? Думаю, вряд ли. Но его можно и до транзакции создать. > Ggg_old > можно еще во время переливки использовать более высокий уровень изоляции > - serializable. > > > > а serializable избавит меня от инсертов которые не блокируют таблицу с > построчной схемой блокировки? Вы не слушайте про serializable, ещё раз, serializable вам НИЧЕГО НЕ БУДЕТ ГАРАНТИРОВАТЬ. Нет, он конечно будет гарантировать, что эта транзакция с другими будет выполнена так, как если бы она выполнялась строго последовательно, но вся загвоздка имено в этом "БЫ". Короче, lock table ничем не хуже поднятия уровня изоляции, но гарантированно даёт ясный и понятный результат - он захватит таблицу и до конца этой транзакции только эта транзакция сможет с таблицей работать. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 13:24 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
Сделал! Алгоритм такой: 1. открываем две сессии. 2. в первой сесси открываем транзакцию и блокируем таблицу("lock table dbo.test_lock in exclusive mode"). 3. создаем тригер во второй сессии (create trigger...). 4. выполняем переливку (insert into...select...) в первой сессии и тойже транзакции что и "lock table dbo.test_lock in exclusive mode". 5. закрываем транзакцию в первой сессии(commit). Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 15:30 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
Нет! Рано обрадовался! Если между блокировкой таблицы и создание триггера кто-то еще допустим что-то инсертит, то "create trigger" ждет пока этот инсерт закончиться. А это значит что инсертовые записи не попадут во вторую таблицу при переливки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 15:57 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
1) Включаешь триггер. 2) insert into table2 select * from table1 where not exists (select * from table2) Если в table1 есть автоинкрементное поле или поле типа timestamp, то можно добавить условие - меньше 1-ой обработанной триггером записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2008, 16:37 |
|
||
|
ASE 12.5 Блокировка таблицы
|
|||
|---|---|---|---|
|
#18+
golsa1) Включаешь триггер. 2) insert into table2 select * from table1 where not exists (select * from table2) Если в table1 есть автоинкрементное поле или поле типа timestamp, то можно добавить условие - меньше 1-ой обработанной триггером записи. так как тригер срабатывает не только на инсерты , но и на апдэйты, его надо делать после переливки(если произойдет update, то тригеру нучего апдэйтить будет). Ладно, прийдется перевести базу в "single user", чтоб быть абсолютно уверенным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2008, 09:12 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35635500&tid=2011300]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 143ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...