暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

学SQL编程没有合适的数据?来看看Oracle 19C的示例数据库模式

原创 听见风的声音 2025-06-09
455

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图如下
HR.png

4 写在后面

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论