This is a little note, primarily to myself I guess, about the creation of the order entry schema (part of Swingbench, written by Dominic Giles) when no VNC sessions are available (although you can almost always use port-forwarding :). Instead, you can create the schema on the command line. I always execute commands on remote systems in screen for increased peace of mind. Should the network drop, the order entry generation will continue as if nothing ever happened.
Like many others I use Swingbench during trainings and presentations to have some activity on a system. Very useful for demonstrating ASH and OEM, and many other things too!
This article references swingbench 2.5, the latest version at the time of writing. It requires a JDK to be present, I simply used the one bundled with Oracle 12.1.0.2.0 which is my target database version. You first start by downloading Swingbench from Dominic’s website and unzip it in a directory from where you want to run it. It is usually a good idea to keep the load generator on a different (set of) machine(s). As long as you can connect to the database you want to use to house the SOE schema you’re fine.
Creating the SOE schema
Before you can run swingbench (or minibench/charbench) you need to create the SOE schema. The oewizard is the tool of choice. If you haven’t done so, add java to your path. Then you can have a look at the available options:
$ JAVA_HOME=/u01/app/oracle/product/12.1.0.2/dbhome_1/jdk
$ export PATH=$PATH:$JAVA_HOME/bin
$ ./oewizard -h
usage: parameters:
-allindexes build all indexes for schema
-bigfile use big file tablespaces
-c <filename> wizard config file
-cl run in character mode
-compositepart use a composite paritioning model if it exisits
-compress use default compression model if it exists
-create create benchmarks schema
-cs <connectString> connectring for database
-dba <username> dba username for schema creation
-dbap <password> password for schema creation
-debug turn on debugging output
-debugf turn on debugging output to file (debug.log)
-df <datafile> datafile name used to create schema in
-drop drop benchmarks schema
-dt <driverType> driver type (oci|thin)
-g run in graphical mode (default)
-generate generate data for benchmark if available
-h,--help print this message
-hashpart use hash paritioning model if it exists
-hcccompress use HCC compression if it exisits
-nocompress don't use any database compression
-noindexes don't build any indexes for schema
-nopart don't use any database partitioning
-normalfile use normal file tablespaces
-oltpcompress use OLTP compression if it exisits
-p <password> password for benchmark schema
-part use default paritioning model if it exists
-pkindexes only create primary keys for schema
-rangepart use a range paritioning model if it exisits
-s run in silent mode
-scale <scale> mulitiplier for default config
-sp <soft partitions> the number of softparitions used. Defaults to cpu
count
-tc <thread count> the number of threads(parallelism) used to
generate data. Defaults to cpus*2
-ts <tablespace> tablespace to create schema in
-u <username> username for benchmark schema
-v run in verbose mode when running from command
line
-version <version> version of the benchmark to run
Note that not all partitioning schemes are valid in this case, and neither are all compression methods. I found the below command to create the schema the way I want it.
./oewizard -allindexes -cl -create -cs //cluster-scan/sbench -dba martin \
> -dbap notTellingYouHere -ts soe_tbs -part -p soe -scale 8 -tc 8 -u soe -v
SwingBench Wizard
Author : Dominic Giles
Version : 2.5.0.949
Running in Lights Out Mode using config file : oewizard.xml
Connecting to : jdbc:oracle:thin:@//cluster-scan/sbench
Connected
Starting script ../sql/soedgcreateuser.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 104 millisecond(s)
Starting run
Starting script ../sql/soedgdrop2.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 55 millisecond(s)
Starting script ../sql/soedgcreatetableshash2.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 520 millisecond(s)
Starting script ../sql/soedgviews.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 19 millisecond(s)
Starting script ../sql/soedgsqlset.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 84 millisecond(s)
Inserting data into table ADDRESSES_11499978
Inserting data into table ADDRESSES_3999993
-- more data
Completed processing table LOGON_7943271 in 0:00:25
Connection cache closed
Starting script ../sql/soedganalyzeschema2.sql
Script completed in 0 hour(s) 1 minute(s) 20 second(s) 701 millisecond(s)
Starting script ../sql/soedgconstraints2.sql
Script completed in 0 hour(s) 1 minute(s) 41 second(s) 520 millisecond(s)
Starting script ../sql/soedgindexes2.sql
Script completed in 0 hour(s) 0 minute(s) 44 second(s) 685 millisecond(s)
Starting script ../sql/soedgsequences2.sql
Script completed in 0 hour(s) 0 minute(s) 3 second(s) 53 millisecond(s)
Starting script ../sql/soedgpackage2_header.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 215 millisecond(s)
Starting script ../sql/soedgpackage2_body.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 127 millisecond(s)
Starting script ../sql/soedgsetupmetadata.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 614 millisecond(s)
============================================
| Datagenerator Run Stats |
============================================
Connection Time 0:00:00.005
Data Generation Time 0:10:38.185
DDL Creation Time 0:03:51.630
Total Run Time 0:14:29.823
Rows Inserted per sec 151,713
Data Generated (MB) per sec 12.1
Actual Rows Generated 97,718,288
Connecting to : jdbc:oracle:thin:@//cluster-scan/sbench
Connected
Post Creation Validation Report
===============================
The creation of the schema appears to have been unsuccessful. See the following sections for further details.
Valid Objects
=============
Valid Tables : 'ORDERS','ORDER_ITEMS','CUSTOMERS','WAREHOUSES','ORDERENTRY_METADATA','INVENTORIES',
'PRODUCT_INFORMATION','PRODUCT_DESCRIPTIONS','ADDRESSES','CARD_DETAILS'
Valid Indexes : 'ORD_CUSTOMER_IX','ORD_ORDER_DATE_IX','ORD_WAREHOUSE_IX','ORDER_ITEMS_PK','ITEM_ORDER_IX',
'ITEM_PRODUCT_IX','CUST_EMAIL_IX','CUST_ACCOUNT_MANAGER_IX','CUST_FUNC_LOWER_NAME_IX',
'CARDDETAILS_CUST_IX''PRD_DESC_PK','PROD_NAME_IX','PRODUCT_INFORMATION_PK','PROD_SUPPLIER_IX',
'PROD_CATEGORY_IX','INVENTORY_PK','INV_PRODUCT_IX','INV_WAREHOUSE_IX','ORDER_PK',
'ORD_SALES_REP_IX','WAREHOUSES_PK','WHS_LOCATION_IX','CUSTOMERS_PK','ADDRESS_PK',
'ADDRESS_CUST_IX',
'CARD_DETAILS_PK'
Valid Views : 'PRODUCTS','PRODUCT_PRICES'
Valid Sequences : 'CUSTOMER_SEQ','ORDERS_SEQ','ADDRESS_SEQ','LOGON_SEQ','CARD_DETAILS_SEQ'
Valid Code :
Invalid Objects (1)
================
Invalid Tables :
Invalid Indexes :
Invalid Views :
Invalid Sequences :
Invalid Code : 'ORDERENTRY'
Missing Objects (0)
================
Missing Tables :
Missing Indexes :
Missing Views :
Missing Sequences :
Missing Code :
Schema Created
To compile the package SYS needs to grant execute on DBMS_LOCK to SOE.
This results in a schema with the following number of rows:
SQL> declare
2 v_cnt number;
3 begin
4 for i in (select table_name from dba_tables where owner='SOE') loop
5 execute immediate 'select count(*) from soe.' || i.table_name into v_cnt;
6 dbms_output.put_line(i.table_name || ' - ' || to_char(v_cnt, '999,999,999'));
7 end loop;
8 end;
9 /
ORDER_ITEMS - 34,316,243
ORDERS - 11,438,320
INVENTORIES - 896,853
PRODUCT_INFORMATION - 1,000
LOGON - 19,063,872
PRODUCT_DESCRIPTIONS - 1,000
ORDERENTRY_METADATA - 4
CUSTOMERS - 8,000,000
ADDRESSES - 12,000,000
CARD_DETAILS - 12,000,000
WAREHOUSES - 1,000
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.70
SQL> compute sum of m on report
SQL> break on report
SQL> select sum(bytes)/power(1024,2) m, segment_name, segment_type
2 from dba_segments where owner = 'SOE'
3 group by segment_name, segment_type
4 order by 1;
M SEGMENT_NAME SEGMENT_TYPE
--------------- ------------------------------ ------------------
.06 WAREHOUSES TABLE
.06 PRODUCT_INFORMATION_PK INDEX
.06 ORDERENTRY_METADATA TABLE
.13 WHS_LOCATION_IX INDEX
.13 PROD_CATEGORY_IX INDEX
.13 WAREHOUSES_PK INDEX
.13 PROD_SUPPLIER_IX INDEX
.13 PROD_NAME_IX INDEX
.13 PRD_DESC_PK INDEX
.25 PRODUCT_INFORMATION TABLE
.31 PRODUCT_DESCRIPTIONS TABLE
16.69 INV_WAREHOUSE_IX INDEX
16.69 INV_PRODUCT_IX INDEX
18.00 INVENTORY_PK INDEX
88.00 INVENTORIES TABLE
169.00 CUST_ACCOUNT_MANAGER_IX INDEX
177.06 CUSTOMERS_PK INDEX
204.06 CUST_DOB_IX INDEX
242.19 ORD_SALES_REP_IX INDEX
253.38 ORDER_PK INDEX
254.31 CUST_FUNC_LOWER_NAME_IX INDEX
265.06 ORD_CUSTOMER_IX INDEX
265.69 ADDRESS_PK INDEX
265.75 CARD_DETAILS_PK INDEX
276.88 CARDDETAILS_CUST_IX INDEX
278.13 ORD_WAREHOUSE_IX INDEX
278.50 ADDRESS_CUST_IX INDEX
291.88 ORD_ORDER_DATE_IX INDEX
347.81 CUST_EMAIL_IX INDEX
717.88 ITEM_PRODUCT_IX INDEX
788.94 ITEM_ORDER_IX INDEX
864.00 LOGON TABLE PARTITION
968.00 CARD_DETAILS TABLE PARTITION
1,352.00 CUSTOMERS TABLE PARTITION
1,408.00 ADDRESSES TABLE PARTITION
1,544.00 ORDERS TABLE PARTITION
2,368.00 ORDER_ITEMS TABLE PARTITION
---------------
13,721.38
37 rows selected.
Happy benchmarking!