Подключение к базам данных

Опубликовано Опубликовано в рубрике Рецепты

Читая книжки про DataScience или визуализацию, периодически мне приходили идеи, как использовать тот или иной рецепт в реальной работе. Но проблема заключалась в том, что во всех книжках примерами выступают либо csv-файлы, либо сайты, либо вообще встроенные наборы данных. Рабочие же данные у меня хранятся в основном на Oracle.
Конечно, можно было бы писать скрипт в Oracle, выгружать результаты в csv, а потом загружать их в R. Но, согласитесь, столько ручной работы делать как минимум – неспортивно! Пришлось совсем чуть поискать, и да, конечно же рецепт был найден! Правда он требует единоразовой настройки на рабочем компьютере, либо «сервере приложений» R, так как работает через ODBC подключение. Зато потом – красотища!
Структура кода:

  1. Загружаем библиотеку
  2. Открываем подключение к серверу
  3. Выполняем sql-запрос, получая данные в DataFrame
  4. Закрываем подключение к серверу.


library(RODBC)
channel <- odbcConnect("my_server", uid="my_user", pwd="my_password", believeNRows=FALSE)
result <- sqlQuery(channel,'select dummy from dual')
odbcCloseAll()

Для первого раза достаточно.

Но необходимо сказать, что когда у меня пришла пора создать высоконагруженное приложение, ежеминутно опрашивающее сервер — odbcCloseAll() работал крайне неустойчиво. И пару раз в сутки, это приложение роняло сервер Oracle так как было создано какое-то безумное количество сессий, так, что даже dba не мог подключиться к серверу. Почитав забугорный интернет – увидели, что у них тоже есть те же проблемы. Ну и стащили совет – индивидуально закрывать каждое подключение:

odbcClose(channel)

Добавить комментарий