先说遇到问题:
创建用户时
先按11G之前进行
conn / as sysdba;
create user test identifed by test;
ORA-65096: 公用用户名或角色名无效.
查官方文档得知“试图创建一个通用用户,必需要用C##或者c##开头”,这时候心里会有疑问,什么是common user?不管先建成功了再说
create C##user test identifed by test;
创建成功
Oracle数据库的结构是一个数据库实例下有许多用户,每一个用户有自己的表空间,即每一个用户相当于MySQL中的一个数据库。
不久前下了oracle 12c的数据库,安装之后建user时才知道oracle12c 有一个很大的变动就是引入了pdb可插入数据库,而且在cdb中只能创建c##或者C##开头的用户,只有在pdb数据库中才能创建我们习惯性命名的用户,oracle称之为Local User,前者称之为Common User,于是乎查询相关的资料,得到以下解决方法:
oracle pdb和cdb的区别
区别一:包含关系不同
1、PDB全称为Pluggable Database,即可插拔数据库
2、CDB全称为Container Database,中文翻译为数据库容器,一个数据库容器(CDB)承载多个可插拔数据库(PDB)
区别二:用户使用时存放位置不同
1、COMMON USERS(普通用户):经常建立在CDB层,用户名以C##或c##开头;
2、 LOCAL USERS(本地用户):仅建立在PDB层,建立的时候得指定CONTAINER。
CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。
这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。
在12c数据库创建完成后,默认情况下使用sqlplus / as sysdba 登录连接的是CDB。
我们需要将CDB修改为PDB
1.首先用system用户登陆sqlplusd
2.查看当前模式
SQL>show con_name;
CON_NAME
------------------------------
CDB$ROOT
3.
SQL> select con_id,name,open_mode from v$pdbs;
CON_ID----------NAME--------------------------------------------------------------------------------OPEN_MODE----------
2 PDB$SEED READ ONLY
3 ORCLPDB MOUNTED
发现oracle12c在安装时为我们创建了一个pdb为ORCLPDB,但默认是mounted的,所以需要打开它
4.
SQL> alter pluggable database ORCLPDB open;
SQL> select con_id,name,open_mode from v$pdbs;
CON_ID----------NAME--------------------------------------------------------------------------------OPEN_MODE----------
2 PDB$SEED READ ONLY
3 ORCLPDB READ WRITE
5.创建触发器:指定pdb和实例同时开启
SQL> create trigger open_pdbsky after startup on database
2 begin
3 execute immediate 'alter pluggable database pdbsky open';
4 end;
5 /
触发器已创建
如下为测试下重启实例,看pdb有没有同时启动
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 2550136832 bytes
Fixed Size 8922136 bytes
Variable Size 671091688 bytes
Database Buffers 1862270976 bytes
Redo Buffers 7852032 bytes
Database mounted.
Database opened.
SQL> select con_id,name,open_mode from v$pdbs;
CON_ID----------NAME--------------------------------------------------------------------------------OPEN_MODE----------
2 PDB$SEED READ ONLY
3 ORCLPDB READ WRITE
6.修改当前容器为pdb
SQL> alter session set container=ORCLPDB;
Session altered.
SQL> show con_name;
CON_NAME
------------------------------
ORCLPDB
SQL>
现在可以按之前版本操作命令执行sql了。
7.pdb数据库怎么新增
在12C安装时,会提示你是否安装可插接式数据库,我是安装了设为ORCLPDB;如果你没有安装的话可以用以下语句创建一个可插入数据库
[sql] view plaincopy
create pluggable database pdborcl admin user pdbadmin identified by Learnin
g roles=(connect)
file_name_convert=
('C:\app\Administrator\virtual\oradata\orcl\pdbseed',
'C:\app\Administrator\virtual\oradata\orcl\pdborcl');
其中pdborcl是我创建的可插接式数据库,pdbadmin是创建的用户,Learning是密码。
file_name_convert换成相应目录就OK了
创建完成之后
打开sql*plus
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,用记事本打开,在
ORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
之下添加
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数据库了