Как увидеть все записи, измененные с момента последнего коммита в Oracle 10? - PullRequest
3 голосов
/ 05 февраля 2010

У меня довольно большой сценарий Oracle PL / SQL, который я тестирую, и я хотел узнать, можно ли увидеть, какие записи были обновлены / удалены / вставлены с момента последнего принятия в базу данных? Мне нужен более быстрый способ проверить правильность всех действий с базой данных. У меня есть доступ к командной строке, а также к пользовательскому инструменту Oracle SQL Developer.

Ответы [ 5 ]

4 голосов
/ 05 февраля 2010

В Oracle 10g (и, думаю, начиная с 9i) вы можете использовать Flashback Query для этого.

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

Итак, вот небольшой пример:

SQL> create table t1 as select level lev from dual connect by level < 100;

Table created.

SQL> select count(*) from t1;

  COUNT(*)
----------
        99

SQL> select count(*) from t1 as of timestamp systimestamp;

  COUNT(*)
----------
        99

SQL> update t1 set lev = -lev;

99 rows updated.

SQL> select max(lev) from t1 as of timestamp systimestamp;

  MAX(LEV)
----------
        99

SQL> select max(lev) from t1;

  MAX(LEV)
----------
        -1

SQL> commit;

Commit complete.

SQL> select max(lev) from t1 as of timestamp systimestamp;

  MAX(LEV)
----------
        -1

SQL>

UPD: дажелучше использовать Flashback Version Query или Flashback Transaction Query с некоторыми изменениями для фильтрации изменений, внесенных во все сеансы, кроме текущего.

2 голосов
/ 05 февраля 2010

Если ваша среда это позволяет, вы можете добавить триггеры к каждой таблице, создавая некоторый журнал аудита.

В oracle есть функция аудита, которую вы можете использовать. Google считает, что эта статья может быть полезна: http://www.securityfocus.com/infocus/1689

0 голосов
/ 05 февраля 2010

Вы должны лучше определить свою проблему - Вы хотите написать сценарий PLSQL, который захватывает только данные, которые были обновлены с момента последнего запуска? Имеет ли набор записей, который вы просматриваете, уникальный идентификатор, который является последовательным? Можете ли вы позволить себе выбрать возможные дубликаты и проверить их с помощью окончательного набора, чтобы увидеть, действительно ли они являются дубликатами, и таким образом отбросить их? В зависимости от этих случаев сложность вашего решения изменится

0 голосов
/ 05 февраля 2010

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

всегда ASK_TOM

0 голосов
/ 05 февраля 2010

Я могу ошибаться, но я не думаю, что есть простой способ сделать это. Единственное, что приходит на ум, - это проверка журнала повторов, но у пользователя нет интерфейса для проверки операций. Вы можете сделать это вручную , но это не так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...