直接进入ORACLE12C插件数据库

CDB和PDB是ORACLE 12C一个很亮的新特性,由于他们的引入导致传统的ORACLE数据库管理理念不少发生了改变。

    在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。

    其实大家如果对sql server比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。

CDB组件(Components of a CDB)

一个CDB数据库容器包含了下面一些组件:

ROOT组件

ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。

SEED组件

  Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。

PDBS

    CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。

这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。

SQL> show con_name;

CON_NAME

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

CDB$ROOT

SQL> select name ,cdb from v$database;

NAME      CDB

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

ORCLRQ    YES

SQL> create user test identifed by test;

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

查官方文档得知“试图创建一个通用用户,必需要用C##或者c##开头”

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

SQL> create user c##test identifed by test;

创建成功

SQL> connect  / as sysdba

已连接。

SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

    CON_ID       DBID NAME                           OPEN_MODE

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

         2 4097782011 PDB$SEED                       READ ONLY

         3 2302298700 PDBORCL                        MOUNTED

SQL> alter PLUGGABLE database PDBORCL open;

插接式数据库已变更。

SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

    CON_ID       DBID NAME                           OPEN_MODE

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

         2 4097782011 PDB$SEED                       READ ONLY

         3 2302298700 PDBORCL                        READ WRITE

SQL> alter session set container=PDBORCL;

会话已更改。

SQL> show con_name;

CON_NAME

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

PDBORCL

SQL> CREATE USER liferay IDENTIFIED BY liferay 

DEFAULT TABLESPACE "USERS"

TEMPORARY TABLESPACE "TEMP";

创建成功

SQL>  alter session set container=CDB$ROOT;

会话已更改。

SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS;

J:Userslwsoft>lsnrctl status

LSNRCTL for 64-bit Windows: Version 12.1.0.1.0 - Production on 31-8月 -2014 15:59:19

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522)))

LISTENER 的 STATUS

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

别名                      LISTENER

版本                      TNSLSNR for 64-bit Windows: Version 12.1.0.1.0 - Production

启动日期                  31-8月 -2014 15:41:53

正常运行时间              0 天 0 小时 17 分 26 秒

跟踪级别                  off

安全性                    ON: Local OS Authentication

SNMP                      OFF

监听程序参数文件          D:oracleproduct12.1.0dbhome_1 etworkadminlistener.ora

监听程序日志文件          D:oraclediag nslsnrlwsoalisteneralertlog.xml

监听端点概要...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1522ipc)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=lwsoa)(PORT=5500))(Security=(my_wallet_directory=D:ORACLEadminorclrqxdb_wallet))(Presentation=HTTP)(Session=RAW))

服务摘要..

服务 "CLRExtProc" 包含 1 个实例。

  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

服务 "orclrq" 包含 1 个实例。

  实例 "orclrq", 状态 READY, 包含此服务的 1 个处理程序...

服务 "orclrqXDB" 包含 1 个实例。

  实例 "orclrq", 状态 READY, 包含此服务的 1 个处理程序...

服务 "pdborcl" 包含 1 个实例。

  实例 "orclrq", 状态 READY, 包含此服务的 1 个处理程序...

命令执行成功

==========此时已可通过JDBC直接访问插件数据库PDBORCL=============

        String driver = "oracle.jdbc.driver.OracleDriver";

        String url = "jdbc:oracle:thin:@//127.0.0.1:1522/pdborcl";

        String username = "liferay";// 用户名

        String password = "cyj";// 密码

        Connection conn = null; // 创建数据库连接对象

        try {

            Class.forName(driver);

            conn = DriverManager.getConnection(url, username, password);

        ……

===========================================      

J:Userslwsoft>tnsping pdborcl

TNS Ping Utility for 64-bit Windows: Version 12.1.0.1.0 - Production on 31-8月 -2014 16:00:38

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

已使用的参数文件:

D:oracleproduct12.1.0dbhome_1 etworkadminsqlnet.ora

TNS-03505: 无法解析名称

===========================添加本地网络服务名PDBORCL将可直接连接插件数据库PDBORCL================================================

ORCLRQ =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = lwcyj)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orclrq)

    )

  )

PDBORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = pdborcl)

    )

  )

==========================================================

J:Userslwsoft>tnsping pdborcl

TNS Ping Utility for 64-bit Windows: Version 12.1.0.1.0 - Production on 31-8月 -2014 17:14:48

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

已使用的参数文件:

D:oracleproduct12.1.0dbhome_1 etworkadminsqlnet.ora

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522))) (CONNECT_DATA = (SERVICE_NAME = pdborcl)))

OK (0 毫秒)

J:Userslwsoft>sqlplus

SQL*Plus: Release 12.1.0.1.0 Production on 星期日 8月 31 17:06:24 2014

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

请输入用户名:  liferay/liferay@pdborcl

上次成功登录时间: 星期日 8月  31 2014 16:52:22 +08:00

连接到:

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production

With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL>

复制去Google翻译翻译结果

转自:http://jingyan.baidu.com/article/9989c746255727f648ecfe84.html

原文地址:https://www.cnblogs.com/wanggs/p/5053722.html