1 Oracle 19C 示例模式简介
从事Oracle数据库工作的,不论是DBA,开发,还是培训讲师,大多接触和使用过Oracle的示例数据库SCOTT,这是个简单的数据库模式(schema),只有两张表EMP 和 DEPT,用来学习基础的sql语句尚可,对于稍微复杂点SQL就力所不及了。好在后来,Oracle提供了一系列的示例模式,可以满足各种场景下、不同复杂程度下的学习和培训的需要,具体那几个模式?请看下表:
| 模式名称 | 用途 | 主要表结构 | 数据量 |
|---|---|---|---|
| HR | 基础SQL教学与权限管理;练习表连接、DDL/DML操作;适合新⼿⼊门 | EMPLOYEES, DEPARTMENTS, JOBS, LOCATIONS |
约 107 名员工记录 |
| OE | 复杂订单业务场景(客户-产品-库存管理);对象关系模型(嵌套表、XML类型)演示;高级数据结构实践 | CUSTOMERS, ORDERS, PRODUCT_INFORMATION, INVENTORIES |
约 1000+ 订单记录 |
| SH | 大规模数据分析(OLAP);分区表、物化视图、分析函数测试;销售历史场景性能调优;分区策略验证 | SALES, CHANNELS, PROMOTIONS, TIMES |
百万级记录(可扩展至千万级) |
| IX | 高级队列(AQ)与消息通信;异步处理、发布-订阅模型演示;Oracle Streams/AQ功能测试 | AQ_QUEUE_TABLES, SUBSCRIBERS |
少量测试数据 |
| PM | 多媒体数据管理(LOB类型实践);Oracle多媒体对象(ORDImage, ORDVideo)操作;大对象存储与检索场景 |
PRINT_MEDIA, TEXTDOCS, ONLINE_MEDIA |
数百条多媒体记录 |
上表中的数据库模式是或多或少有数据的,还有一个BI模式,它没有自己的数据。其中,有几个模式有先决条件或者依赖模式,列出如下:
- OE 需要数据库激活空间数据选项并且存在HR模式
- PM 需要数据库激活Intermedia选项-这个选型需要Java激活的数据库并且OE模式存在
- SH 使用分区选型并且OE模式存在
- BI 需要OE存在.
上面几个模式之间的依赖关系Oracle是通过同义词来实现的,比如BI模式下没有表,所有的数据都是通过同义词来引用OE模式下的数据。
2 示例数据库模式脚本下载
2.1 下载
示例模式HR随数据库的安装一起安装,在使用DBCA创建数据库时,可以选择创建示例模式,在数据库创建后,也可以运行其创建脚本创建,其它的示例数据库模式的创建脚本(包括HR)则需要从github下载,下载地址如下
Oracle 19c sample schema
下载后上传到数据库服务器,用下面命令解压至/usr/local目录下
tar -zxf db-sample-schemas-19c.tar.gz -C /usr/local
2.2 编辑文件
2.2.1 要做哪些更改
解压后的脚本不能直接使用,需要将各个脚本中的字符串"_SUB__CWD_“替换为解压后的脚本所处的目录,这里就是/usr/local/db-sample-schemas-19c,字符串”_SUB__CWD_"在示例数据库创建的主脚本、每个模式创建的主脚本等多处存在,如果用vi编辑用更改,需要编辑多个文件,操作比较复杂和繁琐,容易漏掉,用sed命令来更改则简单直接,也不容易漏掉,可以分为下面两个步骤。
2.2.2 需要编辑的文件
用grep命令可以查找处包含"_SUB__CWD_"的文件,下面的命令中选项-r递归查询执行目录下的每级子目录,选项-l抑制grep的正常输出,只打印每个匹配到的输入文件的名字
[root@localhost tmp]# grep __SUB__CWD__ -rl /tmp/db-sample-schemas-19c
/tmp/db-sample-schemas-19c/README.md
/tmp/db-sample-schemas-19c/bus_intelligence/bi_main.sql
/tmp/db-sample-schemas-19c/human_resources/hr_main.sql
/tmp/db-sample-schemas-19c/info_exchange/ix_main.sql
/tmp/db-sample-schemas-19c/mk_dir.sql
/tmp/db-sample-schemas-19c/mkplug.sql
/tmp/db-sample-schemas-19c/mksample.sql
/tmp/db-sample-schemas-19c/order_entry/coe_v3.sql
/tmp/db-sample-schemas-19c/order_entry/coe_xml.sql
/tmp/db-sample-schemas-19c/order_entry/createUser.sql
/tmp/db-sample-schemas-19c/order_entry/loe_v3.sql
/tmp/db-sample-schemas-19c/order_entry/oe_cre.sql
/tmp/db-sample-schemas-19c/order_entry/oe_drop.sql
/tmp/db-sample-schemas-19c/order_entry/oe_main.sql
/tmp/db-sample-schemas-19c/order_entry/poe_v3.sql
/tmp/db-sample-schemas-19c/order_entry/xdb03usg.sql
/tmp/db-sample-schemas-19c/order_entry/xdbSupport.sql
/tmp/db-sample-schemas-19c/product_media/long2lob.sql
/tmp/db-sample-schemas-19c/product_media/pm_main.sql
/tmp/db-sample-schemas-19c/product_media/pm_p_lob.dat
/tmp/db-sample-schemas-19c/sales_history/sh_main.sql
/tmp/db-sample-schemas-19c/sales_history/sh_olp_c.sql
/tmp/db-sample-schemas-19c/shipping/qs_main.sql
2.2.3 一条命令编辑所有文件
上面的grep命令打印出了需要编辑的每个脚本文件的名字,把它作为sed命令的文件名参数(两端用`包括),可以一次更改所有匹配到的文件中的字符串,sed 的-i选项意指更改原文件,s为替换命令,/g替换到所有匹配的选项。
sed -i 's/__SUB__CWD__/\/usr\/local\/db-sample-schemas-19c/g' `grep __SUB__CWD__ -rl /usr/local/db-sample-schemas-19c`
2.3 运行模式创建脚本
替换完后后,进入到脚本目录下,以sysdba身份登陆数据库运行mksample SQL脚本即可创建所有示例数据库模式,也可以运行每一个模式的main脚本(如hr_main.sql)创建单独的模式(注意模式间的依赖关系),mksample脚本可以在运行时指定参数,也可以在脚本运行后交互式输入各个参数,交互式输入更简单直观,如下:
cd /usr/local/db-sample-schemas-19c
sqlplus / as sysdba
@mksample
命令运行后,根据提示输入sys,system的密码,示例数据库模式的密码(脚本用此密码创建用户),用户表空间、用户临时表空间、日志目录、数据库连接串即可。
这个脚本可以反复运行,运行前会清除以前创建的相关用户的数据。
3 查看模式创建结果
3.1 查看模式创建日志
模式创建的过程中会记录日志,存放在运行命令时设置的日志目录中,通过检查这些日志,分析模式创建中的信息,可以判断模式是否创建成功,如果失败,也可以从报错的信息中分析失败的原因,纠正后重新运行创建脚本。日志目录中的日志文件如下:
[oracle@localhost samplelog]$ ls -l total 152 -rw-r--r--. 1 oracle oinstall 2345 Jun 5 22:19 bi_v3.log -rw-r--r--. 1 oracle oinstall 2059 Jun 5 22:18 chan_v3.log -rw-r--r--. 1 oracle oinstall 2302 Jun 5 22:18 coun_v3.log -rw-r--r--. 1 oracle oinstall 3542 Jun 5 22:18 cust1v3.log -rw-r--r--. 1 oracle oinstall 2735 Jun 5 22:19 dem1v3.log -rw-r--r--. 1 oracle oinstall 2606 Jun 5 22:19 dmsal_v3.log -rw-r--r--. 1 oracle oinstall 6142 Jun 5 22:18 hr_main.log -rw-r--r--. 1 oracle oinstall 7038 Jun 5 22:18 ix_v3.log -rw-r--r--. 1 oracle oinstall 62511 Jun 5 22:19 mkverify_v3.log -rw-r--r--. 1 oracle oinstall 6062 Jun 5 22:18 oe_oc_v3.log -rw-r--r--. 1 oracle oinstall 599 Jun 5 22:18 pm_main.log -rw-r--r--. 1 oracle oinstall 5103 Jun 5 22:18 pm_p_lob.log -rw-r--r--. 1 oracle oinstall 3600 Jun 5 22:18 prod1v3.log -rw-r--r--. 1 oracle oinstall 2651 Jun 5 22:18 prom1v3.log -rw-r--r--. 1 oracle oinstall 3088 Jun 5 22:19 sale1v3.log -rw-r--r--. 1 oracle oinstall 7687 Jun 5 22:19 sh_v3.log -rw-r--r--. 1 oracle oinstall 4727 Jun 5 22:18 time_v3.log
上面的日志文件中,mkverify_v3.log记录了本次创建的用户及每个用户下的对象,对象类型,对象状态,授权、表和索引的统计信息等,文件内容节略如下:
All named objects and stati
OWNER OBJECT_TYPE OBJECT_NAME SUBOBJECT_NAME STATUS
------ -------------------- ------------------------------ ---------------- --------
BI SYNONYM CHANNELS VALID
BI SYNONYM COSTS VALID
SH INDEX PARTITION SALES_PROMO_BIX SALES_Q2_1999 VALID
All granted object privileges
OWNER TABLE_NAME PRIVILEGE GRANTEE
------ ------------------------------ ------------------------- -------
HR COUNTRIES REFERENCES OE
--省略多行
SYS SUBDIR WRITE OE
64 rows selected.
Space usage
OWNER SEGMENT_TYPE SUM(BYTES)
------ -------------------- ----------
HR INDEX 1245184
--省略多行
SH 165675008
18599116
28 rows selected.
Table cardinality relational and object tables
OWNER TABLE_NAME NUM_ROWS
------ ------------------------------ ----------
HR COUNTRIES 25
HR DEPARTMENTS 27
--省略多行
SH TIMES 1826
57 rows selected.
Index cardinality (without LOB indexes)
OWNER INDEX_NAME DISTINCT_KEYS NUM_ROWS
------ ------------------------- ------------- ----------
HR COUNTRY_C_ID_PK 25 25
HR DEPT_ID_PK 27 27
HR DEPT_LOCATION_IX 7 27
--省略多行
SH TIMES_PK 1826 1826
72 rows selected.
3.2 登陆数据库查看
对于每个用户下创建的表及其相互关系,可以用数据库管理工具(如dbeaver)来查看和检查,如DBeaver生成的HR模式的ER图如下

4 写在后面
感觉Oracle的示例数据库覆盖的范围比较广泛,场景也有针对性,提供了多种选择性,就是创建脚本还需要优化一下,如果不仔细看readme文档,还是不太容易创建成功的。




