为oracle19c创建hr样例数据库

报了ORA-20000: Schema “HR” does not exist or insufficient privileges错找了半天才找到解决方法。

前言

这学期开了大型数据库的课,要用Oracle的数据库。但老师的实验是用Oracle的样例数据库。而我看了看,我没有这个啊。

怎么办呢?查了一下,原来是这个数据库要自己安装。于是跟着教程走了一遍,不过出了点问题,但搜了一下还是解决了。

于是记录一下,方便自己以后用以及和我遇到了一样的问题的人。

环境

  1. Windows10 1909
  2. Oracle Database 19c 19.3
  3. Oracle Database 19c Client (19.3)

安装步骤

不知道你是安的client还是db。最开始我安的db,但老师又安了client,所以我也跟着安装,结果这东西好像client的覆盖了db的路径。莫名其妙的。也不知道db安装了到底有啥用。

总之我发现现在的环境变量是client的而不是db的。而我们要安装这个样例数据库的话,可以用Oracle官方的脚本,但这个脚本是包含在db的而不是client里的。所以要用的话可以从db的文件夹里复制脚本到client的文件夹里。

找到脚本

db里复制

去你下的那个安装包解压的地方,比如\WINDOWS.X64_193000_db_home这样的。

然后复制这个文件夹下的demo文件夹到\WINDOWS.X64_193000_client_home这个文件夹里。

用这个方法的是和我一样先装了db后装了client的。如果你只装了db或者先装了client后装了db的那就无所谓了,因为默认的环境变量的下面就有这个。

从github上下载

Oracle官方在github上放了脚本来安装样例数据库,可以点这里去下载最新的脚本。

下载完了后,把里面的文件夹都拷出来,放的位置是\WINDOWS.X64_193000_client_home\demo\schema。没有这个文件夹的可以自己创建。

安装

总之现在把脚本放在了指定的地方,其实也可以不放在这里,但我主要是为了方便用环境变量做解释。
现在连接sqlplus,用sys账号,以sysdba的身份登录
然后输入如下的命令

1
sql>@?/demo/schema/human_resources/hr_main.sql;

现在就是正式创建了,输入之前的命令后会出现下面这样的字样。
我一步步翻译解释一下吧。

  • 输入HR的密码

这里我输入的是hr作为密码

1
2
3
specify password for HR as parameter 1:
Enter value for 1: hr

  • 输入HR的默认表空间

这里我把user作为默认表空间

1
2
3
specify default tablespeace for HR as parameter 2:
Enter value for 2: user

  • 输入HR的临时表空间

这里我把temp作为临时表空间

1
2
3
specify temporary tablespace for HR as parameter 3:
Enter value for 3: temp

  • 输入log存放的地址

这里我把直接把它放在了数据库程序的 ~/demo/schema/log/这个文件夹里面

1
2
specify log path as parameter 4:
Enter value for 4: $ORACLE_HOME/demo/schema/log/

这个时候有些人会报错,像下面这样

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


Commit complete.

BEGIN dbms_stats.gather_schema_stats( 'HR' , granularity => 'ALL' , cascade => TRUE , block_sample => TRUE ); END;

*
ERROR at line 1:
ORA-20000: Schema "HR" does not exist or insufficient privileges
ORA-06512: at "SYS.DBMS_STATS", line 3701
ORA-06512: at "SYS.DBMS_STATS", line 24470
ORA-06512: at "SYS.DBMS_STATS", line 24435
ORA-06512: at line 1

报错 ORA-20000: Schema “HR” does not exist or insufficient privileges

这是因为HR用户之前没有被创建,而脚本自己好像又建不了。而Oracle 19c 要求自建用户的用户名的格式是 c##hr 而不是 hr这样的。但我们要求用的用户名是hr。所以就得输入下面的命令来改变一下。

1
SQL> alter session set "_ORACLE_SCRIPT"=true;

然后我们就可以再运行上面的脚本来搞定了。

当出现下面这样的字样时就说明搞定了

1
2
3
4
5
6
7
Comment created.


Commit complete.


PL/SQL procedure successfully completed.

现在我们打开新的终端或者sql devoloper来连接试试吧。

参考文章

oracle 19c创建sample schema-HR,OE,SH等等
ORA-20000: Schema “HR” does not exist or insufficient privileges in Oracle Database 19C(主要参考的这篇文章)


为oracle19c创建hr样例数据库
https://www.yikakia.com/为oracle19c创建hr样例数据库/
作者
Yika
发布于
2020年3月5日
许可协议