2013-08-19 1 views
0

У меня есть побочный проект, над которым я сейчас работаю, и требует, чтобы я скопировал файл .csv с удаленного FTP и сохранил его локально. Я решил, что буду использовать DBMS_SCHEDULER.GET_FILE, но у меня нет разрешения. Когда я спросил своего менеджера, он сказал, что я не получу привилегий для этого, и должен искать другие способы.DBMS_Scheduler get/put file alternative

После исследования в течение нескольких дней я продолжаю возвращаться к DBMS_SCHEDULER, мне не повезло или мои поисковые навыки ужасны.

Благодаря

ответ

3

Я не уверен, что вы хотели бы использовать DBMS_SCHEDULER для этого; из того, что я понимаю из документации (никогда не использовал это сам), FTP-сайт должен быть полностью открыт для всех; есть параметр destination_permissions, но это только «Зарезервировано для будущего использования», то есть нет способа указать какие-либо разрешения на данный момент.

Если я прав, тогда я согласен с вашим менеджером, хотя и не обязательно по тем же причинам (похоже, вы никогда не получите разрешение на использование DBMS_SCHEDULER, которое, я надеюсь, неверно).

Есть другие способы сделать это:

  1. UTL_TCP; это просто метод взаимодействия по протоколу TCP/IP. Oracle Base has an article, который включает в себя FTP-пакет на основе UTL_TCP и инструкции по его использованию. Это также требует использования пакета UTL_FILE, который может записывать файлы ОС.

  2. UTL_HTTP; Я на 99% уверен, что с FTP можно подключиться к FTP; возможно, можно подключиться к SFTP/любому серверу. Это потребует немного больше работы, но это будет стоить в более долгосрочной перспективе. Это также потребует использования UTL_FILE.

  3. Явная хранимая процедура для FTP напрямую; это, вероятно, лучший подход; создайте один, используя один из множества Java FTP libraries.

  4. Хранимая процедура Java для вызова команд вызова ОС; это самый простой способ, но наименее расширяемый. Oracle выпустила white paper о вызове команд ОС внутри PL/SQL назад в 2008 году, но есть много других вещей там (включая Oracle Base again)

Наконец, вы могли бы вопрос о том, что это на самом деле то, что вы хотите сделать. ..

  1. Какой планировщик вы используете? Имеет ли это планирование событий? Если это так, нет необходимости в FTP из Oracle; используйте UTL_FILE, чтобы записать файл в ОС, а затем команды OS оттуда.

  2. Был ли другой файл изначально в базе данных? Если это так, вам не нужно его извлекать. Вы можете использовать DBMS_FILE_TRANSFER, чтобы собрать его прямо из базы данных или даже создать соединение JDBC или (проще) database link, чтобы ВЫБРАТЬ данные напрямую.

+0

Большое спасибо за ответ.Что касается разрешения, никто не имеет его кроме администратора, так что это не только я. Я рассмотрю эти другие методы и попытаюсь найти их для использования. – user2405778

+0

Что касается использования, мы хотим попробовать создать процедуру проверки FTP-клиентов и посмотреть, есть ли новые файлы. Когда есть новый файл, мы хотим загрузить его в временную папку, загрузить его в нашу БД и удалить файл. Мы оба не знаем, возможно ли это, но я занимаюсь исследованиями и вижу, что мы можем сделать. – user2405778

+0

Да, это более чем возможно. Я делаю это постоянно каждый день (хотя и не с FTP). Я подозреваю, что вам понадобится больше разрешений, чем в настоящее время. Администратору базы данных, возможно, придется ослабить строки кошелька, если это произойдет. Это менее безопасно с FTP, но вы можете создать отдельную схему без каких-либо других привилегий, чтобы искать или даже лучше использовать полностью отдельную базу данных. – Ben