转 Oracle 12c 使用scott等普通用户的方法

时间:2021-03-19 21:38:30

 

 

一、前言

  最近电脑上安装了oracle 12c数据库,想体验下新特性。安装完后,便像11g一样在dos窗口进行下面的操作:

转 Oracle 12c 使用scott等普通用户的方法
SQL*Plus: Release 12.1.0.2.0 Production on 星期日 8月 9 13:06:33 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt ions SQL> alter user scott account unlock identified by tiger; alter user scott account unlock identified by tiger *1 行出现错误: ORA-01918: 用户 'SCOTT' 不存在
转 Oracle 12c 使用scott等普通用户的方法

  神马情况!难道没有SCOTT用户?用sql查了下,确实没查到(不是没有):

?
1
2
3
SQL> select username from dba_users where username like 'SCOTT' ;
 
未选定行

 哦,那我就自己建个吧(当时想多了o.o):

?
1
2
3
4
5
SQL> create user scott identified by tiger;
create user scott identified by tiger
             *
第 1 行出现错误:
ORA-65096: 公用用户名或角色名无效

 。。。。。

呵呵,刚刚接触12c的新手估计都会犯这样的错误吧。其实oracle 12c在结构上做出了调整,引入了CDB和PDB的概念。具体可以看下潇湘隐者的文章:

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

其实,我刚才的操作是在CDB中的操作,用sys默认登录的是CDB,但是如果想在CDB中创建用户(可以理解为公共用户)的话,那么必须在用户名前面加上“c##”:

?
1
2
3
SQL> create user c##joker identified by joker;
 
用户已创建。

 oracle 这么做的目的是为了区分CDB的用户(前面带“c##”的用户)和PDB用户。那么问题来了,如何使用普通用户呢?网上查阅了很多资料,但都是说不清楚,今天总结下吧。

 

二、使用普通用户

 其实,oracle 12c的普通用户必须在PDB下使用,PDB可以自己创建,也可以使用12c自带的。首先,查看下12c自带的PDB吧:

转 Oracle 12c 使用scott等普通用户的方法
SQL>  select con_id, dbid, guid, name , open_mode from v$pdbs; CON_ID DBID GUID NAME OPEN_MODE ---------- ---------- -------------------------------- ------------------------------ ---------- 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED READ ONLY 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBORCL MOUNTED SQL>
转 Oracle 12c 使用scott等普通用户的方法

要想链接到PDBORCL,必须要在tns文件下加入如下内容:

PDBORCL =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = PDBORCL)     )   )

这样,我们就可以链接PDBORCL了。

首先,要启动PDBORCL,先用sys登录到CDB,进行如下操作:

SQL> alter session set container = PDBORCL; 会话已更改。 SQL> STARTUP

这样我们就可以用sys登录到PDBORCL了:

SQL> conn sys@pdborcl/admin as sysdba 已连接。

我们查一下用没有SCOTT用户:

SQL> select username from dba_users where username like '%SCOTT%'; USERNAME --------------------------------------------------------------------  SCOTT

原来,SCOTT在PDBORCL下。

转 Oracle 12c 使用scott等普通用户的方法
SQL> alter user scott account unlock identified by tiger; 用户已更改。 SQL> conn scott@pdborcl/tiger 已连接。 SQL> select ename,empno,job from emp offset 5 rows fetch next 5 rows only; ENAME EMPNO JOB ---------- ---------- --------- BLAKE 7698 MANAGER CLARK 7782 MANAGER SCOTT 7788 ANALYST KING 7839 PRESIDENT TURNER 7844 SALESMAN
转 Oracle 12c 使用scott等普通用户的方法

这样,我们就可以像11g那样使用像scott这样的普通用户了!

 

三、自动启动PDB

 我们可以通过创建触发器的方式来自动启动PDB,用不着每次还得先用sys登录CDB,然后启动PDB。触发器代码如下:

CREATE OR REPLACE TRIGGER open_all_pdbs AFTER STARTUP ON DATABASE BEGIN EXECUTE IMMEDIATE 'alter pluggable database all open'; END open_all_pdbs;

我们实验一下:

转 Oracle 12c 使用scott等普通用户的方法
SQL> CREATE OR REPLACE TRIGGER open_all_pdbs 2 AFTER STARTUP 3 ON DATABASE 4 BEGIN 5 EXECUTE IMMEDIATE 'alter pluggable database all open'; 6 END open_all_pdbs; 7 / 触发器已创建 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 1660944384 bytes Fixed Size 3046320 bytes Variable Size 989856848 bytes Database Buffers 654311424 bytes Redo Buffers 13729792 bytes 数据库装载完毕。 数据库已经打开。 SQL> conn scott@pdborcl/tiger 已连接。
转 Oracle 12c 使用scott等普通用户的方法

 

 总结:

      要想像11g那样使用普通用户,就得在PDB下面使用。