![]() |
|
|
![]()
|
|
| dershokus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
Здравствуйте... снова.
Использую OCI + VC++. Оракул незнаю вообще, но пытаюсь изучать. Я сделал подключение, все работает и даже нормально выполяются запросы, но! У меня, конечно, EX т.е. одна база ограниченная 12ГБ, там нет возможности создать и значит выбрать базу данных. Но в нормальных версиях ведь можно, значит должна быть какая-то возможность выбрать базу через OCI с которой мне работать. Может я не понимаю чего-то принципиального в методе работы с Oracle? Может там на каждую базу выделяется отдельный порт или SID (что это такое я тоже слабо понимаю)? В общем, как мне выбрать базу данных с которой работать? |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Если я правильно понял, то выбор БД в оракуле делается так:
в файле
где %ORACLE_CLIENT_PATH% - путь к установленному клиенту (обычно - c:\oracle\product\10.2.0\client_1) для каждой БД добавляются такие строки
а затем в строке подключения к БД указывается
понятное дело, что 192.168.1.1, user_name и pass нужно заменить на свои -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| dershokus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
Спасибо. Файл tnsnames.ora нашел. Вот только я не через OLEDB подключаюсь. Интересен OCI...
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
По идее, поменяется только параметр Provider, но я не уверен Добавлено через 1 минуту и 41 секунду посмотри здесь - http://www.connectionstrings.com/oracle может чего-нить поможет -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| dershokus |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
Сейчас использую OCILogon и он мне выдает
имя базы я использую "xe" мой tnsnames.ora
|
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
что пишет на
? Если всё норм., то попробуй подключиться к своей базе XE стандартными средствами оракула. Добавлено через 2 минуты и 22 секунды вот ещё почитай - http://ora-12154.ora-code.com/ -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
В отличие от юзера и пароля база выбирается функцией OCIServerAttach()
У меня работает вот такой код:
Это сообщение отредактировал(а) leniviy - 13.8.2012, 21:35 Присоединённый файл ( Кол-во скачиваний: 1 )
cdemoanydata.zip 7,25 Kb |
|||
|
||||
| dershokus |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
Всем спасибо. Расследование показало что есть такие функции:
У них в параметрах есть OraText *dbName в котором (по документации) нужно вводить имя базы. Но у меня первыми 2мя функциями воспользоваться не получилось. В Оракуле есть сложная система сессий и транзакций. Первая функция открывает сессию на каждого пользователя (тоесть система упрощенная). Я пробывал по разному их вызывать, но результата это не возымело. Пошел на "хитрость". Как сказал leniviy, OCIServerAttach принимает аргумент CONST text *dblink, но по документации
т.е. это имя хоста, в который можно засунуть порт и название базы в таком формате: <host>:<port>/<db_name>, но это откроет сессию только на одну базу, что с точки зрения оптимизации не очень здорово, но совершенно удовлетворяет условиям моей задачи. Надеюсь, скоро проверю на нормальной версии базы данных и тогда все станет ясно. Еще отпишу, наверное |
||||
|
|||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Пожалуйста обьясни, как ты предполагаешь, какую возможность должен давать оптимизированный вариант. Переключать базу что ли? Какими СУБД ты пользовался раньше? Это сообщение отредактировал(а) leniviy - 14.8.2012, 10:26 |
|||
|
||||
| dershokus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
leniviy, ну да. Ведь по настроящей схеме придется переподключаться к серверу, чтобы сменить базу. Если у нас на сервере 10 баз, значит нам нужно будет 10 раз переподключаться или держать 10 соединений, что не есть гуд.
Но это мое личное мнение, возможно так все и должно быть. Я только копаюсь в OCI, но судя по тому, что предоставляет этот интерфейс - так делать не правильно |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
В MySQL и MSSQL на сервере может быть много баз, и действительно можно переключаться между ними в рамках одной сессии.
В оракле понятие "база" ближе к "серверу". Да, на одной инсталляции оракла можно поднять 2 базы, но у них будет разный SID, и это будут разные системные процессы. Одно физическое подключение нельзя использовать для подключения к разным SID. Аналогом MSSQL базы является "схема" оракла. Обычно имя схемы совпадает с логином. (В MSSQL тоже есть схемы, но там всё запутано). Из sqlplus можно подключиться к другой схеме командой "CONNECT" и введя логин и пароль и текущий SID, но не уверен, что при этом сохраняется физическое подключение. Это сообщение отредактировал(а) leniviy - 14.8.2012, 10:41 |
|||
|
||||
| dershokus |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 7.8.2011 Репутация: нет Всего: 1 |
Спасибо за подсказу
Один маленький вопрос - oracle в стандарте использует placeholders вида ":<name>" а не "?" как в стандарте. Есть ли возможность использовать неименованые параметры т.е. знаки вопроса? |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Насколько я знаю, нет. Чтобы было одинаково, надо ODBC какой-нибудь использовать, а не OCI.
В случае динамического SQL можно давать им имена :p1,:p2,... Это сообщение отредактировал(а) leniviy - 15.8.2012, 14:26 |
|||
|
||||
![]()
|
| Правила форума "C++: Базы данных" | |
|
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |