Что такое формат файла BAD?
Файл .bad - это Oracle SQL*Loader Bad File, текстовый выходной файл, который SQL*Loader записывает при отклонении строк во время массовой загрузки данных в базу данных Oracle.
Файл содержит дословную копию каждой строки, которую не удалось загрузить, в том же формате, что и исходные входные данные (CSV, фиксированная ширина или поток). Поскольку содержимое точно отражает источник, исправленные строки можно подавать обратно в sqlldr, используя тот же управляющий файл .ctl без переформатирования - это делает файл .bad артефактом для исправления и повторной попытки, а не просто журналом ошибок.
Записи попадают в файл .bad по трем причинам:
- Строка нарушает ограничение Oracle (дубликат уникального ключа, нарушение
NOT NULLи т. д.). - SQL*Loader не может разобрать границы полей в некорректно сформированной строке с разделителями.
- Значение поля не может быть преобразовано в тип данных целевого столбца.
Файл .bad отличается от файла отброшенных записей .dsc. Отброшенные записи - это строки, намеренно пропущенные предложением WHEN в управляющем файле; попытка их загрузки даже не предпринималась. «Плохие» же записи (Bad records) пытались загрузиться, но произошла ошибка.
Если все входные строки загружены успешно, файл .bad не создается вовсе. Имя по умолчанию производно от входного файла данных (например, data.csv → data.bad), если оно не переопределено с помощью BADFILE= в управляющем файле или BAD= в командной строке.
SQL*Loader является частью Oracle Database с версии 6 (1988) и остается основным инструментом в текущих выпусках Oracle Database 23ai.
Безопасность и защита
РИСК: LOWПростой текстовый файл данных; не является исполняемым. Может содержать конфиденциальные бизнес-данные (персональные данные, финансовые записи) из неудавшегося импорта - обращайтесь соответственно, ограничьте доступ к файловой системе только для авторизованных администраторов БД и операторов ETL.
Детали формата
в двух словах- Файл плохих сообщений Microsoft Exchange Server - Транспорт SMTP Exchange сохраняет недоставленные или некорректные сообщения в файлах .BAD в каталоге очереди Exchange.
- Общий маркер «плохих данных» (различные приложения) - Некоторые инструменты ETL и устаревшие программы используют .bad как общее расширение для выходных файлов с ошибками или отклонениями.
Программы, открывающие файлы BAD
Технические подробности
глубокая спецификация| Тип формата | Текстовое зеркало отклоненных строк (та же структура, что и у входного файла данных SQL*Loader) |
| Кодировка | Соответствует входному файлу данных - ASCII, UTF-8 или набор символов Oracle NLS, настроенный в управляющем файле |
| Содержимое | Дословная копия каждой строки, отклоненной во время работы SQL*Loader, в исходном входном формате |
| Причины отклонения | Нарушение ограничений Oracle (PK/UK/NOT NULL); нечитаемые разделители полей; ошибка преобразования типов данных |
| Обработка данных LOB | Содержимое LOB из источников LOBFILE или SDF НЕ записывается в файл .bad при отклонении строки |
| Имя файла по умолчанию | <базовое_имя_входного_файла>.bad (например, data.csv → data.bad) |
| Переопределение имени файла | BADFILE= в управляющем файле .ctl или BAD= в командной строке sqlldr |
| Создание файла | Создается только при отклонении хотя бы одной строки; отсутствует при полностью успешной загрузке |
| Отличие от .dsc | .dsc (discard) содержит строки, пропущенные предложением WHEN - намеренные пропуски, а не ошибки; .bad содержит строки, вставка которых не удалась |
| Рабочий процесс повторного использования | Исправленный файл .bad может быть загружен напрямую с тем же управляющим файлом .ctl без переформатирования |
| Поддержка платформ | Любая платформа Oracle Database: Linux, Unix, Windows, Solaris, AIX |
| Выпущен | Oracle 7 era, circa 1992 (SQL*Loader has existed since Oracle 6, 1988) |
| Последняя версия | N/A - format is defined by the input data format; no versioning |
| Спецификация | docs.oracle.com |
Конвертации BAD
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах BAD.