`
shuai1234
  • 浏览: 971895 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

JDBC连接ORACLE数据库的几种方式

 
阅读更多

格式一: Oracle JDBC Thin using a Service_Name:    

jdbc:oracle:thin:@//192.168.6.66:1521/rac  (数据库的服务名Service_name:rac)  

  

格式二: Oracle JDBC Thin using an SID:    

jdbc:oracle:thin:@192.168.6.66:1521:rac1   (数据库的实例名SID:rac1)  

  

格式三:Oracle JDBC Thin using  连接串      (一般在连接oracle RAC使用)

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=rac)(INSTANCE_NAME=rac1)))

或者

 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.68)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=rac)))

或者 

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.66)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.6.68)(PORT=1521))(FAILOVER=on)(LOAD_BALANCE=on))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=rac)))

 

注意:使用SID和SERVICE_NAME方式的区别"/" 与 ":"很多人没有注意.

--------------------- 

作者:CHINA华军 

来源:CSDN 

原文:https://blog.csdn.net/chinahuanghuajun/article/details/79035092 

版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

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

 

 

 

 

先说基本用法:

先按11G之前进行

conn / as sysdba;

create user test identifed by test;

 

ORA-65096: 公用用户名或角色名无效.

 

查官方文档得知“试图创建一个通用用户,必需要用C##或者c##开头”,这时候心里会有疑问,什么是common user?不管先建成功了再说

create C##user test identifed by test;

创建成功

 

 

SQL>show con_name;

 

CON_NAME

------------------------------

CDB$ROOT

 

selectcon_id,dbid,NAME,OPEN_MODEfromv$pdbs;



    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4066409480 PDB$SEED                       READ ONLY
         3 2270995695 PDBORCL                        MOUNTED

SQL>alter session set container=PDBORCL;

这时再用create user test identifed by test;建立用户就可以了。

  

 

CDB和PDB是ORACLE 12C一个很亮的新特性,由于他们的引入导致传统的ORACLE数据库管理理念不少发生了改变,这里列举了部分最基本的cdb和pdb管理方式
cdb和pdb关系图



ORACLE 12C版本

SQL> select * from v$version;
 
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0
PL/SQL Release 12.1.0.1.0 - Production                                                    0
CORE    12.1.0.1.0      Production                                                        0
TNS for Linux: Version 12.1.0.1.0 - Production                                            0
NLSRTL Version 12.1.0.1.0 - Production                                                    0

启动关闭pdb

SQL> startup
ORACLE instance started.
 
Total System Global Area  597098496 bytes
Fixed Size                  2291072 bytes
Variable Size             272632448 bytes
Database Buffers          314572800 bytes
Redo Buffers                7602176 bytes
Database mounted.
Database opened.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           MOUNTED
         4 3872456618 PDB2                           MOUNTED
 
SQL> alter PLUGGABLE database pdb1 open;
 
Pluggable database altered.
 
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           READ WRITE
         4 3872456618 PDB2                           MOUNTED
 
SQL> alter PLUGGABLE database pdb1 close;
 
Pluggable database altered.
 
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           MOUNTED
         4 3872456618 PDB2                           MOUNTED
 
SQL> alter PLUGGABLE database all open;
 
Pluggable database altered.
 
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           READ WRITE
         4 3872456618 PDB2                           READ WRITE
 
SQL> alter PLUGGABLE database all close;
 
Pluggable database altered.
 
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           MOUNTED
         4 3872456618 PDB2                           MOUNTED
 
SQL> alter session set container=pdb1;
 
Session altered.
 
SQL> startup
Pluggable Database opened.
SQL>  select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         3 3313918585 PDB1                           READ WRITE

pdb的管理可以在cdb中进行也可以在pdb中进行,如果是cdb中进行,需要PLUGGABLE关键字,如果是pdb中直接和普通数据库一样

登录pdb

[oracle@xifenfei ~]$ lsnrctl status
 
LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 12-MAY-2013 08:07:02
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xifenfei)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                11-MAY-2013 18:30:54
Uptime                    0 days 13 hr. 36 min. 8 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/grid/product/12.1/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/xifenfei/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xifenfei)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=xifenfei)(PORT=5500))
(Security=(my_wallet_directory=/u01/oracle/12.1/db_1/admin/cdb/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "cdb" has 1 instance(s).
  Instance "cdb", status READY, has 1 handler(s) for this service...
Service "cdbXDB" has 1 instance(s).
  Instance "cdb", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "cdb", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
  Instance "cdb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@xifenfei ~]$ tnsping pdb1
 
TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 12-MAY-2013 08:07:09
 
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 
Used parameter files:
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xifenfei)
(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1)))
OK (20 msec)
[oracle@xifenfei ~]$ sqlplus sys/xifenfei@pdb1 as sysdba
 
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 12 08:08:02 2013
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
 
SQL> show con_name;
 
CON_NAME
------------------------------
PDB1
 
 
[oracle@xifenfei ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 12 08:09:14 2013
 
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
 
SQL> alter session set container=pdb1;
 
Session altered.
 
SQL> show con_name;
 
CON_NAME
------------------------------
PDB1

pdb可以通过alter session container进入也可以直接通过tns方式登录

创建用户

SQL> show con_name;
 
CON_NAME
------------------------------
CDB$ROOT
 
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
 
    CON_ID       DBID NAME                           OPEN_MODE
---------- ---------- ------------------------------ ----------
         2 4048821679 PDB$SEED                       READ ONLY
         3 3313918585 PDB1                           READ WRITE
         4 3872456618 PDB2                           MOUNTED
 
SQL> create user xff identified by xifenfei;
create user xff identified by xifenfei
            *
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##xff identified by xifenfei;
 
User created.
 
SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS WHERE USERNAME='C##XFF';
 
USERNAME       CON_ID    USER_ID
---------- ---------- ----------
C##XFF              1        103
C##XFF              3        104
 
SQL> alter session set container=pdb1;
 
Session altered.
 
SQL> show con_name
 
CON_NAME
------------------------------
PDB1
SQL> create user xff identified by xifenfei;
 
User created.
 
SQL> create user c##abc identified by xifenfei;
create user c##abc identified by xifenfei
            *
ERROR at line 1:
ORA-65094: invalid local user or role name

创建用户默认的是container=all,在cdb中只能创建全局用户(c##开头),会在cdb和所有的pdb中创建该用户(但是pdb中的全局用户需要另外授权才能够在pdb中访问)。在pdb中只能创建的用户为本地用户

用户授权

SQL> grant connect to c##xff;
 
Grant succeeded.
 
SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='CONNECT' AND GRANTEE='C##XFF';
 
GRANTEE                            CON_ID
------------------------------ ----------
C##XFF                                  1
 
SQL> grant resource to c##xff container=all;
 
Grant succeeded.
 
SQL>  select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='RESOURCE' AND  GRANTEE='C##XFF';
 
GRANTEE                            CON_ID
------------------------------ ----------
C##XFF                                  1
C##XFF                                  3

用户授权默认情况下是只会给当前container,在cdb中也可以指定container=all,对所有open的pdb且存在该用户都进行授权

修改参数

SQL> alter system set open_cursors=500 container=all;
 
System altered.
 
SQL> conn sys/xifenfei@pdb1 as sysdba
Connected.
SQL> show parameter open_cursors;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     500
SQL>  alter system set open_cursors=100;
 alter system set open_cursors=100
*
ERROR at line 1:
ORA-01219: database or pluggable database not open: queries allowed on fixed
tables or views only
 
 
SQL> alter database open;
 
Database altered.
 
SQL> alter system set open_cursors=100;
 
System altered.
 
SQL>  show parameter open_cursors;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     100
SQL> conn / as sysdba
Connected.
SQL> show parameter open_cursors;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     500

这里可以看到在cdb中修改,pdb会继承进去;如果在pdb中修改会覆盖pdb从cdb中继承的参数含义

-------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

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的关系图。 

  • 大小: 27.4 KB
分享到:
评论

相关推荐

    通过JDBC连接oracle数据库的十大技巧

    ### 通过JDBC连接Oracle数据库的十大技巧 #### 1. 使用Thin驱动程序 在Java客户端软件开发过程中,Oracle提供了多种驱动程序供开发者选择。其中,OCI(Oracle Call Interface)驱动程序通过Java本地接口(JNI)与...

    Java连接Oracle数据库的各种方法

    Java连接Oracle数据库主要依赖于两种方法:JDBC和SQLJ。这两种方法都是Oracle8i及其后续版本中为Java开发者提供的数据库交互方式。 JDBC(Java Database Connectivity)是一种标准的Java API,它允许Java应用程序...

    java使用JDBC和ODBC连接oracle数据库

    Java通过JDBC(Java Database Connectivity)和ODBC(Open Database Connectivity)来连接Oracle数据库是两种常见的数据访问方式。本文将详细介绍这两种方法,并提供相关的技术知识。 首先,JDBC是Java平台的标准...

    JDBC连接各种数据库字符串大全

    除了以上介绍的几种数据库外,还有多种其他类型的数据库也支持通过JDBC进行连接。 **1. ODBC连接方式** ODBC (Open Database Connectivity) 是一种用于访问数据库的标准接口。例如: ```java Class.forName("sun....

    Java用JDBC实现对Oracle数据库操作

    标题“Java用JDBC实现对Oracle数据库操作”主要涉及Java编程语言如何利用Java Database Connectivity (JDBC) API来与Oracle数据库进行交互。JDBC是Java中用于与各种数据库通信的标准接口,而Oracle数据库是一个广泛...

    JDBC连接几种数据库的方式

    ### JDBC连接几种数据库的方式 Java Database Connectivity (JDBC) 是 Java 开发者访问关系型数据库的标准接口,通过 JDBC,开发者可以使用 SQL 语句来执行常见的数据库操作,如查询、更新、插入等。本文将详细介绍...

    jdbc连接各种数据库方式列表

    下面将详细介绍如何使用JDBC连接几种常见的数据库。 #### 1. Oracle数据库连接 对于Oracle数据库,可以使用thin驱动(纯Java驱动)来建立连接。示例代码如下: ```java try { Class.forName("oracle.jdbc.driver...

    XML配置文件连接Oracle数据库

    XML配置文件连接Oracle数据库的过程主要包括以下几个步骤: 1. **创建XML配置文件**:首先,你需要创建一个XML文件,例如命名为`database_config.xml`。在文件中定义一个根元素,比如`<database>`,然后在其中包含...

    oracle数据库连接的jdbc和jar包

    Oracle JDBC驱动程序分为几种类型,包括 Thin、 Thick、Universal Driver 和 Native SQL API。其中,Thin驱动是最常用的一种,它是一个轻量级的驱动,不需要Oracle客户端软件,可以直接通过网络连接到Oracle数据库...

    java jdbc连接oracle所需要的jar包

    在使用Java JDBC连接Oracle数据库时,你需要包含特定的Oracle JDBC驱动程序,这个驱动程序通常以JAR(Java Archive)文件的形式提供。Oracle提供了多种JDBC驱动,包括 Thin driver 和 Thin driver,它们都是轻量级的...

    jdbc连接各种数据库方式列表.txt

    对于 Microsoft SQL Server 数据库,有几种不同的驱动程序可用于 JDBC 连接。以下是一些示例: 1. **SQL Server 7.0/2000** ```java Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance...

    JDBC连接不同数据库时的设置

    它提供了一种统一的方式来与各种类型的数据库进行交互,包括但不限于 Oracle、MySQL 和 SQL Server。由于不同的数据库管理系统(DBMS)之间存在差异,因此在使用 JDBC 连接不同的数据库时,需要根据特定数据库的特点...

    EJB连接Oracle数据库

    在EJB中连接Oracle数据库,首先需要确保以下几个关键组件已经准备就绪: 1. **Oracle驱动**:EJB应用需要Oracle的JDBC驱动来建立与数据库的连接。这通常意味着要在类路径中包含ojdbc.jar或ojdbc7.jar等对应的驱动...

    使用JDBC存取ORACLE数据库中的图片数据.pdf

    JDBC驱动程序是连接Java应用程序与特定数据库的关键,这里提到的Oracle公司提供的`classes12.jar`驱动包,用于与Oracle数据库建立连接。 建立数据库连接的过程通常包括以下步骤: 1. 加载JDBC驱动:通过`Class.for...

    WMB 使用Compute节点连接Oracle数据库实例

    3. **连接Oracle数据库**:要让Compute节点与Oracle数据库进行通信,需要配置数据库连接池(JDBC DataSource)。这包括设置数据库驱动、URL、用户名和密码等信息。可能还需要考虑连接池参数,如最大连接数、超时设置...

    Java-中有两种方式连接oracle数据库-个人成功例子

    在Java中使用JDBC连接Oracle数据库,主要分为以下几步: 1. **导入Oracle JDBC驱动**:在项目中添加Oracle的JDBC驱动jar包,例如`ojdbc6_g.jar`。在MyEclipse中,可以通过右键项目 -> Properties -> Java Build ...

    JDBC连接各种数据库的各种jar包

    以下是标题和描述中提到的几种数据库及其对应的JDBC驱动jar包: 1. **DB2**:IBM的DB2数据库使用的JDBC驱动jar包通常命名为`db2jcc.jar`或`db2jcc4.jar`。这个jar包提供了连接到DB2数据库所需的所有类和方法。 2. ...

    oracle连接java的几种方法

    本篇文章将详细介绍在Java中连接Oracle数据库的几种常见方法,以及相关的源码示例。 1. JDBC-ODBC桥连接: JDBC-ODBC桥是Java早期连接数据库的一种方式,它依赖于操作系统上的ODBC数据源。首先,你需要在系统中...

    JDBC数据库连接串总汇

    一个典型的JDBC连接字符串通常包含以下几个关键部分: 1. **协议**:JDBC的协议通常是`jdbc`,它告诉Java应用程序将使用JDBC API来建立数据库连接。 2. **子协议**:指的是具体的数据库类型,如`mysql`、`oracle`、...

    JDBC连接各种数据库.rar

    JDBC连接数据库主要包括以下几个步骤: 1. **加载驱动**:在Java程序中,首先需要加载对应数据库的JDBC驱动。这通常通过`Class.forName()`方法实现,例如加载MySQL驱动:`Class.forName("com.mysql.cj.jdbc.Driver"...

Global site tag (gtag.js) - Google Analytics