powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / К Гуру по Ораклу+ПБ
24 сообщений из 24, страница 1 из 1
К Гуру по Ораклу+ПБ
    #36563439
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ПБ10.5+Виста+Оракле 10.
Суть вопроса-есть две схемы Оракла с одинаковыми таблицами(то есть 2 ДБ) в одной базе.
Как обеспечить средствами ПБ доступ к этим данным? Трудность в том, что ПБ пишет в запрос владельца схемы + имя таблицы. Приходится убирать имя схемы, то тогда данные не читаются даже если упомянуть в строке соединения имя схемы.
казалось бы достаточно менять в строке DBparm имя схемы и все должно получиться! а не получается... :-(
что делаю не так?
(пока назначаю синонимы на схему+таблица)
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36563533
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может
Код: plaintext
1.
ALTER SESSION SET CURRENT_SCHEMA=
спасет отца русской демократии?
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36563595
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55Может
Код: plaintext
1.
ALTER SESSION SET CURRENT_SCHEMA=
спасет отца русской демократии?
спасибо за ответ - но еще не знаю-спасет ли!!! :-)
это судя по всему последнее средство - маленькая проблема в том что приложение коннектится к разным типам баз и хотелось бы воспользоваться штатными средствами ПБ! а уж когда сделать ничего будет нельзя - тогда этим и попользуемся...
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36564921
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая вещь как синонимы, можно попробовать через них сделать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36564959
Гость15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001Есть такая вещь как синонимы, можно попробовать через них сделать
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
куда смотрим? автор ведь пишет
sboyko(пока назначаю синонимы на схему+таблица)
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36565190
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда смотрим, не ваше дело. Если что-то пропустил - это не значит, что меня надо в это тыкать
Если убираешь имя схемы, то обращается к текущей, соответственно, синонимы дают возможность обратиться к своей, чужой или public схеме. При смене текущей схемы, необходимо обеспечить права доступа к чужой схеме. Так что проще создать единую схему, а доступ к одинаковым таблицам обеспечить через синонимы добавив в имя синонима необходимый префикс и запрос переписать на него, либо обеспечить выборки через процедуры и функции
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36567176
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001Куда смотрим, не ваше дело. Если что-то пропустил - это не значит, что меня надо в это тыкать
Если убираешь имя схемы, то обращается к текущей, соответственно, синонимы дают возможность обратиться к своей, чужой или public схеме. При смене текущей схемы, необходимо обеспечить права доступа к чужой схеме. Так что проще создать единую схему, а доступ к одинаковым таблицам обеспечить через синонимы добавив в имя синонима необходимый префикс и запрос переписать на него, либо обеспечить выборки через процедуры и функции
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца

к сожалению - если убираешь имя схемы и синонимы - то таблицы просто не видны. поэтому я использую синонимы. но может быть делаю что то не так... кто бы подсказал...
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36567789
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если коннектишся под user, то при отсутствии схемы обращение идет первоначально к user.table затем к public.table при отсутствии user.table
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36568028
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001,

спасибо, а вот это попробуем!!!
единственно непонятно- а если 2-3-4 набора таблиц, то как же тогда?

можно ли в ини файле специфицировать схему?
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36568029
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если перед запросами делать
Код: plaintext
execute immediate "ALTER SESSION SET CURRENT_SCHEMA=USER1";
а потом запрос без указания схемы
а перед запросом данных из другой схемы, тож самое но для другой схемы, то все работает... проверено, но по мне так это извращение... лучше уж точна синонимов понаделать
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36568047
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRесли перед запросами делать
Код: plaintext
execute immediate "ALTER SESSION SET CURRENT_SCHEMA=USER1";
а потом запрос без указания схемы
а перед запросом данных из другой схемы, тож самое но для другой схемы, то все работает... проверено, но по мне так это извращение... лучше уж точна синонимов понаделать

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

хотя я надеялся, что если как -нибудь в dbparm указать схему(в ОДБС для других баз так проходит) - то и получится серебрянная пуля!!! :-)
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36568211
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoЕсть ПБ10.5+Виста+Оракле 10.
Суть вопроса-есть две схемы Оракла с одинаковыми таблицами(то есть 2 ДБ) в одной базе. А не могли бы Вы рассказать, с какой целью разработана такая архитектура?
Особенно в свете sboykoв ОДБС для других баз так проходит
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36568525
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сложностей "с понаделать синонимов" собственно нет. В Oracle достаточно просто опрашиваются объекты, генерится скрипт и исполняется
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36569150
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно
могу даж скрипт готовый подогнать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
BEGIN
    for c_all_objects in (SELECT "SYS"."ALL_OBJECTS"."OBJECT_NAME" FROM "SYS"."ALL_OBJECTS"
                           WHERE "SYS"."ALL_OBJECTS"."OWNER" = 'UPE'
                             AND ("SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'TABLE' OR
                                  "SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'PROCEDURE' OR
                                  "SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'PACKAGE' OR
                                  "SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'VIEW' OR
                                  "SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'SEQUENCE' OR
                                  "SYS"."ALL_OBJECTS"."OBJECT_TYPE" = 'FUNCTION')) loop
    
    if c_all_objects.object_name not in ('PLAN_TABLE', 'PBCATCOL', 'PBCATEDT', 'PBCATFMT','PBCATTBL', 'PBCATVLD') 
       and substr(c_all_objects.object_name, 1 , 3 ) <> 'BIN' then
      execute immediate 'CREATE OR REPLACE PUBLIC SYNONYM ' || c_all_objects.object_name || ' FOR "UPE"."' ||
                    c_all_objects.object_name || '"';
    end if;
  end loop;
END;
/

вместо "SYS"."ALL_OBJECTS"."OWNER" = 'UPE' и FOR "UPE" подставить свою схему
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36571669
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99sboykoЕсть ПБ10.5+Виста+Оракле 10.
Суть вопроса-есть две схемы Оракла с одинаковыми таблицами(то есть 2 ДБ) в одной базе. А не могли бы Вы рассказать, с какой целью разработана такая архитектура?
Особенно в свете sboykoв ОДБС для других баз так проходит

Архитектура самая обычная! Но перспективы туманные... Поэтому лично мне хотелось бы чтобы программка работала на разных базах, возможно в разных местах и с синхронизацией. Единственно что четко известно - центр - на Оракле. Поэтому я стараюсь чтобы все работало на аксесе-самое трудное, АСА-периферийные пользователи, МС sql, Oracle. А основная идея - база - это только хранилище и боллее ничего а вся логика в программе. Точно также не хочется поддерживать несколько версий программы...

По поводу второй схемы в Оракле - появился второй большой а главное параллельный проект. На один сервер не лезет из-за синонимов, а второй сервер вероятен - но тогда потребуются лишние спецы по Ораклу, что весьма дорого - вот и весь сказ.
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36571682
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 VanoR,

спасибо большое за подсказку, но я лучше сессию буду менять
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36574027
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoАрхитектура самая обычная! Мне кажется, что вы путаете понятия схемы и экземпляра (SCHEMA и INSTANCE).

sboykoПо поводу второй схемы в Оракле - появился второй большой а главное параллельный проект. На один сервер не лезет из-за синонимов, а второй сервер вероятен - но тогда потребуются лишние спецы по Ораклу, что весьма дорого - вот и весь сказ.Имеющихся специалистов по Oracle недостаточно для поддержки еще одного экземпляра БД?
Куда катится мир!

Теперь по сути.
tru55
Код: plaintext
ALTER SESSION SET CURRENT_SCHEMA=
единственно правильное решение для вашего случая. Эта строчка не потребует от вас sboykoподдерживать несколько версий программы...
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36581179
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99,

Побойтесь бога! схему и инстанс я не путаю уже 20 лет! :-)
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36581205
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko, прошу прощения, если чем-то обидел.
Но тогда почему 2 копии? Если уж так хочется обойтись без привязки к БД?
Собственно, именно поэтому меня и удивила такая архитектура...
Впрочем, это уже явный оффтоп.
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36583920
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99sboyko, прошу прощения, если чем-то обидел.
Но тогда почему 2 копии? Если уж так хочется обойтись без привязки к БД?
Собственно, именно поэтому меня и удивила такая архитектура...
Впрочем, это уже явный оффтоп.

обиды никакой!
программа благополучно почти на 100 % обходится без привязки к базе. я говорю почти.... хочется поддерживать и дальше такое состояние. но в оракле не удается снаружи(из файла ини) руководить подключением к нужной схеме(пока не удается или это навсегда-кто знает).
куда ставить 2 инстанс(2 схему)? проще на тот же сервер-зачем плодить лишнюю технику? но судя по всему придется ставить новый еще один сервер. мне как программисту это не нравится - в этом причина моих вопросов. есс-но хочется самому управлять ситуацией - а не подстраиваться под нее! эти две схемы абсолютно идентичны но НЕ ДОЛЖНЫ смешиваться в отчетности и ДОЛЖНЫ вестись параллельно - требование свыше!
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36585020
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, дано:
1. Приложение не зависит от испольуемого сервера БД
2. В случае с Oracle все объекты, используемые приложением, лежат в одной схеме.


sboykoкуда ставить 2 инстанс(2 схему)? проще на тот же сервер-зачем плодить лишнюю технику?Действительно, новую технику можно не плодить (мы ведь сейчас не обсуждаем продакшн?), достаточно развернуть еще один экземпляр Oracle на том же сервере. Тогда вы запросто сможете sboyko... снаружи(из файла ини) руководить подключением...без дополнительных телодвижений.

sboykoесс-но хочется самому управлять ситуацией - а не подстраиваться под нее!
Давайте попробуем сделать это даже в текущей конфигурации. Я правильно понимаю, что для каждого сервера БД в приложении используется собственный объект транзакций? Тогда код, приведенный ниже, будет еще проще. Или сервера применяются по модному в последнее время принципу только для хранения данных в таблицах? В любом случае, вы можете легко обработать ситуацию примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
// Унаследованный объект транзакций, имеющий свойство(например is_CurrentOraScheme), в котором хранится интересующая нас схема
// Кусок pfc
// Function:  of_Init

this.DBMS= ProfileString (as_inifile, as_inisection, 'DBMS', '')
this.Database = ProfileString (as_inifile, as_inisection, 'Database', '')
this.LogID = ProfileString (as_inifile, as_inisection, 'LogID', '')
this.LogPass = ProfileString (as_inifile, as_inisection, 'LogPassword', '')
this.ServerName = ProfileString (as_inifile, as_inisection, 'ServerName', '')
this.UserID = ProfileString (as_inifile, as_inisection, 'UserID', '')
this.DBPass =ProfileString (as_inifile, as_inisection, 'DatabasePassword', '')
this.Lock =ProfileString (as_inifile, as_inisection, 'Lock', '')
this.DBParm =ProfileString (as_inifile, as_inisection, 'DBParm', '')
this.AutoCommit = lnv_conversion.of_Boolean (ProfileString (as_inifile, as_inisection, 'AutoCommit', 'false'))
if IsNull (this.AutoCommit) then this.AutoCommit = false

CHOOSE CASE upper(this.DBMS)
 CASE 'ODB'
 CASE ...
 CASE 'O73', 'O84', 'O90'...
   //Здесь прочитать какая схема нас интересует
  this.is_CurrentOraScheme=ProfileString (as_inifile, as_inisection, 'CurrentOraScheme', '')
END CHOOSE
...
//Function:  of_Connect
// 
connect using this;
ll_rc = this.SQLCode
if ll_rc =  0  then
 if this.is_CurrentOraScheme <> '' then
  //не побоюсь этого слова, вызову здесь embedded SQL
  string ls_SQL
  ls_SQL = "ALTER SESSION SET CURRENT_SCHEMA=" + this.is_CurrentOraScheme
  execute immediate :ls_SQL using this;
  ll_rc = this.SQLCode
 end if
end if
return ll_rc
Теперь ничего не мешает вам вести sboykoэти две схемы абсолютно идентичны но НЕ ДОЛЖНЫ смешиваться в отчетности и ДОЛЖНЫ вестись параллельно - требование свыше!

Но, ИМХО, в подобной ситуации правильней было бы развернуть второй (третий, десятый) экземпляр БД на том же самом физическом сервере.
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36585104
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И права нарезать не забыть:)
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36585132
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PL99,
спасибо! именно так я и поступил!
а несколько инстансов на одном компе я побаиваюсь...
...
Рейтинг: 0 / 0
К Гуру по Ораклу+ПБ
    #36683873
Не понимаю смысла вопроса.
Держать 2 коннекта одновременно ?
Переключть их "на ходу" ?
Входить то так , то этак ?
Или писать данные сразу в 2 места ?
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / К Гуру по Ораклу+ПБ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]