1. ホーム
  2. データベース
  3. 神託

Oracle19c テーブルスペースの作成における落とし穴

2022-01-07 07:05:33

# いくつかのよくあるコード

--query temporary tablespace
select name from v$tempfile;

--query tablespace
select name from v$datafile;
Change the user's password
alter user Username identified by password;

昨日oracle19cをデプロイした後、以前書いたoracle11gのメモを使ってテーブルスペースを作成したところ、落とし穴に遭遇した。ここに要約を書きます。

実は、落とし穴に遭遇したのは、oracle11gと比較して、oracle19cにはCDBとPDBという概念が追加されている(12C以降)ためです。

# 表領域ファイルの格納ディレクトリを決定する

[oracle@localhost ~]$ su - oracle
[oracle@localhost ~]$ cd /opt/oracle/oradata[oracle@localhost oradata]$ ls
ORCLCDB
[oracle@localhost oradata]$ cd ORCLCDB[oracle@localhost ORCLCDB]$ ls
control01.ctl control02.ctl ORCLPDB1 pdbseed redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
[oracle@localhost ORCLCDB]$ mkdir anytxn_v2_dev
[oracle@localhost ORCLCDB]$ cd anytxn_v2_dev[oracle@localhost anytxn_v2_dev]$ pwd
/opt/oracle/oradata/ORCLCDB/anytxn_v2_dev

#テーブルスペースファイルの作成

[oracle@localhost anytxn_v2_dev]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Feb 21 13:38:42 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
 
SQL> CREATE TEMPORARY TABLESPACE ANYTXN_DEV_DATA_TEMP TEMPFILE '/opt/oracle/oradata/ORCLCDB/anytxn_v2_dev/anytxn_v2_dev_temp.dbf' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 20480M EXTENT MANAGEMENT LOCAL;
 
Tablespace created.
 
SQL> create tablespace ANYTXN_V2_DEV_DATA       
logging
datafile '/opt/oracle/oradata/ORCLCDB/anytxn_v2_dev/anytxn_v2_dev_data.dbf'
size 100M
autoextend on
next 100M maxsize 30480M
autoallocate
extent management local 
segment space management auto; 2 3 4 5 6 7 8 9  
 
Tablespace created.

#ユーザーの作成

SQL> create user anytxn_v2_dev identified by "jrx12345" default tablespace ANYTXN_V2_DEV_DATA temporary tablespace ANYTXN_DEV_ DATA_TEMP profile DEFAULT;
create user anytxn_v2_dev identified by "jrx12345" default tablespace ANYTXN_V2_DEV_DATA temporary tablespace ANYTXN_DEV_DATA_TEMP profile DEFAULT
            *DEFAULT
ERROR at line 1:
ORA-65096: invalid common user or role name

このエラーは、ユーザー名が仕様を満たしていないため、Oracle 12Cは、CDBとPDBの新機能を導入し始めた。 sqlplus / sysdbaコマンドとしてデフォルトのログインCDBデータベース、およびCDBデータベースは、すべての新しいユーザー名をcで始まる必要があります必要##、それ以外の上記のエラーが報告されます、PDBのユーザー作成には、この必要はありません。

# ユーザー名を変更した後にユーザーを作成する

SQL> create user c##anytxn_v2_dev identified by "jrx12345" default tablespace ANYTXN_V2_DEV_DATA temporary tablespace ANYTXN_DEV_ DATA_TEMP profile DEFAULT;
create user c##anytxn_v2_dev identified by "jrx12345" default tablespace ANYTXN_V2_DEV_DATA temporary tablespace ANYTXN_DEV_DATA_ TEMP profile DEFAULT
*DEFAULT
ERROR at line 1:
ORA-65048: error encountered when processing the current DDL statement in
pluggable database ORCLPDB1
ORA-00959: tablespace 'ANYTXN_V2_DEV_DATA' does not exist

その理由は、CDB内でユーザー割り当て表領域を作成する場合、割り当て表領域がPDBとCDBの両方に存在しなければならず、そうでない場合はエラーが報告されるからである。PDBとCDBに同じ表領域があるときに、CDBのユーザーに表領域を割り当てた場合、CDBの表領域が割り当てられ、ユーザーPDBへの表領域は影響を受けません。そのため、PDBに同じ表領域を作成し、CDBに戻ってユーザー

Query the current database name
SQL> show con_name
 
CON_NAME
------------------------------
CDB$ROOT
Query the name of PDB database
SQL> select name,open_mode from v$pdbs;
 
NAME
--------------------------------------------------------------------------------
OPEN_MODE
------------------------------
PDB$SEED
READ ONLY
 
ORCLPDB1
READ WRITE
Switching database
SQL> alter session set container=ORCLPDB1;
 
Session altered.
 
SQL> CREATE TEMPORARY TABLESPACE ANYTXN_DEV_DATA_TEMP TEMPFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/anytxn_v2_dev/anytxn_v2_dev_temp .dbf' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 20480M EXTENT MANAGEMENT LOCAL;
 
Tablespace created.
 
SQL> create tablespace ANYTXN_V2_DEV_DATA       
logging
datafile '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/anytxn_v2_dev/anytxn_v2_dev_data.dbf'
size 100M
autoextend on
next 100M maxsize 30480M
autoallocate
extent management local 
segment space management auto; 2 3 4 5 6 7 8 9  
 
Tablespace created.
 
SQL> alter session set container=CDB$ROOT;
 
Session altered.
 
SQL> create user c##anytxn_v2_dev identified by "jrx12345" default tablespace ANYTXN_V2_DEV_DATA temporary tablespace ANYTXN_DEV_DATA DATA_TEMP profile DEFAULT;
 
User created.
 
SQL> GRANT CONNECT,RESOURCE TO c##anytxn_v2_dev;
 
Grant succeeded.

上記のように、作成に成功しましたので、新しいユーザーでデータベースに接続してみます。

[oracle@localhost anytxn_v2_dev]$ sqlplus c##anytxn_v2_dev/jrx12345 
 
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Feb 21 20:46:04 2020
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.
 
Last Successful login time: Fri Feb 21 2020 15:33:39 +08:00
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

Oracle19c 表領域の作成に関する本記事を公開しました。Oracle19c 表領域の作成に関する詳細については、過去の記事を検索するか、引き続き以下の記事をご覧ください。