2016-06-29 2 views
-1

У меня есть программа, которая берет пользователя и обновляет информацию о нем в пяти таблицах. Процесс довольно сложный, так как требуется много шагов (страниц) для завершения. У меня есть записи журналов, sysout и syserr, которые помогают мне находить sql-запросы в консоли IDE, но у них их нет. Я уже провел много дней, чтобы поймать другие отсутствующие запросы, отлаживая их, но пока не повезло. Причина, по которой я делаю это, - это то, что я хочу автоматизировать обновления информации о пользователях, поэтому мне не нужно вручную просматривать каждую страницу вручную.Как отслеживать изменения для определенных таблиц базы данных?

Интересно, может ли я иметь какой-либо метод, который покажет мне изменения таблицы базы данных, поскольку я уже знаю имена таблиц, по переменным, я имею в виду, были ли это операторы обновления или вставки и что именно изменилось (имя столбца и значение вставлено/обновлено). Любые советы высоко ценится. У меня есть IBM RAD и база данных DB2. Благодарю.

+0

Я имею в виду, что SQL Trace приблизит вас к этому. – Adam

+1

Что такое версия/платформа DB2? – mustaccio

+0

Не поддерживает ли DB2 использование триггеров? За исключением массовых нагрузок - таких как BI - триггер будет моим инструментом выбора, чтобы отслеживать изменения в SQL DB. – Tyron78

ответ

0

В DB2 вы можете отслеживать основные данные аудита.

DB2 может отслеживать, какие данные были изменены, кто изменил данные и операцию SQL, которая изменила данные.

Чтобы отслеживать, когда данные были изменены, определите таблицу как временную таблицу системного периода. Столбцы, начинающиеся с строки и начала строки в связанной истории, содержат информацию о том, когда произошли изменения данных.

Чтобы отслеживать, кто и какой SQL модифицировал данные, вы можете использовать столбцы выражений без детерминированных выражений. Эти столбцы могут содержать значения, которые полезны для целей аудита, такие как значение специального регистра CURRENT SQLID в момент изменения данных. Возможные значения для недетерминированных столбцов выраженных выражений определены в синтаксисе для операторов CREATE TABLE и ALTER TABLE.

Например

CREATE TABLE TempTable (balance INT, 
       userId VARCHAR(100) GENERATED ALWAYS AS (SESSION_USER) , 
       opCode CHAR(1) 
          GENERATED ALWAYS AS (DATA CHANGE OPERATION) 
       ... SYSTEM PERIOD (SYS_START, SYS_END)); 

Колонка хранит идентификатор пользователя, который модифицированные данные. Этот столбец определяется как недетерминированный сгенерированный столбец выражений, который содержит значение специального регистра SESSION_USER.

В столбце opCode хранится операция SQL, которая модифицировала данные. Этот столбец определяется как недетерминированный сгенерированный столбец выражений и сохраняет значение, указывающее тип операции SQL.

Предположим, что вы затем использовать следующие операторы для создания таблицы истории для TempTable и связать эту историю таблицу с TempTable:

CREATE TABLE TempTable_HISTORY (balance INT, user_id VARCHAR(128) , op_code CHAR(1) ...); 

ALTER TABLE TempTable ADD VERSIONING 
       USE HISTORY TABLE TempTable_HISTORY  ON DELETE ADD EXTRA ROW; 
0

Захват SQL заявления для ограниченного числа таблиц и ограниченное время - в качестве насколько я понимаю вашу проблему - может быть решена с помощью средства аудита DB2.

create audit policy tabsql categories execute status both error type normal 

audit <tabname> using policy tabsql 

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

audit <tabname> remove policy 

Отъезд

db2audit

команды для настройки путей и извлекать данные из файла аудита в файл с разделителями, который затем может быть загружен снова в базу данных. Необходимые таблицы могут быть созданы с помощью предоставленного сценария sqllib/misc/db2audit.ddl. Вам понадобится запрос в таблице EXECUTE для ваших SQL-данных.

Обратите внимание, что аудит может захватывать огромные объемы данных, поэтому обязательно выключите его после того, как вы запрограммировали необходимую информацию.

Смежные вопросы