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の構成
まずは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を使えば楽に作れるが、サブネットがパブリックとプライベートで分かれてしまうので、今回の検証には使わなかった。
DBCSは以下の設定で行った。これだけでDBサーバがインスタンス込みで構築される。概ね30分程度でインスタンスが起動する。
作成された環境を少し細かく確認してみよう。まずメモリであるが、以下のようにHugePagesが設定されており、シェイプの物理メモリ30GBのうち約14.2GB(48.6%)が割り当てられている。
次に気になるのがHugePagesに格納されるSGAサイズである。初期化パラメータを確認するとSGAは以下の通り13.5GBとなっている。想定通りHugePagesにSGAを格納する設定になっている(use_large_pagesがonly)。ASMM(自動共有メモリ管理)となっているのは好感が持てる。
一方、ASMインスタンスの方は1GB程度であるが、HugePagesを使わない設定になっている。ということはHugePagesに少し余裕があるので、DBのSGAは若干上げる余地がある。
次にネットワークの構成を確認してみよう。リスナーの状態についてgridでlsnrctlで確認したところ、以下の通り1521でDBとASMがサービス登録されているのがわかる。
次にストレージの構成を確認してみよう。DBCSの構成でASMを選択したので、asmcmd lsdgで確認する。+DATA 256GB、+REDO 256GBで切られている。冗長度はExternalなので、ASMレイヤでの冗長化はなく、ブロックストレージ任せである。
物理的にこのディスクグループはどのように構成されているのか確認してみよう。v$asm_diskで物理デバイスを確認すると、以下の通りそれぞれのディスクグループは64GBのデバイスを4つ束ねて作成されていることがわかる。ここからDBCSのストレージサイズは64GBが最小単位であることが想像できる。
実際にデバイスを確認すると、実体は/dev/sdb~/dev/sdiにマッピングされている。この先は確認していないが、おそらくiSCSIのブロックストレージになっているのだろう。
ついでにローカルディスクについても確認しておこう。dfで確認すると、/が45GB、/u01が197GB割り当てられている。/opt/oracle/dcs/commonstoreに5GBあるのは何なのだろうか。
/opt/oracle/dcs/commonstoreを確認するとTDEのwalletsを格納するためのもののようである。
クラスタの状態は以下の通り。先ほどの/opt/oracle/dcs/commonstoreがACFSが構成されている。RAC構成の場合にwalletsをサーバ間で共有するためなのかもしれない。
まず初期化パラメータでデフォルトからDBCSで変更されているパラメータを確認する。
今回は上記★のパラメータを変更し、インスタンスを再起動する。あわせて、環境変数にNLS_LANG=Japanese_Japan.AL32UTF8を入れておく(.bash_profileに追記)。
次にPDBと検証用データを入れるためUSERS表領域を作成する。PDB作成は画面からもできるが、普通にsshで接続してコマンドで作成してみよう。
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に記載されている。実際に見てみよう。
このディレクトリの中を見てみよう。ewallet.p12がキーストアである。
キーストアに何が入っているかはv$encryption_keysで確認できる。CON_IDが4となっているのが先ほど作成したPDBであるが、キーが登録されていないことがわかる。
v$encryption_walletの状態(STATUS)を見ると、OPEN_NO_MASTER_KEY状態と、確かにキーがない状態であることがわかる。
エラーの原因が分かったので、以下の通り、このPDBに対し、ADMINISTER KEY MANAGEMENT SET KEYでマスター鍵を作成する。
マスター鍵が登録されたら、表領域作成をする。今度は問題なく作成できた。表領域の暗号化の状態を確認すると、ユーザの作成した表領域は暗号化されているが、SYSTEMやSYSAUXは暗号化されていない。これはDBCSの仕様らしい。いずれにしても業務データは入らないため特に問題はない。
逆にDBCSで表領域を暗号化せずに作成することができるのだろうか。初期化パラメータENCRYPT_NEW_TABLESPACESは、新規表領域を作成する際の暗号化の挙動を制御するパラメータで
DBCSではALWAYSに指定してある。この他のオプションとして、表領域作成時に明示的に暗号化指定した際だけにするDDLというオプションを指定することができる。試しにやってみよう。
上記のようにOracleクラウドでは表領域作成時に暗号化でないと作成できないようになっているようだ。セキュリティを考えると、妥当なデザインだろう。
今回はここまでとして、次回はOCIでSQL Serverを立ててみる部分について記載したい。
以上
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を立ててみる部分について記載したい。
以上
2021-10-01 21:15