07.05.2017 11:37
DMaslov
 
Добрый день.

Поделитесь опытом, как с минимальными задержками перенастроить TNSNAMES на клиентах при переносе базы на другой сервер.

Вариант "соединение через сервер приложений" пока не рассматриваю - его позже изучу. Сейчас речь о том, что все клиенты соединяются с базой напрямую, и на клиенте есть два ORACLE_HOME - 11-й и 8-й для репортсов.

Идеальный вариант - написать скрипт смены TNSNAMES и положить в скрипт логона в домен. Собсно, вот пока нарисовалось единственное затруднение, которое пока не доводилось решать: определить пути ORACLE_HOME и положить в них новый файл TNSNAMES.ORA. Под виндой они сидят в реестре. Пока копаюсь в способах извлечения из реестра, можете подсказать готовые решения, если они у вас есть.
07.05.2017 13:36
OlegON
 
Можно задавать переменную %TNS_ADMIN% и класть в нее, например. Я в свое время долго пинал разработчиков, чтобы они это поддержали.
07.05.2017 14:47
DMaslov
 
Переменная среды - конечно, удобно, но переменные среды в Oracle под Windows чаще всего не используют.

Результат сегодняшнего "век живи, век учись":

Код:
Dim Folder1, Folder2, key, Str

set sh = WScript.CreateObject("WScript.Shell")
Set exec = sh.Exec("reg QUERY HKLM\Software\ORACLE /F KEY")
Set OutStream = exec.StdOut
While Not OutStream.AtEndOfStream 
 Str = OutStream.ReadLine()
 if (InStrRev(Str, "KEY") <> 0) then 
   rem WScript.Echo(Str)
   key = Str & "\ORACLE_HOME"
   rem WScript.Echo("KEY: " & key)
   OH = sh.RegRead(key)
   WScript.Echo("ORACLE_HOME 32: " &OH)
 end if
Wend
Set exec = sh.Exec("reg QUERY HKLM\Software\WOW6432Node\ORACLE /F KEY")
Set OutStream = exec.StdOut
While Not OutStream.AtEndOfStream 
 Str = OutStream.ReadLine()
 if (InStrRev(Str, "KEY") <> 0) then 
   rem WScript.Echo(Str)
   key = Str & "\ORACLE_HOME"
   rem WScript.Echo("KEY: " & key)
   OH = sh.RegRead(key)
   WScript.Echo("ORACLE_HOME 64: " &OH)
 end if
Wend
Код:
C:\>cscript oracle_home.vbs
Сервер сценариев Windows (Microsoft ®) версия 5.812
Copyright (C) Корпорация Майкрософт 1996-2006, все права защищены.

ORACLE_HOME 32: c:\ora11\orahome
ORACLE_HOME 64: C:\ora11client\orahome
07.05.2017 14:49
DMaslov
 
Эмм, токо 32 и 64 наоборот, в WOW6432Node хранятся 32-разрыдные пути реестра.
07.05.2017 19:48
OlegON
 
Цитата:
DMaslov переменные среды в Oracle под Windows чаще всего не используют
почему это вдруг? я всегда ORACLE_SID выставляю в системные, про NLS_LANG и вообще говорить нечего. Переменные среды, кстати, приоритетнее реестра.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.