powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Блокировка таблицы
10 сообщений из 10, страница 1 из 1
ASE 12.5 Блокировка таблицы
    #35633480
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица. Надо перелить данные в другую аналогичную таблицу и создать триггер, который бы после заливки выполнял бы синхронизацию данных. С переливкой и триггером проблем нет, но таблица часто изменяемая (много update и insert) и есть вероятность, что не все данные перельются. Как полностью заблокировать таблицу пока происходит переливка данных и создание триггера? Таблица имеет построчную схему блокировки, а пользователи работают на уровне изоляции транзакции 1.


И еще маленький вопрос: Как в триггере (если он вызывается при update и insert) определить какая команда его вызвала? Можно конечно разнести по двум отдельным триггерам или проверять таблицу deleted на наличие строк, но может, есть более простой способ (через глобальную переменную, например).
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35633716
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den пишет:

> Есть таблица. Надо перелить данные в другую аналогичную таблицу и
> создать триггер, который бы после заливки выполнял бы синхронизацию
> данных. С переливкой и триггером проблем нет, но таблица часто
> изменяемая (много update и insert) и есть вероятность, что не все данные
> перельются. Как полностью заблокировать таблицу пока происходит
> переливка данных и создание триггера? Таблица имеет построчную схему
> блокировки, а пользователи работают на уровне изоляции транзакции 1.

begin transaction
lock table MYTABLE

....

commit/rollback

Но lock table действует только в транзакции и до конца данной транзакции.


> двум отдельным триггерам или проверять таблицу deleted на наличие строк,
> но может, есть более простой способ (через глобальную переменную, например).

Это вот не знаю.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35633741
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно еще во время переливки использовать более высокий уровень изоляции - serializable.
Why CORBA is DEAD?
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35634147
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivbegin transaction
lock table MYTABLE

а "create trigger" можно использовать в транзакции?

Ggg_oldможно еще во время переливки использовать более высокий уровень изоляции - serializable.

а serializable избавит меня от инсертов которые не блокируют таблицу с построчной схемой блокировки?
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35634861
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old wrote:

> можно еще во время переливки использовать более высокий уровень изоляции
> - serializable.
1) Это тоже в транзакции (одной) надо делать.
2) Результат отнюдь не гарантирован.

так что lock table.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35634877
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherrex_Den wrote:

> а "create trigger" можно использовать в транзакции?
>

В многостейтментной транзакции создать триггер ?
Думаю, вряд ли.
Но его можно и до транзакции создать.

> Ggg_old
> можно еще во время переливки использовать более высокий уровень изоляции
> - serializable.
>
>
>
> а serializable избавит меня от инсертов которые не блокируют таблицу с
> построчной схемой блокировки?

Вы не слушайте про serializable, ещё раз, serializable вам НИЧЕГО НЕ
БУДЕТ ГАРАНТИРОВАТЬ. Нет, он конечно будет гарантировать, что эта
транзакция с другими будет выполнена так, как если бы она выполнялась
строго последовательно, но вся загвоздка имено в этом "БЫ".
Короче, lock table ничем не хуже поднятия уровня изоляции, но
гарантированно даёт ясный и понятный результат - он захватит таблицу
и до конца этой транзакции только эта транзакция сможет с таблицей работать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35635305
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал! Алгоритм такой:
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).

Всем спасибо!
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35635394
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет! Рано обрадовался!
Если между блокировкой таблицы и создание триггера кто-то еще допустим что-то инсертит, то "create trigger" ждет пока этот инсерт закончиться. А это значит что инсертовые записи не попадут во вторую таблицу при переливки!
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35635500
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Включаешь триггер.
2) insert into table2 select * from table1 where not exists (select * from table2)
Если в table1 есть автоинкрементное поле или поле типа timestamp, то можно добавить условие - меньше 1-ой обработанной триггером записи.
...
Рейтинг: 0 / 0
ASE 12.5 Блокировка таблицы
    #35636536
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
golsa1) Включаешь триггер.
2) insert into table2 select * from table1 where not exists (select * from table2)
Если в table1 есть автоинкрементное поле или поле типа timestamp, то можно добавить условие - меньше 1-ой обработанной триггером записи.

так как тригер срабатывает не только на инсерты , но и на апдэйты, его надо делать после переливки(если произойдет update, то тригеру нучего апдэйтить будет). Ладно, прийдется перевести базу в "single user", чтоб быть абсолютно уверенным.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Блокировка таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]