1. Если вы используете Oracle 11g, технология Oracle Flashback - это функция, которая позволяет вам это делать.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#BJFGJHCJ.
2. В более старых версиях вы можете использовать пакет DBMS_WM и включить управление версиями для нужных вам таблиц. Однако существуют определенные ограничения на типы таблиц, для которых можно включить управление версиями.
http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96628/long_ref.htm#80312
3.Другие реализации, которые я видел до сих пор, имеют свою собственную версию некоторых процедур DBMS_WM. В основном, имеют структуру, как ..
SQL> desc scott_emp;
Name Null? Type
----------------------------------------- -------- -------------
EMPNO NOT NULL NUMBER(4)
ENAME NOT NULL VARCHAR2(10)
JOB NOT NULL VARCHAR2(9)
MGR NUMBER(4)
HIREDATE NOT NULL DATE
SAL NOT NULL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NOT NULL NUMBER(2)
EFF_DATE DATE
END_DATE DATE
Где последние два столбца используются для определения того, в течение какого периода времени запись была «логически активной» в базе данных. Реализация осуществляется с помощью триггеров, где
- Каждая вставка / обновление конвертируется в
«Истекает текущая строка (обновление) +
Вставить новую строку "
- Каждое удаление
Преобразовано в «Истекает текущий»
строка "* * 1016
Последний подход может решить вашу задачу, если вы хотите отслеживать изменения только в некоторых столбцах (например, допустим, вас интересуют только изменения в отделах и окладах).
Пожалуйста, Не Выберите модель, подобную этой. (Do not
Сохранить каждое изменение столбца как отдельную строку)
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1769392200346820632