Журналирование реализовано с помощью пакета PACK_LOG, который включает две процедуры:
•ENABLE_LOGGING – включает журналирование для указанной таблицы и ее колонок:
PROCEDURE ENABLE_LOGGING( vTABLE VARCHAR2, vCOLUMN_LIST VARCHAR2 := NULL, vSCHEMA_NAME VARCHAR2 := NULL); |
▪vTABLE – название таблицы, которая должна журналироваться;
▪vCOLUMN_LIST – полный список названий колонок, разделенных запятыми, которые должны журналироваться. Если NULL, то журналирование включается для всех колонок таблицы за исключением LOG_ID;
▪vSCHEMA_NAME – имя схемы, в которой находится указанная таблица. Если NULL, то будет использоваться схема kernel ядра базы данных.
•DISABLE_LOGGING – выключает журналирование для указанной таблицы и ее колонок:
PROCEDURE DISABLE_LOGGING( vTABLE VARCHAR2, vCOLUMN_LIST VARCHAR2 := NULL, vSCHEMA_NAME VARCHAR2 := NULL); |
▪vTABLE – название таблицы, журналирование которой нужно запретить;
▪vCOLUMN_LIST – полный список названий колонок, разделенных запятыми, которые не должны журналироваться. Если NULL, то журналирование выключается для всех колонок таблицы;
▪vSCHEMA_NAME – имя схемы, в которой находится указанная таблица. Если NULL, то будет использоваться схема kernel ядра базы данных.
•GET_PAUSE_MODE – возвращает 1, если журналирование приостановлено в текущей сессии и 0, если журналирование включено:
FUNCTION GET_PAUSE_MODE RETURN NUMBER; |
•SET_PAUSE_MODE – приостанавливает или возобновляет журналирование для текущей сессии:
PROCEDURE SET_PAUSE_MODE(vPAUSE_MODE NUMBER); |
▪vPAUSE_MODE – если параметр равен 1, журналирование будет приостановлено, если 0 — возобновлено;
В процедурах могут выполняться DDL операторы ALTER TABLE table_name ADD column_name, при этом происходит COMMIT транзакции. Делать вызов этих процедур внутри основной транзакции (серверного вызова) может быть опасно! |
Также управлять журналированием можно с помощью менеджера IHistoryService (из пространства имен Ultima):
HistoryService.EnableLogging("kernel", "table_name");
HistoryService.DisableLogging("kernel", "another_table_name", "column1", "column2");
/* Hard optimization ! Danger ! */ using (HistoryService.PauseLogging()) { CloneAllPrices(); } |