2013-03-22 3 views
2

Мы успешно использовали Advantage Database Server 9.1 (Netware) с индексными файлами DBF/CDX в течение нескольких лет через компоненты потокового компонента Delphi TDataSet. (Это устаревшие данные, необходимые для целей статистики/отчетности.)SQL SELECT из локального клиентского подключения Получение данных сервера с помощью пути

Пару недель назад мы перешли от Netware к Win2K8 в качестве нашей сетевой операционной системы и перешли в ADS 9.1. Это нарушило функциональность запросов от локального клиента, которые выполняют запросы SELECT по серверным базам данных.

Например, ниже запрос работал нормально с версией Netware АДА 9.1 в окне SQL ARC32, в бегущем с локальным подключением к свободным столикам в C:\Data:

INSERT INTO MyLocalDB 
    SELECT TOP 10 * FROM [\\MyServer\Data\MyRemoteDB.dbf] WHERE somecondition 

тот же запрос работал с помощью подключенного диска в директории сервера вместо:

INSERT INTO MyLocalDB 
    SELECT TOP 10 * FROM [S:\Data\MyRemoteDB.dbf] WHERE somecondition 

Обратите внимание, что это free table - это не часть словаря данных. Это бесплатная таблица в месте, где есть доступ для чтения/записи к папке на сервере, где она хранится. Папка локального клиентского подключения полностью доступна (она используется для ежедневного тестирования приложений, используя локальное подключение к данным). Обычное приложение может запускаться на клиенте либо с данными локального соединения, либо с данными удаленного подключения без каких-либо проблем. Это только запрос из локального подключения для извлечения данных сервера, что является проблемой, и он работал правильно раньше. Единственное различие заключалось в переключении с Netware на Win2k8 как на ОС, так и на ADS, и согласно документированию (см. Ниже приведенный ниже файл справки) он все равно должен работать.

После перехода на версию Windows, АДС 9.1, оба указанных выше запросов потерпит неудачу с

Ошибка 7008: Указанная таблица, файл заметок, или индексный файл не удалось открыть. Имя таблицы \ MyServer \ Data \ MyRemoteDB.dbf (или S: \ Data \ MyRemoteData.dbf).

Мы повышены до ADS 10.10 на нашей системе на этой неделе (и к ADS 10.10 TDataSet 10,10 компонент, а), но выше запросы по-прежнему терпят неудачу.

Это просто не поддерживается в версии ADS для Windows? Документация показывает, что первая из них должна работать:

Буксировать буквы в путях имен таблиц можно только с помощью локального сервера Advantage. При использовании Advantage Database Server для NT или NetWare, полностью определенные пути должны использовать UNC (например, «\ server \ volume \ path \ table»), потому что оператор SQL анализируется на сервере, где буквы на стороне клиента не имеют смысла. Обратите внимание, что таблицы, на которые ссылаются, должны быть заключены в двойные кавычки или [] (скобки), поскольку они содержат нестандартные символы.

Путь UNC должным образом окружен скобками [], и в любом месте пути или имени таблицы нет пробелов. Я пытался с и без добавления расширения .dbf; сообщение об ошибке остается неизменным.

+0

Использует ли Advantage словарь данных для схемы? –

+0

@ltn: Advantage никогда не «использовал словарь данных». Это вариант, который был доступен в последних версиях, но не использовать их по-прежнему так же жизнеспособен. Ссылка на 'free table' в моем вопросе указывает, что это не в словаре данных. :-) –

+1

@TLama: Спасибо за помощь в форматировании. Я продолжаю забывать проверить и посмотреть, требуется ли нормальное форматирование для повышения языка. :-) –

ответ

3

Я подозреваю, что вы столкнулись с изменением запатентованной блокировки. В Advantage Database Server было внесено изменение, чтобы заставить поведение по умолчанию полностью запрещать доступ к другим приложениям, когда используется запатентованная блокировка. Вы можете отключить это с несколько смутно названным параметром конфигурации NONEXCLUSIVE PROPRIETARY LOCKING. Я думаю, что если вы установите для этого значения конфигурации значение 1, оно будет работать так, как вы хотите.

После изменения этого параметра конфигурации на 1 и перезапуска ADS, локальные подключения к серверу должны иметь доступ только для чтения к таблицам DBF, которые открыты сервером.

+0

Марк, документы для этого параметра конфигурации говорят, что «приложения, отличные от Advantage», затронуты, и я использую собственное ARC32 SQL-окно ADS, так что это определенно приложение ADS, которое имеет проблему. Мне просто нужно укусить пулю здесь и написать собственное приложение, которое позволяет мне запускать запрос на сервере, а затем копировать строку за строкой в ​​локальный файл, вместо того, чтобы просто вставлять INSERTing в локальный db с помощью SELECT с сервера такие данные, как раньше. :-( –

+0

@KenWhite: Я не думаю, что документация точна. Вместо «приложений без использования преимуществ» следует сказать «Приложения, которые не используют Advantage Database Server», который включает приложения с использованием локального сервера. –

+0

OK, Если это так, это может быть проблемой. Теперь мне просто нужно убедить администратора сервера вручную редактировать реестр, что будет очень сложно. Даже упоминание о том, что это происходит на локальной машине, заставляет его нервничать, он может упасть в обморок при мысли о том, чтобы сделать это на нашем производственном сервере. ;-) Хотелось бы, чтобы утилита конфигурации сервера способ меняла этот параметр. –

0

Предполагая, что вы используете удаленный сервер ADS (не ALS), вы должны использовать на стороне сервера псевдонимами, чтобы получить эту функциональность:

http://devzone.advantagedatabase.com/dz/webhelp/advantage9.0/extprocs/server_side_aliases.htm

Положите это в C:\adsserver.ini файл на MyServer (или там, где ваши объявления журналы расположены):

[ServerAliases] 
Data=X:\Data 

Где X:\Data является расположение файла MyRemoteDB.dbf таблицы.

Однако это будет работать только правильно, если есть также доля или вы установили IgnoreRights настройки:

Серверные псевдонимы должны всегда использоваться в сочетании с настройкой «Игнорировать права» вашего Advantage клиент. Подробнее см. В разделе «Безопасность базы данных». Невыполнение этого условия приведет к проверке существования файла, который будет использовать псевдоним сервера на стороне клиента и завершится ошибкой, что приведет к ошибкам AE_FILE_NOT_FOUND (5004).

Для ALS вы можете просто использовать обычный общий доступ к файлам Windows.

+0

Включаются как локальные, так и удаленные (не AIS). Окно соединения ARC32 SQL относится к локальному серверу, и я пытаюсь вставить INSERT в базу данных, используя локальную с содержимым данных на диске сервера. Как я уже сказал, это работало под ADS Netware 9.1, но остановилось с переходом на ADS Windows 9.1 и 10.10. Я могу открыть другое окно SQL, подключиться через серверное (удаленное) соединение и без проблем запросить ту же базу данных. –

+0

Я просто попытался воспроизвести вашу проблему. У нас ADS 11.10 работает в Windows. Я могу запрашивать таблицы на удаленном сервере, используя синтаксис '[\\ MyServer \ Data \ MyRemoteDB.dbf]' от подключения ALS к моему локальному жесткому диску. Так что это должно сработать. –

+0

Хммм ... Вот что я подумал, но это не так. Я до сих пор получаю ADS Error 7008. Я подтвердил, что DLL-библиотеки ADS являются правильными, что они соответствуют версии сервера (оба 10.10). Я проверил файл ADS_ERR, и он указывает ту же ошибку. Я могу запросить штраф, если я открою соединение с сервером, но если я использую локальный сервер и пытаюсь выбрать из сетевого местоположения, ошибка возникает каждый раз. –