Часто возникают вопросы о настройке доменной авторизации для Oracle и работе пользователей в Terrasoft, используя доменную авторизацию.

Итак пошаговая инструкция.

1. Первое, что нужно сделать - проверить значения системных параметров сервера Oracle OS_AUTHENT_PREFIX и REMOTE_OS_AUTHENT.

OS_AUTHENT_PREFIX - строковый параметр (значение по умолчанию OPS$) - это префикс прибавляемый сервером Oracle к имени пользователя при сопоставлении имен.
Настоятельно РЕКОМЕНДУЕТСЯ сбросить значение этого параметра (установить его равным пустой строке). Иначе придется заводить в Terrasoft всех доменных пользователей с префиксом OPS$, Например OPS$YOUR_DOMAIN\USER1, - это неудобно.

REMOTE_OS_AUTHENT - булевый параметр (значение по умолчанию FALSE) - разрешение подключаться к серверу удаленным пользователям с доменной авторизацией. Нужно установить его в TRUE.

Изменить значения этих параметров можно несколькими способами: 

  • из Oracle Enterprise Management Console (Configuration->All initialization parameters...), находим эти параметры и изменяем их.
  • из консоли Sqlplus командами

SQL> alter system set os_authent_prefix=‘’ scope=spfile;
SQL> alter system set remote_os_authent=TRUE scope=spfile;

Проверить правильность установки этих параметров можно из консоли Sqlplus:
SQL> Show parameters %AUTH%

2. На компьютере где установлен сервер Oracle правим файл sqlnet.ora, он находится в каталоге \%Oracle_HOME%\Network\Admin\.
Обязательно необходимы 2 настройки:

NAMES.DEFAULT_DOMAIN = YOUR_DOMAIN
 
SQLNET.AUTHENTICATION_SERVICES = (NTS)  или SQLNET.AUTHENTICATION_SERVICES = (NONE, NTS)

3. В системный реестр операционной системы сервера требуется добавить параметр
HKEY_LOCAL_MACHINE\ SOFTWARE\ORACLE\HOME№\OSAUTH_PREFIX_DOMAIN со значением TRUE.

4. Перезагружаем сервер Oracle.

5. Делаем тестовое подключение используя доменную авторизацию с помощью sqlplus
SQL> connect  /
Соединено.

6. Добавляем в Terrasoft необходимых пользователей домена (раздел "Администрирование"-> "Добавить пользователя из домена"), заказываем на них лицензии.

7. При входе в окне логина Terrasoft ставим флажок "Использовать доменную авторизацию" и все!

При написании использовался тестовый стенд:
Серверная ОС - Windows XP
Клиентская ОС - Windows XP
Сервер Oracle 9.2.0.8
Terrasoft CRM 3.3.1.94
тестировалась работа пользователей с именными и конкурентными лицензиями, используя доменную авторизацию.

Рекомендую также материалы по теме:
http://www.oracle.com/global/ru/oramag/march2002/admin_nt_auth.html
http://www.osp.ru/text/print/302/177067.html 
http://www.osp.ru/win2000/2004/06/177152/

Нравится

Поделиться

4 комментария

Добрый день. Делаем все так как написано в данном руководстве. Сам сервер в домене, доменный аккаунт под которым входим на сервер, входит в группу локальных администраторов.Однако доменная аутенфикация все равно не работает.
"OS_AUTHENT_PREFIX - строковый параметр (значение по умолчанию OPS$) - это префикс прибавляемый сервером Oracle к имени пользователя при сопоставлении имен.
Настоятельно РЕКОМЕНДУЕТСЯ сбросить значение этого параметра (установить его равным пустой строке)."--сделано!
"REMOTE_OS_AUTHENT - булевый параметр (значение по умолчанию FALSE) - разрешение подключаться к серверу удаленным пользователям с доменной авторизацией. Нужно установить его в TRUE."--сделано.
NAMES.DEFAULT_DOMAIN = YOUR_DOMAIN если домен test.local то там надо указать просто test(pre-2000) или test.local?указывали и то и то -результат один.
SQLNET.AUTHENTICATION_SERVICES = (NTS) --сделано
HKEY_LOCAL_MACHINE\ SOFTWARE\ORACLE\HOME№\OSAUTH_PREFIX_DOMAIN--сделано.
Домен на базе Windows 2008 R2. Сервер oracle- на базе Windows 2003 Server.
ошибка-
SQL> connect /
ERROR:
ORA-01017: invalid username/password; logon denied

Что еще можно попробовать?Спасибо!

Уточните пожалуйста, какая версия Oracle используется?

Здравствуйте.
Проверьте значения параметров OS_AUTHENT_PREFIX и REMOTE_OS_AUTHENT командой Show parameters %AUTH% (возможно не применились новые значения). Откуда идёт подключение? С самого сервера Oracle? Если "да", то попробуйте установить там дополнительно Oracle-клиент и используйте его "хоум" (установите значение в системной переменной ORACLE_HOME).
С уважением, Terrasoft Support Team.

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

Добрый день, участники сообщества!
По многочисленным просьбам сегодня я расскажу как можно создать и поднять бэкап Terrasoft на СУБД Oracle.
Сделать это очень просто, все делается автоматически -- нужно лишь  запустить командный файл и ввести названия базы данных.

Создание бэкапа

  1. Распаковываем содержимое архива Backup.zip на сервер, где установлен сервер Oracle.
  2. Запускаем BackupDatabase.cmd.
  3. Указываем: название схемы, ее пароль (схемы-пользователя) и название файла дампа базы.
  4. В результате получаем два файла: Grant.sql -- скрипт по созданию розданных прав и собственно сам дамп базы Oracle.

Поднятие бэкапа

  1. Распаковываем содержимое архива Restore.zip на сервер, где установлен сервер Oracle.
  2. Сюда же обязательно подкладываем два файла (Grant.sql и дамп), которые были созданы при создании бэкапа.
  3. Запускаем RestoreDatabase.cmd.
  4. Указываем: пароль пользователя SYS, название файла дампа базы (backup db file name), старое название схемы с которой делался дамп (old user schema), название новой схемы (new user schema) и пароль пользователя новой схемы (new user password).
  5. Дальше все выполнится автоматически: создастся новая схема, раздадутся нужные права, создадутся нужные типы,  подымется бэкап базы под указанной схемой, заменятся завязки объектов в системных таблицах Terrasoft на новые, раздадутся нужные права ролям на таблицы и представления.
     

В инсталляции Terrasoft уже идут в комплекте похожие скрипты, но там все завязано на то, что база создавалась со схемы TSAUTOBUILD. Мои скрипты дополнительно запрашивают название старой схемы.

  Описал коротко, только самое нужное. Если будут вопросы - с удовольствием отвечу.

Отмечу, что выложенную информацию необходимо рассматривать как пример, который каждый можете менять под свои потребности. Эти скрипты применимы для Oracle установленного на ОС Windows и запуск командного файла нужно производить на самом сервере. Для всех остальных вариантов (другая ОС, запуск с клиентской машины) можете дописать сами.

Ключевым моментом при создании бекапа является скрипт Grant.sql (см. Backup.zip), который создает "слепок" розданных прав для модели, которая применена в Terrasoft CRM.

UPD: Спасибо Саше Котенко за найденный недочет в файле BackupDatabase.cmd. Исправил.

Нравится

Поделиться

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

Большое спасибо, Саша.

Саша, спасибо за удобный инструмент! С твоего позволения беру в эксплуатацию!
И да +1 :wink:

Саша, огромное спасибо! Данная инструкция и материал очень помогут всем, кто сталкивается с Oracle-версией продукта.

Указывайте пожалуйста требования к использованию скриптов.
Здесь:
1. скрипт для Windows (чаще для поддержки Oracle используются другие ОС),
2. вне скрипта определена переменная среды ORACLE_SID.
Согласно документации рекомендованно:
1. формат авторизации sqlplus из командной строки (например BackupDatabase.cmd строка 12) определяется как sqlplus login/password@sid, а в Вашем случае (без указания сида) получим ERROR: ORA-12560: TNS:ошибка адаптера протокола
2. Использование команды без логирования тоже не лучший вариант.

ihmo статья скорее вредна, очень удивили оставленные комментарии :(

to alexk
Ничего удивительного в этом нет. Для кого-то информация полезна, например для тех, кто не часто сталкивается с Oracle. А для того, кто имеет больше опыта работы с Oracle, что-то может показаться очевидным. В любом случае, спасибо за комментарии. Внесем необходимые корректировки.

Здравствуйте.У меня возник вопрос.Мне предстоит установить сервер Terrasoft и интегрировать террасофт в существующую структуру.но никогда не работал с базой даннх оракл.
Как я понимаю пункт 1 надо делать, если существует старая база данных?Или как? В руководстве описано по другому.Но в руководстве как я понял предполагается что сервер базы данных оракл и сервер террасофт это один физический компьютер.А мне надо разнести их по разным ролям.в руководстве написано:
Для восстановления БД на сервере необходимо:
1. Запустить файл RestoreDatabase.cmd, который находится в
директории \DB>, нажав
на клавишу [Enter].
Какой сервер иммется ввиду?Наверно сервер баз данных оракл?Но там этого пути не будет если сам софт будет стоять отдельно!Помогите разобраться пожалуйста!

Здравствуйте.

Такого понятия как "сервер Террасофт" - не существует. Вы устанавливаете БД Oracle на машине, которую назначите в роли сервера БД. Далее Вы устанвливаете клиентские приложения Террасофт и соединение с БД соглагласно руководству.

Terrasoft Support Team.

Есть ли изменения в инструкции(по созданию/поднятию бекапа) для версий 3.4.0+ ?

Немного подкорректировал скрипт SysGrants.sql из инструментария восстановления бекапа версии 3.3.2.

Ранее там было указано:

GRANT SELECT ON TSAUTOBUILD.TS_CONS_COLUMNS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_CONSTRAINTS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_IND_COLUMNS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_INDEXES TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_TAB_COLS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_TAB_COLUMNS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_TABLES TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_TRIGGERS TO PUBLIC;
GRANT SELECT ON TSAUTOBUILD.TS_VIEWS TO PUBLIC;

В результате чего приходилось вручную заменять TSAUTOBUILD на имя вашей схемы, откуда происходил экспорт. Теперь это название будет автоматически подтягивать имя из введенной вами информации при запуске RestoreDatabase.cmd.

Исправленный restore_3_3_2.zip обновлен.

Клиенты часто спрашивают, почему при поднятии резервной копии Oracle выдает предупреждения, а также почему некоторые объекты после импорта в невалидном состоянии.

Попытаюсь ответить на эти вопросы.

Тип объекта "SCHEMA_NAME"."t_FieldInfo" уже существует с другим идентификатором

В нашей системе используются объектные типы БД Oracle, OBJECT TYPE.

Дело в том, что Oracle жестко связывает объектные типы с их идентификаторами, OID.

При этом если на сервере был однажды восстановлен бекап схемы Terrasoft, там создадутся все используемые типы ("t_GetLoginInfo", "tbl_GetLoginInfo" и др.).
Но из-за жесткой привязки к OID, эти типы создадутся с OID, который прописан в дампе.

Первый раз все будет нормально. Но при поднятии того же, либо другого бекапа схемы Terrasoft на том же сервере, он опять будет создавать типы с теми же OID – в результате возникнет ошибка: объект с таким OID уже существует. В результате после поднятия бекапа ни один из типов не создастся.

Из-за этой особенности Oracle, мы сделали в скриптах поднятия наших схем обходное решение:

  1. Перед поднятием бекапа скриптом CreateTypes.sql явно создаются все необходимые типы, при создании Oracle сгенерирует им новые OID.
  2. При поднятии Oracle пытается создать типы из бекапа c их старыми OID, при этом выдается ошибка IMP-00061: Внимание: Тип объекта "Схема"."Тип" уже существует с другим идентификатором

При возникновении такой ошибки, создание типа пропускается.

Но в нашем случае это не является ошибкой, т.к. это сделано специально в качестве обходного решения. Все необходимые объектные типы создадутся нашим скриптом непосредственно перед поднятием бекапа.

Подробнее об этом в документации Oracle.

После поднятия бекапа некоторые объекты невалидны

Это также не является ошибкой, а просто предупреждением.

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

Если в одном из триггеров используется вызов какой-либо хранимой процедуры - после импорта он будет невалидным.

Переходим от теории к практике. В нашей системе у многих таблиц есть строчный триггер BEFORE INSERT OR UPDATE, например такой:

CREATE OR REPLACE TRIGGER "tr_tbl_Activity_BI"
BEFORE INSERT ON "tbl_Activity" REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
  IF (:NEW."ID" IS NULL) THEN
    :NEW."ID" := "fn_CreateGUID"();
  END IF;
END "tr_tbl_Activity_BI";
/

Как видим по коду, этот триггер вызывает функцию fn_CreateGUID, которой на момент переноса триггера просто нет. Она создастся позже, со всеми остальными ХП. Из-за этого триггер остается невалидным.

Но это абсолютно нормальная ситуация. Дело в том, что любой объект БД Oracle, находящийся в невалидном состоянии будет автоматически скомпилирован СУБД "на лету", при первом обращении кнему. В этот момент уже будут доступны и валидны все зависимые объекты (ХП, Типы и т.д.) и триггер скомпилируется корректно и станет валидным.
Подробнее об этом в документации Oracle.

Система администрирования Oracle в версии 341 существенно изменилась. В связи с этим, изменился также и механизм создания и восстановления резервных копий.

Что изменилось в новых скриптах работы с бекапами для 341

  • Появилась возможность указывать инстанс Oracle для разворачивания бекапа
  • Можно указать отдельное табличное пространство для разворачивания схемы
  • Исправлена ситуация с экспортом пустых таблиц (Oracle 11)

В новой системе администрирования практически все права пользователю назначаются через роли. Поэтому при восстановлении резервной копии появилось 3 опции - режимы переноса прав пользователей. Остановлюсь на этом более подробно.

Опция № 0 - Перепривязать пользователей в новую схему (по умолчанию)

При этом все пользователи Terrasoft, создадутся и им будут розданы и назначены по-умолчанию роли для доступа к новой схеме (к той которую вы разворачиваете). У пользователей автоматически заберется доступ на старую схему. Этот вариант подходит для первоначального поднятия бекапа на новом инстансе либо для перенос боевой схемы в новую схему.

Опция № 1 - Создать пользователей с перименованием

Этот вариант предполагает, что все пользователи Terrasoft будут созданы как новые пользователи Oracle c префиксами 'U' и им будет розданы все соответствующие права. Например в старой схеме был пользователь User1, после поднятия резервной копии новый пользователь будет User1U. Таким образом старый пользователь User1 будет продолжать нормально работать со старой схемой, а новый будет иметь все те же права в отношении новой схемы на одном инстансе. Этот вариант удобен при поднятии тестовой схемы на том же инстансе, где уже работает боевая схема. При этом пользователи будут абсолютно независимы.

Опция № 2 - Не создавать пользователей

В этом случае, при восстановлении резервной копии создастся только пользователь-схема Terrasoft. Ему назначаются права администратора Terrasoft и под ним нужно зайти для самостоятельного заведения нужных пользователей и заказа лицензий для них.

И самое главное, скрипты в прикрепленном архиве.

А кто-то по этой инструкции восстанавливался из бекапа? Расскажу свою историю: все восстановилось и заработало, все права пользователи получили. Но при создании нового пользователя возникли проблемы http://www.community.terrasoft.ua/forum/topic/8609, а при создании новой таблицы возникли такие проблемы http://www.community.terrasoft.ua/forum/topic/8611.

Это только у меня такие проблемы или всё-таки скрипт не совсем корректно восстанавливает права на объекты? Может кто-то проверить на вновь созданой БД, а не в другой схеме?

Здравствуйте.
Этот вопрос обсуждался в рамках Вашего обращения №0122356 в службу технической поддержки.
С уважением Terrasoft Support Team.

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

Добрый день!

Подскажите как создать резервную копию данных для Oracle, как из неё восстанавливаться и как вообще создать на том же сервере БД для тренировки? Т.е. чтобы пользователи и их лицензии сохранились и в тренировочной базе. Возможно ли такое?
Я сделал всё по интуиции: экспорт схемы(TS), создание новой схемы(TSTRAIN), импорт данных в новую схему(TSTRAIN). Пытаюсь войти в новую схему - получаю ошибку "ORA-00902: неверн. тип данных"

PS. SqlMonitor выдал ошибку вот в такой конструкции:
SELECT *
FROM TABLE
(CAST
("TSTRAIN"."fn_GetLoginInfo" ('SYS' )AS "TSTRAIN"."tbl_GetLoginInfo"
)
)

Нравится

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

Сделайте обычный дамп. При необходимости, восстановите в нужную схему.

"Евгений Либин" написал:Сделайте обычный дамп. При необходимости, восстановите в нужную схему.

Я же написал, что всё так и сделал. Сделал дамп схемы, восстановил в нужную схему. Или имеется ввиду фул дамп базы делать?

Я не остановился на достигнутом, стал копать и обнаружил что не скомпилировалась функция fn_GetLoginInfo. А не скомпилировалась она из-за того, что при восстановлении из дампа в схему почему-то не создались типы, в частности t_GetLoginInfo. Поэтому я создал типы в схеме TSTRAIN с помощью скрипта CreateTypes.sql, идущего в установочном клиенте, перекомпилировал все процедуры и функции и, о чудо, всё заработало.

Остался открытым ВОПРОС: как же всё-таки правильно создавать резервную копию? Подозреваю что полного дампа будет достаточно. Но, не будет ли потом проблем с лицензиями пользователей? Ведь если пользователи Терасофт привязываются к полю user# из таблицы sys.user$, то нет никаких гарантий что после восстановления у пользователей не изменится значение user#.

А какая версия TSCRM у вас установлена?

CRM 3.3.1.42, Oracle 10.2.0.3, но дело, мне кажется, не в версии CRM. По непонятным причинам из дампа не были воссозданы типы в новой схеме, в принципе, есть лог заливки дампа.

У одного из моих заказчиков TSCRM 3.0.4 под Oracle 10.2.0.4. Впринципе, в первый раз при установки пришлось попотеть, а потом раз в сутки обычный дамп схемы. При необходимости, я разварачиваю этот дамп в другой схеме как тестовую для разработак. Вроде всё нормально работает.

Может у вас это был единоразовый глюк?
Что по этому поводу в логе написано?

Часть лога по воссозданию типов в новой схеме прилагаю в файле.

Да, есть такое дело....
Дело в том, что import пытается создать объект с уже существующим OID.
У меня TS 3.0.4 и там типы не использовали.
Но в вашем случае можно попытаться сделать следующее.
Создаем отдельную схему, переносим туда все типы и делаем их Public.
Должно полуиться :smile:

Отличная мысль, но я их уже просто в новой схеме сгенерил вышеуказанным способом.

"Евгений Либин" написал:У одного из моих заказчиков TSCRM 3.0.4 под Oracle 10.2.0.4. Впринципе, в первый раз при установки пришлось попотеть, а потом раз в сутки обычный дамп схемы. При необходимости, я разварачиваю этот дамп в другой схеме как тестовую для разработак. Вроде всё нормально работает.

Евгений, прошу еще раз проверить как всё работает при разворачивании дампа в другую схему. Столкнулся с тем, что при таком разворачивании можно работать в тестовой схеме только под пользователем SYS. При этом в "Администрирование->Права доступа к группам таблиц" вообще нет записей. Мне даже удалось установить причину: в таблице tbl_TableGroup корневая схема, впрочем как и все остальные, остались со старой схемой, соответственно функция fn_AdminUnitTableGroupRoleList ничего не возвращала. Этот момент я подправил (толлько для корневой записи). Права доступа к группам таблиц появились, но правда от основной схемы TS. При этом другие пользователи всё равно в тренировочной системе работать не могут. В логе получаю ошибку: "Текущий пользователь не имеет достаточно прав для просмотра данных".

В связи с такими мучениями хотелось бы повторить вопрос к разработчикам: как правильно делать бэкап и создавать тренировочную схему в БД Oracle.

Здравствуйте.

Я для тестирования баз на ORACLE создвал на том же экземляре новую схему и выгружал туда нужный дамп. Проблем не возникало. Одно, на что хочу обратить внимание, это то, что начиная только с версии 3.1.0 было организовано дублирование пользователей на уровне СУБД (кроме БД).

Котенко Александр.

После переноса дампа в другую схему нужно восопользоваться процедурой tsp_ReplaceSchema. Только там есть один момент. Єта процедура удаляет старые роли, поэтому ее нужно подправить:wink:.
Должно вам помочь

"Евгений Либин" написал:После переноса дампа в другую схему нужно восопользоваться процедурой tsp_ReplaceSchema. Только там есть один момент. Єта процедура удаляет старые роли, поэтому ее нужно подправить

Спасибо большое Евгений, всё получилось, права стали нормально для тренировочной схемы. Править процедуру tsp_ReplaceSchema не пришлось, потому как разработчики предусмотрели для этого параметр вызова процедуры, и по умолчанию (без указания этого параметра) старые роли не удаляются.

Отлично.:twisted:
Мои поздравления.

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

Добрый день!

Как известно, Оракл рекомендует хранить данные и индексы в отдельных таблспейсах. Вопрос: возможно ли задать где-то в Терасофт, чтобы индексы по умолчанию создавались в специально отведённом для этого таблспейсе? Это не прихоть, для правильно спланированной БД это повышает производительность.

Спасибо.

Нравится

4 комментария

Этого сделать нельзя.
Впринципе можно сделать скрипт который бы проверял и переносил индексы.

С переносом индексов в другое табличное пространство всё понятно, хотел просто чтобы они по умолчанию создавались правильно.

Я так понимаю это плата за многоСУБДшность террасофта

Вроде того, но это не страшно, т.к. индексы создаешь не каждый день, да и вообще раскидование тадлиц и индексов в разные табличные пространства - это уже тюнинг производительности БД

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

Если ваша система работает с СУБД Oracle, то вам необходимо знать, что если ввести несколько раз подряд неверный пароль, то учетная запись пользователя может быть заблокирована на уровне СУБД. "Может быть" я написал потому, что это зависит от настроек Oracle. В случае, если пользователи, все таки, блокируются, для их разблокировки проще всего выполнить в sqlplus следующую команду

ALTER USER username ACCOUNT UNLOCK

Если с такой ситуацией приходится сталкиваться часто, то можно пойти дальше - добавить в разделе Администрирование действие "Разблокировать пользователя" и реализовать следующий обработчик события:
function amiUnlockUserOnExecute(ActionMenuItem, Sender) {
  var UserName = GetDatasetFieldValue (dlData.Dataset, 'SQLObjectName');
  if (UserName) {
    Connector.DBEngine.ExecuteCustomSQL('ALTER USER "' + UserName + '" ACCOUNT UNLOCK', System.EmptyValue);
    ShowInformationDialog('Пользователь "' + UserName + '" успешно разблокирован!');
  }
}

Нравится

Поделиться

2 комментария

Впринципе, если это часто происходит блокировка пользователей в следствии некорректного воода пароля, то в настройках Oracle параметру FAILED_LOGIN_ATTEMPTS нужно указать UNLIMITED и пользователь блокироваться не будет.

я вообще ничего не понимаю в этом оракле =)
что он хочет?

ALTER USER username ACCOUNT UNLOCK
   2  /
SP2-0640: Not connected
Показать все комментарии

используемый продукт Terrasoft CRM x25 (3.2.0.21)

Предпосылки
Пытаюсь использовать хранимую процедуру Oracle с возвращаемыми параметрами

Вызов средствами террасофт
var Parameters = System.CreateObject('TSObjectLibrary.Parameters');
var ReturnParameter = Parameters.CreateItem();
ReturnParameter.Name = 'P1';
ReturnParameter.ParamType = 2;
ReturnParameter.DataType = pdtInteger;
ReturnParameter.Value = 53;
Parameters.Add(ReturnParameter);
var ReturnParameter2 = Parameters.CreateItem();
ReturnParameter2.Name = 'P2';
ReturnParameter2.ParamType = 2;
ReturnParameter2.DataType = pdtString;
Parameters.Add(ReturnParameter2);
var SQL = 'begin select PKG_DOCUTILS.Test1( :pP1 ) into :pP2 from dual; end;';
try {
Connector.DBEngine.ExecuteCustomSQL(SQL, Parameters);
} catch (e) {
Log.Write(1, e.message);
}

Пакет oracle 10.2

PACKAGE PKG_DOCUTILS
IS
FUNCTION Test1 (t1 IN OUT NUMBER)
RETURN VARCHAR2;
END; -- Package spec

PACKAGE BODY PKG_DOCUTILS
IS
FUNCTION Test1 (t1 IN OUT NUMBER)
RETURN VARCHAR2
IS
BEGIN
t1 := 123;
RETURN 'begin - ' || TO_CHAR (t1) || ' - test-ok';
END;
END;

При выполнении появляется ошибка
"ORA-06572: Функция TEST1 имеет внешний аргумент ORA-06512: на line 1"

Собственно вопрос
Как воспользоваться функциональностью описанной в статьях?
http://community.terrasoft.ua/node/2171
http://terrasoft.com.ua/sdk/_InputOutputParamTypeEnum.html

Нравится

2 комментария

спасибо
поменял функцию на процедуру и
var SQL = 'begin PKG_DOCUTILS.Test1( :pP1 ); end;';

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

Добрый день! Пытаюсь подключить OLAP-куб к TSCRM и в ответ получаю ошибку. После нажатия кнопки "Установить информацию о соединении" через пол-минуты появляется диалог настройки. В качестве поставщика данных я использую "Microsoft OLE DB Provider for OLAP Services 8.0". Далее настраиваю подключение, выбираю куб, жму "Проверить подключение", проверка проходит успешно. После завершения настройки в иерархическом дереве OLAP-кубов появляется вновь добавленный куб. А в разделе "Таблица" появляется табличка, в детальной части которой находится запись "Запрос не может быть обработан: Поставщик данных не предоставил дополнительных сведений об ошибке". Пытался подключать кубы, построенные как на базе СУБД MS Access, так и на базе Oracle. Сначала я думал, что проблема заключается в MS Office WEB Components. Для её решения скачал с сайта Microsoft пакет обновления и установил его, но это не изменило ситуации. Не подскажете, в чём тут может быть дело?

Нравится

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

Похоже не установлен Microsoft Query - входит в состав MS Office.
Попробуйте установить его - должно появиться другое окно настройки соединения с кубом.

Судя по всему, проблема заключается не в MS Query, потому что получить данные в Excel из OLAP-куба удаётся, а вот получить их в CRM не получается... Но на всяких случай переустановил MS Query, не помогло.

Отправьте мне скриншоты по почте, начиная с окна настройки соединения и заканчивая окном с ошибкой
a.popov@tscrm.com

Выслал

Ответил. MS Query все-таки не установлен.

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