tag mp3tag linux r unixodbc rodbc

linux - mp3tag - RODBC no reconoce mi configuración odbc



linux mp3 tag (4)

Estoy ejecutando R 2.15.2 en un servidor Red Hat Linux 6. Mi objetivo es conectarme a una base de datos de MS SQL Server en otra máquina a través de RODBC. Hice mi investigación y descargué e instalé la versión de Linux del controlador ODBC de MS SQL del sitio web de soporte de Microsoft . He creado la versión 2.3.0 de unixODBC desde la fuente, ya que es requerido por el controlador de Windows y aún no se encuentra en los repositorios de la BSR (la versión del repositorio es 2.2.14).

De todos modos, después de un poco de trabajo, finalmente instalé el controlador y lo configuré correctamente, y puedo conectarme con éxito a la base de datos de SQL Server mediante un comando isql :

$ isql -v test testuser testpass +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>

así que sé que tengo mis archivos odbc.ini y odbcinst.ini correctamente configurados.

Sin embargo, cuando intento acceder a la conexión ODBC desde R, ocurre lo siguiente:

> test <- odbcDriverConnect(''DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass'') Warning messages: 1: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") : [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data source name not found, and no default driver specified 2: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") : ODBC connection failed

Aquí está el resultado del comando odbcDataSources en R:

> odbcDataSources() named character(0)

He estado investigando y creo que la solución (aunque podría estar equivocada) puede tener algo que ver con la configuración adecuada de las variables de entorno ODBC para que RODBC sepa dónde ir para encontrar odbc.ini . Según mi investigación, encontré las siguientes variables de entorno que pueden ser relevantes: $ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS. Tengo una idea razonable de a qué se debe configurar, pero no estoy seguro de cómo establecerlos de manera permanente, y para que RODBC pueda reconocer dónde encontrar los archivos apropiados.

¿Alguien puede arrojar algo de luz sobre esto para mí? No estoy seguro de entender correctamente cómo funcionan las variables de entorno en Linux, y en particular por qué isql no tiene problemas para conectarse, pero RODBC ni siquiera puede encontrar el controlador / fuente de datos.

NOTA: cuando tenía instalada la versión repo de unixODBC, RODBC se instalaría bien usando el comando install.packages(''RODBC'') en R. Sin embargo, después de instalar unixODBC 2.3.0 desde la fuente, la instalación de RODBC fallaría debido a un problema de dependencia, y tuve que instalar RODBC desde la fuente utilizando la guía publicada aquí . ¿Es posible que no haya podido configurar ODBC correctamente para empezar y por eso tengo problemas ahora?


¡No puede encontrar el controlador porque no lo especificó! Tampoco entiendo cómo se supone que funcionan las cosas DSN, pero esto funciona para mí en una situación similar:

ch <- odbcDriverConnect(''driver={SQL Server};server=servername;database=databasename;uid=username;pwd=password;'') sqlQuery(ch,''sql script'',stringsAsFactors = FALSE)

Necesita ser exacto, por supuesto. Y reemplace {SQL Server} con cualquier controlador que tenga. Es la parte difícil. El nombre del servidor es el mismo que aparece en Management Studio en el menú desplegable, probablemente "prueba" en su caso. isql debe utilizar automáticamente el controlador correcto.

Es decir, para MySQL podría ser:

Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;

Solo busco "mysql odbc connection string" y no nada específico de R.


En Ubuntu Server me puse así

  • Editar ~ / .bash_profile

    nano ~/.bash_profile

  • Añadir estas lineas

    export ODBCINI=/usr/local/etc/odbc.ini export ODBCSYSINI=/usr/local/etc

Entonces RODBC funcionará bien.


También tuve este problema después de configurar unixODBC en Mac OS 10.13.3 High Sierra. Intenté configurar mi .Renviron para establecer una variable de entorno específica de R para ODBCINI, pero RODBC aún no listaba mis nombres de origen de datos (DSN). Además, no pude encontrar el controlador especificado en ODBCinst.ini ni obtener una cadena de conexión que funcione con RODBC :: ODBCDriverConnect (), a pesar de poder conectarme con isql.

Pude hacer que la conexión JDBC funcionara, pero no quería confiar en la JVM y ya tenía un importante código de acceso a la base de datos escrito para RODBCext.

Lo que terminó trabajando fue simplemente:

remove.packages(''RODBC'') install.packages(''RODBC'', type="source")

Parece que si instala RODBC desde la fuente en mac, selecciona el archivo odbc.ini y el archivo odbcinst.ini correctamente.

Gracias al sutil comentario de este post por desbloquear la clave: http://eriqande.github.io/2014/12/19/setting-up-rodbc.html


Wow, pensé que era la única persona que trabajaba en este tipo de cosas. Tuve que resolver el mismo problema y encontré que la mejor solución era usar rjdbc. Esto es mucho más fácil de configurar, ya que ODBC en linux u osx era muy irregular. El rendimiento de RJDBC es excelente, ya que utiliza el tarro del servidor ms sql nativo para ejecutar la consulta. Aquí hay un ejemplo de uno de nuestros scripts. Solo necesita descargar el archivo sqljdbc4.jar de microsoft y luego instalar.package ("RJDBC") en su entorno. Me di cuenta de que está intentando que ODBC funcione y logré que funcione en osx, pero me di por vencido debido al tiempo de Linux.

library(RJDBC); drv <- JDBC(''com.microsoft.sqlserver.jdbc.SQLServerDriver'', ''/usr/local/project/dataproviders/jdbc/sqljdbc4.jar'', identifier.quote="''"); ch <- dbConnect(drv, ''jdbc:sqlserver://the.server.address.net;databaseName=DataWarehouse'', ''USERNAME'', ''PASSWORD''); allsupp_allprod_allproc <- dbGetQuery(ch, paste("SELECT [Date], Sum([Fail]) as Numerator, Sum([Pass] + [Fail]) as Denominator,'''' as Annotation,''True'' as ''Use for CL'' FROM [PSU_YieldData] Group by [Date] Order by [Date]"));