Oracle 12c SCOTT用户不存在

关于Oracle 12c R2没有Scott用户的解决办法


写在前面

以前在windows上安装Oracle 11g的时候没有碰到过这种问题,现在安装了Oracle 12c R2,发现没有Scott用户,可是我明明在安装的时候勾选了创建实例数据库,没有Scott用户,那我该如何操作示例数据库?百度了一圈之后,说是Oracle 12c的架构发生了变化,默认没有Scott用户,所以要使用,只能自力更生,自己创建。


创建Scott用户

既然默认没有Scott用户,那么我们就自己建一个,但是当我尝试执行create user scott identified by tiger;的时候,报了个错,说公共用户名或角色名无效

前面说到了Oracle 12c的架构发生了变化,在CDB环境下所创建的用户为公共用,你可以使用show con_name pdbs;命令查看当前登录用户的数据库环境,你可能会得到如下的结果:

1
2
3
4
5
6
7
8
9
10
11
SQL> show con_name pdbs;

CON_NAME
------------------------------
CDB$ROOT

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB MOUNTED
其中 ORCLPDB就是一个可插拔式的数据库,主要这个可插拔数据库的名称是与你在安装数据库是设置的`Pluggable database name`是一致的

创建公共用户或者说全局用户的语法与创建普通用户的语法不一样,正确的语法如下:

全局用户以c##开头
1
CREATE USER c##scott IDENTIFIED BY tiger;

所以创建用户的完整过程如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 在终端切换到SQL>模式
sqlplus "/as sysdba"
// 切换超级管理员登录,oracleadmin为登录密码,切换为你自己的即可
conn sys/oracleadmin as sysdba;
// 创建scott全局用户,其中tiger是密码
CREATE USER c##scott IDENTIFIED BY tiger;
// 给Scott用户分配权限
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO c##scott CONTAINER=ALL;
// 设置用户使用的表空间
ALTER USER c##scott DEFAULT TABLESPACE USERS;
ALTER USER c##scott TEMPORARY TABLESPACE TEMP;
// 切换scott用户登录,注意登录也要使用c##前缀
conn c##scott/tiger;


创建数据表

scott用户创建完之后,还需要创建数据表,新建一个scott.sql文件(名称可随意起),添加如下内容:

注释部分可去掉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- 创建数据表
CREATE TABLE dept (
deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
dname VARCHAR2(14) ,
loc VARCHAR2(13)
) ;
CREATE TABLE emp (
empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT
);
CREATE TABLE bonus (
enamE VARCHAR2(10) ,
job VARCHAR2(9) ,
sal NUMBER,
comm NUMBER
) ;
CREATE TABLE salgrade (
grade NUMBER,
losal NUMBER,
hisal NUMBER
);
-- 插入测试数据 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- 插入测试数据 —— emp
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-07-87','dd-mm-yyyy')-85,3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('13-07-87','dd-mm-yyyy')-51,1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
-- 插入测试数据 —— salgrade
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
-- 事务提交
COMMIT;

在终端执输入:@/opt/oracle/scott.sql执行sql文件,注意@符号后面是sql文件的路径,需要根据你自己文件的位置来调整,执行完之后,会在命令行看到如下的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Table created.

Table created.

Table created.

Table created.

1 row created.

1 row created.

1 row created.

...
Commit complete.

到这里scott用户不存在的问题就解决了,你可以尝试在终端中输入select * from emp;来查看是否能查询到相关的信息


在IDEA连接Oracle

上面我们是在命令行中连接Oracle数据库,接下来我们在IDEA中使用c##scott用户连接Oracle数据库,打开IDEA,选择右侧的Database工具

接下来,点击面板上方的+号,选择Data Source,然后选择Oracle

完了配置用户名密码,以及数据库驱动

打开数据库驱动的配置面板,点击右侧的加号,选择自己下载好的数据库驱动包,点击apply应用,然后回到刚才的数据库设置面板,如果发现密码被清空了,再次输入即可

之后点击测试连接,如果出现successful说明测试连接成功了

测试成功后就可连接了

连接成功后左侧的代码编辑区会出现Oracle的控制台,而且右侧的控制面板上面会有一个红色的停止按钮

在控制台输入select * from emp;并执行

到这里,在IDEA中连接数据库就完成了,其他数据库的连接方式也与此类似。OK,文章到这里就结束了。
参考文章: http://www.cnblogs.com/zangdalei/p/5482732.html


如果您觉得我的文章对您有帮助,请随意赞赏,您的支持将鼓励我继续创作!
0%