Доброго времени суток!
Каждый раз записывая изменения в базе в вордовский файл, появилась мысль, а нельзя ли средствами оракла отслеживать изменения в структуре базы и вести некую табличку куда можно было бы записывать дату изменения и SQL скрипт изменения. Я не имею в виду записи данных в таблицы, а именно изменение, добавление, удаление таблица, тригера, процедуры и т.д. и т.п.
Может есть у кого то какие то мысли или наработки!
Буду очень признателен !
Здравствуйте, AndreyY, Вы писали:
AY>Доброго времени суток! AY>Каждый раз записывая изменения в базе в вордовский файл, появилась мысль, а нельзя ли средствами оракла отслеживать изменения в структуре базы и вести некую табличку куда можно было бы записывать дату изменения и SQL скрипт изменения. Я не имею в виду записи данных в таблицы, а именно изменение, добавление, удаление таблица, тригера, процедуры и т.д. и т.п. AY>Может есть у кого то какие то мысли или наработки! AY>Буду очень признателен !
если кто то знает такую методу для ms sql, то был бы признателен.
... << RSDN@Home 1.0 beta 4 >> now playing : Enya — The Celts
Re: и ms sql Re: Отслеживание изменений в базе Оракла
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Ged, Вы писали:
Ged>>если кто то знает такую методу для ms sql, то был бы признателен.
Ged>>
L>А триггер на системные таблицы не поможет?
поможет. если это экслюзивно девелоперский сервер. а если на нём пасется еще туева хуча народа — то тут на системные таблицы триггера вешать не хорошо.
... << RSDN@Home 1.0 beta 4 >> now playing : Король и Шут — Камнем по голове
Re[3]: и ms sql Re: Отслеживание изменений в базе Оракла
Здравствуйте, Ged, Вы писали:
Ged>поможет. если это экслюзивно девелоперский сервер. а если на нём пасется еще туева хуча народа — то тут на системные таблицы триггера вешать не хорошо.
Почему?
Re[4]: и ms sql Re: Отслеживание изменений в базе Оракла
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Ged, Вы писали:
Ged>>поможет. если это экслюзивно девелоперский сервер. а если на нём пасется еще туева хуча народа — то тут на системные таблицы триггера вешать не хорошо.
L>Почему?
потому что, например, если триггер вызвал ошибку при реструктуризации другой базы, человеком не имеюшим отношения к тому кто триггеры писал — то сам понимаешь какая некузявость получается. да и нагрузка возрастет, хоть и не значительно. до кучи — я стараюсь избегать триггеров до тех пор, пока есть способ разумный обойтись без них.
... << RSDN@Home 1.0 beta 4 >> now playing : Mihail Shufutinskiy — Pesnya evrey skogo portnogo
Re[2]: и ms sql Re: Отслеживание изменений в базе Оракла
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Ged, Вы писали:
Ged>>если кто то знает такую методу для ms sql, то был бы признателен.
Ged>>
L>А триггер на системные таблицы не поможет?
Я уже думал над этим ! В принципе отследить изменение базы не проблема (именно с помощью тригера), а вот как отловить что с ней случилось и записать правельный скрипт SQL !?
Здравствуйте, AndreyY, Вы писали:
AY>Каждый раз записывая изменения в базе в вордовский файл, появилась мысль, а нельзя ли средствами оракла отслеживать изменения в структуре базы и вести некую табличку куда можно было бы записывать дату изменения и SQL скрипт изменения. Я не имею в виду записи данных в таблицы, а именно изменение, добавление, удаление таблица, тригера, процедуры и т.д. и т.п.
Мда...
Меня всегда настораживало, когда люди записывают протокол изменений вручную — это значит, что не используется средство проектирования структуры БД, а это является жуткой ошибкой.
Предложение повесить триггера на словарь БД — это разумное предложение в такой ситуации.
Более того оракл рекомендует создавать именно триггеры для аудита различных действий.
С технической точки зрения каждая запись в системном словаре содержит имя владельца схемы, поэтому можно безболезненно создать триггера, которые будут "смотреть" только на интересующие схемы. Более того необходимо разделить задачу на две — протоколирование изменений и генерацию на основе протокола DDL-текстов. Причем вторую задачу мы рассматривать не будем, это отдельная песня про написание хорошего серверного генератора.
А теперь хокус-покус по чтению документации
К счастью для ораклиных программистов и администраторов, им не надо создавать INSTEAD OF триггера на системные выьюхи, ПАТАМУ ЧТАА оракл предоставляет возможность протоколирования DDL событий!!!
CREATE TRIGGER AUDIT_CREATE_DB_OBJECT
AFTER CREATE ON DBO
/* ПРОТОКОЛИРУЕМ СОЗДАНИЕ ТАБЛИЦ */BEGIN
IF (ORA_SYSEVENT='CREATE' AND ORA_DICT_OBJ_TYPE='TABLE') THEN
INSERT INTO AUDIT_EVENT(ACTION_TYPE,OBJ_TYPE,OBJ_NAME)
VALUES(ORA_SYSEVENT,ORA_DICT_OBJ_TYPE,ORA_DICT_OBJ_NAME);
END IF;
END;
Существует несколько ограничений, про них надо читать документацию. Равно как надо читать доку про системные события, коими, например, являются ORA_SYSEVENT и ORA_DICT_OBJ_TYPE и ORA_DICT_OBJ_NAME.
Доки расположены здесь (регистрация бесплатна).
Ну и напоследок. Очень рекомендую пользовать средством проектирования БД, таким как Sybase PowerDesigner или Oracle Designer или, на худой конец, ErWin. Все эти средства предоставляют, помимо прочих полезностей, возможность ведения версионного контроля изменения структур и содержат хорошие серверные генераторы. А реальные пользовательские схемы нечего засорять версионностью — это мое мнение. Гораздо полезнее изучить и вести версионность данных — более ценная информация будет получена.
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
Re[2]: и ms sql Re: Отслеживание изменений в базе Оракла
Здравствуйте, Lloyd, Вы писали:
L>А триггер на системные таблицы не поможет?
Триггер на системные таблицы не поможет хотябы вот почему:
"Because SQL Server does not support user-defined triggers on system tables, it is recommended that no user-defined triggers be created on system tables."
(c) BOL