Oracle 26ai: Method for Installing Sample Database

Installation Report

Installation Date: 2026-08-15. This report documents the installation process, account information, validation results, and known limitations for the sample schema in this environment.

1. Target Database

Item Value
Database Oracle 23.26.3.0.0 (26ai series), Multitenant Architecture
Host / Port 192.168.3.88:1521
Container CDB: ORCLCDB, PDB: ORCLPDB1 (READ WRITE)
Connection String 192.168.3.88:1521/ORCLPDB1
Components XDB, SDO (Spatial) both VALID

2. Client Tools (Installed Locally)

Tool Version Location
SQLcl 26.2.1.222.1617 D:\tools\sqlcl
Instant Client (Basic) 23.26.3.0.0 D:\Program Files\instantclient-basic-oracle-23.26.3.0.0\instantclient_23_26
Instant Client (Tools, including SQL*Loader) 23.26.3.0.0 Same as above (extracted separately this time, provides sqlldr.exe)

3. Account Summary

All schema passwords are set to 88888888, with data tablespace sample and temporary tablespace TEMP.

User Password Tablespace Notes
system / sys 88888888 - Administrator account (sys connects with SYSDBA privilege)
hr 88888888 sample Human Resources
co 88888888 sample Customer Orders
sh 88888888 sample Sales History
oe 88888888 sample Order Entry (archived, includes OC sub-schema)
pm 88888888 sample Product Media (archived)

4. Installation Summary

  1. HR / CO / SH (Supported Schemas): Connected as system to PDB, ran \${schema}_install.sql in respective directories (human_resources/, customer_orders/, sales_history/). Prompted for password 88888888, tablespace sample, and overwrite confirmation (YES). SH must be run using SQLcl.
  2. OE / PM (Archived Schemas): First performed official Perl replacement of __SUB__CWD__D:/db-sample-schemas (generated .bak backup), then connected as system and executed order_entry/oe_main.sql and product_media/pm_main.sql, passing 9 parameters (schema passwords, tablespace sample, temporary tablespace TEMP, data/log paths, version v3, connection string). PM uses SQL*Loader to load LOB data.

5. Validation Results (provided = actual, all match)

HR:

Table Rows
regions / countries / departments / locations / employees / jobs / job_history 5 / 25 / 27 / 23 / 107 / 19 / 10

CO:

Table Rows
customers / stores / products / orders / order_items / shipments / inventory 392 / 23 / 46 / 1950 / 3914 / 1892 / 566

SH:

Table Rows
channels / costs / countries / customers / products / promotions / sales / times / supplementary_demographics 5 / 82112 / 35 / 55500 / 72 / 503 / 918843 / 1826 / 4500

OE (93 objects, 0 invalid; 27 OC types, 5 public synonyms COE_*, 9 grants from HR→OE):

Table Rows
customers / orders / order_items / product_information / product_descriptions / inventories / warehouses / promotions 319 / 105 / 665 / 288 / 8640 / 1112 / 9 / 2

PM (8 objects, 0 invalid; SQL*Loader loaded 16 records, 0 rejected):

Object Rows
print_media 4
textdocs_nestedtab (nested table) 12

6. Known Limitations

  1. OE’s XDB Purchase Order Demo (xdb03usg.sql): Directory object SS_OE_XMLDIR points to a server-side path, but purchaseOrder.xml/.xsd files are located locally on the installation machine and cannot be placed on the remote server. Thus, XDB resource creation fails (ORA-22288 / ORA-31001). Only affects XDB demo resources; OE/OC tables, views, types, and data remain intact.
  2. PM’s BFILE Column (print_media.ad_graphic): MEDIA_DIR directory object was created but points to a local path string. No corresponding media files exist on the server. The BFILE locator exists, but DBMS_LOB.FILEEXISTS = 0. BLOB data (photos, documents, etc.) are correctly loaded.

7. Log Locations

  • HR / CO / SH: \${schema}_install.log in each schema directory; runtime output copies are in the repository root as *_run_out.log.
  • OE / PM: logs/oe_oc_v3.log, logs/pm_main.log, logs/pm_p_lob.log (plus runtime output copies logs/oe_run_out.log, logs/pm_run_out.log).

8. Uninstallation Method

  • HR / CO / SH: Run each schema’s \${schema}_uninstall.sql as a privileged user.
  • OE / PM: Execute DROP USER oe CASCADE; and DROP USER pm CASCADE; as a privileged user.

9. Specific Installation Commands and Steps

The following commands were executed and verified in Git Bash (Windows) on the local machine. /d/... notation is Git Bash path syntax, equivalent to D:/....

9.1 Tool Preparation

# 1) Download and extract SQLcl (requires Java 11+)
curl -sSL -o sqlcl-latest.zip https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
unzip -q sqlcl-latest.zip -d /d/tools          # Creates /d/tools/sqlcl

# 2) Download Instant Client Tools package (includes sqlldr.exe), extract into existing Basic directory
curl -sSL -o ic-tools.zip "https://download.oracle.com/otn_software/nt/instantclient/2326300/instantclient-tools-windows.x64-23.26.3.0.0.zip"
unzip -q ic-tools.zip -d "/d/Program Files/instantclient-basic-oracle-23.26.3.0.0/instantclient_23_26/"
# ZIP contains a nested instantclient_23_26/ subdirectory; move contents up one level into the Basic directory root

# 3) Create log directory
mkdir -p /d/db-sample-schemas/logs

9.2 HR / CO / SH (Supported Schemas, Interactive Prompts)

Scripts use ACCEPT to prompt for: password, tablespace, and overwrite confirmation. Pre-fill input via pipe:

Three lines of input = password / tablespace / overwrite confirmation (empty line = default YES).

# HR
cd /d/db-sample-schemas/human_resources
printf '88888888\nsample\n\n' | /d/tools/sqlcl/bin/sql -S "system/88888888@192.168.3.88:1521/ORCLPDB1" @hr_install.sql

# CO
cd /d/db-sample-schemas/customer_orders
printf '88888888\nsample\n\n' | /d/tools/sqlcl/bin/sql -S "system/88888888@192.168.3.88:1521/ORCLPDB1" @co_install.sql

# SH (officially requires SQLcl)
cd /d/db-sample-schemas/sales_history
printf '88888888\nsample\n\n' | /d/tools/sqlcl/bin/sql -S "system/88888888@192.168.3.88:1521/ORCLPDB1" @sh_install.sql

The validation sections at the end of each script (comparing provided vs. actual row counts) are printed in the output and written to \${schema}_install.log.

9.3 OE / PM (Archived Schemas, Parameterized)

Archived scripts use DEFINE &1..&9 to accept parameters (non-interactive). First replace __SUB__CWD__ placeholders in scripts and data files with the full repository path (official installation step, generates .bak backup):

cd /d/db-sample-schemas
perl -p -i.bak -e 's#__SUB__CWD__#D:/db-sample-schemas#g' *.sql */*.sql */*.dat

OE (includes OC sub-schema)@oe_main.sql followed by 9 parameters:

cd /d/db-sample-schemas
printf 'exit\n' | /d/tools/sqlcl/bin/sql -S -L "system/88888888@192.168.3.88:1521/ORCLPDB1" \
  @order_entry/oe_main.sql 88888888 sample TEMP 88888888 88888888 \
  D:/db-sample-schemas D:/db-sample-schemas/logs/ v3 192.168.3.88:1521/ORCLPDB1

PM@product_media/pm_main.sql followed by 9 parameters (ensure sqlldr is in PATH):

export PATH="/d/Program Files/instantclient-basic-oracle-23.26.3.0.0/instantclient_23_26:$PATH"
cd /d/db-sample-schemas
printf 'exit\n' | /d/tools/sqlcl/bin/sql -S -L "system/88888888@192.168.3.88:1521/ORCLPDB1" \
  @product_media/pm_main.sql 88888888 sample TEMP 88888888 88888888 \
  D:/db-sample-schemas/product_media/ D:/db-sample-schemas/logs/ \
  D:/db-sample-schemas/product_media/ 192.168.3.88:1521/ORCLPDB1

Parameter Order Explanation (OE / PM consistent):

# Meaning This Value
1 Target schema password 88888888
2 Default tablespace sample
3 Temporary tablespace TEMP
4 HR (used by OE) / OE (used by PM) password 88888888
5 SYS password 88888888
6 Data/control file directory OE: D:/db-sample-schemas; PM: D:/db-sample-schemas/product_media/ (also sets MEDIA_DIR directory object in PM)
7 Log directory (must end with separator) D:/db-sample-schemas/logs/
8 OE: version v3 (corresponds to coe_v3/loe_v3/poe_v3 scripts; note not 3 as in README); PM: working directory (contains pm_p_lob.dat) OE: v3; PM: D:/db-sample-schemas/product_media/
9 Connection string 192.168.3.88:1521/ORCLPDB1

Note: Pure numeric passwords (88888888) do not require quotes for CREATE USER ... IDENTIFIED BY ...;
CREATE DIRECTORY does not validate server-side path existence, so PM’s MEDIA_DIR pointing to local path succeeds.

9.4 Validation Check Commands

/d/tools/sqlcl/bin/sql -S -L "system/88888888@192.168.3.88:1521/ORCLPDB1" <<'EOF'
select 'HR.employees='||count(*) from hr.employees;
select 'CO.orders='||count(*) from co.orders;
select 'SH.sales='||count(*) from sh.sales;
select 'OE.customers='||count(*) from oe.customers;
select 'PM.print_media='||count(*) from pm.print_media;
exit
EOF

Complete per-table row count comparisons are detailed in Section 5 above.