本投稿ではOracle Database 19cに作成したPDBにローカルユーザーを作成します。
作成したローカルユーザーでPDBに接続し、テーブル作成、データ挿入できるまでの手順を紹介します。
検証環境として以下の投稿でインストールしたOracle Database 19cを利用します。
【Oracle】RHEL7.7にOracle Database 19cをインストールしよう
表領域と一時表領域の作成
まずは今回作成するユーザーのために新しい表領域を作成します。
-PDB1に接続する。
$ sqlplus / as sysdba
SQL> ALTER SESSION SET CONTAINER=PDB1;
-表領域を作成します。
SQL> CREATE TABLESPACE “TEST” DATAFILE ‘/oradata/CDB/pdb1/sql_test.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 1G LOGGING EXTENT MANAGEMENT
LOCAL SEGMENT SPACE MANAGEMENT AUTO;
■オプション説明
AUTOEXTEND ON NEXT 100M MAXSIZE 1G
データファイルの容量が足らなくなったら1GBまで100MBずつ自動拡張します。
(MAXSIZEに制限をかけたくないのであれば「MAXSIZE UNLIMITED」とします。)
LOGGING
表領域に対するDML操作をREDOログに記録します。
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
自動セグメント領域管理で作成します。

-一時表領域を作成します。
SQL> CREATE TEMPORARY TABLESPACE “SQL_TEST_TMP”
TEMPFILE ‘/oradata/CDB/pdb1/sql_ test_tmp.dbf’ SIZE 64M
AUTOEXTEND ON MAXSIZE UNLIMITED;

PDBのローカルユーザー作成
PDB1にローカルユーザーを作成します。
SQL> create user test identified by ●●●●●●●●●●●●
2 default tablespace TEST
3 temporary tablespace SQL_TEST_TMP
4 container=current;
■オプション説明
「container = current」とすると今接続しているコンテナ(PDB1)にのみユーザーが作成されます。(指定しなくてもデフォルトでそうなっています。)
ローカルユーザーを作成できるのはPDBのみですが、共通ユーザーを作成したいときは「container=all」を指定することで全てのコンテナに作成することができます。(接頭辞には「C##」を指定する必要があります。)

ローカルユーザーへの権限付与
PDB1にtestというローカルユーザーを作成しました。
これから以下の動作をするために必要な権限を付与していきます。
- PDB1への接続
- テーブル作成
- データ挿入
-PDB1への接続
何も権限を付与していない状態でtestユーザーでPDB1に接続してみるとエラーが発生します。
$ sqlplus test/●●●●●●●●●@orahost.local:1521/pdb1.local
ERROR:
ORA-01045: ユーザーTESTにはCREATE
SESSION権限がありません。ログオンが拒否されました。

SESSION権限がなく、ログオンが拒否されてしまったのでSESSION権限を付与します。
SQL> GRANT CREATE SESSION TO test;

PDB1にtestユーザーで接続できることを確認しましょう。

-テーブル作成
PDB1にtestユーザーで接続できたのでテーブルを作成してみましょう。
SQL> CREATE TABLE tbl
2 (t_id INTEGER PRIMARY KEY,
3 t_var VARCHAR(10) NOT NULL);
CREATE TABLE tbl
*
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています

次は権限が不足しているとORA-01031エラーが出力されてしまいました。
CREATE TABLE権限を付与します。
SQL> GRANT CREATE TABLE TO test;

PDB1に作成したtestユーザーでテーブルを作成できることを確認しましょう。

-データ挿入
今作成したtblテーブルにデータを挿入してみます。

なんとなく予想していたかとは思いますがこちらもエラーが出力されます。
ORA-01950: 表領域’TEST’に対する権限がありません
ORA-01031よりエラー内容が分かりやすいですね。
testユーザーに対して、表領域TESTに対する権限を付与します。
SQL> ALTER USER test QUOTA UNLIMITED ON test;
「UNLIMITED」の部分はサイズ(KB(K)、MB(M)、GB(G)、TB(T)、PB(P)、EB(E))指定も可能です。
例.testユーザーが使用可能な表領域TESTのサイズを100MBとする。
SQL> ALTER USER test QUOTA 100M ON test;

ORA-01950が解消されたか確認しましょう。

コメント