#oracle #.net-core
#Oracle #.net-core
Вопрос:
В соответствии с этим: https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/odpnt/InstallCoreConfiguration.html#GUID-24C963AE-F20B-44B5-800C-594CA06BD24B
ODP.NET Core will look for sqlnet.ora and tnsnames.ora files in the following precedence order:
- Directory set in OracleConfiguration.TnsAdmin property
- Directory of the running ODP.NET Core assembly
- Current working directory
Итак, мой код:
OracleConfiguration.TnsAdmin = @"C:Oracleproduct12.1.0client_1NetworkAdmin";
string connString = "yadayada"
var conn = new OracleConnection(connString);
conn.Open();
conn.Close();
Это выдаст ошибку 12154, даже если я определил каталог, в котором находится мой sqlnet.ora. Если я скопирую и вставлю файл sqlnet в каталог / bin моего приложения, он работает нормально, поэтому я уверен, что мой файл sqlnet правильный.
Я также знаю об этом: https://community.oracle.com/thread/4345086
Но разработчик сказал, что я также могу заставить его работать, если я просто включу систему.DirectoryServices.Пакет протоколов NuGet, который я сделал, но он все равно не работает.
Как мне заставить это работать? Мне нужно заставить Oracle использовать файл sqlnet, определенный в папке client network admin. Я предпочитаю не включать файл sqlnet в папку /bin.
Мои tnsnames: (очевидно, это не используется …)
BOGUS =
(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST=NO.SUCH.HOST)(PORT=9999)))
(CONNECT_DATA = (SERVICE_NAME = DONT.USE.THIS.FILE))
)
Мой sqlnet:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DEFAULT_DOMAIN = somewhere.mycompany.com
NAMES.DIRECTORY_PATH = (LDAP)
USE_DEDICATED_SERVER = OFF
SQLNET.EXPIRE_TIME = 0
Комментарии:
1. ora-12154 является очень точным. Либо ваш процесс не смог найти файл tnsnames.ora, либо он нашел его, и в нем не было записи для ‘yadayada’. Точка. Полная остановка. Вы говорите о копировании sqlnet.ora, но именно tnsnames.ora, а не sqlnet.ora, разрешает ‘yadayda’. Пожалуйста, обновите свой вопрос и покажите содержимое sqlnet.ora И tnsnames.ora.
2. Если вы видите мои tnsnames, это просто фиктивно, там ничего нет. Все разрешено из этой sqlnet. Мне никогда не нужно копировать мой tnsnames.ora в мой каталог для работы, мне просто нужно скопировать sqlnet.ora и ldap.ora. Проблема здесь не в содержимом этих файлов, а в ТОМ, КАК заставить все работать без необходимости КОПИРОВАТЬ эти sqlnet.ora и ldap.ora в папку / bin моего приложения. OracleConfiguration. TnsAdmin не работает, как и указанное обходное решение.
Ответ №1:
Оказывается, я забыл указать конфигурацию для NamesDirectoryPath . Итак, код должен выглядеть следующим образом:
OracleConfiguration.TnsAdmin = @"C:Oracleproduct12.1.0client_1NetworkAdmin";
OracleConfiguration.NamesDirectoryPath = "(tnsnames, ldap)";
string connString = "yadayada"
var conn = new OracleConnection(connString);
conn.Open();
conn.Close();
Теперь работает нормально, мне не нужно копировать вещи в папку bin моего приложения, чтобы заставить его работать, Oracle будет знать, где искать, чтобы решить все, что ему нужно.