2015-01-17 15 views
5

Hazırda bekletme uygulamasında bir test uygulaması oluşturdum ve veritabanı olarak Oracle 12c'yi kullanıyorum. Ana veritabanının "sys" kullanıcısına bağlanabildim. Bu DB'deki tabloları oluşturabilir, ekleyebilir, güncelleyebilirim. Ancak takılabilir veritabanına bağlanamıyorum. Hazırda bekletme modunu kullanarak PDB'ye bağlanmanın herhangi bir yolu var mı. Test benim ana DB'm ve pdborcl benim PDB'm. Bunun için Google'ı da denedim, ancak Hazırda Beklemede ve Oracle 12c'de yayın yok, ancak PDB'ye özel bir şey yok. 12c'ye destek olmadığını söyleyen bu yazı var. https://github.com/denimgroup/threadfix/issues/488 Bu doğru mu? Oracle 12c konusundaki anlayışım gittikçe, CDB yalnızca yönetim amaçlıdır ve PDB, uygulama amaçları için kullanılan veritabanı olacaktır.Hazırda bekletme kullanılarak Oracle 12c takılabilir veritabanına bağlanmak mümkün mü?

<?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> 

Ben istisna altında bana verir pdborcl için testi değiştirerek PDB bağlanmayı deneyin hibernate.cfg.xml

. Hem test hem de pdborcl'u sistemimden ping edebiliyorum. Ayrıca, her iki DB'ye de terminalden sqlplus kullanarak bağlanabiliyorum.

PDB'ye bağlanmaya çalıştığımda aşağıda istisna yapıyorum.

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 

cevap

6

Sözdiziminiz biraz yanlış./SERVICE_NAME kullanmadığınızdan emin olun: SID. jdbc'nin takılabilir bir veritabanına bağlanması için: SID artık kullanılamaz. (peki, ancak oraya gitmeyin) Oracle Database'e servis_adı ile erişmek, Oracle 8i'den bu yana doğru yaklaşımdır. Ve bu 100 yıl önce!

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

Sen dinleyici

lsnrctl service 

sys hesabı özel bir hesaptır sorarak mevcut hizmetleri bulacaksınız. Sys, root kullanıcısı işletim sistemi için olduğu gibi veritabanı için de aynı anlama sahiptir. Bu kullanıcılara zarar verebilirsiniz! Bunun yerine bir uygulama hesabı/kullanıcı oluşturun.

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

Bay Hall tüm 12c bağlantı senaryoları şans here

iyisi,

Bjarte

açıklıyor
İlgili konular