[Oracle Cloud] DBCS に PDB を作成し、Bigfile 表領域に切り替え検証してみた

# はじめに

Database Cloud Service(以下 DBCS) で、PDB を新規作成すると、TEMP 表領域と UNDO 表領域が Smallfile で作成されます。Smallfile では、Block Size が 8kb のときに、1個のデータファイルの容量上限が32GB になります。容量上限に達する前に、データファイルを手動で追加しないと、容量不足で使えなくなります。使用済み容量を常時監視しておいて、容量不足になりそうになったら人手で追加しないといけないわけです。

これは手間なので、Bigfile を使うことで、たくさんのデータファイルを作る必要がなくなり、運用の手間が軽減します。というわけで、今回の記事では、DBCS に新規で作成したときにデフォルトで作成されるTEMPとUNDO表領域を Bigfile に変更する方法を検証してみます。



# PDB の作成

まず、DBCS で`dbcli create-pdb  `コマンドを使いPDB を新規作成します。`CREATE PLUGGABLE DATABASE` で作成すると、PDB 上で追加の表領域を作成する際に、TDE に関するエラーが発生するため、`dbcli create-pdb ` で作成するのがお勧めです。次のナレッジベースにも書かれているので、必要に合わせて参照してください。
https://support.oracle.com/knowledge/Oracle%20Cloud/2438598_1.html



DBCS に SSH でログインして、root ユーザーへスイッチします

```
[opc@odb19hp ~]$ sudo su -
Last login: Fri Dec  4 14:43:46 UTC 2020
[root@odb19hp ~]#
```



dbcli コマンドを実行する際に、事前に次のディレクトリを作成しないとエラーになる場合がありました。念のため実施するのがいいかもしれません。

```
mkdir -p /var/opt/oracle/log/dbaastools/cfgtoollogs/dbca
chmod 777 /var/opt/oracle/log/
chmod 777 /var/opt/oracle/log/dbaastools/
chmod 777 /var/opt/oracle/log/dbaastools/cfgtoollogs/
chmod 777 /var/opt/oracle/log/dbaastools/cfgtoollogs/dbca/
chmod 777 /var/opt/oracle/log/dbaastools/cfgtoollogs/dbca/
```



`dbcli` をつかって、ID を確認します。

```
[root@odb19hp ~]# dbcli list-databases

ID                                       DB Name    DB Type  DB Version           CDB        Class    Shape    Storage    Status        DbHomeID
---------------------------------------- ---------- -------- -------------------- ---------- -------- -------- ---------- ------------ ----------------------------------------
2ade7d88-d6f1-4006-800c-3306e72bce0a     odb19hp    Si       19.8.0.0.0           true       Oltp              ASM        Configured   dea03a03-5bb3-4fbb-a72b-cfd3282e880c
```



create-pdb で、PDB を新規に作成します。

```
dbcli create-pdb --dbId 2ade7d88-d6f1-4006-800c-3306e72bce0a \
--pdbName pdb02 \
--pdbAdminPassword "your password" \
--tdePassword "your password"
```



実行例です。PDB 作成のジョブが実行されます。この段階では進捗は 0% です。

```
[root@odb19hp ~]# dbcli create-pdb --dbId 2ade7d88-d6f1-4006-800c-3306e72bce0a \
> --pdbName pdb02 \
> --pdbAdminPassword saoibui28fasdjio83 \
> --tdePassword "mIfoO8_fai12#-gai897fao"

Job details
----------------------------------------------------------------
                     ID:  70df3013-de88-426c-9942-fa3c3c428cf5
            Description:  Create Pluggable Database :PDB02 in database:odb19hp
                 Status:  Created
                Created:  December 1, 2020 1:09:44 PM UTC
               Progress:  0%
                Message:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------

```



進捗確認コマンドです。

```
dbcli describe-job -i 70df3013-de88-426c-9942-fa3c3c428cf5
```



98% で処理途中です

```
[root@odb19hp ~]# dbcli describe-job -i 70df3013-de88-426c-9942-fa3c3c428cf5

Job details
----------------------------------------------------------------
                     ID:  70df3013-de88-426c-9942-fa3c3c428cf5
            Description:  Create Pluggable Database :PDB02 in database:odb19hp                 Status:  Running
                Created:  December 1, 2020 1:09:44 PM UTC
               Progress:  98%
                Message:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create pluggable Database:pdb02                                          December 1, 2020 1:09:47 PM UTC     December 1, 2020 1:11:33 PM UTC     Success
Configure init params                                                    December 1, 2020 1:11:33 PM UTC     December 1, 2020 1:11:36 PM UTC     Success

[root@odb19hp ~]#
```



完了

```
[root@odb19hp ~]# dbcli describe-job -i 70df3013-de88-426c-9942-fa3c3c428cf5

Job details
----------------------------------------------------------------
                     ID:  70df3013-de88-426c-9942-fa3c3c428cf5
            Description:  Create Pluggable Database :PDB02 in database:odb19hp
                 Status:  Success
                Created:  December 1, 2020 1:09:44 PM UTC
               Progress:  100%
                Message:

Task Name                                                                Start Time                          End Time                            Status
------------------------------------------------------------------------ ----------------------------------- ----------------------------------- ----------
Create pluggable Database:pdb02                                          December 1, 2020 1:09:47 PM UTC     December 1, 2020 1:11:33 PM UTC     Success
Configure init params                                                    December 1, 2020 1:11:33 PM UTC     December 1, 2020 1:11:36 PM UTC     Success

[root@odb19hp ~]#
```



無事に `PDB02` が作成されて、Read Write の状態になっています

```
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          READ WRITE NO
SQL>
```



# PDB の UNDO と TEMP表領域を BIGFILE に変更する

PDB 作成と同時に、PDB の UNDO表領域と TEMP表領域が作成されています。これを直接 Bigfile に変更は出来ないので、新たな UNDO表領域と TEMP表領域を Bigfile で作成して、そちらに切り替えていきます。



## UNDO表領域

SQL Developer で Undo 領域を新たに作成していきます。

![1606906532599.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/ee45d6e7-071f-a8e4-64d4-6494424a85ff.png)



各種パラメータを入れます。パラメータは既存の表領域の指定をまねています。

![1606899760705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/750a0295-1b44-41ec-1e6d-1c21d634d51f.png)



File Type を Big File にして OK を押します

![1606899813104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/40b0f4f0-e8e8-6397-dfb6-6296def2369f.png)



Bigfile の `UNDOTBS2` が作成されました

![1606900200405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/892e8007-35cf-3c4e-6e9a-9a16fde05e94.png)



ちなみに、SQLで作成する時はこんな感じです

```
CREATE BIGFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE 
'+DATA/ORA19SE_NRT1C4/B5766BC79168C1E7E0532C00000A91FB/DATAFILE/undotbs2' SIZE 36700160
AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M
BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
ENCRYPTION USING 'AES128' ENCRYPT;
```



SQL Plus でPDB02 に接続します

```
alter session set container=PDB02;
```



念のため `UNDOTBS2` が作成されているか確認します

```
SQL> select FILE_NAME, TABLESPACE_NAME from dba_data_files where tablespace_name = 'UNDOTBS2';

FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
+DATA/ORA19SE_NRT1C4/B5766BC79168C1E7E0532C00000A91FB/DATAFILE/undotbs2
UNDOTBS2


SQL>
```



初期化パラメータでは、`UNDOTBS1` を使うことになっているので、これを変更します。

```
SQL> SELECT name, value FROM v$parameter WHERE name = 'undo_tablespace';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
undo_tablespace
UNDOTBS1


SQL>
```



`UNDOTBS2` を使うように変更します

```
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS2' SCOPE = BOTH;
```



## TEMP表領域

次に TEMP表領域です。SQL Developer で Temp 表領域を新たに作成します。

![1606906532599.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/64f61326-a8db-34f9-e201-ba82f88eb6b6.png)



適当にパラメータを指定します

![1606906694788.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/633628cd-1cee-a5b2-50eb-210991d4a68c.png)



BigFile を忘れずに指定します。

![1606907865199.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/deebb9a5-937e-6693-d26e-10d91a9cf656.png)



作成される

![1606907923057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/50508e6d-9bc5-cb27-4f7a-aa94f50d2057.png)



ちなみにSQLで作成する時はこんな感じです

```
CREATE SMALLFILE TEMPORARY TABLESPACE TEMP2 
    TEMPFILE 
        '+DATA/ORA19SE_NRT1C4/B5766BC79168C1E7E0532C00000A91FB/TEMPFILE/TEMP2' SIZE 51380224 AUTOEXTEND ON NEXT 655360 MAXSIZE 34358689792 
    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576;
```



PDB02 に接続

```
alter session set container=PDB02;
```



TEMP表領域を確認します。Bigfile で作成した`TEMP2`が見えます

```
SQL> select tablespace_name, file_name, bytes/1024/1024 as "size(MB)" from dba_temp_files;

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
  size(MB)
----------
TEMP
+DATA/ORA19SE_NRT1C4/B5766BC79168C1E7E0532C00000A91FB/TEMPFILE/temp.273.10580781
61
        49

TEMP2
+DATA/ORA19SE_NRT1C4/B5766BC79168C1E7E0532C00000A91FB/TEMPFILE/temp2

TABLESPACE_NAME
------------------------------
FILE_NAME
--------------------------------------------------------------------------------
  size(MB)
----------
        49


SQL>
```



Database Properties では、デフォルトの一時表領域が TEMP となっている

![1606907557854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/500c9276-5d2b-cf9d-8fde-c57ac2368e88.png)



SQL でも `TEMP` が使われている事を確認します

```
SQL> select property_name, property_value from database_properties where property_name = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_NAME
--------------------------------------------------------------------------------
PROPERTY_VALUE
--------------------------------------------------------------------------------
DEFAULT_TEMP_TABLESPACE
TEMP


SQL>
```



`TEMP2` を参照するように変更します

```
SQL> alter database default temporary tablespace TEMP2;

Database altered.

SQL>
```



## 元々使っていた Table Space を削除

念のためOracle Database のサーバー再起動します

```
sudo shutdown -r now
```



再起動後に、元々使っていた表領域を削除します

```
DROP TABLESPACE "TEMP";
DROP TABLESPACE "UNDOTBS1";
```



これで、Bigfile の表領域に切り替えが出来ました



# 参考URL

https://docs.oracle.com/cd/F19136_01/multi/overview-of-pdb-creation.html#GUID-C95E8613-C556-4818-BE64-B2129AC2F8A2

https://shimi-dai.com/oracle-undo-recreate/

https://shimi-dai.com/oracle-recreate-shrink-temp-tablespace/