Oracle DB: разные хинты

использование 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

Leave a Reply