jdbc鏈接oracle12c的pdb和cdb

1       本文簡介:

經過特地引起問題,聚焦問題,解決問題,並按部就班html

最後總結jdbc鏈接oracle12c中cdb和pdb的條件.java

軟件環境:Redhat7.1+orcacle12cpython

 

 

2       準備階段:

2.1  listener.ora和tnsnames.ora配置:

 

全部動做前,先貼出listener.ora和tnsnames.ora配置:sql

2.1.1  listener.ora>>

複製代碼

# listener.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

複製代碼

 

 

2.1.2  tnsnames.ora>>

 

複製代碼

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

PDBORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = pdborcl)
    )
  )

LISTENER_ORACLE12C =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracle12c)
    )
  )

ORACLE12C =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracle12c)
    )
  )

複製代碼

 

 

 

 

(注意添加PDBORCL)數據庫

2.1  用戶建立

2.1.1  用戶建立:

 

複製代碼

SQL> create user scott identified by scott;
create user scott identified by scott
            *
ERROR at line 1:
ORA-65096: invalid common user or role name
 
 
SQL> !oerr ora 65096
65096, 00000, "invalid common user or role name"
// *Cause:  An attempt was made to create a common user or role with a name
//          that wass not valid for common users or roles.  In addition to
//          the usual rules for user and role names, common user and role 
//          names must start with C## or c## and consist only of ASCII 
//          characters.
// *Action: Specify a valid common user or role name.
//
 
SQL> create user c##scott identified by scott;
 
User created.

複製代碼

 

 

 

 

(公共用戶名注意以c##開頭)c#

2.1.2  用戶受權:

SQL> grant dba to c##scott; 
 
Grant succeeded.

 

3       開始階段:

3.1  啓動監聽:

複製代碼

LSNRCTL> start
Starting /u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                04-JUN-2015 09:17:52
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
The listener supports no services
The command completed successfully

複製代碼

 

遠程機子ping服務機網絡

C:\Users\baby>tnsping 192.168.75.131:1521

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 04-6月 -
2015 12:30:50

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

 

已使用的參數文件:

已使用 HOSTNAME 適配器來解析別名
嘗試鏈接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST
=192.168.75.131)(PORT=1521)))
OK (30 毫秒)
成功啓動監聽,並如上遠程tnsping通監聽,但未啓動數據庫服務時,
Jdbc鏈接時就會報以下錯誤

java.sql.SQLRecoverableException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

 

3.2  啓動數據庫服務:

 

複製代碼

LSNRCTL> exit
[oracle@localhost Desktop]$ sqlplussys/sys_oracle as sysdba
 
SQL*Plus: Release 12.1.0.2.0 Production onThu Jun 4 09:51:07 2015
 
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
SQL> starttup
SP2-0042: unknown command"starttup" - rest of line ignored.
SQL> startup
ORACLE instance started.
 
Total System Global Area  411041792 bytes
Fixed Size              2925024 bytes
Variable Size                276827680 bytes
Database Buffers      125829120 bytes
Redo Buffers                 5459968 bytes
Database mounted.
Database opened.

複製代碼

 

 

3.3 查看監聽狀態

複製代碼

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
[oracle@localhost Desktop]$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 04-JUN-2015 10:06:15

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                04-JUN-2015 09:17:52
Uptime                    0 days 0 hr. 48 min. 22 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/oracle12c/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "oracle12c" has 1 instance(s).
  Instance "oracle12c", status READY, has 1 handler(s) for this service...
Service "oracle12cXDB" has 1 instance(s).
  Instance "oracle12c", status READY, has 1 handler(s) for this service...
Service "pdborcl" has 1 instance(s).
  Instance "oracle12c", status READY, has 1 handler(s) for this service...
The command completed successfully

複製代碼

 

3.4  Jdbc鏈接cdb數據庫實例oracle12c過程:

Connection conn = null;  
Statement stmt = null;  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.75.131:1521/oracle12c", "c##scott", "scott");  
stmt = conn.createStatement();  
System.out.println("鏈接對象:"+conn);

 

 

3.5  Jdbc鏈接cdb數據庫實例oracle12c結果:

鏈接對象:oracle.jdbc.driver.T4CConnection@3d3ee5c4oracle

 

3.6  Jdbc鏈接pdb數據庫實例oracle12c過程:

Connection conn = null;  
Statement stmt = null;  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.75.131:1521/pdborcl", " c##scott ", "scott");  
stmt = conn.createStatement();             
System.out.println("鏈接對象:"+conn);

 

3.7  Jdbc鏈接pdb數據庫實例oracle12c結果:

(失敗,緣由:未啓動名爲pdborcl的pdb數據庫)app

 

java.sql.SQLRecoverableException:ORA-01033: ORACLE initialization or shutdown in progressdom

 

 

3.8  啓動名爲pdborcl的pdb數據庫:

複製代碼

[oracle@localhost Desktop]$ sqlplus sys/sys_oracle@pdborcl as sysdba;

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jun 4 10:09:18 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> show con_name;

CON_NAME
------------------------------
PDBORCL
SQL> startup
Pluggable Database opened.

複製代碼

 

3.9  再次嘗試jdbc鏈接pdb數據庫

Connection conn = null;  
Statement stmt = null;  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.75.131:1521/pdborcl", "c##scott", "scott");  
stmt = conn.createStatement();             
System.out.println("鏈接對象:"+conn);

 

 

3.10  再次嘗試jdbc鏈接pdb數據庫結果:

 

鏈接對象:oracle.jdbc.driver.T4CConnection@76c20307

 

 

4       引起問題集中營:

4.1  pdb數據庫未開啓引起問題:

 

java.sql.SQLRecoverableException:ORA-01033: ORACLE initialization or shutdown in progress

 

4.2  防火牆阻擋引起問題:

複製代碼

[root@localhost ~]# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)
   Active: active (running) since Thu 2015-06-04 12:32:06 CST; 8s ago
 Main PID: 6060 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─6060 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Jun 04 12:32:06 localhost.localdomain systemd[1]: Started firewalld - dynamic...

複製代碼

 

 

致使結果:

C:\Users\baby>tnsping 192.168.75.131:1521

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 04-6月 -
2015 12:33:13

Copyright (c) 1997, 2010, Oracle.  All rights reserved.

 

已使用的參數文件:

已使用 HOSTNAME 適配器來解析別名
嘗試鏈接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST
=192.168.75.131)(PORT=1521)))
TNS-12535: TNS: 操做超時

 

(ps:防火牆命令由iptables迭代爲firewalld;防火牆開啓,且沒取消阻擋端口,此時tnsping會等待好久,最後提示" TNS-12535:TNS: 操做超時")

 

至此,已經完成jdbc鏈接oracle12c的cdb和pdb數據庫!

 

4.3  jdbc鏈接字符串引起問題:

l  jdbc鏈接cdb數據庫時,url兼容2種模式:

ü  "jdbc:oracle:thin:@192.168.75.131:1521:oracle12c"

ü  "jdbc:oracle:thin:@192.168.75.131:1521/oracle12c"

l  jdbc鏈接pdb數據庫時url必須使用:" jdbc:oracle:thin:@192.168.75.131:1521/oracle12c"格式,若使用傳統格式" jdbc:oracle:thin:@192.168.75.131:1521:oracle12c"則會報一下錯誤:

 

java.sql.SQLException: Listenerrefused the connection with the following error:

ORA-12505, TNS:listener does notcurrently know of SID given in connect descriptor

 

5       總結概要:

5.1  tnsping能ping通的條件:

l  監聽配置正確;

l  ping [ip] 能ping通,客戶端與服務端網絡互通;

l  關閉防火牆(systemctlstop firewalld);

5.2  jdbc鏈接oracle12的數據庫須要具有的條件:

l  監聽成功啓用,且tnsping經過(OK (30 毫秒);

l  tnsnames.ora配置正確(鏈接pdb數據庫,注意添加pdb服務項,具體如何配置查看[準備階段]);

l  監聽連帶的相應數據庫成功開啓;

l  Jdbc鏈接字符串迭代更新爲」jdbc:oracle:thin:@192.168.75.131:1521/pdborcl」而非" jdbc:oracle:thin:@192.168.75.131:1521:pdborcl"

 

 

6       知識補充:

6.1  Oracle12c新特性之cdb&pdb:

Oracle 12C引入了CDB與PDB的新特性,在ORACLE12C數據庫引入的多租用戶環境(Multitenant Environment)中,容許一個數據庫容器(CDB)承載多個可插拔數據庫(PDB)。CDB全稱爲ContainerDatabase,中文翻譯爲數據庫容器,PDB全稱爲Pluggable Database,便可插拔數據庫。在ORACLE 12C以前,實例與數據庫是一對一或多對一關係(RAC):即一個實例只能與一個數據庫相關聯,數據庫能夠被多個實例所加載。而實例與數據庫不多是一對多的關係。當進入ORACLE 12C後,實例與數據庫能夠是一對多的關係。下面是官方文檔關於CDB與PDB的關係圖。

 

 

6.2  dba更多支持:

http://www.cnblogs.com/dingyingsi/p/3604789.html

http://www.cnblogs.com/kerrycode/p/3386917.html

相關文章
相關標籤/搜索