Вопрос:
Я пытаюсь подключиться к Oracle через Power Query > From Database > From Oracle Database а затем я BI_TST, который находится внутри моего TNSNAMES (находится в: C:oracleproduct10.2.0client_2networkADMIN), и имеет соединение ниже внутри:
BI_TST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = srv-oracle3.mycompany.com.br)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bitst) ) )
Также у меня есть путь переменной, настроенный как TNS_ADMIN=C:oracleproduct10.2.0client_2networkADMIN.
Когда я использую SQL Developer для подключения, не используя TNS, устанавливая всю информацию вручную, она работает!
Когда я пытаюсь подключиться с помощью TNS в Excel, я получаю ошибку:
Message=ORA-12154: TNS:não foi possível resolver o identificador de conexão especificado ErrorCode=-2146232008
Wich означает на английском языке: “не удалось разрешить идентификатор соединения”
Может ли кто-нибудь помочь мне в этом вопросе?
Заранее спасибо!
Лучший ответ:
Честно говоря, у меня были заполненные имена. Я понимаю идею, стоящую за ней, и могу ее оценить, но я больше трачу время на то, чтобы понять, почему она не работает, чем я экономлю лишние нажатия клавиш.
По моему мнению, просто обойти TNSnames использовать Oracle ezconnect:
srv-oracle3.mycompany.com.br:1521/bitst
На месте:
BI_TST
Это должно работать и для ODBC. Если вы не можете напрямую подключиться через драйвер PowerQuery Oracle, попробуйте пройти через ODBC. Хотя это дополнительный слой, которого вы, вероятно, не хотите, я сомневаюсь, что вы заметите разницу в производительности, и он может абстрагировать трудности, с которыми вам обычно приходится иметь дело.
Ответ №1
Чтобы уточнить ответ Hambone, подключите Excel к Oracle через драйвер клиента Oracle без использования имен TNS:
- Перейдите в Панель управления> Средства администрирования> Источники данных ODBC
- Перейдите на вкладку “Файл DSN”
- Выберите драйвер Oracle (например, Oracle11gr1)
- Укажите имя для нового источника данных (любое имя)
- Когда появится запрос на имя службы, введите host: port/servicename, например db123: 1521/service123
Надеюсь, это работает для всех.