import urlparse, urllib
def myquote(url):
parts= urlparse.urlparse(url)
return urlparse.urlunparse(parts[:2] + urllib.quote(parts[2]) + parts[3:])
Это заключает в кавычки только компонент контура.
Иначе, Вы могли сделать: urllib.quote(url, safe=":/")
URL-адрес должен выглядеть следующим образом:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))
(CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))
На самом деле, просто скопируйте файлы из вашего tnsnames.ora
.
Вы можете посмотреть драйверы OCI. Я считаю, что они должны работать лучше и лучше справляться с RAC.
из http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg01dev.htm#429762
OCI обеспечивает значительные преимущества по сравнению с другими методами доступа к базе данных Oracle:
- Более детальный контроль над всеми аспектами разработки приложения.
- Высокая степень контроля над выполнением программы.
- Использование знакомых методов программирования 3GL. и инструменты разработки приложений, такие как браузеры и отладчики.
- Поддержка динамического SQL, метод 4.
- Доступность на самом широком диапазоне платформ из всех программных интерфейсов Oracle.
- Динамическое связывание и определение с помощью обратных вызовов.
- Описывать функциональные возможности для предоставления слоев метаданных сервера.
- Уведомление об асинхронном событии для зарегистрированных клиентских приложений.
- Расширенный язык обработки данных массива (DML) для вставок, обновлений и удалений массивов.
- Возможность связывания запрос фиксации с исполнением для уменьшения количества циклов приема-передачи.
- Оптимизация для запросов с использованием прозрачных буферов предварительной выборки для уменьшения количества циклов обработки.
- Безопасность потоков, поэтому вам не нужно использовать взаимные исключительные блокировки (мьютекс) для дескрипторов OCI.
- Соединение с сервером в неблокирующем режиме означает, что управление возвращается коду OCI, когда вызов все еще выполняется или не может быть завершен.
Смысл файла tnsnames, старого сервера Oracle Names и нового рекомендованного метода разрешения имен баз данных сервером каталогов LDAP состоит в том, чтобы избежать необходимости жестко указывать имена хостов, адреса, порты и т. Д. В строке подключения. Администраторы баз данных должны иметь возможность перемещать базу данных на новый хост или порт, ничего не нарушая.
Лучший способ задать URL-адрес тонкого подключения - использовать следующий синтаксис:
jdbc: oracle: thin: @ldap: // <имя сервера OID>: <порт OID> / <идентификатор безопасности базы данных или имя службы> , cn = OracleContext, dc =
Итак, в вашем случае, если бы «oid» было DNS-разрешимым именем сервера OID в вашей компании, и он использовал порт 5000, это было бы:
jdbc : oracle: thin: @ldap: // oid: 5000 / mydb1, cn = OracleContext, dc = myco, dc = com
Если ваши администраторы баз данных еще не настроили OID, они сильно отстают. Пора получить новых администраторов баз данных.
-squish