OCIの異機種DBLINK検証環境構築メモ ~その1 [OCI]

先日の異機種DBのDBLINK性能検証を行ったOCI上の検証環境の構築方法について簡単にメモしておく。大まかに以下が構築手順の全体像であるが、今回は1~3のDBCSでDBを作成する部分について、OCIで構築した際に発生した問題や気を付けるべき点を記す。アカウント作成してから30日以内に完了させないと、DBCSなどのalways free外のものは削除されるので、ある程度割り切って環境構築を進める。

 1.VCNの設定
 2.DBCSの構築
 3.DB設定(初期化パラメータ設定、PDB構築)
 4.SQL Serverの構築
 5.LinkedServerの構成
 5.DB2の構築
 6.Federationの構成
 7.OracleGWの構築
 8.SQL ServerへのDBLINKの構成
 9.DB2へのDBLINKの構成

1.VCNの設定


まずはVCNを作成する。今回は単純にDBサーバ3台だけなので、VCNのCiderは192.168.0.0/24で構築。サブネットも1つ。インターネットGWを作成し、インターネットへのルーティングを追加(0.0.0.0はIGWへ向ける)。サービスGWを作成し、ストレージサービスへのルーティングを追加。セキュリティリストのIngressに1521(OracleNet)と3389(RDP)を通しておく。このあたりはVCN Wizardを使えば楽に作れるが、サブネットがパブリックとプライベートで分かれてしまうので、今回の検証には使わなかった。

2.DBCSの構築


DBCSは以下の設定で行った。これだけでDBサーバがインスタンス込みで構築される。概ね30分程度でインスタンスが起動する。
・select a compartment: デフォルト
・name your DB system: DBSYSTEM
・select an availability domain: デフォルト(AD-1)
・select a shape type: virtual machine
・select a shape:VM.Standard2.2(デフォルトのVM.Standard2.4ではエラーとなる)
・Total node count:1
・Oracle database software edition: Enterprise Edition High Performance
・Choose storage management software: Oracle Grid Infrastructure
・available storage (GB): 256 (Total storage: 712 GB)
・Virtual cloud network in xxx(root): <1で作成したVCN>
・Client subnet: <1で作成したサブネット>
・Hostname prefix: <サーバのホスト名>
・Private IP address: 192.168.0.X
・Advanced Options/ Time zone: Asia/Tokyo (デフォルトだとUTCになるので注意)
・Database name: デフォルト(DB0908)
・Database unique name suffix: デフォルト
・Database image: Oracle Database 19c ※21cも選択できる
・PDB name: デフォルト(空欄) ※空欄としてもPDBは1つ作成される
・Username: デフォルト(sys)
・Password/Confirm password: ************
・Use the administrator password for the TDE wallet: デフォルト(チェック入り)
・Select workload type: Transaction Processing
・Configure database backups: チェックなし
・Advanced Options/ Character set: AL32UTF8/ National character set: AL16UTF16

作成された環境を少し細かく確認してみよう。まずメモリであるが、以下のようにHugePagesが設定されており、シェイプの物理メモリ30GBのうち約14.2GB(48.6%)が割り当てられている。
SQL> !cat /proc/meminfo
MemTotal:       30613012 kB
MemFree:         1981096 kB
MemAvailable:    8353072 kB
Buffers:          377268 kB
Cached:          8357844 kB
・・・
HugePages_Total:    7258
HugePages_Free:      354
HugePages_Rsvd:       10
HugePages_Surp:        0
Hugepagesize:       2048 kB

次に気になるのがHugePagesに格納されるSGAサイズである。初期化パラメータを確認するとSGAは以下の通り13.5GBとなっている。想定通りHugePagesにSGAを格納する設定になっている(use_large_pagesがonly)。ASMM(自動共有メモリ管理)となっているのは好感が持てる。
SQL> show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     TRUE
sga_max_size                         big integer 13824M★
sga_min_size                         big integer 0
sga_target                           big integer 13824M
unified_audit_sga_queue_size         integer     1048576
SQL>
SQL> show parameter large

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
large_pool_size                      big integer 0
use_large_pages                      string      only
SQL>

一方、ASMインスタンスの方は1GB程度であるが、HugePagesを使わない設定になっている。ということはHugePagesに少し余裕があるので、DBのSGAは若干上げる余地がある。
SQL> sho parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga            boolean     FALSE
lock_sga                             boolean     FALSE
sga_max_size                         big integer 1088M
sga_target                           big integer 0
unified_audit_sga_queue_size         integer     1048576
SQL> show parameter large

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
large_pool_size                      big integer 12M
use_large_pages                      string      FALSE
SQL>

次にネットワークの構成を確認してみよう。リスナーの状態についてgridでlsnrctlで確認したところ、以下の通り1521でDBとASMがサービス登録されているのがわかる。
[grid@hostname ~]$ lsnrctl status LISTENER

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 11-SEP-2021 09:33:55

Copyright (c) 1991, 2021, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                08-SEP-2021 15:59:42
Uptime                    2 days 17 hr. 34 min. 12 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.0.0.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/hostname/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.2)(PORT=1521)))
Services Summary...
Service "+APX" has 1 instance(s).
  Instance "+APX1", status READY, has 1 handler(s) for this service...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_RECO" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "DB0908XDB.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 1 handler(s) for this service...
Service "DB0908_nrt17b.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 2 handler(s) for this service...
Service "cb77b668abf93826e0530200a8c0599a.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 2 handler(s) for this service...
Service "cb8d1deee83a3d93e0530200a8c070de.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 2 handler(s) for this service...
Service "db0908_pdb1.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 2 handler(s) for this service...
Service "k3.subnet.vcn.oraclevcn.com" has 1 instance(s).
  Instance "DB0908", status READY, has 2 handler(s) for this service...
The command completed successfully
[grid@hostname ~]$

次にストレージの構成を確認してみよう。DBCSの構成でASMを選択したので、asmcmd lsdgで確認する。+DATA 256GB、+REDO 256GBで切られている。冗長度はExternalなので、ASMレイヤでの冗長化はなく、ブロックストレージ任せである。
[grid@hostname ~]$ asmcmd
ASMCMD> lsdg
State    Type    Rebal  Sector  Logical_Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512             512   4096  4194304    262144   247300                0          247300              0             Y  DATA/
MOUNTED  EXTERN  N         512             512   4096  4194304    262144   257480                0          257480              0             N  RECO/
ASMCMD>

物理的にこのディスクグループはどのように構成されているのか確認してみよう。v$asm_diskで物理デバイスを確認すると、以下の通りそれぞれのディスクグループは64GBのデバイスを4つ束ねて作成されていることがわかる。ここからDBCSのストレージサイズは64GBが最小単位であることが想像できる。
SQL> r
  1* select path,total_mb from v$asm_disk order by 1

PATH                             TOTAL_MB
------------------------------ ----------
/dev/DATADISK1                      65536
/dev/DATADISK2                      65536
/dev/DATADISK3                      65536
/dev/DATADISK4                      65536
/dev/RECODISK1                      65536
/dev/RECODISK2                      65536
/dev/RECODISK3                      65536
/dev/RECODISK4                      65536

8 rows selected.
SQL>

実際にデバイスを確認すると、実体は/dev/sdb~/dev/sdiにマッピングされている。この先は確認していないが、おそらくiSCSIのブロックストレージになっているのだろう。
[grid@hostname ~]$ ll /dev/DATA*
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/DATADISK1 -> sdb
lrwxrwxrwx 1 root root 3 Sep 29 06:50 /dev/DATADISK2 -> sdc
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/DATADISK3 -> sdd
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/DATADISK4 -> sde
[grid@hostname ~]$ ll /dev/RECO*
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/RECODISK1 -> sdf
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/RECODISK2 -> sdg
lrwxrwxrwx 1 root root 3 Sep 29 06:50 /dev/RECODISK3 -> sdh
lrwxrwxrwx 1 root root 3 Sep 29 06:47 /dev/RECODISK4 -> sdi
[grid@hostname ~]$

ついでにローカルディスクについても確認しておこう。dfで確認すると、/が45GB、/u01が197GB割り当てられている。/opt/oracle/dcs/commonstoreに5GBあるのは何なのだろうか。
[oracle@hostname ~]$ df -h
Filesystem                           Size  Used Avail Use% Mounted on
devtmpfs                              15G     0   15G   0% /dev
tmpfs                                 15G  1.1G   14G   8% /dev/shm
tmpfs                                 15G  297M   15G   2% /run
tmpfs                                 15G     0   15G   0% /sys/fs/cgroup
/dev/mapper/VolGroupSys0-LogVolRoot   45G  9.8G   33G  24% / ★
/dev/sda2                            1.4G   99M  1.2G   8% /boot
/dev/sda1                            486M  7.5M  478M   2% /boot/efi
/dev/sdj                             197G   27G  160G  15% /u01 ★
tmpfs                                3.0G     0  3.0G   0% /run/user/102
/dev/asm/commonstore-405             5.0G  352M  4.7G   7% /opt/oracle/dcs/commonstore ★
tmpfs                                3.0G     0  3.0G   0% /run/user/54322
[oracle@hostname ~]$

/opt/oracle/dcs/commonstoreを確認するとTDEのwalletsを格納するためのもののようである。
[oracle@hostname ~]$ ls /opt/oracle/dcs/commonstore
lost+found  oss  wallets
[oracle@hostname ~]$

クラスタの状態は以下の通り。先ほどの/opt/oracle/dcs/commonstoreがACFSが構成されている。RAC構成の場合にwalletsをサーバ間で共有するためなのかもしれない。
[grid@hostname ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.COMMONSTORE.advm
               ONLINE  ONLINE       hostname                 STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       hostname                 STABLE
ora.chad
               ONLINE  ONLINE       hostname                 STABLE
ora.data.commonstore.acfs
               ONLINE  ONLINE       hostname                 mounted on /opt/orac
                                                             le/dcs/commonstore,S★
                                                             TABLE
ora.net1.network
               ONLINE  ONLINE       hostname                 STABLE
ora.ons
               ONLINE  ONLINE       hostname                 STABLE
ora.proxy_advm
               ONLINE  ONLINE       hostname                 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       hostname                 STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hostname                 STABLE
ora.LISTENER_SCAN1.lsnr
      1        OFFLINE OFFLINE                               STABLE
ora.RECO.dg(ora.asmgroup)
      1        ONLINE  ONLINE       hostname                 STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       hostname                 Started,STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       hostname                 STABLE
ora.cvu
      1        ONLINE  ONLINE       hostname                 STABLE
ora.db0908_nrt17b.db
      1        ONLINE  ONLINE       hostname                 Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
ora.hostname.vip
      1        ONLINE  ONLINE       hostname                 STABLE
ora.qosmserver
      1        ONLINE  ONLINE       hostname                 STABLE
ora.scan1.vip
      1        OFFLINE OFFLINE                               STABLE
--------------------------------------------------------------------------------

3.DB設定(初期化パラメータ設定、PDB構築)


まず初期化パラメータでデフォルトからDBCSで変更されているパラメータを確認する。
SQL> create pfile='/tmp/pfile.ora' from spfile
SQL> !cat /tmp/pfile.ora
DB0908.__data_transfer_cache_size=0
DB0908.__db_cache_size=12314476544
DB0908.__inmemory_ext_roarea=0
DB0908.__inmemory_ext_rwarea=0
DB0908.__java_pool_size=67108864
DB0908.__large_pool_size=67108864
DB0908.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
DB0908.__pga_aggregate_target=3623878656
DB0908.__sga_target=14495514624
DB0908.__shared_io_pool_size=134217728
DB0908.__shared_pool_size=1879048192
DB0908.__streams_pool_size=0
DB0908.__unified_pga_pool_size=0
*._datafile_write_errors_crash_instance=false
*._db_writer_coalesce_area_size=16777216
*._disable_interface_checking=TRUE
*._enable_numa_support=FALSE
*._file_size_increase_increment=2143289344
*._fix_control='18960760:on'
*._gc_policy_time=20
*._gc_undo_affinity=TRUE
*.audit_file_dest='/u01/app/oracle/admin/DB0908_nrt17b/adump'
*.audit_sys_operations=TRUE
*.audit_trail='db'
*.compatible='19.0.0.0'
*.control_file_record_keep_time=15
*.control_files='+RECO/DB0908_NRT17B/CONTROLFILE/current.256.1082736593'
*.control_management_pack_access='DIAGNOSTIC+TUNING'
*.cpu_count=0
*.cursor_sharing='EXACT'
*.db_block_checking='FULL'
*.db_block_checksum='FULL'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_create_online_log_dest_1='+RECO'
*.db_domain='subnet.vcn.oraclevcn.com'
*.db_files=1024
*.db_lost_write_protect='TYPICAL'
*.db_name='DB0908'
*.db_recovery_file_dest='+RECO'
*.db_recovery_file_dest_size=255g
*.db_unique_name='DB0908_nrt17b'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=DB0908XDB)'
*.enable_ddl_logging=TRUE
*.enable_pluggable_database=true
*.encrypt_new_tablespaces='ALWAYS'
*.fast_start_mttr_target=300
*.filesystemio_options='setall'
*.global_names=TRUE ★
*.local_listener='LISTENER_DB0908'
*.log_archive_format='%t_%s_%r.dbf'
*.log_buffer=16777216
*.nls_language='AMERICAN' ★
*.nls_territory='AMERICA' ★
*.open_cursors=1000
*.os_authent_prefix='ops$'
*.parallel_execution_message_size=16384
*.parallel_threads_per_cpu=2
*.pga_aggregate_limit=6912m
*.pga_aggregate_target=3456m
*.processes=400
*.remote_login_passwordfile='EXCLUSIVE'
*.session_cached_cursors=100
*.sga_target=13824m
*.spatial_vector_acceleration=TRUE
*.sql92_security=TRUE
*.undo_retention=900
*.undo_tablespace='UNDOTBS1'
*.use_large_pages='only'

今回は上記★のパラメータを変更し、インスタンスを再起動する。あわせて、環境変数にNLS_LANG=Japanese_Japan.AL32UTF8を入れておく(.bash_profileに追記)。
alter system set global_names=FALSE scope=BOTH;
alter system set nls_language='JAPANESE' scope=SPFILE;
alter system set nls_territory='JAPAN' scope=SPFILE;

次にPDBと検証用データを入れるためUSERS表領域を作成する。PDB作成は画面からもできるが、普通にsshで接続してコマンドで作成してみよう。
conn / as sysdba
CREATE PLUGGABLE DATABASE K3 ADMIN USER pdbadmin IDENTIFIED BY oracle;
alter pluggable database K3 open;
alter session set container=K3;
CREATE TABLESPACE "USERS" DATAFILE
SIZE 5242880
AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT
NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE "USERS" DATAFILE

ORA-28361: マスター鍵が設定されていません

SQL> !oerr ora 28361
28361, 0000, "master key not yet set"
// *Cause:  The master key for the instance was not set.
// *Action: Execute the ALTER SYSTEM SET KEY command to set a master key
//          for the database instance.

PDB作成は問題なかったが、その後の表領域の作成でORA-28361が出た。調べて見ると、以下MOSの情報が見つかった。TDEなのでPDBのマスターキーを作成しなければならないらしい。
 Creating and Activating a Master Encryption Key for a PDB (in OCI and OCI-Classic) (ドキュメントID 2469398.1)

PDBのマスター鍵のウォレットの場所はsqlnet.oraのENCRYPTION_WALLET_LOCATIONに記載されている。実際に見てみよう。
[oracle@hostname ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME))) ★

SQLNET.ENCRYPTION_SERVER=REQUIRED
SQLNET.CRYPTO_CHECKSUM_SERVER=REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER=(AES256,AES192,AES128)
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER=(SHA1)
SQLNET.ENCRYPTION_CLIENT=REQUIRED
SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUIRED
SQLNET.ENCRYPTION_TYPES_CLIENT=(AES256,AES192,AES128)
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1)

このディレクトリの中を見てみよう。ewallet.p12がキーストアである。
[oracle@hostname ~]$ ll /opt/oracle/dcs/commonstore/wallets/tde/$ORACLE_UNQNAME
total 28
-rw------- 1 oracle asmadmin 5864 Sep  8 16:23 cwallet.sso
-rw------- 1 oracle asmadmin 5819 Sep  8 16:23 ewallet.p12 ★キーストア
-rw------- 1 oracle asmadmin 2555 Sep  8 16:23 ewallet_2021090807235219_defaultTag.p12

キーストアに何が入っているかはv$encryption_keysで確認できる。CON_IDが4となっているのが先ほど作成したPDBであるが、キーが登録されていないことがわかる。
SQL> sho pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DB0908_PDB1                    READ WRITE NO
         4 K3                             READ WRITE NO
SQL> col key_id for a80
SQL> SELECT con_id, key_id FROM v$encryption_keys;

    CON_ID KEY_ID
---------- --------------------------------------------------------------------------------
         3 AXJnaod6Mk9Gv141a+DUiTUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
         1 Af4aIwQwmk/+vxsp/kS7yd4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA

v$encryption_walletの状態(STATUS)を見ると、OPEN_NO_MASTER_KEY状態と、確かにキーがない状態であることがわかる。

SQL> SELECT * FROM v$encryption_wallet

WRL_TYPE   WRL_PARAMETER                                                STATUS               WALLET_TYPE  WALLET_ORD KEYSTORE_MODE  FULLY_BACK     CON_ID
---------- ------------------------------------------------------------ -------------------- ------------ ---------- -------------- ---------- ----------
FILE       /opt/oracle/dcs/commonstore/wallets/tde/DB0908_nrt17b/       OPEN                 AUTOLOGIN    SINGLE     NONE           NO                  1
FILE                                                                    OPEN                 AUTOLOGIN    SINGLE     UNITED         NO                  2
FILE                                                                    OPEN                 AUTOLOGIN    SINGLE     UNITED         NO                  3
FILE                                                                    OPEN_NO_MASTER_KEY★   AUTOLOGIN    SINGLE     UNITED         UNDEFINED           4
SQL> alter session set container=k3;

エラーの原因が分かったので、以下の通り、このPDBに対し、ADMINISTER KEY MANAGEMENT SET KEYでマスター鍵を作成する。
SQL> alter session set container=;
SQL> ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'YYYYMMDD' FORCE KEYSTORE IDENTIFIED BY "************" WITH BACKUP USING 'masterkey-';
キーストアが変更されました。

SQL> !ls -l /opt/oracle/dcs/commonstore/wallets/tde/xxx_yyy
total 36
-rw------- 1 oracle asmadmin 7528 Sep 10 09:19 cwallet.sso
-rw------- 1 oracle asmadmin 7483 Sep 10 09:19 ewallet.p12
-rw------- 1 oracle asmadmin 2555 Sep  8 16:23 ewallet_2021090807235219_defaultTag.p12
-rw------- 1 oracle asmadmin 5819 Sep 10 09:19 ewallet_2021091000195784_masterkey-k3.p12

SQL> SELECT con_id, key_id FROM v$encryption_keys;

    CON_ID KEY_ID
---------- --------------------------------------------------------------------------------
         4 AWF5Pvc+H0/Ov+U30kxnD7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA★

SQL> SELECT * FROM v$encryption_wallet;

WRL_TYPE   WRL_PARAMETER                                                STATUS               WALLET_TYPE  WALLET_ORD KEYSTORE_MODE  FULLY_BACK     CON_ID
---------- ------------------------------------------------------------ -------------------- ------------ ---------- -------------- ---------- ----------
FILE                                                                    OPEN★               AUTOLOGIN    SINGLE     UNITED         NO                  4

マスター鍵が登録されたら、表領域作成をする。今度は問題なく作成できた。表領域の暗号化の状態を確認すると、ユーザの作成した表領域は暗号化されているが、SYSTEMやSYSAUXは暗号化されていない。これはDBCSの仕様らしい。いずれにしても業務データは入らないため特に問題はない。
SQL> CREATE TABLESPACE "USERS" DATAFILE 
  2    SIZE 5242880
  3    AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M
  4    LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  5    EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT 
  6   NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;

表領域が作成されました。

SQL> select tablespace_name,ENCRYPTED from dba_tablespaces

TABLESPACE ENCRYPTED
---------- ---------
SYSTEM     NO
SYSAUX     NO
UNDOTBS1   NO
TEMP       NO
USERS      YES

逆にDBCSで表領域を暗号化せずに作成することができるのだろうか。初期化パラメータENCRYPT_NEW_TABLESPACESは、新規表領域を作成する際の暗号化の挙動を制御するパラメータで
DBCSではALWAYSに指定してある。この他のオプションとして、表領域作成時に明示的に暗号化指定した際だけにするDDLというオプションを指定することができる。試しにやってみよう。
SQL> show parameter ENCRYPT_NEW_TABLESPACES 

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
encrypt_new_tablespaces              string                            ALWAYS
SQL> 

SQL> ALTER SYSTEM set encrypt_new_tablespaces=DDL scope=MEMORY;

システムが変更されました。

SQL> show parameter ENCRYPT_NEW_TABLESPACES

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
encrypt_new_tablespaces              string                            DDL
SQL> 
SQL> 
SQL> 
SQL> CREATE TABLESPACE "USERS2" DATAFILE 
  2    SIZE 5242880
  3    AUTOEXTEND ON NEXT 1310720 MAXSIZE 32767M
  4    LOGGING ONLINE PERMANENT BLOCKSIZE 8192
  5    EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT 
  6   NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;
CREATE TABLESPACE "USERS2" DATAFILE
*
行1でエラーが発生しました。:
ORA-28427: 暗号化されていない表領域を作成、インポートまたはリストアできません: Oracle Cloud内のUSERS2

SQL> !oerr ora 28427
28427, 00000, "cannot create, import or restore unencrypted tablespace: %s in Oracle Cloud"
// *Cause:  The specified tablespaces were not encrypted, or were not allowed
//          to be decrypted. Oracle Cloud mandates that all tablespaces must
//          be encrypted.
// *Action: Create, import or restore an encrypted tablespace, or encrypt the
//          specified tablespace, or do not decrypt the specified tablespace.

上記のようにOracleクラウドでは表領域作成時に暗号化でないと作成できないようになっているようだ。セキュリティを考えると、妥当なデザインだろう。

今回はここまでとして、次回はOCIでSQL Serverを立ててみる部分について記載したい。

以上