Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Доброго дня господа !

Мне необходимо в таблице временно залочить запись
Т.е. сказать базе что определенные записи (условие есть)
не должны быть видны пользователям. (обьем операции 10-20 тыс записей)

Разлочил - все снова их увидели ...
Есть ли такая возможность ?

Заранее благодарен !
4 апр 12, 13:37    [12363870]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А "видеть" и "не видеть" - это какие команды?
4 апр 12, 13:40    [12363893]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
select row
Guest
HOME_X,

сдалай select записи
4 апр 12, 13:40    [12363900]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
вместо таблицы использовать вьюху
4 апр 12, 13:49    [12363970]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
WHERE ID not in (SELECT ID FROM СписокСпратянных записей)

ps Какой однако глупый вопрос. Может лучше в армию сходить ? :)
4 апр 12, 14:22    [12364239]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Господа !

"....WHERE ID not in (SELECT ID FROM СписокСпратянных записей)...."

У меня огромный програмный комплекс.
Я не знаю где именно используеться данный объект в каких листах,
и как их перекомпилить.

"...вместо таблицы использовать вьюху ..."
sp_rename T,T1
create view T as select * from T1
Если осуществить замену обьектов - слетат пакеты и тригера базы, сколько их и где искать ?

Повторяю вопрос
Мне необходимо на живой таблице - попытаться управлять видимостью записей.
Возможно ли это ?
4 апр 12, 14:46    [12364517]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
HOME_X,

Удалять-инсертить тоже не выход ... там могут быть каскадные механизмы
4 апр 12, 14:49    [12364544]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Glory
Member

Откуда:
Сообщений: 104751
HOME_X
Мне необходимо на живой таблице - попытаться управлять видимостью записей.
Возможно ли это ?

Дайте определение "видимость"
Вот я пишу запрос к вашей таблице - select * from table
Как вы собиратесь управлять результатом этого запроса ?
4 апр 12, 14:53    [12364577]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Glory
Дайте определение "видимость"

Хочу как админ базы сказать - "Записи с значениями поля F1=10 более не видны всем пользователям"
Спустя время - вернуть видимость.

Glory
Вот я пишу запрос к вашей таблице - select * from table

Сделали запрос и не увидели записей с F1=10 (но они не удалены....)

Glory
Как вы собиратесь управлять результатом этого запроса ?

Это органичение видимости по всем интерфейсам, планирую в дальнейшем
использовать этот эффект, но это тема специфицна, не для нашего форума.
Могу изложить - если будет любопытно...
4 апр 12, 15:13    [12364787]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
HOME_X
Хочу как админ базы сказать - "Записи с значениями поля F1=10 более не видны всем пользователям"
Спустя время - вернуть видимость.
Есть два варианта. Или запрограммировать такое поведение, или вырвать волос из бороды Хоттабыча и сказать "Хочу, чтобы записи с значениями поля F1=10 более не видны всем пользователям".
4 апр 12, 15:23    [12364909]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Гавриленко Сергей Алексеевич
HOME_X
Хочу как админ базы сказать - "Записи с значениями поля F1=10 более не видны всем пользователям"
Спустя время - вернуть видимость.
Есть два варианта. Или запрограммировать такое поведение, или вырвать волос из бороды Хоттабыча и сказать "Хочу, чтобы записи с значениями поля F1=10 более не видны всем пользователям".


Вы знаете как это сделать централизовано с серверной части ?
Без переделки интерфейса и подмены обьектов ?
4 апр 12, 15:28    [12364970]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
HOME_X, в sql server нет встроенных прав доступа на уровне строк. варианты как реализовать это самому уже привели, да и статьи в интернете есть по этому поводу
4 апр 12, 15:28    [12364978]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
проба
Guest
не знаю можно ли так но может попробовать
бегин тразакшин
делете
роллбек транзакшин
4 апр 12, 15:30    [12364994]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
Shakill
HOME_X, в sql server нет встроенных прав доступа на уровне строк. варианты как реализовать это самому уже привели, да и статьи в интернете есть по этому поводу


Понял - принято - жаль !
Спасибо за участие.
4 апр 12, 15:34    [12365052]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
проба
не знаю можно ли так но может попробовать
бегин тразакшин
делете
роллбек транзакшин


Не - там каскады стоят....
4 апр 12, 15:35    [12365062]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 66
HOME_X,

как вариант для допиливания:

CREATE PARTITION FUNCTION pf_Num (int) AS RANGE LEFT FOR VALUES (5)
GO
CREATE PARTITION SCHEME ps_Num AS PARTITION pf_Num TO ([PRIMARY], [PRIMARY])
GO

CREATE TABLE T (Id INT) ON ps_Num (Id);
GO
INSERT INTO T (Id) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
GO
CREATE TABLE T_Empty (Id INT) ON ps_Num (Id);
GO

SELECT * FROM T;
GO
ALTER TABLE dbo.T SWITCH PARTITION 1 TO dbo.T_Empty PARTITION 1; 
GO
SELECT * FROM T;
GO
ALTER TABLE dbo.T_Empty SWITCH PARTITION 1 TO dbo.T PARTITION 1;
GO
SELECT * FROM T;
GO
4 апр 12, 15:40    [12365107]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
думаю что сейчас закидают шапками
но если для сессии выставить уровень изоляции READPAST
и заблокировать нужные строки, то чисто теоритически, вы их не увидите
4 апр 12, 15:45    [12365145]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
HandKot
думаю что сейчас закидают шапками
но если для сессии выставить уровень изоляции READPAST
и заблокировать нужные строки, то чисто теоритически, вы их не увидите
А как эти записи отличить от меняющихся по какой-либо другой логике?
4 апр 12, 15:47    [12365162]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
везде есть свои грабли
было предположение, что работает только select
4 апр 12, 15:55    [12365244]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
проба
Guest
сделал то что написал выше

сделал такой вывод
если блокируем запись в одном запросе
в в параллельном запросе ее читаем
сервер просто лочит второй запрос и ждет освобождения блокировки
получается что наложить блокировку так чтобы запись не читалась как будто ее совсем нет мы не можем

а какая исходная задача?
может можно какие-то другие подходы использовать
почему нельзя применить стандартный подход к созданию вью?
ведь пользователь видит какое-то вью в любом случае
4 апр 12, 16:01    [12365290]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
проба
Guest
автор
определенные записи (условие есть)
не должны быть видны пользователям


вообще это выражение неоднозначно

1 если пользователь делает select * то чтобы записи исчезли достаточно сделать правильное вью

2 если спрятать записи означает что любые операции
происходящие в заданном интервале времени
и пока записи скрыты
будут игнорировать выбранные записи то записи надо просто удалить

а чтобы не было проблем со ссылочной целостностью
то придется и ссылки удалить
те удалить несколько записей из нескольких таблиц
предварительно скопировав их в место откуда потом мы их восстановим
но этот подход требует понимая какие ссылки существуют в таблицах
но вообще говоря это реализуемо и вряд ли сложно
просто потребуется определенная аккуратность
4 апр 12, 16:22    [12365461]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
проба, на всяк случай, вдруг не читали: Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005
4 апр 12, 16:33    [12365571]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
HOME_X
Member

Откуда:
Сообщений: 2695
проба
почему нельзя применить стандартный подход к созданию вью?


Это безусловно верный подход - если Вы делаете разработку с нуля.
У меня СУЩЕСТВУЮЩИЙ продукт Microsoft, который я не могу просто переделать.
И где участвуют View, а где ссылка на таблицу сказать сложно, обьемы велики
4 апр 12, 17:04    [12365888]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
Glory
Member

Откуда:
Сообщений: 104751
HOME_X
И где участвуют View, а где ссылка на таблицу сказать сложно, обьемы велики

В смысле ?
Вы же таблицу переименуете, и создатите на ее основе представление со старым именем таблицы
4 апр 12, 17:06    [12365907]     Ответить | Цитировать Сообщить модератору
 Re: Как залочить запись  [new]
проба
Guest
автор
проба, на всяк случай, вдруг не читали: Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005


не работал с этой фичей
но встатье сказано что эта фича может применяться как раз для случая подобного нашему
так что похоже это то что нужно для решения

хотя честно говоря я бы наверное делал бы так как я написал если не сильно много зависимостей
с защитой на уровне записей надо еще разбираться
4 апр 12, 17:07    [12365909]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить