Есть несколько причин, которые могут вызвать эту проблему, но прежде чем начать работу с JDBC, вы должны быть уверены, что можете подключиться к базе данных с помощью SQL * Plus. Если вы не знакомы с SQL * Plus, это инструмент командной строки для подключения к базам данных Oracle, который долгое время был стандартной частью Oracle и включен в Oracle XE.
При подключении к базе данных Oracle с использованием JDBC вы не подключаетесь к базе данных напрямую. Вместо этого вы подключаетесь к слушателю TNS, который затем соединяет вас с базой данных. Ошибка ORA-12505
означает, что слушатель подключен, и вы можете подключиться к нему, но он не может подключить вас к базе данных, потому что не знает, что эта база данных работает. Для этого есть две причины:
- база данных не была запущена,
- база данных не зарегистрирована в прослушивателе, например, потому что база данных была запущена до прослушивателя. (Когда база данных запускается, она регистрируется в прослушивателе, если она уже запущена. Если прослушиватель не запущен, база данных не регистрируется сама, и если прослушиватель запускается, он не ищет базы данных, которые могут зарегистрируйтесь.)
ORA-12505 означает, что слушатель знает об этой базе данных, но слушатель не получил уведомление от базы данных о том, что база данных работает. (Если вы пытаетесь подключиться к неверной базе данных, используя неверный SID, вы получите сообщение об ошибке ORA-12154 «TNS: не удалось разрешить указанный идентификатор подключения».)
Какие службы Oracle работают в оснастке «Службы»? (Откройте его из Панели управления> Администрирование> Службы или просто Пуск> Выполнить> services.msc
.) Вам необходимо, чтобы службы OracleServiceXE и OracleXETNSListener были запущены.
Если обе службы были запущены, можете ли вы подключиться к базе данных в SQL * Plus, используя любое из следующего в командной строке? (Я предполагаю, что вы запускаете их на компьютере, на котором установлен Oracle XE.)
sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / as sysdba
(Замените system-password
на пароль, который вы установили для пользователей SYS и SYSTEM во время установки Oracle XE.)
Первые из этих трех подключаются через прослушиватель TNS, но вторые два подключаются напрямую к базе данных, не проходя через прослушиватель, и работают только в том случае, если вы находитесь на той же машине, что и база данных. Если первый сбой, но два других успешны, то соединения JDBC также потерпят неудачу. Если это так, подключитесь к базе данных, используя любой из двух других, и запустите ALTER SYSTEM REGISTER
. Затем выйдите из SQL * Plus и снова попробуйте первую форму.
Если третий отказывает, но второй работает, добавьте свою учетную запись в группу ora_dba. Сделайте это в Панели управления> Управление компьютером> Локальные пользователи и группы.
После того, как вы можете получить соединения в форме
sqlplus system / system-password @XE
чтобы работать, вы должны иметь возможность подключиться к Oracle XE через JDBC. (Между прочим, вы не показали нам код JDBC, который вы используете для подключения к базе данных, но я подозреваю, что он, скорее всего, правильный; были бы другие ошибки, если бы части строки подключения были неправильными.)