Oracle ORA-01805 на базе данных Oracle 11g - PullRequest
4 голосов
/ 06 октября 2011

Наша база данных Oracle 10g была недавно обновлена ​​до 11g. База данных работает на компьютере под управлением Windows Server 2003 X64. В запросах SQL из приложения .NET, которые обращаются к таблице, имеющей столбцы данных TIMESTAMP (6) WITH TIME ZONE, я получаю следующее исключение.

System.Data.OracleClient.OracleException: ORA-01805: возможная ошибка в операции даты / времени

Предлагаемое рекомендуемое действие для исключения состоит в том, чтобы убедиться, что клиент и сервер имеют одинаковую версию:

ORA-01805: возможная ошибка в операции даты / времени Причина. Файлы часовых поясов на клиенте и сервере не совпадают. Операция может потенциально привести к неверным результатам, основанным на файле местного часового пояса. Действие: Убедитесь, что версии часового пояса клиента и сервера совпадают.

Я выполнил следующие запросы для проверки часового пояса в рассматриваемой базе данных. Я не нашел информации о том, как установить часовой пояс (или изменить файл часового пояса) для клиента.

SELECT dbtimezone FROM DUAL;
select * from v$timezone_file;

DBTIMEZONE 
---------- 
+00:00     

FILENAME             VERSION                
-------------------- ---------------------- 
timezlrg_14.dat      14     

Я предполагаю, что клиент ссылается на установленный мной Мгновенный клиент, который является версией 11_2? Я выполняю запросы через System.Data.OracleClient.OracleConnection, как это предусмотрено .NET Framework. U Я предполагаю, что под «версией часового пояса» подразумевается версия файла часового пояса. Я не вижу, где мгновенный клиент имеет файл часового пояса. Любые предложения оцениваются.

Ответы [ 2 ]

4 голосов
/ 07 октября 2011

Я определил, что у меня установлена ​​версия 11_2_0_1 текущего клиента. Обновление до 11_2_0_2, похоже, помогло решить эту проблему. Тем не менее, мне все еще не ясно, как клиент мгновенного управления обрабатывает его файл часового пояса, или даже где он находится или что это такое. Все источники, которые я прочитал, говорят, чтобы гарантировать, что клиент и сервер имеют одинаковую версию файла часового пояса, но мне не ясно, как это на самом деле делается на клиенте. Возможно, это не то, что я могу напрямую поддерживать, кроме использования другой версии мгновенного клиента?

3 голосов
/ 08 октября 2011

Используйте «genezi -v», чтобы узнать версию файла часового пояса.

Вот пример в моей коробке с Linux:

$ genezi -v
Client Shared Library 32-bit - 11.2.0.2.0

System name:    Linux
Release:    2.6.32-34-generic
Version:    #77-Ubuntu SMP Tue Sep 13 19:39:17 UTC 2011
Machine:    x86_64

Operating in Instant Client mode.
Small timezone file = timezone_14.dat
Large timezone file = timezlrg_14.dat
...