Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.09.28;
Скачать: [xml.tar.bz2];

Вниз

MSSQL: Как узнать какая строка обновлялась последней?   Найти похожие ветки 

 
[ВладОшин] ©   (2014-02-18 18:56) [0]

суть вопроса пояснит пример:

CREATE TABLE [dbo].[T1](
[f1] [int] NOT NULL
) ON [PRIMARY]

insert into t1 values (1);
insert into t1 values (2);

if RAND() > 0.5
begin
 update t1 set f1 = 1 where f1 = 1;
end else
begin
update t1 set f1 = 2 where f1 = 2;
end;

(строк обработано: 1)
вопрос:
Как можно вычислить, какой апдейт сработал?
Какая строка "моложе"?


 
asail ©   (2014-02-18 19:18) [1]

Можно ж отдельное поле держать с таймстампом последнего обновления записи. Заполнять или теми же запросами или триггером... Или я чего не понял?


 
[ВладОшин] ©   (2014-02-18 19:23) [2]


> asail ©   (18.02.14 19:18) [1]

Можно :)
но дело УЖЕ сделано. Поэтому вопрос в [0]. Никаких допстолбцов нет.
Думаю, есть ли что-то там типа rowid с timestamp где нибудь "внутрях"?


 
Inovet ©   (2014-02-18 19:25) [3]

Следуя логике, раз эта информация не нужна, значит её нет в базе. Допустим, как-то она там во время действия транзакции привязана к транзакции, а транзакция ко времени, но после завершения транзакции кому она нужна.


 
ТНЕ картман   (2014-02-18 19:33) [4]

http://habrahabr.ru/post/111207/


 
[ВладОшин] ©   (2014-02-18 19:46) [5]


> ТНЕ картман   (18.02.14 19:33) [4]

это хорошо, на будущее, но..
основная проблема всех аудитов - их надо включить :)
но зная где упасть, можно и соломку постелить  (> отдельное поле держать с таймстампом последнего обновления записи)

ситуация полностью описана в [0]. Интересует: есть ли в mssql (2008) что-то "недокументированное"

так просто, а вдруг.
хотя скорее всего  
> Inovet ©   (18.02.14 19:25) [3]


 
[ВладОшин] ©   (2014-02-18 19:50) [6]

просто у другого товарища из мира БД есть сквозной номер транзакции
может и у mssql есть что-то такое


> A system change number (SCN) is a logical, internal time
> stamp used by Oracle Database. SCNs order events that occur
> within the database, which is necessary to satisfy the ACID
> properties of a transaction. Oracle Database uses SCNs to
> mark the SCN before which all changes are known to be on
> disk so that recovery avoids applying unnecessary redo.
> The database also uses SCNs to mark the point at which no
> redo exists for a set of data so that recovery can stop.
>
>
> SCNs occur in a monotonically increasing sequence. Oracle
> Database can use an SCN like a clock because an observed
> SCN indicates a logical point in time and repeated observations
> return equal or greater values. If one event has a lower
> SCN than another event, then it occurred at an earlier time
> with respect to the database. Several events may share the
> same SCN, which means that they occurred at the same time
> with respect to the database.


 
ТНЕ картман   (2014-02-18 19:54) [7]


> так просто, а вдруг.
> хотя скорее всего  
> > Inovet ©   (18.02.14 19:25) [3]

не, ну в журнале транзакций это есть, только как выковырять?


 
asail ©   (2014-02-18 21:34) [8]

Должно быть. В интербэйсе есть, но там версионник и, впринципе, можно посмотреть всю историю изменений для каждой записи пока ее (историю) свипер не почистил...
Ms SQL, хоть и не версионник, но зато есть журнал. Там должно быть, но я по Ms SQL не силен.

> ТНЕ картман   (18.02.14 19:54) [7]

> не, ну в журнале транзакций это есть, только как выковырять?

Неужто тулзов каких нет? Гугл, например, такую нашел:
http://siddhumehta.blogspot.com.es/2009/02/free-tool-to-read-sql-server-2005-2008.html


 
Inovet ©   (2014-02-18 21:40) [9]

> [8] asail ©   (18.02.14 21:34)

Ну так пока не почистил. И журнал также почистится, винт не резиновый. Цель то какая? Найти, кто накосячил за последний день/месяц или всю историю надо?


 
asail ©   (2014-02-18 21:48) [10]


> Inovet ©   (18.02.14 21:40) [9]

> Цель то какая? Найти, кто накосячил за последний день/месяц
> или всю историю надо?

Дык, это не ко мне... Это к ТС... :)


 
[ВладОшин] ©   (2014-02-18 21:50) [11]


> Цель то какая?

с определенного времени (два дня) отменить все изменения таблицы


 
Inovet ©   (2014-02-18 21:55) [12]

> [11] [ВладОшин] ©   (18.02.14 21:50)

Не, ну тут таймштамп надо да и всё.


 
Inovet ©   (2014-02-18 22:02) [13]

В смысле - если это требования прикладной логики, зачем через системные средства искать пути.


 
asail ©   (2014-02-18 22:05) [14]


> Inovet ©   (18.02.14 21:55) [12]
> > [11] [ВладОшин] ©   (18.02.14 21:50)
>
> Не, ну тут таймштамп надо да и всё.

Как раз тут таймштамп не поможет... Надо всю историю изменений хранить. Грубо говоря, не юзать UPDATE совсем, а только INSERT. Тады мона откатиться будет на любой момент времени...


 
картман ©   (2014-02-18 22:09) [15]

это требования "дирехтур накосячил, а бекапы мы не делаем"


 
Inovet ©   (2014-02-18 22:10) [16]

> [14] asail ©   (18.02.14 22:05)

И я про это, тем более у Влада, как он говорит, так и сделано. Неудобно несколько, надо везде тогда для обычных запросов max() по таймштамп ставить. Ну или тогда уж в отдельную архивную таблицу старые версии перемещать.


 
[ВладОшин] ©   (2014-02-18 23:26) [17]

По хорошему, оно конечно, да. Бекапы и проч. - оно рулит..

Но это была обычная "темповая"  таблица на таком же серваке, "для легкой трансформации" других данных "как надо".

Не подумал, что жить будет, просто накидал минут за 40 проект1.ехе, заполнили руками, правили руками, смотрели что получается, правили снова и т.д. Поздно подумал, что образец надо бы сохранить.


 
картман ©   (2014-02-19 00:31) [18]


> [ВладОшин] ©   (18.02.14 23:26) [17]

если повезет, точка восстановления может попасть на нужную дату


 
Кщд   (2014-02-19 09:59) [19]

1. момент времени t1: транзакция (1) обновляет поле;
2. t2: транзакция (2) обновляет поле;
3. t3: транзакция (2) выполняет commit;
4. t4: транзакция (1) выполняет commit.

Вопрос: какое обновление "моложе"?)

Это к тому, что не нужно(и опасно) закладываться на разнообразные внутренние механизмы "нумерации"(как пример - вышеуказанный оракловый SCN) - они для внутреннего использования, но всегда стоит отталкиваться от бизнес-логики, в зависимости от которой и писать аудит(либо включать встроенный, если его поведение с вашей бизнес-логикой совпадает)


 
Кщд   (2014-02-19 10:01) [20]

>Inovet ©   (18.02.14 22:02) [13]
>В смысле - если это требования прикладной логики, зачем через системные средства искать пути.
вот, кстати, полностью согласен



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2014.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.002 c
15-1392990293
>|<
2014-02-21 17:44
2014.09.28
Crystal Reports to QuickRep converter


2-1382550259
Новичок
2013-10-23 21:44
2014.09.28
Преобразование типов


3-1300677386
Дмитрий С
2011-03-21 06:16
2014.09.28
Как быстрее с подзапросом или с присоединением сгруппированной..?


15-1380636974
Mikki
2013-10-01 18:16
2014.09.28
Доменная авторизация


15-1392565107
Drowsy
2014-02-16 19:38
2014.09.28
переменные в Bat-файле.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский