oracle 12c 创建PDB用户即Local User (PDB与CDB)

Oracle 12C用户创建与表空间分配 


数据库安装完成后,首先用系统用户链接数据库容器(CDB), 在数据库容器(CDB)中创建表空间‘imei’ 

SQL>create 
tablespace 
iemi 
datafile'E:\Oracle_DB\ 
cdb_iemi.dbf'size 10240m autoextend on next 200m;

表空间已创建。 
接下来在Oracle 12C数据库中创建用户时会报ORA-65096错误。

SQL> create user imei identified by imei default tablespace imei temporary tablespace imei_temp; * 
ERROR at line 1: 
ORA-65096: invalid common user or role name ORA-65096:公用用户名或角色名无效 


以前没见过这个错误,通用用户(common user)是什么?之前的版本可是没这概念啊,上网搜索看到了下面的图片,原来和common user对应的还有local user。

 

 

这个common user 和local user是和oracle 12c的新特性pluggable database(PDB)有关。在PDB中创建的用户就是local user。从上图可以看出,common user必须以大写或小写的c##开头,尝试建立以c##开头的common user。 

SQL> create user c##imei identified by imei default tablespace imei temporary tablespace imei_temp;; User created. 
SQL> grant dba to c##imei; Grant succeeded. 
每个PDB都是独立的单元,有自己的用户(local user)、表空间、数据文件,每个local user只能访问自己的PDB,而common user只要权限足够,可以访问任意PDB。

 

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

基本概念:

Multitenant Environment:多租户环境

CDB(Container Database):数据库容器

PD(Pluggable Database):可插拔数据库

 

CDB组件(Components of a CDB)

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

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

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

 

oracle 12c 创建PDB用户即Local User

Oracle数据库的结构是一个数据库实例下有许多用户,每一个用户有自己的表空间,即每一个用户相当于MySQL中的一个数据库。

不久前下了oracle 12c的数据库,安装之后建user时才知道oracle12c 有一个很大的变动就是引入了pdb可插入数据库,而且在cdb中只能创建c##或者C##开头的用户,只有在pdb数据库中才能创建我们习惯性命名的用户,oracle称之为Local User,前者称之为Common User,于是乎查询相关的资料,得到以下解决方法:

1:进入PDB数据库

在12C安装时,会提示你是否安装可插接式数据库,我是安装了设为PDBORCL;如果你没有安装的话可以用以下语句创建一个可插入数据库

 

 create pluggable database pdborcl admin user pdbadmin identified by Learnin
g roles=(connect)
file_name_convert=
('E:\Databases\oracle\oradata\oraclekd\pdbseed',
'E:\Databases\oracle\oradata\oraclekd\pdborcl');

 

 
其中pdborcl是我创建的可插接式数据库,pdbadmin是创建的用户,Learning是密码。

 

file_name_convert换成相应目录就OK了

创建完成之后

 

alter session set container=pdborcl;
alter pluggable database pdborcl open;
grant dba to pdbadmin;

 


接下来关键来了,在oracle_home\product\12.1.0\dbhome_1\NETWORK\ADMIN目录下找到tnsnames.ora,用记事本打开,在
ORACLEKD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oraclekd)
    )
  )


之下添加

PDBORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = PDBORCL)
    )
  )
PDBORCL就是你创建的可插入数据库,保存好之后重启oracle服务(貌似只重启监听程序就OK),打开sql*plus
用户名是PDBADMIN@PDBORCL 密码是Learning
OK,你现在已经创建了一个PDB用户了。现在你可以登录这个用户了
接下来是用sql developer创建连接的时候了,显然有sql developer这么强大的工具,怎么能不用呢
创建连接时连接名随意取,用户名就是PDBADMIN, 密码是Learning,选服务名称,填入PDBORCL
至此可以用sql developer操作PDB数据库了


 

<pre code_snippet_id="123962" snippet_file_name="blog_20131223_2_1785783"></pre>
<pre></pre>
   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值