powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как в транзакции перенести данные без потерь?
14 сообщений из 14, страница 1 из 1
как в транзакции перенести данные без потерь?
    #39721427
ssms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.


Есть две таблички:
Код: sql
1.
2.
3.
table1

table2





Они полностью одинаковые.

Имеют поле, data1 c датой и временем.

В таблицу table1 постоянно идет вставка.

А в таблицу 2 надо перенести данные до определенной даты,

затем удалеить перенесенные данные из таблицы table1



Вот такой механизм ведь не гарантирует что в table1 не вставятся новые данные во время переноса:



Код: sql
1.
2.
3.
4.
BEGIN TRANSACTION
INSERT INTO table2 SELECT * FROM table1 WHERE data1<'20181020 00:00';
DELETE  FROM table1 WHERE data1<'20181020 00:00';
commit;




И получится, если они вставились во время переноса, они не перенесутся и удалятся безвозвратно.


Подскажите пожалуйста как реализовать гарантированный перенос данных?
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721430
ssms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
data1 втавляться может любая, в том числе меньше чем '20181020 00:00'.
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721434
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssms,

Output не предлагать?
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721437
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssms,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017

Доступно, как минимум, с версии 2012
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721439
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
declare @t1 table (a int)
declare @t2 table (b int)
insert into @t1 select 1
insert into @t1 select 2
insert into @t1 select 3
select * from @t1
select * from @t2
delete from @t1 output deleted.* into @t2
select * from @t1
select * from @t2
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721566
ssms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Аннаssms,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017

Доступно, как минимум, с версии 2012

2008-й.


:(
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721567
ssms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А селект FOR UPDATE тут никак првязать нельзя?


... хотя он для другого наверное. Строки-то новые могут появиться.
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39721580
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssmsЩукина Аннаssms,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017

Доступно, как минимум, с версии 2012

2008-й.


:(

Извиняюсь за ввод в заблуждение....

По ссылке же сказано:
ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server (начиная с 2008)
;)
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722083
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssmsИ получится, если они вставились во время переноса, они не перенесутся и удалятся безвозвратно.
Они не удалятся если транзакция имеет правильный уровень изоляции, запрещающий фантомные чтения.
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722390
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssmsВот такой механизм ведь не гарантирует что в table1 не вставятся новые данные во время переноса:


А возможно просто заблокировать table1 для вставки?
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722794
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssms,

жесткий способ, set xact_abort on, set transaction level serializable, SELECT * FROM table1 with (tablockx)
мягкий способ, insert + output
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722821
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAntset transaction level serializable, SELECT * FROM table1 with (tablockx)Нужно еще сервер в однопользовательском режиме запустить, иначе tablockx не сработает...
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722835
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно
Код: sql
1.
set transaction isolation level serializable



Если подходящего индекса по дате нет, сервер сам заблокирует всю таблицу.
...
Рейтинг: 0 / 0
как в транзакции перенести данные без потерь?
    #39722980
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssms
А в таблицу 2 надо перенести данные до определенной даты,

затем удалеить перенесенные данные из таблицы table1


SWITCH PARTITION
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как в транзакции перенести данные без потерь?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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