2015-01-17 1 views
5

Я создал тестовое приложение в Hibernate и используя Oracle 12c в качестве базы данных. Мне удалось подключиться к пользователю «sys» основной базы данных. Я могу создавать, вставлять, обновлять таблицы в этой БД. Но я не могу подключиться к подключаемой базе данных. Есть ли способ подключения к PDB с использованием спящего режима. Тест - это моя основная БД, а pdborcl - мой PDB. Я также попробовал Google для этого, но нет сообщений в Hibernate и Oracle 12c, но ничего особенного для PDB. В этой статье говорится, что нет поддержки для 12c. https://github.com/denimgroup/threadfix/issues/488 Это правда? Что касается моего понимания Oracle 12c, то CDB предназначен только для администрирования, а PDB будет базой данных, используемой для приложений.Можно ли подключиться к базе данных oacle 12c с возможностью подключения к Hibernate?

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 

     <property name="connection.url">jdbc:oracle:thin:@localhost:1521:test</property> 
     <property name="connection.username">sys as sysdba</property> 
     <property name="connection.password">sys</property> 
     <property name="connection.driver_class">oracle.jdbc.OracleDriver</property> 
     <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> 

     <property name="show_sql">true</property> 

     <property name="format_sql">true</property> 
     <property name="hbm2ddl.auto">create</property> 

     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">1</property> 
     <property name="current_session_context_class">thread</property> 

     <mapping class="com.test.domain.Employee" /> 
     <mapping class="com.test.domain.Department" /> 

      </session-factory> 
</hibernate-configuration> 

При попытке подключиться к PDB, изменяя тест pdborcl это дает мне ниже исключения. Я могу выполнить ping как test, так и pdborcl из моей системы. Я также могу подключиться к обеим базам данных, используя sqlplus из терминала.

Я получаю ниже исключения, когда пытаюсь подключиться к PDB.

Jan 15, 2015 10:30:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) 
Jan 15, 2015 10:30:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000401: using driver [oracle.jdbc.OracleDriver] at URL [jdbc:oracle:thin:@localhost:1521:pdborcl] 
Jan 15, 2015 10:30:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000046: Connection properties: {user=sys as sysdba, password=****} 
Jan 15, 2015 10:30:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator 
INFO: HHH000006: Autocommit mode: false 
Jan 15, 2015 10:30:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
INFO: HHH000115: Hibernate connection pool size: 1 (min=1) 
Initial SessionFactory creation failed.org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.test.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:17) 
    at com.test.util.HibernateUtil.<clinit>(HibernateUtil.java:8) 
    at com.test.hibernate.HibernateTest.main(HibernateTest.java:15) 
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:122) 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140) 
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58) 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) 
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 
    at com.test.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:13) 
    ... 2 more 
Caused by: java.sql.SQLException: Listener refused the connection with the following error: 
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 

    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70) 
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199) 
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:480) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:413) 
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508) 
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510) 
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55) 
    ... 16 more 
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error: 
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 

    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:361) 
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:966) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:292) 
    ... 21 more 

ответ

6

Ваш синтаксис немного неправильный. Убедитесь, что вы используете/SERVICE_NAME, а не: SID. Для подключения jdbc к подключаемой базе данных: SID больше нельзя использовать. (ну, он может, но не туда) Доступ к базе данных Oracle по служебному имени является правильным подходом с Oracle 8i. И это 100 лет назад!

jdbc:oracle:thin:@localhost:1521/my_pdb_service_name 

Вы найдете доступные услуги, попросив слушателя

lsnrctl service 

Счет SYS специальный счет. Sys имеет то же значение для базы данных, что и пользователь root для ОС. Вы можете причинить вред этим пользователям! Вместо этого создайте учетную запись приложения/пользователя.

create user mysuperapp identified by "Neverloginassys"; 
grant create session to mysuperapp; 

Холл объясняет все сценарии, here

удачи 12с подключения,

Bjarte

Смежные вопросы