2016-10-21 4 views
-2

Я новичок в мире программирования. У меня есть SQL-скрипт, который необходимо автоматизировать. Автоматизации требуется следующее:Автоматизация SQL-скрипта

1) Скрипт должен работать каждое воскресенье

2) Автоматически сбросить результаты для DUMP_YYYYMMDDHH24MISS.txt

3) набор результатов деготь

, являющегося файлом

4) загрузите на URL SFTP с предоставленным именем пользователя и паролем.

Я использую: UNIX, Vertica DB

Может Gurus здесь, пожалуйста, помогите?

+4

Что вы уже пробовали и что было результатом? –

+0

Для (3): для i в 'ls * .txt'; do/usr/bin/gzip $ i; сделано Для (4): sftp UNAME @ IPADDRESS sftp> mput .gz Пока что нет (1) и (2), оцените любые указатели, которые, возможно, вам дадут указания, поскольку я новичок - 1-й день при программировании :) –

+0

Это довольно широко. Короткий ответ: написать сценарий оболочки, который вызывает 'vsql' для подключения и выполнения sql. Используйте параметры, такие как '\ o', чтобы вывести sql в файл и' \ a', чтобы установить неровные данные и '\ t' только для кортежей. Для отправки файла используйте 'gzip' и/или' tar' и scp или sftp клиент. Используйте 'cron', чтобы запланировать его. Это не сложно, но много разных вещей, если вы не знакомы с ними.Начните с простого, получив vsql для создания файла, а затем создайте скрипт вокруг него. – woot

ответ

1

Это действительно 4 вопроса, и, вероятно, следует спросить как таковые. Для того, чтобы ответить в текущем формате, хотя:

1) График задачи Автоматически - Crontab

В терминале типа crontab -e.

Если вы хотите что-то каждое воскресенье в 1am, добавьте следующую строку:

0 1 * * * 0 /path/to/script/script.sh 

Это будет выполнять скрипт каждый воскресенье.

2) Настройка вывода команды

Я знаком только с оракулом. Формат, вероятно, схож. Чтобы получить имя файла по своему желанию, вы должны использовать функцию даты следующим образом. (Это, как я хотел бы сделать это с Oracle):

d=$(date +%Y%M%D%H%M) 
var=$(sqlplus -s/as blahblahblah 
select * from stuff; 
exit 
EOF 
) 

file_name=DUMP_${d}MISS.txt 
echo "${var}" >> ${file_name} 

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

3) тарирования выход

tar -xvf ${file_name} 

4) Отправить через SFTP Вы должны были бы проверить подлинность SFTP, что выходит за рамки того, что кто-нибудь может ответить без дополнительной информации. После того, как вы настроите машины на аутентификацию, вы должны:

sftp [email protected]<<EOF 
put ${file_name} 
EOF 
+1

Осторожно. Этот cron будет выполнять намного больше одного раза каждое воскресенье. Вы хотите, чтобы что-то большее, чем '0 1 * * 0', запускалось в определенное время каждое воскресенье. – woot

+0

О да, да. Я не должен был каждый из них что-то вроде этого. Обычно день недели cron используется как ограничивающий фактор, а не как исполняемый фактор. (Например, я всегда делал это как, запускаю это каждый день * кроме * воскресенье). Спасибо за уловку. – mkingsbu

+1

Жаль, что все еще было не так. Я изменил его для вас. То, что вы делали, выполнялось каждые 1 минуту в течение 1 часа в воскресенье. ;-) – woot