Windows平台上,Oracle19c软件完成安装和建库之后,在学习《Oracle SQL高级编程》的过程中,发现没有scott、hr、oe、pm、ix、sh、bi用户,需要额外动手创建部署。
一、scott用户需要利用$ORACLE_HOME\rdbms\admin\scott.sql脚本来创建。
/*1:利用SQL Plus登录sys或system as sysdba,执行脚本,创建scott用户资源*/
win+r
输入sqlplus /nolog
SQL> conn system/system as sysdba
SQL> @D:\WINDOWS.X64_193000_db_home\rdbms\admin\scott.sql
题外话:如果是Linux平台上,scott用户的创建脚本则需要执行:
SQL> @/u01/app/oracle/product/19.0.0/dbhome_1/rdbms/admin/utlsampl.sql
/*2:修改scott密码*/
SQL> alter user scott identified by tiger;
/*3:解锁用户*/
SQL> alter user scott account unlock;
/*4:登录scott用户,验证一下*/
SQL> conn scott/tiger
SQL> show user
/*5:也可以利用sys或system用户验证*/
SQL> SELECT OWNER, OBJECT_TYPE, COUNT(1) FROM DBA_OBJECTS WHERE OWNER IN ('SCOTT') GROUP BY OWNER, OBJECT_TYPE ORDER BY OWNER, OBJECT_TYPE;
OWNER OBJECT_TYPE COUNT(1)
------ -------------------- ----------
SCOTT INDEX 2
SCOTT TABLE 4
已选择 2 行。
二、hr、oe、pm、ix、sh、bi用户需要利用GitHub下载所需版本的db-sample-schema安装包内的脚本来创建。
到GitHub去下载Oracle软件版本对应的schema安装包:https://github.com/oracle/db-sample-schemas/releases/
我的Oracle19c是Windows平台的,所以我选择下载Oracle Database 19c Sample Schemas的Source code(zip)
如果你的Oracle19c是Linux平台的,则要选择下载Oracle Database 19c Sample Schemas的Source code(tar.gz)
将下载的安装包解压缩到$ORACLE_HOME\demo\schema
所需的脚本文件可以在$ORACLE_HOME\demo\schema\db-sample-schemas-19c下看到
根据README.txt和README.md文件中的提示,完成用户创建部署。
最重要的就是:README.md文件中的以下提示
### 2.3. Change all embedded paths to match your working directory
The installation scripts need your current directory embedded in
various locations. Use a text editor or the following Perl script to
make the changes, replacing occurrences of the token `__SUB__CWD__`
with your current working directory, for example
`/home/oracle/db-sample-schemas`
```shell
perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat
```
perl这句话你要是读不懂的话,没关系。
你可以手动将db-sample-schema目录及子目录下的后缀为.sql和.dat的脚本文件中的字符串"__SUB__CWD__"替换为你自己的"$ORACLE_HOME\demo\schema\db-sample-schemas-19c"字符串,即:将字符串"__SUB__CWD__"替换为你自己的db-sample-schema文件夹路径。
同时,你要把脚本文件中涉及到的、被修改的目录字符串后面相关的子目录的 斜杠/ 改为 斜杠\ ,这是因为脚本文件中涉及到的目录都是Linux平台目录的写法,而我的Oracle数据库软件是安装在Windows平台上的,所以相关目录要与Windows平台目录的写法保持一致,这也是某些表无法正常导入数据的主要原因。
在Windows平台上,如果只是修改了"$ORACLE_HOME\demo\schema\db-sample-schemas-19c",而没有把紧随其后的子目录斜杠/ 进行修改的话,就会出现这样的错误:
看着上面这个目录写法,有没有觉得后面两个斜杠/ 很别扭?!
所以,脚本文件内的字符串"__SUB__CWD__"及涉及到的子目录的斜杠/ 需要逐一进行修改,修改完成后,一定要记得保存。
另外,因为你的平台是Windows平台,所以脚本中很多涉及目录路径的写法都要非常细节性的逐一修改到Windows平台能够认读的路径字符串。
另外,在mk_dir.sql脚本如下的语句中,纯粹的目录后面的斜杠\ 需要被删除,否则会导致语法错误。
(说点题外话:perl是跨平台的,建议用Windows的同学们,可以安装perl,这样可以通过baidu边学边用,毕竟shell、awk、sed还是很方便的文本处理工具,也便于日后自己写批处理脚本。
如果你是Linux平台上的Oracle19c安装db-sample-schema的话,替换脚本文件中的字符串时,可能会用到如下类似的命令:需要使用转义符
grep -lnr '__SUB__CWD__' *.sql */*.sql */*.dat |xargs sed -i.bak 's#__SUB__CWD__#\/u01\/app\/oracle\/product\/19.0.0\/dbhome_1\/demo\/schema\/db-sample-schemas-19c#g'
如果你打算借用虚拟机上的Linux平台的sed等命令修改Windows平台的db-sample-schema安装包里的脚本字符串,可能会用到如下类似的命令:需要使用转义符
grep -lnr '__SUB__CWD__' *.sql */*.sql */*.dat |xargs sed -i.bak 's#__SUB__CWD__#D\:\\WINDOWS\.X64_193000_db_home\\demo\\schema\\db-sample-schemas-19c#g'
在Windows平台删除已存在的db-sample-schemas-19c的文件夹时,如果弹出框提示没有权限的话,别担心,正常删除,而后刷新一下,就能看到文件夹消失了。
)
Windows平台上的具体安装执行如下:
win+r
输入sqlplus /nolog
SQL> conn system/system as sysdba
SQL> @$ORACLE_HOME\demo\schema\db-sample-schemas-19c\mksample.sql system sys hr oe pm ix sh bi users temp D:\$ORACLE_HOME\demo\log localhost:1521/orcl
如果你是Linux平台上的Oracle19c安装db-sample-schema的话,则需要执行:
@/u01/app/oracle/product/19.0.0/dbhome_1/demo/schema/db-sample-schemas-19c/mksample.sql system sys hr oe pm ix sh bi users temp /u01/app/oracle/product/19.0.0/dbhome_1/demo/log localhost:1521/orcl
/*检查一下用户创建部署是否成功*/
看看执行终端上的日志,看看sh用户的costs表是否被成功导入数据。
用户能够登陆、用户下的表能够查询到数据,这样才算是db-sample-schema安装部署成功。
如果sh.costs表始终没有数据,那便证明db-sample-schema没有完全成功被安装。根据终端显示的日志,仔细看看哪里出错了,逐步排查脚本,肯定是哪个地方的目录写的有问题,细致才能成功。
在Linux平台上,由于脚本中的目录都是适合Linux的,所以会很容易完成db-sample-schema的安装,sh.costs表里的数据也很容易被导入。但是如果你使用的是Windows平台,你在排错的过程中,由于需要很细致的阅读脚本,所以也能获得很多成长和进步,读透了db-sample-schema中的脚本结构和设计,你也可以自己写数据的批处理脚本程序了,代码结构也会设计的很漂亮。有得必有失,细致用心地对待每一个报错,绝对不吃亏。
我的Windows10平台的db-sample-schema安装始终不能把sh.costs表的数据完成导入,始终有报错:
loading COSTS using external table
Table created.
INSERT /*+ append */ INTO costs
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-29400: data cartridge error
KUP-04020: found record longer than buffer size supported, 524288, in
D:\WINDOWS.X64_193000_db_home\demo\schema\db-sample-schemas-19c\sales_history\sa
le1v3.dat (offset=0)