SH 中文化样例数据使用手册
2026-09-11 07:06 AlfredZhao 阅读(86) 评论(0) 收藏 举报在数据库演示与 PoC 场景中,Oracle 自带的 SH 示例模式虽然经典,但英文维度数据往往让国内演示效果打折扣。笔者整理了一套方案:保留 SH 标准英文对象名,同时装载中文化维度数据,并按参数生成可复现的销售历史数据,方便个人测试与概念验证。
01 | 环境准备
使用前请确认满足以下条件:
- Oracle Database 19c 或更高版本,数据库字符集为
AL32UTF8。 - SQLcl 26.1.2.0 或更高版本。
- 使用具备创建、删除用户权限的账号连接,例如
SYSTEM或ADMIN。 - 从仓库内的
sales_history_cn/sales_history目录执行脚本,且该目录下的 CSV 文件必须完整保留。
注意:若输入
YES覆盖已有 SH 模式,安装脚本会执行DROP USER SH CASCADE。这会永久移除该用户及其对象,请勿对承载业务数据的 SH 用户执行。
02 | 安装步骤
在终端中进入脚本目录并连接目标数据库:
cd sales_history_cn/sales_history
sql system@//db-host:1521/service_name
在 SQLcl 中运行:
@sh_install.sql
安装过程会依次询问 SH 密码、表空间、生成模式及对应参数,最后确认是否覆盖已有 SH 模式。脚本会在当前目录生成 sh_install.log。
① 默认方式:最近 N 个完整自然年加今年截至当天
生成模式 [RECENT|RANGE] [RECENT]: RECENT
RECENT 模式的完整自然年数 [3]: 3
其中“当天”取目标数据库服务器的 SYSDATE。例如服务器日期为 2026-09-09、N 为 3 时,请求范围为 2023-01-01 至 2026-09-09。
② 自定义方式:指定起止日期
生成模式 [RECENT|RANGE] [RECENT]: RANGE
RANGE 模式起始日期 (YYYY-MM-DD): 2025-07-01
RANGE 模式结束日期 (YYYY-MM-DD): 2030-12-31
RANGE 的起止日期均包含在最终范围内,可指定未来日期。
03 | 数据生成规则
- 客户、促销和补充人口统计等维度从 CSV 装载;
TIMES、SALES和COSTS不装载原始 CSV,而是在选定范围内完整生成。 SALES每个完整自然年约 200,000 行,不完整年份按实际天数比例生成。最终MIN(time_id)和MAX(time_id)与选定范围一致。COSTS按产品、日期、促销和渠道的唯一组合生成,避免多笔销售造成重复成本行。- 固定随机种子为
20260909。在 CSV、脚本版本和输入参数一致时,生成的新增事实数据一致。 TIMES使用中国自然日历:周一为首日,周日为周结束日;财年、财月、财季等同自然年口径。时间文本格式示例:2026年09月、2026年Q3、星期一。SALES和COSTS使用按年自动扩展的 interval 分区,生成到未来年份无需再修改建表 DDL。
04 | 中文化范围
数据库对象名保持 Oracle SH 的英文命名,以兼容标准示例 SQL。装载后,以下展示数据会被中文化:
- 国家和区域名称;客户姓名、地址、电话、邮箱、收入与婚姻状态。
- 产品的单位、包装、状态和汇总描述。
- 促销名称、类别、子类别与汇总描述。
- 补充人口统计中的教育、职业、家庭规模和备注。
TIMES的星期、月、季及财务期间文本。
客户数据是中国本土模拟数据,仅用于演示,不能视为真实个人信息。
05 | 安装后校验
安装脚本末尾会输出各表实际行数。连接 SH 后可执行以下查询:
SELECT MIN(time_id) AS 最早销售日期,
MAX(time_id) AS 最晚销售日期,
COUNT(*) AS 销售行数
FROM sales;
SELECT calendar_year AS 年份,
COUNT(*) AS 销售行数
FROM sales s
JOIN times t ON t.time_id = s.time_id
GROUP BY calendar_year
ORDER BY calendar_year;
SELECT table_name, partition_name, high_value
FROM user_tab_partitions
WHERE table_name IN ('SALES', 'COSTS')
ORDER BY table_name, partition_position;
可检查中文时间维度:
SELECT time_id, day_name, calendar_month_desc, calendar_quarter_desc
FROM times
ORDER BY time_id
FETCH FIRST 10 ROWS ONLY;
06 | 卸载
以具备删除用户权限的账号连接,并在 sales_history_cn/sales_history 目录执行:
@sh_uninstall.sql
该操作会删除整个 SH 用户及其全部对象。若需要保留结果,请先按本地运维规范完成 Data Pump 导出或备份。
07 | 常见问题
| 现象 | 处理建议 |
|---|---|
RANGE 参数报错 |
两个日期都必须填写,并严格使用 YYYY-MM-DD;起始日期不得晚于结束日期。 |
| 中文显示乱码 | 确认数据库字符集为 AL32UTF8,并使用支持 UTF-8 的终端。 |
| 找不到 CSV 文件 | 必须从包含 customers.csv、promotions.csv 和 supplementary_demographics.csv 等维度文件的 sales_history_cn/sales_history 目录执行安装。 |
| 生成数据比预期少 | 完整年度约为 200,000 行,不完整年份会按实际天数等比例生成。 |
| 表空间不足或执行较慢 | 每完整年会额外增加约 20 万条销售及对应成本数据,并创建本地索引;请增加表空间并预留足够的加载时间。 |
下载命令:
git clone https://github.com/AlfredZhao/sales_history_cn.git
关注我,和AI一起成长~
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/22929303
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号