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

Откуда: Moscow Square
Сообщений: 624
Доброе время суток!
Проблема: есть таблица, которая нарабатывается каждые три часа, наработка длится порядка 30 минут. Наработка вида:
truncate table example_table

insert into example_table
select * from t1
Проблема в том, что те полчаса пока идет наработка необходимо иметь доступ к предыдущей версии таблицы. Однако запрос к таблице example_table данных не возвращает поскольку таблица залочена.
select @@version:
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)   Feb  9 2007 22:47:07   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1) 
свойство READ_COMMIT_SNAPSHOT у базы включено.

Как можно добраться до старой версии данных пока идет наработка новой версии?
10 июн 09, 11:59    [7284891]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
Oblom,

Может табличку еще одну архивную сделать и перед truncate туда данные заливать?
10 июн 09, 12:08    [7284958]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 624
linke
Oblom,

Может табличку еще одну архивную сделать и перед truncate туда данные заливать?


таблица очень большая, и при этом ограничение по месту, так что вторую копию держать я себе позволить не могу. Хочется это на уровне сиквела сделать.
10 июн 09, 12:10    [7284979]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
Oblom,

Однако запрос к таблице example_table данных не возвращает поскольку таблица залочена.
truncate table example_table
10 июн 09, 12:15    [7285023]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
iljy
Guest
Oblom,

заполняете новыми данными другую таблицу, потом дроп (или переименование) старой и переименовать новую
10 июн 09, 12:18    [7285047]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 624
linke
Oblom,

Однако запрос к таблице example_table данных не возвращает поскольку таблица залочена.
truncate table example_table


возвращается не пустой сет, запрос вообще не возвращает данных, поскольку таблица залочена, то есть он стоит в очереди.
10 июн 09, 12:20    [7285061]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
Oblom,

Обычно используется меньшее количество блокировок.
Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку.

Сообщение было отредактировано: 10 июн 09, 12:27
10 июн 09, 12:24    [7285086]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
http://msdn.microsoft.com/ru-ru/library/ms188249.aspx
10 июн 09, 12:24    [7285090]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
UV
Member

Откуда: EU
Сообщений: 36
Oblom
linke
Oblom,

Может табличку еще одну архивную сделать и перед truncate туда данные заливать?


таблица очень большая, и при этом ограничение по месту, так что вторую копию держать я себе позволить не могу. Хочется это на уровне сиквела сделать.


Если нет место для архивное копие как надеешся читат старое значение? Думаю что READ_COMMIT_SNAPSHOT кушает hdd space. Думаю как сказал iljy - заливай в example_table_new, держи старой example_table и в конце - DROP & RENAME. READ_COMMIT_SNAPSHOT вюключи.
10 июн 09, 12:30    [7285118]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 624
сеньк, буду пробовать
10 июн 09, 12:33    [7285139]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
linke
Oblom,

Обычно используется меньшее количество блокировок.
Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку.
тем не менее однажды давно столкнулся с проблемой, что часто при транкейте возникал жоский дедлок.
Проблему решили заменой банальным DELETE... FROM... Благо таблица была небольшой.
10 июн 09, 13:09    [7285378]     Ответить | Цитировать Сообщить модератору
 Re: Блокировки  [new]
Mayh
Guest
LSV
linke
Oblom,

Обычно используется меньшее количество блокировок.
Если инструкция DELETE выполняется с блокировкой строк, для удаления блокируется каждая строка таблицы. Инструкция TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку.
тем не менее однажды давно столкнулся с проблемой, что часто при транкейте возникал жоский дедлок.
Проблему решили заменой банальным DELETE... FROM... Благо таблица была небольшой.


транкейт кроме удаления ещё и счетчики обнуляет...
10 июн 09, 16:59    [7286816]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить