この記事は JPOUG Advent Calendar 2021 の4日目です。
3日目は s4r_agent さんの記事『ADWにgoogle colaboratoryから接続する - KNOPP’s blog』でした。
はじめに
今年8月に Oracle Database の最新版 21c のオンプレミス版(Linux)がリリースされ、9月には商用でも無償利用可能な Express Edition(XE) も提供されました。
- Oracle Database 21cのご紹介
- Oracle Database 21c XE now generally available
- Release Schedule of Current Database Releases (Doc ID 742060.1)
- Read-only Oracle Home
- Japanese Imperial Calendar
- Attention Log
- Oracle Data Pump Checksum Support
- Oracle Data Pump Includes and Excludes in the Same Operation
- SQL*Plus (SET JSONPRINT)
環境
Oracle Database はリリースを重ねるたびにインストール方法が簡素化されてきて、21c では読み取り専用のOracleホームがデフォルトとなり、zipファイルを展開して runInstaller を実行するだけですが、XE の yum コマンドによるインストールはやはり楽です。
# yum -y localinstall https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm # /etc/init.d/oracle-xe-21c configureOracle Linux 7.9 環境に 21c XE 、比較用として別の Oracle Linux 7.9 環境にひとつ前のバージョン 18c XE をインストールし、18c の PDB に対して 21c の PDB からは
xe18 という接続記述子でアクセスできるように構成しています。
Read-only Oracle Home
$ORACLE_HOME は読み取り専用となり、設定ファイルなどは $ORACLE_BASE_HOME 以下に配置されます。
$ $ORACLE_HOME/bin/orabaseconfig /opt/oracle $ $ORACLE_HOME/bin/orabasehome /opt/oracle/homes/OraDBHome21cXE $ ls -1 $($ORACLE_HOME/bin/orabasehome) admin assistants cfgtoollogs dbs drdaas hs install log mgw network rdbms sqlpatch18c XEは読み取り専用Oracleホームではない従来型ですのでどちらのパスも同じですね。
$ $ORACLE_HOME/bin/orabaseconfig /opt/oracle/product/18c/dbhomeXE $ $ORACLE_HOME/bin/orabasehome /opt/oracle/product/18c/dbhomeXE
Japanese Imperial Calendar
新元号の令和がサポートされています。和暦の使用頻度は少なくなりつつありますが大事な対応ですね。
$ sqlplus -S system/oracle@localhost/xepdb1 <<SQL > SELECT TO_CHAR(sysdate, 'EEYY"年"MM"月"DD"日"', 'nls_calendar=''Japanese Imperial''') AS XE21 FROM dual; > SELECT TO_CHAR(sysdate, 'EEYY"年"MM"月"DD"日"', 'nls_calendar=''Japanese Imperial''') AS XE18 FROM dual@xe18; > SQL XE21 --------------------- 令和03年12月04日 XE18 --------------------- 平成33年12月04日
Attention Log
Oracle Database のログといえばアラートログがまっさきに浮かびますが、障害情報以外にログスイッチなど通常運用に関わるログも出力されるためログ監視する際にはフィルタリングが必要です。診断機能の強化として、クリティカルなイベントだけが出力される注意ログが新たに増えたようです。
$ head $ORACLE_BASE/diag/rdbms/xe/XE/trace/attention_XE.log
{
"NOTIFICATION" : "Starting ORACLE instance (normal) (OS id: 7472)",
"URGENCY" : "INFO",
"INFO" : "Additional Information Not Available",
"CAUSE" : "A command to startup the instance was executed",
"ACTION" : "Check alert log for progress and completion of command",
"CLASS" : "CDB Instance / CDB ADMINISTRATOR / AL-1000",
"TIME" : "2021-12-03T15:29:13.981+00:00"
}
Oracle Data Pump Checksum Support
大きなエクスポートファイルを遠隔地に送る場合、ファイルが破損していないか別途コマンドでファイルのチェックサムを取得して検証していましたが、Data Pump ユーティリティだけで可能となったみたいです。
チェックサムなしのダンプファイルと、$ expdp system/oracle@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table.dmp Export: Release 21.0.0.0.0 - Production on Sat Dec 4 05:04:15 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table.dmp Processing object type SCHEMA_EXPORT/TABLE/TABLE Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Dec 4 05:04:36 2021 elapsed 0 00:00:19チェックサムありのダンプファイルを
$ expdp system/oracle@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table_checksum.dmp checksum=yes Export: Release 21.0.0.0.0 - Production on Sat Dec 4 05:05:03 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table_checksum.dmp checksum=yes Processing object type SCHEMA_EXPORT/TABLE/TABLE Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded Generating checksums for dump file set ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table_checksum.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Dec 4 05:05:24 2021 elapsed 0 00:00:19雑に diff してみるとファイル冒頭にチェックサムが追加されており、デフォルトのアルゴリズムは SHA256 であることが伺えます。(マニュアルに書いてある)
- CHECKSUM_ALGORITHM - Oracle Data Pumpエクスポート
(マニュアルの項目はCHECKSUM_ALGORITMと綴り間違ってますね)
$ diff -u <(strings xe21_hr_table.dmp) <(strings xe21_hr_table_checksum.dmp) | grep -v STRMTABLE
--- /dev/fd/63 2021-12-04 05:08:18.674075337 +0900
+++ /dev/fd/62 2021-12-04 05:08:18.675075355 +0900
@@ -4,9 +4,14 @@
AL32UTF8
21.00.00.00.00
001:001:000001:000001
+w;T:-s
+w?8el^
+YKArd
+8*]:
+V)5Q
i<?xml version="1.0"?><ROWSET><ROW>
-KUPC$C_1_20211204050416_0
+KUPC$C_1_20211204050504_0
21.3.0.0.0
ol7xe21:XE
SCHEMA
@@ -14,10 +19,9 @@
SYS_EXPORT_SCHEMA_01
EXPORT
Linux x86 64-bit
- U"$[
21.0.0.0.0
EXECUTING
-KUPC$S_1_20211204050416_0
+KUPC$S_1_20211204050504_0
+00:00
SYSTEM
XEPDB1
@@ -35,20 +39,23 @@
export.log
COMMAND_LINE_CLIENT
CLIENT_COMMAND
-[system/********@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table.dmp
+qsystem/********@localhost/xepdb1 schemas=hr include=TABLE/TABLE dumpfile=xe21_hr_table_checksum.dmp checksum=yes
SCHEMA_LIST
'HR'
SCHEMA_EXPR
IN ('HR')
-N/opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table.dmp
+W/opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table_checksum.dmp
DATA_PUMP_DIR
-xe21_hr_table.dmp
+xe21_hr_table_checksum.dmp
INCLUDE_PATH_LIST
'TABLE/TABLE'
INCLUDE_PATH_EXPR
IN ('TABLE/TABLE')
+CHECKSUM
ESTIMATE
BLOCKS
+CHECKSUM_ALGORITHM
+SHA256
COMPRESSION
METADATA_ONLY
COMPRESSION_ALGORITHM
@@ -2633,7 +2640,7 @@
SCHEMA_EXPORT
SYSTEM
DW00
-# EXECUTING
+ EXECUTING
ol7xe21
UNLOAD DATA
TABLE
試しにエクスポートファイルを破損させて、
$ dd if=/dev/urandom of=xe21_hr_table_checksum.dmp bs=1024 seek=$((RANDOM%10)) count=1 conv=notruncそれをインポートしてみると、書き換えたのは1ブロック程度だからかエラーは出ませんでした。
$ impdp system/oracle@localhost/xepdb1 remap_schema=hr:hr2 dumpfile=xe21_hr_table_checksum.dmp Import: Release 21.0.0.0.0 - Production on Sat Dec 4 05:30:31 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Warning: dump file checksum verification is disabled Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/********@localhost/xepdb1 remap_schema=hr:hr2 dumpfile=xe21_hr_table_checksum.dmp Processing object type SCHEMA_EXPORT/TABLE/TABLE Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at Sat Dec 4 05:30:36 2021 elapsed 0 00:00:03ダンプファイルのチェックサムを検証するには
VERIFY_CHECKSUM=YES を指定する必要があるようです。
$ impdp system/oracle@localhost/xepdb1 remap_schema=hr:hr2 dumpfile=xe21_hr_table_checksum.dmp verify_checksum=yes Import: Release 21.0.0.0.0 - Production on Sat Dec 4 05:32:10 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production ORA-39002: invalid operation ORA-39412: file checksum error in dump file "/opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table_checksum.dmp"
VERIFY_CHECKSUM と排他的なパラメータ VERIFY_ONLY=YES を指定するとダンプファイルの検証のみを行うようです。
$ impdp system/oracle@localhost/xepdb1 remap_schema=hr:hr2 dumpfile=xe21_hr_table_checksum.dmp verify_only=yes Import: Release 21.0.0.0.0 - Production on Sat Dec 4 05:39:53 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Verifying dump file checksums Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded dump file set is complete ORA-39412: file checksum error in dump file "/opt/oracle/admin/XE/dpdump/D240A6CAB1D22558E0555054006AC8C7/xe21_hr_table_checksum.dmp" dump file set is inconsistent Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Sat Dec 4 05:39:56 2021 elapsed 0 00:00:02
Oracle Data Pump Includes and Excludes in the Same Operation
Data Pump で対象とするオブジェクトをフィルタリングする場合、INCLUDE と EXCLUDE は排他的なパラメータでした。
$ expdp system/oracle@localhost/xepdb1 schemas=hr include=TABLE exclude=TABLE/INDEX dumpfile=xe18_hr_table.dmp Export: Release 18.0.0.0.0 - Production on Sat Dec 4 05:58:19 2021 Version 18.4.0.0.0 Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production UDE-00011: parameter include is incompatible with parameter exclude21c ではそれらを同時に指定できるようになったようです。 フィルタリングの動作はクライアント側で行われるようなので接続先のリリースは 21c である必要はないみたいです。
$ expdp system/oracle@xe18 schemas=hr include=TABLE exclude=TABLE/INDEX dumpfile=xe21_hr_table.dmp Export: Release 21.0.0.0.0 - Production on Sat Dec 4 06:04:27 2021 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/********@xe18 schemas=hr include=TABLE exclude=TABLE/INDEX dumpfile=xe21_hr_table.dmp Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/TABLE Processing object type SCHEMA_EXPORT/TABLE/COMMENT Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Processing object type SCHEMA_EXPORT/TABLE/TRIGGER . . exported "HR"."EMPLOYEES" 17.08 KB 107 rows . . exported "HR"."LOCATIONS" 8.437 KB 23 rows . . exported "HR"."JOB_HISTORY" 7.195 KB 10 rows . . exported "HR"."JOBS" 7.109 KB 19 rows . . exported "HR"."DEPARTMENTS" 7.125 KB 27 rows . . exported "HR"."COUNTRIES" 6.367 KB 25 rows . . exported "HR"."REGIONS" 5.546 KB 4 rows Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is: /opt/oracle/admin/XE/dpdump/D23FFD4646A72468E0555054001EA5C2/xe21_hr_table.dmp Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Dec 4 06:04:47 2021 elapsed 0 00:00:19ということは Instant Client 21.4.0.0.0 の Tools Package に含まれる expdp コマンドでも使えそうですね。
SQL*Plus (SET JSONPRINT)
21c でバイナリ JSON データ型の追加など JSON サポートが強化されましたので、SQL*Plus でも JSON フレンドリーな出力をするオプション JSONPRINT 変数が追加されたようです。
$ sqlplus system/oracle@localhost/xepdb1
SQL*Plus: Release 21.0.0.0.0 - Production on Sat Dec 4 06:51:14 2021
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Last Successful login time: Sat Dec 04 2021 06:51:03 +09:00
Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SQL> set heading off newpage none feedback off
SQL> select json('[{a:"\u32FF"},{b: 1}]') from dual;
[{"a":"㋿"},{"b":1}]
SQL> set jsonprint pretty
SQL> /
[
{
"a" : "㋿"
},
{
"b" : 1
}
]
SQL> set jsonprint pretty ascii
SQL> /
[
{
"a" : "\u32FF"
},
{
"b" : 1
}
]
SQL>
おわりに
Oracle Database は非常に多機能で 21c の新機能だけでも多数ありますが、個人的にはその多くは使用することもなく、また理解も追いつかないため、手軽に試せるかなり偏ったピックアップとなってしまいました。
今年後半の Oracle Technology Night では非常にボリュームのある 21c 新機能の解説が 3 回に渡って開催されており、それらの資料もすぐに公開されていますのでマニュアルと合わせて手元で動かして理解を深めてゆこうと思います。
- データベース新機能の学習
- [TechNight #49] Oracle Database 21c 新機能解説 第1回 (前半パート) - Speaker Deck
- [TechNight #49] Oracle Database 21c 新機能解説 第1回 (後半パート) - Speaker Deck
- [TechNight #50] Oracle Database 21c 新機能解説 第2回 (前半パート) - Speaker Deck
- [TechNight #50] Oracle Database 21c 新機能解説 第2回 (後半パート) - Speaker Deck
- Oracle Database 21c 新機能概要 - Speaker Deck
- Oracle Database 21c 新機能解説 3 - connpass (2021/12/16)
おまけ
ライセンス的に XE は商用利用可能とはいえリソース制限が厳しいためどちらかというと開発目的で何度でも作り直すような用途だと思っていますが、ドキュメントには移行手順があることを知りました。
手順に沿って今回の検証で使用した 18c XE の XEPDB1 をアンプラグして 21c XE にプラグ、アップグレードしてみましたがあまりの手軽さに驚きました。(上記マニュアルの "Performing a Sanity Check for the new PDB" の最後のSELECT文の STATUS が余計に付与されているため構文エラーになることに気づきました。。。)プラグついでにスナップショット・コピーPDBを試してみると、3つ以上の PDB が作れたので調子に乗ってたくさん複製してるとデータベースファイルサイズ 12GB の上限に達してしまいました。ライセンス情報ページの備考に書いてあるとおりでした。。。
- Licensing Information
XE: Included option; you are licensed to create up to 252 PDBs, however, the actual number of PDBs you can create might be lower due to XE resource limits.
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ ONLY NO
4 XEPDB2 READ WRITE NO
5 XEPDB1_SNAP_COPY READ WRITE NO
6 XEPDB1_SNAP_COPY2 READ WRITE NO
7 XEPDB1_SNAP_COPY3 READ WRITE NO
8 XEPDB1_SNAP_COPY4 READ WRITE NO
9 XEPDB1_SNAP_COPY5 READ WRITE NO
10 XEPDB1_SNAP_COPY6 READ WRITE NO
11 XEPDB1_SNAP_COPY7 READ WRITE NO
12 XEPDB1_SNAP_COPY8 READ WRITE NO
13 XEPDB1_SNAP_COPY9 READ WRITE NO
14 XEPDB1_SNAP_COPY10 READ WRITE NO
15 XEPDB1_SNAP_COPY11 READ WRITE NO
16 XEPDB1_SNAP_COPY12 READ WRITE NO
17 XEPDB1_SNAP_COPY13 READ WRITE NO
18 XEPDB1_SNAP_COPY14 READ WRITE NO
19 XEPDB1_SNAP_COPY15 READ WRITE NO
20 XEPDB1_SNAP_COPY16 READ WRITE NO
21 XEPDB1_SNAP_COPY17 READ WRITE NO
22 XEPDB1_SNAP_COPY18 READ WRITE NO
23 XEPDB1_SNAP_COPY19 MOUNTED
24 XEPDB1_SNAP_COPY20 MOUNTED
25 XEPDB1_SNAP_COPY21 MOUNTED
26 XEPDB1_SNAP_COPY22 MOUNTED
27 XEPDB1_SNAP_COPY23 MOUNTED
28 XEPDB1_SNAP_COPY24 MOUNTED
29 XEPDB1_SNAP_COPY25 MOUNTED
30 XEPDB1_SNAP_COPY26 MOUNTED
31 XEPDB1_SNAP_COPY27 MOUNTED
32 XEPDB1_SNAP_COPY28 MOUNTED
33 XEPDB1_SNAP_COPY29 MOUNTED
34 XEPDB1_SNAP_COPY30 MOUNTED
35 XEPDB1_SNAP_COPY31 MOUNTED
36 XEPDB1_SNAP_COPY32 MOUNTED
37 XEPDB1_SNAP_COPY33 MOUNTED
38 XEPDB1_SNAP_COPY34 MOUNTED
39 XEPDB1_SNAP_COPY35 MOUNTED
40 XEPDB1_SNAP_COPY36 MOUNTED
41 XEPDB1_SNAP_COPY37 MOUNTED
42 XEPDB1_SNAP_COPY38 MOUNTED
43 XEPDB1_SNAP_COPY39 MOUNTED
44 XEPDB1_SNAP_COPY40 MOUNTED
45 XEPDB1_SNAP_COPY41 MOUNTED
46 XEPDB1_SNAP_COPY42 MOUNTED
47 XEPDB1_SNAP_COPY43 MOUNTED
48 XEPDB1_SNAP_COPY44 MOUNTED
49 XEPDB1_SNAP_COPY45 MOUNTED
50 XEPDB1_SNAP_COPY46 MOUNTED
SQL> !df -h .
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/mapper/vg_main-lv_root 33G 18G 16G 54% /
SQL> !du -csh $ORACLE_BASE/oradata/XE
5.6G /opt/oracle/oradata/XE
5.6G 合計
XEPDB1_SNAP_COPY19(23):Error 12954 during pluggable database XEPDB1_SNAP_COPY19 opening in read write 2021-12-04T09:18:10.913150+09:00 XEPDB1_SNAP_COPY19(23):Errors in file /opt/oracle/diag/rdbms/xe/XE/trace/XE_ora_29568.trc: ORA-12954: The request exceeds the maximum allowed database size of 12 GB.
0 件のコメント:
コメントを投稿