autonomous databaseにデータをインポートする

Oracle Cloud always free Advent Calendar 201920日目です。
19日目では、autonomous databaseのデータをObject Storageへエクスポートしましたが、
本日は、Object Storage上のデータをautonomous databaseへインポートします。
エクスポート元、インポート先のユーザは別のユーザにします。(エクスポート元ユーザ soe / インポート先ユーザ soe_i)

 

流れとしては、
①Object Storageへインポートするファイルを配置
②autonomous databaseで使用するbucket操作用ユーザ&グループを作成
③クレデンシャルを作成
④インポートするDBユーザの作成
⑤Object Storageからautonomous databaseへインポート

 

①は昨日エクスポートしたファイルをそのまま使用し、②③は昨日やったことと同じなので、省略します。

 

#インポートするDBユーザの作成
環境変数の設定
export PATH=/usr/lib/oracle/18.3/client64/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=~/wallet

 

sqlplus ADMIN/XXXXXXX@adw_high
SQL>CREATE USER soe_i IDENTIFIED BY TccP12#_TccP12#_ DEFAULT TABLESPACE DATA QUOTA UNLIMITED ON DATA TEMPORARY TABLESPACE TEMP;
SQL>GRANT connect, resource to soe_i;
SQL>GRANT execute on dbms_lock to soe_i;

 

#impdpの実行

#dumpfileはインポートするファイルの格納先
impdp admin/XXXXXX@adw_high directory=data_pump_dir credential=def_cred_name dumpfile= https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nrz2zsre72gm/b/adw_bucket/o/exp%u.dmp REMAP_SCHEMA=soe:soe_i

Import: Release 18.0.0.0.0 - Production on Fri Dec 6 05:40:03 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
ORA-31684: Object type USER:"SOE_I" already exists

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
ORA-39111: Dependent object type PASSWORD_HISTORY:"SOE_I" skipped, base object type USER:"SOE_I" already exists
・・・・
. . imported "SOE_I"."ORDERS" 129.9 MB 1439835 rows
. . imported "SOE_I"."PRODUCT_DESCRIPTIONS" 222.5 KB 1000 rows
. . imported "SOE_I"."ORDER_ITEMS" 230.1 MB 4328189 rows
. . imported "SOE_I"."CARD_DETAILS" 64.06 MB 1503687 rows
. . imported "SOE_I"."CUSTOMERS" 108.4 MB 1003687 rows
. . imported "SOE_I"."INVENTORIES" 15.21 MB 898304 rows
. . imported "SOE_I"."PRODUCT_INFORMATION" 186.9 KB 1000 rows
. . imported "SOE_I"."ORDERENTRY_METADATA" 5.609 KB 4 rows
. . imported "SOE_I"."ADDRESSES" 110.3 MB 1503690 rows
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
ORA-39082: Object type PACKAGE BODY:"SOE_I"."ORDERENTRY" created with compilation warnings

Job "ADMIN"."SYS_IMPORT_FULL_01" completed with 3 error(s) at Fri Dec 6 05:45:00 2019 elapsed 0 00:04:55

 

#コンパイルエラーが発生しているのでリコンパイル

sqlplus soe_i/TccP12#_TccP12#_@adw_high
SQL> alter package ORDERENTRY compile body;
Package body altered.

コンパイルエラーが解消されたので、問題なくインポートが終わりました。

 

<参考>
https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/user/load-data-data-pump.html#GUID-297FE3E6-A823-4F98-AD50-959ED96E6969

autonomous databaseのデータをエクスポートする

Oracle Cloud always free Advent Calendar 2019の19日目です。

本日はautonomous databaseのデータをエクスポートしてみようと思います。
オンプレのOracle Databaseのデータをエクスポートする場合と異なり、Oracle Cloudのユーザが必要です。

 

エクスポートの流れとしては、
①autonomous databaseで使用するbucket操作用ユーザ&グループを作成
bucketを作成
③クレデンシャルを作成
④autonomous databaseからObject Storageへエクスポート
⑤Object Storageからエクスポートしたデータを取り出し

 

今回は、18日のswingbenchを使用するときに作成したデータをエクスポートしてみます。前提は15日のsqlplusからの接続ができていることとなります。

 

#ユーザの作成  (実行結果のid (user OCID)を控えておく)
oci iam user create --name bucketadmin --description bucketadmin
{
"data": {
"capabilities": {
"can-use-api-keys": true,
"can-use-auth-tokens": true,
"can-use-console-password": true,
"can-use-customer-secret-keys": true,
"can-use-smtp-credentials": true
},
"compartment-id": "ocid1.tenancy.oc1..aaaaaaaaeb3oom3w5bw3ebkgtvd2w2dbXXXXXXX",
・・・・・

 

#グループの作成 (実行結果のid (group OCID)を控えておく)
oci iam group create --name bucketgroup --description bucketgroup
{
"data": {
"compartment-id": "ocid1.tenancy.oc1..aaaaaaaaeb3oom3w5bw3ebkgtvd2w2dbljknl4ssgueXXXXXXX",
・・・・・


#グループへユーザの割り当て(user-idとgroup-idは先ほど作成したユーザーとグループのID)
oci iam group add-user \
--user-id ocid1.user.oc1..aaaaaaaaczvfhniqd6jses4jlgee2qsvn66lhyXXXXXXX \
--group-id ocid1.group.oc1..aaaaaaaamb25rdvw4pz3oirrgza7nbpepiqtbqlr73XXXXX

 

#bucketとobjectを管理できるポリシーの作成。ポリシーはグループに割り当てる
oci iam policy create --name bucketgroup_policy \
--statements '["Allow group bucketgroup to manage buckets in tenancy","Allow group bucketgroup to manage objects in tenancy"]' \
--description bucketgroup_policy

#AUTHトークンの作成
oci iam auth-token create \
--user-id ocid1.user.oc1..aaaaaaaaczvfhniqd6jses4jlgee2qsvn66lhymXXXXXXXX \
--description bucketgroup

#bukectの作成
oci os bucket create --name adw_bucket
{
"data": {
・・・・・
"namespace": "nrz2zsre72gm",
"object-events-enabled": false,
"object-lifecycle-policy-etag": null,
"public-access-type": "NoPublicAccess",
"storage-tier": "Standard",
"time-created": "2019-12-05T14:21:52.730000+00:00"
},
"etag": "0a2f0fbb-31bf-4de2-83ed-fb5e456103f0"
}
#後でnamespaceを使うのでメモしておく。


#expdpのインストール
sudo yum -y install oracle-instantclient18.3-tools.x86_64

 

環境変数の設定
export PATH=/usr/lib/oracle/18.3/client64/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=~/wallet


soeユーザのオブジェクトをdata_pump_dirにエクスポート
expdp ADMIN/XXXXXXX@adw_high directory=data_pump_dir dumpfile=exp%U.dmp filesize=2G logfile=export.log schemas=soe
Export: Release 18.0.0.0.0 - Production on Thu Dec 5 13:53:25 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Starting "ADMIN"."SYS_EXPORT_SCHEMA_01": ADMIN/********@adw_high directory=data_pump_dir dumpfile=exp%U.dmp filesize=2G logfile=export.log schemas=soe
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PASSWORD_HISTORY
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/POST_SCHEMA/PROCACT_SCHEMA
. . exported "SOE"."ORDER_ITEMS" 230.1 MB 4328189 rows
. . exported "SOE"."ORDERS" 129.9 MB 1439835 rows
. . exported "SOE"."ADDRESSES" 110.3 MB 1503690 rows
. . exported "SOE"."CUSTOMERS" 108.4 MB 1003687 rows
. . exported "SOE"."CARD_DETAILS" 64.06 MB 1503687 rows
. . exported "SOE"."LOGON" 51.53 MB 2396105 rows
. . exported "SOE"."INVENTORIES" 15.21 MB 898304 rows
. . exported "SOE"."PRODUCT_DESCRIPTIONS" 222.5 KB 1000 rows
. . exported "SOE"."PRODUCT_INFORMATION" 186.9 KB 1000 rows
. . exported "SOE"."WAREHOUSES" 36.21 KB 1000 rows
. . exported "SOE"."ORDERENTRY_METADATA" 5.609 KB 4 rows
ORA-39173: Encrypted data has been stored unencrypted in dump file set.
Master table "ADMIN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ADMIN.SYS_EXPORT_SCHEMA_01 is:
/u03/dbfs/983C8A22693ADDAEE0531914000A0697/data/dpdump/exp01.dmp
Job "ADMIN"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Dec 5 13:58:19 2019 elapsed 0 00:04:51

 

 

#data_pump_dirにエクスポートされたデータの確認

sqlplus ADMIN/XXXXXX@adw_high
SQL> SELECT OBJECT_NAME FROM DBMS_CLOUD.LIST_FILES('DATA_PUMP_DIR');

OBJECT_NAME
--------------------------------------------------------------------------------
export.log
exp01.dmp

 

#CREDENTIALの作成

BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'DEF_CRED_NAME',
username => 'bucketadmin',
password => 'KA<L6Woi2_nyDglvpp3b'
);
END;
/
PL/SQL procedure successfully completed.

 

#data_pump_dirのエクスポートデータをObject Storageへコピー
#ap-tokyo-1がregion名

#nrz2zsre72gmがnamespace名

#adw_bucketbucket
BEGIN
DBMS_CLOUD.PUT_OBJECT(credential_name => 'DEF_CRED_NAME',
object_uri => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nrz2zsre72gm/b/adw_bucket/o/exp01.dmp',
directory_name => 'DATA_PUMP_DIR',
file_name => 'exp01.dmp');
END;
/
PL/SQL procedure successfully completed.

 

#Object Storageへ格納されたデータの確認
oci os object list --bucket-name adw_bucket
{
"data": [
{
"md5": "jVYyubfkNMuPKjPTgfIBLw==",
"name": "exp01.dmp",
"size": 745684992,
"time-created": "2019-12-05T14:23:09.552000+00:00"
}
],
"prefixes": []
}

 

<参考>

docs.oracle.com

autonomous databaseにswingbenchかけてみる

Oracle Cloud always free Advent Calendar 2019の18日目です。

今日は、Swingbenchを使って、 autonomous databaseに負荷をかけてみようと思います。

 

#swingbenchのダウンロード
wget http://dominicgiles.com/swingbench/swingbenchlatest.zip

 

#解凍
unzip swingbenchlatest.zip

 

#java のインストール
sudo yum -y install java-1.8.0-openjdk

 

#ウォレットのダウンロード
#方法1
Autonomous Database->Autonomous Data Warehouse で接続したいDBを選択
DB接続をクリックし、ウォレットのダウンロードをクリック
パスワードを入力する。

Wallet_datawarehouse.zipがダウンロードされるので、always free Computeインスタンスへアップロードする。(格納先は~/walletとする)

 

#方法2(OCI CLIが使用できることが前提)

oci db autonomous-database listコマンドで接続したいDBのOCIDを確認
oci db autonomous-database list
・・・・
"freeform-tags": {},
"id": "ocid1.autonomousdatabase.oc1.ap-tokyo-1.abxhiljrdouplsv4h3cmqjkyphjr6lkpie72fgrgvr2ehmXXXXX",
"is-auto-scaling-enabled": false,
"is-dedicated": false,
・・・・
#idがOCID

 

#ウォレットのダウンロード
mkdir ~/wallet
cd ~/wallet
oci db autonomous-database generate-wallet \
--autonomous-database-id ocid1.autonomousdatabase.oc1.ap-tokyo-1.abxhiljrdouplsv4h3cmqjkyphjr6lkpie72fgrgvr2ehm5i2ti2aryjltkq \
--file Wallet_datawarehouse.zip \
--password Passw0rd

 

~/walletディレクトリにWallet_datawarehouse.zip が配置される


#swingbenchスキーマの作成&データのロード
cd swingbench/bin

# -cf ウォレットのパス(zipのままでOK)
# -cs 接続識別子
# -ts 表領域
#-dbap ADMINユーザのパスワード
# -dba 管理者ユーザ(ADMIN
# -u swingbench用に新規作成するユーザ名
# -p 新規作成するユーザ用のパスワード
# -async_off 非同期モード
# -create スキーマの作成
# -cl CLIモード
./oewizard -cf ~/wallet/Wallet_datawarehouse.zip \
-cs adw_high \
-ts DATA \
-dbap XXXXXXXX \
-dba ADMIN \
-u soe \
-p TccP12#_TccP12#_ \
-async_off \
-scale 1 \
-create \
-cl \
-v
Operation is successfully completed.
Operation is successfully completed.
SwingBench Wizard
Author : Dominic Giles
Version : 2.6.0.1124

Running in Lights Out Mode using config file : ../wizardconfigs/oewizard.xml
Connecting to : jdbc:oracle:thin:@adw_high
Connected
Running script ../sql/soedgcreateuser.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 329 millisecond(s)
Starting run
Dec 05, 2019 8:34:24 AM oracle.simplefan.impl.FanManager configure
SEVERE: attempt to configure ONS in FanManager failed with oracle.ons.NoServersAvailable: Subscription time out
Starting script ../sql/soedgdrop2.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 57 millisecond(s)
Starting script ../sql/soedgcreatetables2.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 185 millisecond(s)
Starting script ../sql/soedgviews.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 25 millisecond(s)
Starting script ../sql/soedgsqlset.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 90 millisecond(s)
Inserting data into table ADDRESSES_750001
Inserting data into table ADDRESSES_2
Inserting data into table CUSTOMERS_500001
Inserting data into table CUSTOMERS_2
Completed processing table ADDRESSES_750001 in 0:00:31
Inserting data into table ORDER_ITEMS_714895
Inserting data into table ORDERS_714896
Completed processing table ADDRESSES_2 in 0:00:32
Completed processing table CUSTOMERS_500001 in 0:00:38
Inserting data into table ORDER_ITEMS_1
Inserting data into table ORDERS_2
Completed processing table CUSTOMERS_2 in 0:00:39
Completed processing table ORDERS_2 in 0:02:30
Inserting data into table CARD_DETAILS_750001
Inserting data into table CARD_DETAILS_2
Completed processing table ORDER_ITEMS_1 in 0:02:32
Completed processing table ORDERS_714896 in 0:02:45
Inserting data into table LOGON_1191493
Completed processing table ORDER_ITEMS_714895 in 0:02:47
Inserting data into table LOGON_2
Completed processing table CARD_DETAILS_750001 in 0:00:16
Inserting data into table INVENTORIES
Inserting data into table PRODUCT_INFORMATION
Completed processing table PRODUCT_INFORMATION in 0:00:00
Completed processing table CARD_DETAILS_2 in 0:00:16
Inserting data into table PRODUCT_DESCRIPTIONS
Completed processing table PRODUCT_DESCRIPTIONS in 0:00:00
Inserting data into table WAREHOUSES
Completed processing table WAREHOUSES in 0:00:00
Completed processing table LOGON_1191493 in 0:00:17
Completed processing table INVENTORIES in 0:00:11
Connection cache closed
Starting script ../sql/soedganalyzeschema2.sql
Script completed in 0 hour(s) 0 minute(s) 24 second(s) 422 millisecond(s)
Starting script ../sql/soedgconstraints2.sql
Script completed in 0 hour(s) 0 minute(s) 9 second(s) 608 millisecond(s)
Starting script ../sql/soedgindexes2.sql
Script completed in 0 hour(s) 0 minute(s) 29 second(s) 13 millisecond(s)
Starting script ../sql/soedgsequences2.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 786 millisecond(s)
Starting script ../sql/soedgpackage2_header.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 224 millisecond(s)
Starting script ../sql/soedgpackage2_body.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 150 millisecond(s)
Starting script ../sql/soedgsetupmetadata.sql
Script completed in 0 hour(s) 0 minute(s) 0 second(s) 606 millisecond(s)

============================================
| Datagenerator Run Stats |
============================================
Connection Time 0:00:00.004
Data Generation Time 0:03:37.918
DDL Creation Time 0:01:35.491
Total Run Time 0:05:13.415
Rows Inserted per sec 55,554
Data Generated (MB) per sec 4.5
Actual Rows Generated 13,011,798
Commits Completed 672
Batch Updates Completed 65,082

Connecting to : jdbc:oracle:thin:@adw_high
Connected

Post Creation Validation Report
===============================
The schema appears to have been created successfully.

Valid Objects
=============
Valid Tables : 'ORDERS','ORDER_ITEMS','CUSTOMERS','WAREHOUSES','ORDERENTRY_METADATA','INVENTORIES','PRODUCT_INFORMATION','PRODUCT_DESCRIPTIONS','ADDRESSES','CARD_DETAILS'
Valid Indexes : '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','ORD_CUSTOMER_IX','ORD_ORDER_DATE_IX','ORD_WAREHOUSE_IX','ORDER_ITEMS_PK','ITEM_ORDER_IX','ITEM_PRODUCT_IX','WAREHOUSES_PK','WHS_LOCATION_IX','CUSTOMERS_PK','CUST_EMAIL_IX','CUST_ACCOUNT_MANAGER_IX','CUST_FUNC_LOWER_NAME_IX','ADDRESS_PK','ADDRESS_CUST_IX','CARD_DETAILS_PK','CARDDETAILS_CUST_IX'
Valid Views : 'PRODUCTS','PRODUCT_PRICES'
Valid Sequences : 'CUSTOMER_SEQ','ORDERS_SEQ','ADDRESS_SEQ','LOGON_SEQ','CARD_DETAILS_SEQ'
Valid Code : 'ORDERENTRY'
Schema Created

 


#負荷をかける
$ ./charbench -c ../configs/SOE_Server_Side_V2.xml \
-cf ~/wallet/Wallet_datawarehouse.zip \
-cs adw_high \
-u soe \
-p TccP12#_TccP12#_ \
-rt 0:0.30
Author : Dominic Giles
Version : 2.6.0.1124

Results will be written to results.xml.
Hit Return to Terminate Run...

Time Users TPM TPS

Operation is successfully completed.
Operation is successfully completed.
8:55:02 AM X XXXX XX

 

<参考>

www.dominicgiles.com

autonomous databaseにhammerdbかけてみる

Oracle Cloud always free Advent Calendar 2019の17日目です。

今日はhammerdbを使って、autonomous database(ADW)に負荷をかけてみようと思います。
15日目のsqlplusで接続できる環境が整っていることが前提となります。


#hammerdbのダウンロード
wget https://github.com/TPC-Council/HammerDB/releases/download/v3.3/HammerDB-3.3-Linux-x86-64-Install

 

#hammerdbのインストール
$chmod +x HammerDB-3.3-Linux-x86-64-Install
$./HammerDB-3.3-Linux-x86-64-Install

This will install HammerDB on your computer. Continue? [n/Y] Y
Where do you want to install HammerDB? [/home/opc/HammerDB-3.3]
Installing HammerDB... Installing Program Files...
Installation complete.


#環境変数の設定
#instantclient 18.3を入れた場合なので、インストールしたOracleクライアントによってパスが変わるので注意
export ORACLE_HOME=/usr/lib/oracle/18.3/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_LIBRARY=$ORACLE_HOME/lib/libclntsh.so.18.1
#walletを~/walletに配置しているので TNS_ADMINを~/walletに指定する
export TNS_ADMIN=~/wallet


#HammerDBの起動
cd HammerDB-3.3/
./hammerdbcli
HammerDB CLI v3.3
Copyright (C) 2003-2019 Steve Shaw
Type "help" for a list of commands
The xml is well-formed, applying configuration

hammerdb>librarycheck
Checking database library for Oracle
Success ... loaded library Oratcl for Oracle

 

#DBタイプをOracleに指定
hammerdb>dbset db ora
Database set to Oracle

 

#負荷タイプをTPC-Cに指定
hammerdb>dbset bm TPC-C
Benchmark set to TPC-C for Oracle

 

#TNS接続識別子を指定
hammerdb>diset connection instance adw_high
Changed connection:instance from oracle to adw_high for Oracle

 

#ADWの管理ユーザ/パスワードを指定
hammerdb>diset connection system_user ADMIN
Changed connection:system_user from system to ADMIN for Oracle

hammerdb>diset connection system_password XXXXX
Changed connection:system_password from manager to XXXXXX for Oracle

 

#tpccユーザのパスワードを指定(複雑性を要求されるので注意)
hammerdb>diset tpcc tpcc_pass TccP12#_TccP12#_
Changed tpcc:tpcc_pass from tpcc to TccP12#_TccP12#_ for Oracle


#Hammerdbで使用する表領域を指定
hammerdb>diset tpcc tpcc_def_tab DATA
Changed tpcc:tpcc_def_tab from tpcctab to DATA for Oracle

 

#実計測時はtimed
hammerdb>diset tpcc ora_driver timed
Clearing Script, reload script to activate new setting
Script cleared
Changed tpcc:ora_driver from test to timed for Oracle


#スキーマ作成
hammerdb>buildschema
Script cleared
Building 1 Warehouses(s) with 1 Virtual User
Ready to create a 1 Warehouse Oracle TPC-C schema
in database ADW_HIGH under user TPCC in tablespace DATA?
Enter yes or no: replied yes
Vuser 1 created - WAIT IDLE
RUNNING - TPC-C creation
Vuser 1:RUNNING
Vuser 1:CREATING TPCC SCHEMA
Vuser 1:CREATING USER tpcc

Vuser 1:CREATING TPCC TABLES
Vuser 1:Loading Item
・・・・・
Vuser 1:Orders Done
Vuser 1:Loading Orders for D=8 W=1
Vuser 1:Orders Done
Vuser 1:Loading Orders for D=9 W=1
Vuser 1:Orders Done
Vuser 1:Loading Orders for D=10 W=1
Vuser 1:Orders Done
Vuser 1:End:Thu Dec 05 05:50:58 GMT 2019
Vuser 1:CREATING TPCC INDEXES
Vuser 1:ORA-01031: insufficient privileges alter session set sort_area_size=5000000
Vuser 1:CREATING TPCC STORED PROCEDURES
Vuser 1:GATHERING SCHEMA STATISTICS
Vuser 1:TPCC SCHEMA COMPLETE
Vuser 1:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
TPC-C Driver Script

※途中 ORA-1031が発生していますが、たぶん大丈夫。

 

#仮想ユーザのステータス確認
hammerdb>vustatus
1 = FINISH SUCCESS

 

#仮想ユーザの削除
hammerdb>vudestroy
Destroying Virtual Users
Virtual Users Destroyed
vudestroy success


#テストスクリプトのロード
hammerdb>loadscript
TPC-C Driver Script
Script loaded, Type "print script" to view


#仮想ユーザの設定
hammerdb>vuset vu 4
hammerdb>vuset logtotemp 1
hammerdb>vuset unique 1
hammerdb>vuset timestamps 1

 

#仮想ユーザの作成
hammerdb>vucreate
Vuser 1 created MONITOR - WAIT IDLE
Vuser 2 created - WAIT IDLE
Vuser 3 created - WAIT IDLE
Vuser 4 created - WAIT IDLE
Vuser 5 created - WAIT IDLE
Logging activated
to /tmp/hammerdb_5DE89E98598E03E283235393.log
5 Virtual Users Created with Monitor VU

 

#テストの実行
hammerdb>vurun
RUNNING - Oracle Timed TPC-C
Vuser 1:RUNNING
Vuser 1:Beginning rampup time of 2 minutes
Vuser 2:RUNNING
Vuser 2:Processing 1000000 transactions with output suppressed...
Vuser 3:RUNNING
Vuser 3:Processing 1000000 transactions with output suppressed...
Vuser 4:RUNNING
Vuser 4:Processing 1000000 transactions with output suppressed...
Vuser 5:RUNNING
Vuser 5:Processing 1000000 transactions with output suppressed...
・・・・・
Vuser 1:FINISHED SUCCESS
Vuser 2:FINISHED SUCCESS
Vuser 5:FINISHED SUCCESS
Vuser 3:FINISHED SUCCESS
Vuser 4:FINISHED SUCCESS
ALL VIRTUAL USERS COMPLETE
TPC-C Driver Script

<参考>

atsuizo.hatenadiary.jp

 

atsuizo.hatenadiary.jp

autonomous databaseにjdbcrunnerかけてみる

Oracle Cloud always free Advent Calendar 2019の16日目です。

今日はJavaで実装された汎用データベース負荷テストツールJdbcRunnerを使って、
always free Computeインスタンス(Oracle Linux 7)から autonomous databaseに負荷をかけてみようと思います。
今回、instant client(jdbc)のみでやりたいので、昨日、sqlplusを入れた環境とは別の環境で行います。

また、JDBC接続には、JKS接続とWallet接続がありますが、今回はJKS接続で行います。

 

#walletの入手
16日目で入手したwallet関連のファイルをすべてをalways free computeインスタンスへコピーします。(格納パスは ~/wallet_jdbc)

 

#ant/openjdkのインストール(antの依存関係でopenjdk1.8がインストールされる)
sudo yum -y install git ant

 

#jdbc driverのインストール
sudo yum -y install oracle-instantclient18.3-jdbc

 

#ojdbc.propertiesの編集
#walletの配置場所は/home/opc/wallet_jdbc
#javax.net.ssl.keyStorePasswordはwalletダウンロード時に指定したパスワード
cat << EOF > ~/wallet_jdbc/ojdbc.properties
#oracle.net.wallet_location=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/home/opc/wallet_jdbc)))
oracle.net.ssl_server_dn_match=true
javax.net.ssl.trustStore=/home/opc/wallet_jdbc/truststore.jks
javax.net.ssl.trustStorePassword=Passw0rd
javax.net.ssl.keyStore=/home/opc/wallet_jdbc/keystore.jks
javax.net.ssl.keyStorePassword=Passw0rd
EOF

 

#jdbcrunnerの取得
git clone https://github.com/sh2/jdbcrunner.git

 

#コンパイル
cd jdbcrunner
ant

 

#user作成用のスクリプト配置

cat << EOF > ~/jdbcrunner/scripts/ora_create_user.js
var isLoad = false;
var nTxTypes = 1;
var nAgents = 1;
var connPoolSize = nAgents;
var stmtCacheSize = 10;
var isAutoCommit = true;
var sleepTime = 0;
var throttle = 0;
var isDebug = false;
var isTrace = false;
var logDir = ".";

function init() {
if (getId() == 0) {
//execute("DROP USER tpcc cascade")
execute("CREATE USER tpcc IDENTIFIED BY TccP12#_TccP12#_ DEFAULT TABLESPACE DATA QUOTA UNLIMITED ON DATA TEMPORARY TABLESPACE TEMP");
execute("GRANT connect, resource TO tpcc")
}
}

function run() {
}

function fin() {
}
EOF

 

 

#user作成

java -Djava.security.egd=file:/dev/./urandom \
-cp ~/jdbcrunner/jdbcrunner-1.3-nojdbc.jar:/usr/lib/oracle/18.3/client64/lib/ojdbc8.jar \
JR ~/jdbcrunner/scripts/ora_create_user.js \
-jdbcDriver oracle.jdbc.driver.OracleDriver \
-jdbcUrl jdbc:oracle:thin:@datawarehouse_high?TNS_ADMIN=/home/opc/wallet_jdbc \
-warmupTime 1 \
-measurementTime 1 \
-jdbcUser ADMIN \
-jdbcPass <ADMINのパスワード>

 

09:12:49 [INFO ] > JdbcRunner 1.3
09:12:49 [INFO ] [Config]
Program start time : 20191118-091248
Script filename : /home/opc/jdbcrunner/scripts/ora_create_user.js
JDBC driver : oracle.jdbc.driver.OracleDriver
JDBC URL : jdbc:oracle:thin:@datawarehouse_high?TNS_ADMIN=/home/opc/wallet_jdbc
JDBC user : ADMIN
Warmup time : 1 sec
Measurement time : 1 sec
Number of tx types : 1
Number of agents : 1
Connection pool size : 1
Statement cache size : 10
Auto commit : true
Sleep time : 0 msec
Throttle : - tps
Debug mode : false
Trace mode : false
Log directory : .
Parameter 0 : 0
Parameter 1 : 0
Parameter 2 : 0
Parameter 3 : 0
Parameter 4 : 0
Parameter 5 : 0
Parameter 6 : 0
Parameter 7 : 0
Parameter 8 : 0
Parameter 9 : 0
09:12:55 [INFO ] [Warmup] 0 sec, 165892 tps, (165892 tx)
09:12:56 [INFO ] [Progress] 1 sec, 408335 tps, 408335 tx
09:12:56 [INFO ] [Total tx count] 396940 tx
09:12:56 [INFO ] [Throughput] 396940.0 tps
09:12:56 [INFO ] [Response time (minimum)] 0 msec
09:12:56 [INFO ] [Response time (50%tile)] 0 msec
09:12:56 [INFO ] [Response time (90%tile)] 0 msec
09:12:56 [INFO ] [Response time (95%tile)] 0 msec
09:12:56 [INFO ] [Response time (99%tile)] 0 msec
09:12:56 [INFO ] [Response time (maximum)] 71 msec
09:12:56 [INFO ] < JdbcRunner SUCCESS

 

 

#TPCC用のデータロード ユーザ/パスワードは先ほど作成したユーザー(tpcc)
java -Djava.security.egd=file:/dev/./urandom \
-cp ~/jdbcrunner/jdbcrunner-1.3-nojdbc.jar:/usr/lib/oracle/18.3/client64/lib/ojdbc8.jar \
JR ~/jdbcrunner/scripts/tpcc_load.js \
-jdbcDriver oracle.jdbc.driver.OracleDriver \
-jdbcUrl jdbc:oracle:thin:@datawarehouse_high?TNS_ADMIN=/home/opc/wallet_jdbc \
-jdbcUser tpcc \
-jdbcPass TccP12#_TccP12#_

09:21:59 [INFO ] > JdbcRunner 1.3
09:21:59 [INFO ] [Config]
Program start time : 20191118-092158
Script filename : /home/opc/jdbcrunner/scripts/tpcc_load.js
JDBC driver : oracle.jdbc.driver.OracleDriver
JDBC URL : jdbc:oracle:thin:@datawarehouse_high?TNS_ADMIN=/home/opc/wallet_jdbc
JDBC user : tpcc
Load mode : true
Number of agents : 4
Auto commit : false
Debug mode : false
Trace mode : false
Log directory : logs
Parameter 0 : 0
Parameter 1 : 0
Parameter 2 : 0
Parameter 3 : 0
Parameter 4 : 0
Parameter 5 : 0
Parameter 6 : 0
Parameter 7 : 0
Parameter 8 : 0
Parameter 9 : 0
09:22:07 [INFO ] Tiny TPC-C - data loader
09:22:07 [INFO ] -param0 : Scale factor (default : 16)
09:22:07 [INFO ] -nAgents : Parallel loading degree (default : 4)
09:22:07 [INFO ] Scale factor : 16
09:22:07 [INFO ] Parallel loading degree : 4
09:22:07 [INFO ] Dropping tables ...
09:22:07 [WARN ] JavaException: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

09:22:07 [WARN ] JavaException: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

09:22:07 [WARN ] JavaException: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist

09:22:07 [WARN ] JavaException: java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
・・・・・
09:28:09 [INFO ] [Agent 2] orders : 20000 / 30000
09:28:13 [INFO ] [Agent 1] orders : 20000 / 30000
09:28:13 [INFO ] [Agent 0] orders : 20000 / 30000
09:28:18 [INFO ] [Agent 3] orders : 20000 / 30000
09:28:19 [INFO ] [Agent 2] orders : 30000 / 30000
09:28:22 [INFO ] [Agent 1] orders : 30000 / 30000
09:28:22 [INFO ] [Agent 0] orders : 30000 / 30000
09:28:24 [INFO ] [Agent 3] orders : 30000 / 30000
09:28:24 [INFO ] Creating indexes ...
09:28:54 [INFO ] Creating foreign keys ...
09:29:01 [INFO ] Analyzing tables ...
09:29:34 [INFO ] Completed.
09:29:34 [INFO ] < JdbcRunner SUCCESS

 

 

#TPCC実行
java -Djava.security.egd=file:/dev/./urandom \
-cp ~/jdbcrunner/jdbcrunner-1.3-nojdbc.jar:/usr/lib/oracle/18.3/client64/lib/ojdbc8.jar \
JR ~/jdbcrunner/scripts/tpcc.js \
-jdbcDriver oracle.jdbc.driver.OracleDriver \
-jdbcUrl jdbc:oracle:thin:@datawarehouse_high?TNS_ADMIN=/home/opc/wallet_jdbc \
-jdbcUser tpcc \
-jdbcPass TccP12#_TccP12#_
・・・・・
09:32:42 [INFO ] Tiny TPC-C
09:32:42 [INFO ] Scale factor : 16
09:32:42 [INFO ] tx0 : New-Order transaction
09:32:42 [INFO ] tx1 : Payment transaction
09:32:42 [INFO ] tx2 : Order-Status transaction
09:32:42 [INFO ] tx3 : Delivery transaction
09:32:42 [INFO ] tx4 : Stock-Level transaction
09:32:44 [INFO ] [Warmup] -299 sec, 0,8,1,0,1 tps, (0,8,1,0,1 tx)
・・・・・


<参考>

qiita.com

 

docs.oracle.com

autonomous databaseに接続してみる

Oracle Cloud always free Advent Calendar 2019の15日目です。

 

今日はalways freeのComputeインスタンスからalways freeのautonomous database(datawarehouse)に接続してみようと思います。
接続はSQLPLUSから行います。
autonomous database(datawarehouse)は作成済みとします。

 

#oracle instant clientのインストール
sudo yum -y install oracle-instantclient18.3-sqlplus


ウォレットのダウンロード
#方法1
Autonomous Database->Autonomous Data Warehouse で接続したいDBを選択
DB接続をクリックし、ウォレットのダウンロードをクリック
パスワードを入力する。

Wallet_datawarehouse.zipがダウンロードされるので、always free Computeインスタンスへアップロードする。(格納先は~/walletとする)

 

#方法2(OCI CLIが使用できることが前提)
oci db autonomous-database listコマンドで接続したいDBのOCIDを確認

oci db autonomous-database list
・・・・
"freeform-tags": {},
"id": "ocid1.autonomousdatabase.oc1.ap-tokyo-1.abxhiljrdouplsv4h3cmqjkyphjr6lkpie72fgrgvr2ehXXXXXXX",
"is-auto-scaling-enabled": false,
"is-dedicated": false,
・・・・
#idがOCID


#ウォレットのダウンロード
mkdir ~/wallet
cd ~/wallet
oci db autonomous-database generate-wallet \
--autonomous-database-id ocid1.autonomousdatabase.oc1.ap-tokyo-1.abxhiljrdouplsv4h3cmqjkyphjr6lkpie72fgrgvr2ehm5i2tiXXXXXX \
--file Wallet_datawarehouse.zip \
--password Passw0rd

 

#ウォレットの解凍
unzip Wallet_datawarehouse.zip


#zipファイルの削除
rm -f Wallet_datawarehouse.zip

 

#接続設定の確認
cat tnsnames.ora
datawarehouse_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XX96e1s4zxgj0_datawarehouse_high.adwc.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

datawarehouse_low = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XXw96e1s4zxgj0_datawarehouse_low.adwc.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

datawarehouse_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=XXsw96e1s4zxgj0_datawarehouse_medium.adwc.oraclecloud.com))(security=(ssl_server_cert_dn="CN=adb.ap-tokyo-1.oraclecloud.com,OU=Oracle ADB TOKYO,O=Oracle Corporation,L=Redwood City,ST=California,C=US")))

 

#sqlnet.oraファイルの編集
#"~"は認識しないので、フルパスで記入する必要あり。
cat << EOF > sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/wallet")))
SSL_SERVER_DN_MATCH=yes
EOF

 

#環境変数の設定
#必要に応じて以下を~/.bash_profileに追加する
export PATH=/usr/lib/oracle/18.3/client64/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=~/wallet

 

#接続
[opc@docker wallet]$ sqlplus ADMIN/XXXXXX@datawarehouse_high

SQL*Plus: Release 18.0.0.0.0 - Production on Mon Nov 18 06:18:43 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle. All rights reserved.

Last Successful login time: Mon Nov 18 2019 06:16:20 +00:00

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL>

 

<参考>

itedge.stars.ne.jp

 

www.system-exe.co.jp

 

qiita.com

 

qiita.com

 

docs.oracle.com

(番外編)Oracle Cloudアカウント作成できなかった話(解決済)

Oracle Cloud always free Advent Calendar 2019の14日目です。

今日は番外編として、Oracle Cloudのサインアップに関することです。

 

<経緯>
always freeを使っていた既存Oracle Cloudアカウントが何故か使用できなくなった。
cloud support chatに問い合わせるものの、unusuallyな挙動を検知したため、accountがdisabledになったとのこと。
これ、どうにもならないパターンだなと思ったので、新規にアカウントを作成することに。

 

<アカウント登録>
元々使用していたメールアドレスはalready exists(登録済み)となってしまうので、別のメールアドレスで登録します。
しかしながら、支払い情報の最後で以下のメッセージがでてしまい、登録完了になりません。

"We're unable to process your transaction. If you continue to encounter the error, you may contact Oracle Customer Service."

上記状況は、メールアドレス変えても使用するクレジットカード変えてもダメで、システム上で何かを見ているように思えます。

 

<問い合わせその1>
アカウントがないため、SRはもちろん上げることはできません。
どうしようかとtwitter上でつぶやいたところ、Oracle Cloudのページ左下のチャットで相談してみたら?というアドバイスがありました。
アドバイスに従い、チャット(日本語)で相談します。
連絡先などを伝えると折り返しで電話がありました。
アカウント作成にまつわる問題は Cloud Support Chatというところで対応してもらえるとのこと。
基本英語での問い合わせになってしまうが、直接やり取りしたほうが早いとのこと。
日本オラクルの人がやっても問い合わせ先も同じなので、詳細なやり取りであれば本人からやってもらったほうが良いとのこと)

Cloud Support Chatの行き方は、「Oracle Cloud Cost」で検索すると、Cloud Cost Estimatorのページが引っかかるので、
そのページの右下のチャットボタンを押し、Cloud Support Chat のstart chatを押す そうです。

英語かぁ。。。。


<問い合わせその2>
Start Chatを押し、必要事項を入力すると、chat botが起動してきます。
How can we help you today? と聞いてきますので、
現在の状況を記載します。
私は英語のWritingが苦手なので、グーグル先生に翻訳してもらったのをそのまま入力しています。

入力するとFAQが表示されるので、Exit Question Areaを押下します。
(FAQに答えはないので)

Exit Question Area を押すと、
Did this answer your question? と聞かれるので、Noを押します。
Noを押すと Would you like to chat with a live agent? と聞かれるので、
Yes を押します。
Yesを押すとLive Agent(生身の人)がchatで応じてくれます。

そこで、再度現在の状況を伝えますが、別担当チームが対応する旨、言われました。
その場でOracle Helpというところへメールを送ってくれます。
(私へはCCで宛先が追加されます)

 

<問い合わせその3>
翌日、Oracle Helpから調べているので、進捗があったら連絡するよメールがきました。

さらに翌日、進捗確認を含めて、以前無効化されたアカウントが影響しているかもしれない旨メールで伝えます。
すると、その日中に もう一度アカウント作成してみてとメール返信があり、
アカウント作成を試みると無事作成できました。