LoginSignup
4
2

【Oracle DB基本2】表領域とスキーマーを作成する

Posted at

はじめに

前回Oracle CloudのBase DBに接続できましたので、データを登録するための事前準備として、表領域とスキーマーを作成します。

表領域の作成

OSにSSHでログインし、oracleユーザからSQL*Plusで接続します。

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 18 10:24:55 2023
Version 19.19.0.0.0

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


Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

PDBの確認と接続

Oracle DBは、マルチテナントアーキテクチャを採用しており、CDBとPDBがあります。
ざっくり言うと、CDBはPDBを管理するための領域、PDBはユーザデータを保存する領域です。

デフォルトのCDBとPDBを確認します。

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DB0714_PDB1                    READ WRITE NO

今はCDBに接続されていて、書き込み可能なPDBとしてDB0714_PDB1があります。

表領域やスキーマーはPDBに作成しますので、PDBに接続します。

SQL> alter session set container = DB0714_PDB1 ;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
DB0714_PDB1

表領域の確認と作成

デフォルトで作成されている表領域を確認します。

SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS

作成されている表領域とData Fileを確認します。

SQL> set lin 120
SQL> col TABLESPACE_NAME for a20
SQL> col FILE_NAME for a80
SQL> select tablespace_name,file_name,bytes/1024/1024 MB from dba_data_files;

TABLESPACE_NAME      FILE_NAME                                                                                MB
-------------------- -------------------------------------------------------------------------------- ----------
SYSAUX               +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/sysaux.271.114217        420
                     0831

UNDOTBS1             +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/undotbs1.270.1142         70
                     170841

SYSTEM               +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/system.273.114217        420
                     0819

USERS                +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/users.274.1142170          5
                     995

表領域を作成します。今回のBase DBはASMで構成されています。

名称SHIBUYA、容量100MBの表領域をASM領域に作成します。

SQL> create tablespace SHIBUYA datafile '+DATA' size 100m ;

Tablespace created.

SQL> select tablespace_name,file_name,bytes/1024/1024 MB from dba_data_files;

TABLESPACE_NAME      FILE_NAME                                                                                MB
-------------------- -------------------------------------------------------------------------------- ----------
SYSAUX               +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/sysaux.271.114217        420
                     0831

UNDOTBS1             +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/undotbs1.270.1142         70
                     170841

SYSTEM               +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/system.273.114217        420
                     0819

USERS                +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/users.274.1142170          5
                     995

TABLESPACE_NAME      FILE_NAME                                                                                MB
-------------------- -------------------------------------------------------------------------------- ----------

SHIBUYA              +DATA/DB0714_8SM_KIX/006C0A4610BB0447E0637C00000A3A75/DATAFILE/shibuya.281.11425        100
                     14633

スキーマーの作成

ユーザとスキーマーは厳密には違うものですが、「同じものと捉えてもよい」という記載もあったりします。
ユーザを作成すると、同じ名称のスキーマーが作成されるので、ここでは深く考えずにユーザ ≒ スキーマーくらいの認識でいこうと思います。

スキーマーの作成

スキーマーの作成と言いつつ、コマンドがcreate userですからね。
ここでは、ユーザ名ken、デフォルト表領域SHIBUYAでスキーマーを作成します。

SQL> create user ken identified by <パスワード> default tablespace SHIBUYA temporary tablespace temp;

確認します。
(grepできたらいいんですけど、SQLで同じようなことをする書き方がわからない)

SQL> select username from dba_users;

USERNAME
--------------------------------------------------------------------------------------------------------------------------------
SYS
SYSTEM
XS$NULL
LBACSYS
OUTLN
DBSNMP
APPQOSSYS
DBSFWUSER
GGSYS
ANONYMOUS
CTXSYS

USERNAME
--------------------------------------------------------------------------------------------------------------------------------
DVSYS
DVF
GSMADMIN_INTERNAL
OLAPSYS
MDSYS
XDB
WMSYS
GSMCATUSER
MDDATA
SYSBACKUP
REMOTE_SCHEDULER_AGENT

USERNAME
--------------------------------------------------------------------------------------------------------------------------------
GSMUSER
SYSRAC
OJVMSYS
SI_INFORMTN_SCHEMA
PDBUSER
AUDSYS
DIP
ORDPLUGINS
SYSKM
ORDDATA
ORACLE_OCM

USERNAME
--------------------------------------------------------------------------------------------------------------------------------
SYS$UMF
SYSDG
ORDSYS
KEN

37 rows selected.

権限の設定

作成したユーザに以下マニュアルにある3つの事前定義ロールを付与します。

SQL> grant connect to ken;

Grant succeeded.

SQL> grant resource to ken;

Grant succeeded.

SQL> grant dba to ken;

Grant succeeded.

接続

一旦ログアウトして、作成したスキーマーに接続します。書式は以下です。
$ sqlplus <スキーマ名>/<パスワード>@<ホスト名>:<ポート>/<サービス名>

@以降はOCIコンソールのPDB接続から確認できます。

スクリーンショット 2023-07-18 14.48.18.png

$ sqlplus ken/<パスワード>@aoyama.public.xxxvcn01.oraclevcn.com:1521/DB0714_pdb1.public.xxxvcn01.oraclevcn.com
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 18 14:26:24 2023
Version 19.19.0.0.0

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


Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL> show user
USER is "KEN"
SQL> show con_name

CON_NAME
------------------------------
DB0714_PDB1

tnsnames.ora

tnsnames.oraファイルに接続の情報を記載しておくことで、接続コマンドを簡略化できます。

$ cd $ORACLE_HOME/network/admin 
$ ls
samples  shrept.lst  sqlnet.ora  tnsnames.ora
tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_DB0714 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = aoyama)(PORT = 1521))


DB0714_8SM_KIX =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = aoyama)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DB0714_xxx_kix.public.oskvcn01.oraclevcn.com)
    )
  )

## 追記
PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = aoyama)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = db0714_pdb1.public.xxxvcn01.oraclevcn.com)
    )
  )
## ここまで
$ sqlplus ken/<パスワード>@PDB1

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 18 14:46:00 2023
Version 19.19.0.0.0

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

Last Successful login time: Tue Jul 18 2023 14:26:25 +09:00

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL> show user
USER is "KEN"
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2