Цитата:
Сообщение от
kashperuk
Видели, что теперь администраторы не смогут данные править через обозреватель таблиц на live environments?
Проектировщики системы идут не в том направлении.
Они строят забор там, где в нем все равно проломят дыру и будут шастать туда и сюда. Потому что людям надо!
Бессмысленно строить забор так где нужен проход.
Правильнее было бы предусмотреть удобный механизм отката изменений.
Например в оракл есть удобный механизм флешбека.
Просто пишешь запрос
X++:
SELECT * FROM SCHEMA.TABLENAME /* AS OF TIMESTAMP TO_TIMESTAMP('2017-06-30 12:50:00', 'YYYY-MM-DD HH24:MI:SS') */ A
WHERE
...
и видишь данные на любой момент времени.
Если к тебе прибежал испуганный программист/админ/юзер -
шеф все пропало, гипс снимают, клиент уезжает "Я нечаянно удалил тучу данных!"
то просто берешь и пишешь
X++:
SELECT * FROM SCHEMA.TABLENAME /* AS OF TIMESTAMP TO_TIMESTAMP('2017-06-30 12:50:00', 'YYYY-MM-DD HH24:MI:SS') */ A
WHERE
...
AND NOT EXISTS
(
SELECT 'x' FROM SCHEMA.TABLENAME
B
WHERE (
SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(A.DATAAREAID),1,4)
AND B.recid = A.recid
)
)
И видишь то что он грохнул.
Ну может выполняешь несколько раз этот запрос с перечнем полей count(*) на разную дату время чтобы поймать лучше момент времени с которого ндао взять удаленные впоследствии данные.
И затем восстанавливаешь их
X++:
INSERT INTO SCHEMA.TABLENAME
(
FIELD1, FIELD2 ...
)
SELECT FIELD1, FIELD2 ... FROM SCHEMA.TABLENAME /* AS OF TIMESTAMP TO_TIMESTAMP('2017-06-30 12:50:00', 'YYYY-MM-DD HH24:MI:SS') */ A
WHERE
...
AND NOT EXISTS
(
SELECT 'x' FROM SCHEMA.TABLENAME
B
WHERE (
SUBSTR(NLS_LOWER(B.DATAAREAID),1,4) = SUBSTR(NLS_LOWER(A.DATAAREAID),1,4)
AND B.recid = A.recid
)
)
Все.
Как бы в SQL Server штатно такое сделать ? Вроде до сих пор нельзя.