Настройка подключения Oracle

Добрый день сообщество. Установил Oracle 9i на локальную машину. Поставил клиентские драйвера. Создал базу данных с именем ts и востановил из дампа базу данных террасофт. Подключился с помощью менеджера к ней, все таблицы вроде как создались. Пытаюсь настроить подключение в террасофт 3.3.1 и возникает ошибка:

ORA-12514 TNS процесс прослушивания не нашел SERVICE_NAME для данного дескриптора соединения.

С ораклом знаком первую неделю так что куда смотреть не знаю. Помогите кто сталкивался.

В архиве файлы tnsnames.ora и listener.ora

Нравится

12 комментариев

Решил проблему подключения но возникла след. При логине пишет ORA-00902 неверный тип данных.

Здравствуйте.
Не совсем понятно отношение версии SQL-сервера к данному вопросу, но если всё же Вы настраиваете подключение к Oracle-схеме, то такая проблема может возникать если в настройках строки соединения указать название схемы в нижнем регистре. Для возможности подключения обязательным условием является указание схемы в верхнем регистре.

Вы меня не совсем правильно поняли. Настройку подключения к Oracle удалось произвести.
Но теперь при логине сразу возникает ошибка
ORA-00902 неверный тип данных.
Куда смотреть не понятно, в какой таблице неверный тип данных или где вообше

ORA-00902 неверный тип данных.
Понял что надо было имя схемы установить полностью в верхний регистр.
След ошибка вылезла:
ORA-04092 COMMIT в триггере невозможно

----------------------------------
Timestamp: 14:04:01.299
Logon attempt failed. username: 'SUPERVISOR'; database: 'tswork'
----------------------------------
Timestamp: 14:04:01.299
Runtime error occurred: 1005 (ORA-01005: задан пустой пароль; вход в систему запрещается)
----------------------------------
Timestamp: 14:04:05.940
Successful logon attempt (session tag: 0xE417140) 
username: 'SUPERVISOR'; database: 'tswork'
----------------------------------
Timestamp: 14:04:05.940
declare  cursor NlsParamsCursor is    SELECT * FROM nls_session_parameters;begin  SELECT Nvl(Lengthb(Chr(65536)), 
Nvl(Lengthb(Chr(256)), 1))    INTO :CharLength FROM dual;  for NlsRecord in NlsParamsCursor loop    if NlsRecord.parameter = 
'NLS_DATE_LANGUAGE' then      :NlsDateLanguage := NlsRecord.value;    elsif NlsRecord.parameter = 'NLS_DATE_FORMAT' then      
:NlsDateFormat := NlsRecord.value;    elsif NlsRecord.parameter = 'NLS_NUMERIC_CHARACTERS' then      :NlsNumericCharacters := 
NlsRecord.value;    elsif NlsRecord.parameter = 'NLS_TIMESTAMP_FORMAT' then      :NlsTimeStampFormat := NlsRecord.value;    
elsif NlsRecord.parameter = 'NLS_TIMESTAMP_TZ_FORMAT' then      :NlsTimeStampTZFormat := NlsRecord.value;    end if;  end loop; 
 SELECT NLS_CHARSET_ID(:Charset) INTO :CharsetId FROM dual;end;
CharLength = 1
NlsDateLanguage = 'RUSSIAN'
NlsDateFormat = 'DD.MM.RR'
NlsNumericCharacters = ', '
NlsTimeStampFormat = 'DD.MM.RR HH24:MI:SSXFF'
NlsTimeStampTZFormat = 'DD.MM.RR HH24:MI:SSXFF TZR'
Charset = 'UTF8'
CharsetId = 871
----------------------------------
Timestamp: 14:04:05.955
ALTER SESSION SET CURRENT_SCHEMA = SUPERVISOR
----------------------------------
Timestamp: 14:04:05.955
select * from table(CAST("SUPERVISOR"."fn_GetLoginInfo" ('SUPERVISOR') AS "SUPERVISOR"."tbl_GetLoginInfo"))
----------------------------------
Timestamp: 14:04:05.971
SELECT
  Column_Name Col, Con.Constraint_Name Con
FROM
  All_Constraints Con, All_Cons_Columns Col
WHERE
  Con.Owner = :Owner and
  Col.Owner = :Owner and
  Con.Table_Name = :Name and
  Col.Table_Name = :Name and
  Con.Constraint_Type in ('P', 'U') and
  Con.Constraint_Name = Col.Constraint_Name
ORDER BY
  Con.Constraint_Name,Col.Position
Name = 'TABLE'
Owner = 'SUPERVISOR'
----------------------------------
Timestamp: 14:04:05.986
Logoff (session tag: 0xE417140).
----------------------------------
Timestamp: 14:04:05.986
Runtime error occurred: 4092 (ORA-04092: COMMIT в триггере невозможно)

вот что выдает sql монитор

Однозначно определить причину проблемы очень непросто. Возможно при установке схемы в ней есть "невалидные" объекты (функции, процедуры, триггера). Если это так, нужно попробовать их откмпилировать. Это можно сделать командой из контекстного меню в каком-нибудь Oracle-менеджере, например TOAD. Важно то, как устанавливалась схема. Обязательно это нужно выполнять при помощи скриптов, которые находятся в дистрибутиве в папке "DB" (запускается на выполнение командный файл RestoreDatabase.cmd). Какая схема устанавливалась? Чистая из дистрибутива или перенос уже работавшей. Если схема переносится, то это нужно выполнять только при помощи инструментария: http://community.terrasoft.ua/blogs/4524. Как вариант попробувать выполнить через какой-то инструмент работы с Oracle запрос из лога выше: select * from table(CAST("SUPERVISOR"."fn_GetLoginInfo" ('SUPERVISOR') AS "SUPERVISOR"."tbl_GetLoginInfo"))

Александр в скриптах по созданию фигурирует схема TSAUTOBUILD которой как я понял у меня нету. Откуда она береться? я создаю базу данных первоначально с помощью dbca на сервере. После чего запускаю bat файл из папки DB с инсталяцией террасофта.

При выполнении скрипта востановления из дампа выходят такие ошибки

IMP-00017: при выполнении следующей команды ORACLE возвращает ошибку 23308:
"BEGIN DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY('"TSAUTOBUILD"', '"tr_tbl_Oppo"
"rtunityHistory_BI"', FALSE); END;"
IMP-00003: ORACLE выдал ошибку 23308
ORA-23308: объект TSAUTOBUILD.tr_tbl_OpportunityHistory_BI либо неправильный, либо не существует
ORA-06512: на "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: на "SYS.DBMS_DDL_INTERNAL", line 41
ORA-06512: на "SYS.DBMS_DDL", line 255
ORA-06512: на line 1

 (ORA-04092: COMMIT в триггере невозможно)

Проверьте, похоже что у вас есть триггер на Logoff

Схема TSAUTOBUILD - это та, с которой делается дамп, поставляемый с дистрибутивом. Её у Вас нет и не должно быть. "" Пользовательскую схему не нужно создавать в ручном режиме. Как я сообщал выше для этого предназначен инструментарий из папки "DB". Там в скриптах предусмотрено что дамп был создан со схемы TSAUTOBUILD. Обращаю Ваше внимание на то, что термин "база данных" в Oracle радикальным образом отличается от такого же по звучанию и написанию в MS SQL Server. Если проводить аналогию с SQL, то база в Oracle - это экземпляр в MS SQL Server, а база в SQL - это схема в Oracle. Таким образом создавая базу на Oracle через DBCA - это всё равно, что установить ещё один SQL-экземпляр. Как я уже сообщал, установите схему через запуск RestoreDatabase.cmd. Приу становке в процессе будут сообщения об ошибках при создании триггеров - не обращайте внимания (только на эти сообщения, на остальные - обращайте) они создаются.

"Евгений Либин" написал:Проверьте, похоже что у вас есть триггер на Logoff

Можно по подробнее? не совсем понял где смотреть

Здравствуйте.
Вопрос был решён в режиме удалённого доступа.

Показать все комментарии