Автоматическое освобождение mload в терадате

Мы внедряем хранилище данных в teradata и имеем наш этап процесса загрузки данных из источника в teradata с помощью утилиты mload. Проблема, с которой мы столкнулись, заключается в том, что по какой-то причине mload была активна в сеансе таблицы и не загружала данные. Затем на 99% мы возвращаемся и запускаем команду release load name таблицы. Это всегда работает, и у нас никогда не было потери данных.

Мой вопрос: можем ли мы автоматизировать этот процесс? У меня есть около 50 таблиц, поэтому я могу создать скрипт, который проверяет, активен ли mload для этой таблицы, и выпустить mload, если он активен. прежде чем на самом деле запустить саму WF. Я могу иметь эти сценарии, как если бы загрузка была активной, то отпустила или прошла. Я не могу найти, как проверить, активен ли mload для таблицы.

Есть ли системная таблица или запрос, который может сказать, активен ли mload для таблицы. Пожалуйста, порекомендуйте. Спасибо!

1 ответ

Вы можете использовать.LABLES и ACTIVITYCOUNT, чтобы узнать, заблокированы ли таблицы или существуют таблицы справки. Добавьте это в конец / начало вашего скрипта Mload.

ACTIVITYCOUNT возвращает количество записей, выбранных / затронутых предыдущим запросом SQL.

LABEL - назначает метку набору команд SQL.

-- DECLARE RULES OF THE LABES
SELECT TOP 1 * FROM <tablename>;
.IF ACTIVITYCOUNT <> 0 THEN .GOTO RELEASE_MLOAD;

SELECT TOP 1 * FROM UV_<tablename>;
.IF ACTIVITYCOUNT >= 0 THEN .GOTO DROP_UV;

SELECT TOP 1 * FROM ET_<tablename>;
.IF ACTIVITYCOUNT >= 0 THEN .GOTO DROP_ET;

SELECT TOP 1 * FROM WT_<tablename>;
.IF ACTIVITYCOUNT >= 0 THEN .GOTO DROP_WT;

SELECT TOP 1 * FROM LOG_<tablename>;
.IF ACTIVITYCOUNT >= 0 THEN .GOTO DROP_LOG;

-- DECLARE THE LABELS
.LABEL RELEASE_MLOAD
RELEASE MLOAD <tablename>;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;

.LABEL DROP_UV
DROP TABLE UV_<tablename>;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;

.LABEL DROP_ET
DROP TABLE ET_<tablename>;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;

.LABEL DROP_WT
DROP TABLE WT_<tablename>;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;

.LABEL DROP_LOG
DROP TABLE LOG_<tablename>;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;

Если ваша попытка получить доступ к таблице встречает номер ошибки 2652, Operation not allowed: %DBID.%TVMID is being Loaded, это означает, что таблица загружается или что предыдущая попытка загрузить таблицу не удалась и не была решена.

При тщательном планировании вы сможете использовать наличие таблиц ошибок сбора и приложения для определения наличия блокировки MultiLoad или выполнения предыдущей MultiLoad работы с ненулевым кодом возврата. Таблица ошибок получения, которая указана как третья таблица в BEGIN MLOAD команда (et_tname1), ловит ошибки, возникающие на этапе сбора данных. Таблица приложения, которая указана в качестве четвертой таблицы в BEGIN MLOAD команда (uv_tname1), ловит ошибки, обнаруженные на этапе приложения.

Если UV таблица присутствует, но не содержит записей, возможно, произошел сбой мультизагрузки на этапе сбора данных. В этом можно убедиться, проверив наличие строк в таблице "ET". В этом состоянии блокировка MultiLoad может быть снята, а таблицы ошибок удалены. Это позволит получить доступ к таблице и / или перезапустить шаг загрузки.

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

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

Рассматривали ли вы вопрос об использовании оператора ANSI MERGE в своем рабочем процессе Informatica, чтобы избежать этой проблемы? Вы получаете некоторые преимущества утилиты MultiLoad, но ваша способность к восстановлению не оставляет таблицу в заблокированном состоянии, как эта утилита. Это может потребовать пересмотра вашего подхода в вашем ETL, но что-то, чтобы рассмотреть дальнейшие действия.

Другие вопросы по тегам