Sphinx + Oracle: ошибка "Имя источника данных не найдено"
Я хочу подключиться к удаленному серверу баз данных oracle и проиндексировать некоторые данные оттуда с помощью поисковой системы sphinx. Моя операционная система - Ubuntu 16.04, и я установил sphinx на нее и протестировал ее с локальной базой данных mysql, и все было в порядке (все данные проиндексированы, и я мог искать и результаты были правильными) . Я также установил unixODBC и протестировал его с помощью инструмента isql для удаленного доступа к серверу баз данных oracle, и все было в порядке, но когда я хочу проиндексировать данные с помощью команды indexer из sphinx, возникает такая ошибка:
sql_connect: [unixODBC][Driver Manager]Data source name not found, and no default driver specified
Вот исходный блок моего файла sphinx.conf:
source src2
{
type = odbc
sql_host = hostName
sql_user = user
sql_pass = pass
sql_db = dbname
sql_port = 1521
odbc_dsn = DSN = mydsn; Driver={Oracle};Dbq=hostname:1521/dbname;Uid=user;Pwd=pass
sql_query = \
SELECT tableId, Name \
FROM sampleTable
}
И файл odbc.ini:
[mydsn]
Application Attributes = T
Attributes = W
BatchAutocommitMode = IfAllSuccessful
BindAsFLOAT = F
CloseCursor = F
DisableDPM = F
DisableMTS = T
Driver = Oracle
DSN = mydsn
EXECSchemaOpt =
EXECSyntax = T
Failover = T
FailoverDelay = 10
FailoverRetryCount = 10
FetchBufferSize = 64000
ForceWCHAR = F
Lobs = T
Longs = T
MaxLargeData = 0
MetadataIdDefault = F
QueryTimeout = T
ResultSets = T
ServerName = MYDATABASE
SQLGetData extensions = F
Translation DLL =
Translation Option = 0
DisableRULEHint = T
UserID = user
Password = pass
StatementCache=F
CacheBufferSize=20
UseOCIDescribeAny=F
SQLTranslateErrors=F
MaxTokenSize=8192
AggregateSQLType=FLOAT
и файл odbcinst.ini:
[Oracle]
Description= ODBC for Oracle
Driver = /opt/oracle/instantclient_12_2/libsqora.so.12.1
Setup =
FileUsage = 1
CPTimeout =
CPReuse = /usr/local/etc/odbcinst.ini
1 ответ
Пытаться
odbc_dsn = DSN=mydsn;
т. е. без пробелов вокруг = после DSN, и так как у вас есть все остальное, указанное в INI-файле, достаточно просто DNS. Вам также нужен только sql_query из остальных sql_*. Как это:
source src2
{
type = odbc
odbc_dsn = DSN=mydsn;
sql_query = \
SELECT tableId, Name \
FROM sampleTable
}