はじめに
Oracle Databaseの学習の一環で、サンプルスキーマをインストールする
デフォルトではインストールされていないため、新規に構築したBaseDBに対してインストールする
*こちらのマニュアルを参考にしています。
サンプルスキーマの概要
- スキーマHR – 人事管理(Human Resources)部門では、会社の従業員および施設に関する情報を管理しています。
- スキーマOE – 受注(Order Entry)部門では、様々なチャネルにわたる、会社の製品の在庫と販売を管理しています。
- スキーマPM – 製品メディア(Product Media)部門では、会社が販売する各製品に関する説明書と詳細情報を管理しています。
- スキーマIX – 情報交換(Information Exchange)部門では、B2Bアプリケーションを使用して出荷を管理しています。
- スキーマSH – 販売(Sales)部門では、ビジネス上の判断に役立つ事業統計を管理しています。
- COスキーマ - 顧客注文(Customer Orders)部門では、顧客、製品、店舗および注文のデータで構成される簡単な小売アプリケーションがモデル化されています。
スキーマSHは、Partitioningオプションがライセンスに必要なため、Standard Editionでは利用ができません。
そのため、Base DatabaseではPartitioningが利用できるHigh Performance以上のライセンスが必要となります。
インストールしてみる
前提
- Base Database
- データベース・バージョン: 19.21.0.0.0
- ソフトウェア・エディション:Standard Edition
- PDB名は"DB0206_pdb1"
PDBでログインできるようにする
PDBのサービス名を確認
$ sudo su - oracle #oracleユーザに切替
$ lsnrctl status | tail #PDB名から始まる末尾のサービス名を確認
Instance "DB0206", status READY, has 2 handler(s) for this service...
Service "DB0206XDB.subnet01191039.vcn01191039.oraclevcn.com" has 1 instance(s).
Instance "DB0206", status READY, has 1 handler(s) for this service...
Service "DB0206_DB0206_pdb1.paas.oracle.com" has 1 instance(s).
Instance "DB0206", status READY, has 2 handler(s) for this service...
Service "DB0206_jh5_nrt.subnet01191039.vcn01191039.oraclevcn.com" has 1 instance(s).
Instance "DB0206", status READY, has 2 handler(s) for this service...
Service ★"db0206_pdb1.subnet01191039.vcn01191039.oraclevcn.com" has 1 instance(s). #こちらのサービス名をコピー
Instance "DB0206", status READY, has 2 handler(s) for this service...
The command completed successfully
tnsnames.oraファイルを編集
$ vim $ORACLE_HOME/network/admin/tnsnames.ora
末尾に、既存のCDB宛ての接続を参考に、PDB接続を追記し保存してください。
#tnsnames.oraNetworkConfigurationFile:/u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/tnsnames.ora
#GeneratedbyOracleconfigurationtools.
LISTENER_DB0206=(ADDRESS=(PROTOCOL=TCP)(HOST=zrcvtest)(PORT=1521))
DB0206_JH5_NRT=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zrcvtest)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DB0206_jh5_nrt.subnet01191039.vcn01191039.oraclevcn.com)))
IFILE=/opt/oracle/dcs/commonstore/dbrs/DB0206_jh5_nrt/dbrsnames.ora
-- 以下追加
PDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zrcvtest)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=db0206_pdb1.subnet01191039.vcn01191039.oraclevcn.com)))
作成した接続名とsysユーザでログインできること、接続先がPDBになっていることを確認
$ sqlplus sys@PDB as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Feb 10 13:36:01 2024
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
SQL> show con_name
CON_NAME
------------------------------
DB0206_PDB1
この作業をしないとデフォルトではCDBに対してログインされてしまいます。
以後PDB内にsysユーザでログインしている前提で話を進めます。
HRスキーマだけインストールする場合
HRスキーマはスクリプトがBaseDB内に既に用意されています
PDBにログイン
$ sqlplus sys@PDB as sysdba
スクリプトの実行
SQL> @?/demo/schema/human_resources/hr_main.sql
specify password for HR as parameter 1:
Enter value for 1: WelCome123#123# --任意でパスワード入力(大文字や文字数など要件があるので注意)
specify default tablespeace for HR as parameter 2:
Enter value for 2: users --HRのデフォルトの表領域
specify temporary tablespace for HR as parameter 3:
Enter value for 3: temp --HRの一時表領域
specify log path as parameter 4:
Enter value for 4: $ORACLE_HOME/demo/schema/log/ --ログのパス
/*
省略
*/
Commit complete.
PL/SQL procedure successfully completed.
"completed"で終了していればOK
HRユーザでログインできることを確認して、
$ sqlplus HR/WelCome123#123#@PDB
テーブルが格納されていることも確認
SQL> show con_name
CON_NAME
------------------------------
DB0206_PDB1
SQL> show user
USER is "HR"
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
--------------------------------------------------------------------------------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
COUNTRIES
7 rows selected.
正しくインストールできた
他のサンプルスキーマもインストールする場合
HRスキーマ以外のものをインストールしたい場合は、Githubよりスクリプトをインストールさせる必要があります。
スクリプトのダウンロード&解凍
$ cd $ORACLE_HOME/demo/
$ wget https://github.com/oracle-samples/db-sample-schemas/archive/refs/tags/v19.2.tar.gz
$ tar xzvf v19.2.tar.gz
$ cd db-sample-schemas-19.2/
$ ls #正しく解凍されているか確認
bus_intelligence drop_sch.sql LICENSE.md mksample.sql order_entry README.txt
CONTRIBUTING.md human_resources mk_dir.sql mkunplug.sql product_media sales_history
customer_orders info_exchange mkplug.sql mkverify.sql README.md shipping
$ perl -p -i.bak -e 's#__SUB__CWD__#'$(pwd)'#g' *.sql */*.sql */*.dat #おまじない
PDBにログイン
$ sqlplus sys@PDB as sysdba
スクリプトの実行
SQL> @?/demo/db-sample-schemas-19.2/mksample.sql
specify password for SYSTEM as parameter 1:
Enter value for 1: WelCome123#123# --既に決められた値を入力
specify password for SYS as parameter 2:
Enter value for 2: WelCome123#123# --既に決められた値を入力
specify password for HR as parameter 3:
Enter value for 3: WelCome123#123# --任意
specify password for OE as parameter 4:
Enter value for 4: WelCome123#123# --任意
specify password for PM as parameter 5:
Enter value for 5: WelCome123#123# --任意
specify password for IX as parameter 6:
Enter value for 6: WelCome123#123# --任意
specify password for SH as parameter 7:
Enter value for 7: WelCome123#123# --任意
specify password for BI as parameter 8:
Enter value for 8: WelCome123#123# --任意
specify default tablespace as parameter 9:
Enter value for 9: users
specify temporary tablespace as parameter 10:
Enter value for 10: temp
specify log file directory (including trailing delimiter) as parameter 11:
Enter value for 11: $ORACLE_HOME/demo/schema/log/
specify connect string as parameter 12:
Enter value for 12: PDB --接続識別子(tnsnames.oraに記載した項目)
新しくスキーマが作成されていることが確認できた
$ sqlplus OE/WelCome123#123#@PDB
SQLcl: Release 21.4 Production on Sat Feb 10 14:45:10 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
_________________________________
CUSTOMERS
WAREHOUSES
ORDER_ITEMS
ORDERS
INVENTORIES
PRODUCT_INFORMATION
PRODUCT_DESCRIPTIONS
PROMOTIONS
PRODUCT_REF_LIST_NESTEDTAB
SUBCATEGORY_REF_LIST_NESTEDTAB
10 rows selected.
SQL>
備考:各テーブルのレコード数を確認する
SELECT table_name, num_rows FROM user_tables;
一発で入力させるコマンド
@?/demo/db-sample-schemas-19.2/mksample.sql WelCome123#123# WelCome123#123# WelCome123#123# WelCome123#123# WelCome123#123# WelCome123#123# WelCome123#123# WelCome123#123# users temp $ORACLE_HOME/demo/schema/log/ PDB
@mksample systempw syspw hrpw oepw pmpw ixpw shpw bipw users temp /your/path/to/log/ connect_string
参考