DBCAのコマンドライン・パラメータを試す / createAsContainerDatabase

DBCサイレント・モードでのコマンドライン・パラメータについて挙動確認です。
Oracle Database 21cのDBCAサイレント・モードでデータベースの作成にNon-CDB(非CDB)を指定してみます。
使うパラメータは`createAsContainerDatabase`です。

:::note warn
Oracle Database 21cではNon-CDB(非CDB)はサポートされなくなっています。
製品マニュアル（Oracle Multitenant管理者ガイド 21c）には記載がありますが、DBCAのヘルプには出てきません。
:::

Oracle Database 21cのDBCA(GUI)では「Create as Container database」のチェックボックスがチェック付きでグレーアウトされています。
選択項目としては残っていることから、`-createAsContainerDatabase <true | false>`の指定が、サイレント・モードではどのように処理されるか？と確認してみた次第です。 

# 構成
* Oracle Database 21c Enterprise Edition (21.3)
* Oracle Eneterprise Linux 8.2

# 実践
次の二つの動作を確認します。
**Non-CDB指定でデータベース作成を実行する**
　コマンドライン：`-createAsContainerDatabase false`を付けて実行
　想定される動作：何らかのエラーが返される または パラメータが無視され下記デフォルト動作になる 
**CDB指定でデータベース作成を実行する**
　コマンドライン：`-createAsContainerDatabase true`を付けて実行
　想定される動作：下記デフォルト動作に同じ または パラメータの存在に対してエラーまたは警告が返される




使用するDBCAのパスとバージョンを確認します。
```
$ which dbca
/u01/app/oracle/product/21.0.0/dbhome_1/bin/dbca
$

$ dbca -version
Version:"21.3.0.0.0"
Build-Date:Sat Jun 26 23:53:15 PDT 2021
$
```

### Non-CDB指定でデータベース作成を実行する
データベース作成のパラメータに`-createAsContainerDatabase false`を付け加えます。
```
$ dbca -silent -createDatabase -gdbname db21c -templateName General_Purpose.dbc -createAsContainerDatabase false
[FATAL] [DBT-10333] Container database (CDB) creation option is not selected.
   CAUSE: Non-CDB creation is not supported.
   ACTION: Make sure container database (CDB) option is selected.
$
```
「FATAL」で返されました。想定の「何らかのエラーが返される」ほうです。
Non-CDBをサポートしていないので、ちゃんとCDBを作成するオプションを付けるように、と示されています。


### CDB指定でデータベース作成を実行する
コンテナ・データベースを作成するように`-createAsContainerDatabase true`を指定して実行してみます。



:::note info
Oracle Database 21cのDBCAとしてはこれがデフォルト動作と理解できますが、せっかくなので指定してみます。
:::

```
$ dbca -silent -createDatabase -gdbname db21c -templateName General_Purpose.dbc -createAsContainerDatabase true
Enter SYS user password:

Enter SYSTEM user password:

Prepare for db operation
10% complete
Copying database files
・・・ 以下、略・・・
```
先に進みました。
上の例は実行途中の出力ですが`createAsContainerDatabase`パラメータに関するエラーや警告はありません。

DBCA完了後に作成されたファイルを確認すると、ちゃんと`pdbseed`とそのファイルが作られています。
```:作成されたファイル
$ ls -l /u01/app/oracle/oradata/DB21C/*
-rw-r----- 1 oracle oinstall   18726912 Sep 18 21:08 /u01/app/oracle/oradata/DB21C/control01.ctl
-rw-r----- 1 oracle oinstall   18726912 Sep 18 21:08 /u01/app/oracle/oradata/DB21C/control02.ctl
-rw-r----- 1 oracle oinstall  209715712 Sep 18 21:06 /u01/app/oracle/oradata/DB21C/redo01.log
-rw-r----- 1 oracle oinstall  209715712 Sep 18 21:06 /u01/app/oracle/oradata/DB21C/redo02.log
-rw-r----- 1 oracle oinstall  209715712 Sep 18 21:07 /u01/app/oracle/oradata/DB21C/redo03.log
-rw-r----- 1 oracle oinstall  597696512 Sep 18 21:07 /u01/app/oracle/oradata/DB21C/sysaux01.dbf
-rw-r----- 1 oracle oinstall 1394614272 Sep 18 21:06 /u01/app/oracle/oradata/DB21C/system01.dbf
-rw-r----- 1 oracle oinstall  248520704 Sep 18 21:01 /u01/app/oracle/oradata/DB21C/temp01.dbf
-rw-r----- 1 oracle oinstall  125837312 Sep 18 21:07 /u01/app/oracle/oradata/DB21C/undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 Sep 18 21:06 /u01/app/oracle/oradata/DB21C/users01.dbf

/u01/app/oracle/oradata/DB21C/pdbseed:
total 737360
-rw-r----- 1 oracle oinstall 356524032 Sep 18 21:06 sysaux01.dbf
-rw-r----- 1 oracle oinstall 293609472 Sep 18 21:06 system01.dbf
-rw-r----- 1 oracle oinstall  36708352 Sep 18 21:02 temp012022-09-18_20-59-05-081-PM.dbf
-rw-r----- 1 oracle oinstall 104865792 Sep 18 21:06 undotbs01.dbf
$
```

# まとめ
Oracle Database 21cのデータベース作成では、あえて指定する必要のないパラメータですが、DBCAは単純に無視するわけでなく、パラメータを解釈していて次のような動作でした。
* `-createAsContainerDatabase false`を指定した場合は、CDBで作るようメッセージが返されエラー終了する。（＝Non-CDBは作成できない）
* `-createAsContainerDatabase true`を指定した場合は、パラメータの指定通りCDBを作成する。


# 補足情報
* DBCA(GUI)での操作やイメージについては、いろんな方が試された記事があります。それらを参照されるとよいかと思います。