использование sqlldr для загрузки данных в базу
sqlldr – SQL*Loader. Позволяет загружать данные в базу из файла, например csv. Пример использования есть тут.
По умолчанию для работы пользователя с sqlldr пользователя нужно добавить в группу dba или запускать sqlldr из под sudo.
~ $ sqlldr Message 2100 not found; No message file for product=RDBMS, facility=ULMessage 2100 not found; No message file for product=RDBMS, facility=UL ~ # ls -ltr /oracle/product/bin/sqlldr -rwxr-xr-x 1 oracle dba 736761 авг 16 2011 /oracle/product/bin/sqlldr ~ # usermod -G dba <user> ~ # grep dba /etc/group dba:x:1017:oracle,<user>
Запуск (можно сделать через .sh скрипт типо loader.sh):
sqlldr userid=<userid> control=upload.ctl log=/tmp/aab_upload.log bad=/tmp/aab_upload.bad
- control=upload.ctl – конфигурация заливки, в которой прописаны sql команды, путь к файлу с данными и формат данных
- log=/tmp/upload.log – лог загрузки, summary в последних 20 строках.
- bad=/tmp/upload.bad – кривые записи (по которым произошел reject).
Если в файле upload.log выдает “date format picture ends before converting entire input string” – значит загружаемые данные не соответствуют описанию. Например, если у нас дата в описании указана без hh:mm, а в файле есть hh:mm.
Record 1: Rejected - Error on table <TABLE_NAME>, column <COLUMN_NAME> ORA-01830: date format picture ends before converting entire input string
автоматизация запуска SQL скрипта
Простой запуск скрипта через sqlplus:
sqlplus <conn>
SQL > @/oracle/scripts/script.sql
Для автоматизации запуска SQL скрипт без проблем запускается через .sh скрипт, а там уже ничего не стоит добавить в cron:
bin/sql_script_starter.sh #!/bin/bash sqlplus <conn> << EOF @/oracle/scripts/script.sql exit; EOF