Я должен заархивировать данные из таблицы в другую таблицу, пока используется исходная таблица. Процесс архивирования состоит в том, чтобы скопировать строки в другую таблицу, а затем удалить строки из исходной таблицы. Строки, подлежащие архивированию, выбираются столбцом со свойством Identity.
Фактором является то, что таблица, из которой архивируются строки, будет использоваться - новые строки будут записаны в таблицу во время процесса архивирования. Это круглосуточное приложение, которое нельзя остановить.
Удаляемые строки находятся в нижней части нумерации столбцов Identity, в то время как новые строки будут добавляться в конце таблицы.
Мое беспокойство - тупики. Есть ли вероятность того, что между двумя процессами могут возникнуть тупики?
Процесс архивирования будет запущен из хранимой процедуры? Должен ли я установить для параметра DEADLOCK_PRIORITY значение LOW, чтобы гарантировать, что в случае возникновения тупиковой ситуации будет завершен процесс архивирования, а не запущенное приложение?
Должен ли я также установить уровень изоляции транзакции?
Спасибо
Определение таблицы:
CREATE TABLE [dbo].[DummyName](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Payment Reference] [nvarchar](18) NULL DEFAULT (N''),
[Payment Amount] [decimal](28, 10) NULL,
[Payment Date] [datetime] NULL,
[Payer ID] [nvarchar](34) NULL DEFAULT (N''),
[Payer Account] [nvarchar](174) NULL DEFAULT (N''),
[Payer Name] [nvarchar](174) NULL DEFAULT (N''),
[Payer Type] [nvarchar](35) NULL DEFAULT (N''),
[Bank Reference] [nvarchar](16) NULL DEFAULT (N''),
...
Определение индекса:
ALTER TABLE [dbo].[DummyName] ADD PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
источник