DBCサイレント・モードでのコマンドライン・パラメータについて挙動確認です。
Oracle Database 21cのDBCAサイレント・モードでデータベースの作成にNon-CDB(非CDB)を指定してみます。
使うパラメータはcreateAsContainerDatabase
です。
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
を指定して実行してみます。
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)での操作やイメージについては、いろんな方が試された記事があります。それらを参照されるとよいかと思います。