Томас Кайта объяснил разницу beatifully:
Имя службы является более гибким, чем SID будет.
База данных может динамически регистрироваться при прослушивании с использованием одного или нескольких имен служб. Фактически, более чем одна база данных может регистрироваться слушателем с использованием одного и того же имени службы (подумайте о кластерной среде, где у вас есть несколько экземпляров, все они являются одной и той же базой данных под обложками).
База данных, с другой стороны, имеет единственный SID. И один SID отправляется в одну базу данных. Это чистая связь 1: 1.
Услуга - это много-много отношений.
Названия служб используются с динамической регистрацией - регистры данных со слушателем после его запуска. Как только это произойдет, вы можете подключиться.
С SID - это больше походит на сообщение слушателя «Я хочу, чтобы вы подключиться к этой конкретной базе данных, я знаю„адрес“, здесь вы идете»
С SERVICE - вы спрашиваете слушателя чтобы связать вас с базой данных, которая может обслуживать ваш запрос, базу данных, которая регистрирует эту службу.
Больше информации здесь, https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1508737000346067364
Похожий вопрос был задан в Stack Overflow 6 лет назад, How SID is different from Service name in Oracle tnsnames.ora
В тестовой среде, поиграйте с tnsnames.ora
и listener.ora
. AFAIK, с 12c, Oracle использует только service_name
, так как он является гибким и имеет много разных отношений. Я буду перекрестно проверять документацию, если найду ее неверной.
Не знаете, что вы просите. Пожалуйста, покажите команды, которые вы пытаетесь выполнить, и т. Д. – OldProgrammer
Какова моя версия базы данных Oracle? –
Роль 'sysdba' не предоставляется учетной записи' system' по умолчанию. Когда вы укажете «SID» (клиент и сервер на том же компьютере) и подключитесь как «sysdba», вы будете использовать аутентификацию ОС. Имя пользователя и пароль oracle будут игнорироваться, если пользователь OS находится в группе «DBA». Когда вы используете «имя службы» и подключаетесь как «sysdba», файл пароля будет использоваться, и если роль 'sysdba' не предоставляется этому пользователю (пользователь не указан в файле пароля), вы получите' ORA- 0131' ошибка. –