LINUX.ORG.RU

Переезд мастер хоста на Oracle и DBD::Oracle

 ,


0

1

Есть старый перловый скрипт, который использует dbi::Oracle для коннекта к БД.

DBI->connect("dbi:Oracle:host=".$cfg->param('host').";sid=".$cfg->param('sid').";port=".$cfg->param('port');

ip hostа в нем задается жестко, из-за чего если мастер база у оракла переезжает, соотв приходится каждый раз этот ip переписывать. Oracle админ дал след строчку для автовыбора мастер базы:

dns_tns = (DESCRIPTION=(CONNECT_TIMEOUT=15)(TRANSPORT_CONNECT_TIMEOUT=1)(RETRY_COUNT=0)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=10.100.1.2)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.1.3)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.2.7)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP) (HOST=10.100.2.6)(PORT = 1521)))(LOAD_BALANCE=OFF)(FAILOVER=TRUE)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=mhost_rw)))

Как эту логику засунуть в перловых скрипт ?

★★☆☆

Последнее исправление: maxcom (всего исправлений: 1)

Строка, которую тебе дал DBA, прописывается в tnsnames.ora ( $ORACLE_HOME/network/admin/tnsnames.ora )

А в перловом скрипте используешь

 $dbh = DBI->connect('dbi:Oracle:','username@dns_tns','password');

Или, как вариант, вместо tnsnames.ora пиши всю строку полностью:

$dbh = DBI->connect('dbi:Oracle:', q{scott/tiger@(DESCRIPTION=(CONNECT_TIMEOUT=15)(TRANSPORT_CONNECT_TIMEOUT=1)(RETRY_COUNT=0)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=10.100.1.2)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.1.3)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.2.7)(PORT = 1521))(ADDRESS=(PROTOCOL=TCP) (HOST=10.100.2.6)(PORT = 1521)))(LOAD_BALANCE=OFF)(FAILOVER=TRUE)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=mhost_rw))) }, "")

В тему: http://search.cpan.org/~pythian/DBD-Oracle-1.70/lib/DBD/Oracle.pm

router ★★★★★
()
Ответ на: комментарий от true_admin

Там задача не в переходе от ip к DNS, а в отработке failover переключения на запасную БД. DNS round robin здесь не в тему

[...](HOST=10.100.1.3)[...](HOST=10.100.2.6)[...](LOAD_BALANCE=OFF)(FAILOVER=TRUE)
router ★★★★★
()
Ответ на: комментарий от router

З.Ы. Если найдёшь описание синтаксиса строк подключения к oracle - кастани в тему, пожалуйста. Пока я тупо записил несколько примеров и использую по необходимости.

router ★★★★★
()
Ответ на: комментарий от true_admin

А потом ещё в каждом sql запросе ;) Зачем изобретать велосипед, если есть штатная возможность через строку подключения?

router ★★★★★
()
Ответ на: комментарий от router

А потом ещё в каждом sql запросе

Ты имеешь в виду что этот драйвер умеет делать fail over не только во время коннекта, но и во время работы?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Есть taf - transparent application failover, т.е. можно установить callback и его позовут, когда случится кака.

vtVitus ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.