弊社サポートセンターにいただくお問い合わせで「11g/12cから19cに移行を検討しているんだけど・・・」といったご相談が増えてきました。
19cへの移行時に気になる点の1つがOracle Multitenant(以下、マルチテナント)への対応です。19cまでは従来構成(非CDB、非マルチテナント)もサポート対象ですが、21cでは従来構成が廃止されています。将来を見据えて、これを機にマルチテナントへの移行を検討されている方もいらっしゃるのではないでしょうか。
本記事ではOracle Database 11g/12c 非CDBから19c マルチテナントへの移行(アップグレード)にフォーカスし、まずはその手段をリストアップしてまとめました。その中で、実際に12c従来構成から19cマルチテナントへAutoUpgradeで移行してみた結果をもとに、手順や注意点を紹介します。
また、アシストのサポートセンターご利用者様向けにはなりますが、移行時に参考となるアシスト独自の資料を弊社サポートシステムAWSC-2にて公開しています。
-
※AWSC-2とはアシストのサポートシステムを指し、アシストとのサポート契約を結んだお客様が閲覧できるサイトです。サポートへの問い合わせの集約のみならず、様々なQA資料を用意し、限定的な情報提供を行っています(2022年6月に旧システムAWSCよりAWSC-2に移行しました)。
【サポートに関するお問い合わせはこちら】
マルチテナント構成へ移行する際の全体像や注意点などの把握にお役立ていただければ幸いです。
Data Pump以外にも?Oracle DBが提供する19cへの移行手段(従来構成の場合)
ひとことに「移行」と言っても様々なケースがありますが、本記事では11g/12cから19cへのアップグレードについてご紹介します。
Oracle Databaseが提供するアップグレードの手段は、代表的なData Pump以外にも様々あり、アップグレードが同一筐体上なのか別筐体への移行を伴うものなのかによって推奨される手段が異なります。
アップグレードの要件やそれまでの実績(過去に実施しているため慣れている)などを考慮してご検討ください。
主なものを以下にご紹介します。
▽同一筐体上で直接アップグレードする場合
・Database Upgrade Assistant(DBUA)
・AutoUpgrade
など
※バージョンの組み合わせによっては直接アップグレードできない場合があります。サポートされる組み合わせは後述のメーカー資料をご覧ください。
▽別筐体でアップグレードする場合(移行先にて新バージョンをインストールして移行)
・Data Pump
・トランスポータブル表領域
・フル・トランスポータブル表領域
・AutoUpgrade
・Oracle GoldenGate
など
冒頭でお伝えしたとおり、馴染みがあるのはData Pumpユーティリティではないでしょうか。弊社サポートセンターでも最も多くの実績があり、ノウハウが蓄積されている手法です。そのため、特にお客様のご希望がない場合はData Pumpを使用した移行をご案内することが多いです。
参考資料:
▽メーカーマニュアル
・Oracle Database 19c インストールとアップグレード
https://docs.oracle.com/cd/F19136_01/install-and-upgrade.html
19cをインストール、または19cへアップグレードする際のマニュアルをまとめたページです。ダウングレードの方法もマニュアルに記載されています。
アップグレード全般については「アップグレード・ガイド」にまとまっており、アップグレード前の準備や注意点、各リリースでの動作の変更、非推奨またはサポート終了した機能も記載されているため、アップグレードを検討される方はぜひご一読ください。
▽メーカードキュメント
・Oracle 19c - 非 CDB Oracle データベース 19c への手動アップグレードのチェックリスト (Doc ID 2544560.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2544560.1
※My Oracle Supportへのログインが必要です。
「アップグレード・ガイド」マニュアルと併せてご参考ください。
従来構成→マルチテナントの移行で選択できる手段は?
では、従来構成からマルチテナントへ移行する場合はどのような手段があるのでしょうか。
結論から言うと、使用できる手段は従来構成での移行と全く同じです。Data Pumpもトランスポータブル表領域も選択できます。
異なるのは、マルチテナントではコンテナ・データベース(CDB)の中にプラガブル・データベース(PDB)を作成するという点です。従来構成でのDBはマルチテナントではPDBに当たり、マルチテナント全体で共有するデータやメタデータはコンテナ・データベースに格納します。
例えばData Pumpを使用して19cマルチテナントへ移行する場合、まず19c環境側でCDB、PDBを作成し、PDBに対してデータをインポートすることになります。
以下の例では東京・大阪・福岡の支店ごとに独立していた3つの従来構成のDBを、1つのマルチテナント内の3つのPDBとして移行しています。
参考資料:
▽アシスト記事
・徹底解説!Oracle Database 12cのすべて Vol.2
https://www.ashisuto.co.jp/tech-note/article/20130912_oracle.html
12cの記事ですが、マルチテナントの基本的なアーキテクチャは19cでも同じです。リリースごとの細かい仕様変更についてはメーカーマニュアルをご覧ください。
▽メーカーマニュアル
・Oracle Multitenant 管理者ガイド 19c
https://docs.oracle.com/cd/F19136_01/multi/index.html
マルチテナント全般に関するマニュアルです。マルチテナントのアーキテクチャや作成・管理方法などが集約されているため、マルチテナントについて網羅的に確認できます。
▽メーカードキュメント
・マルチテナント・アーキテクチャの基本情報(KROWN:164344) (ドキュメントID 1766510.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=1766510.1
※My Oracle Supportへのログインが必要です。
マルチテナントに関連するMOSドキュメントのうち、よく参照されるものを一覧できます。
▽アシストサポートセンター FAQ
マルチテナント独自の方法として、12c以降であれば、DBMS_PDBパッケージを使用して従来構成のDBをPDBに変換することも可能です。実際の作業の流れは弊社サポートセンターのFAQでも例をご紹介しています。
・既存のシングル構成のデータベースをマルチテナント環境のPDBとして追加する方法
https://secure.okbiz.jp/ashisuto/faq/show/42655
※AWSC-2へログインして閲覧してください。
・異なるプラットフォーム間の PDB 移行~アンプラグ/プラグ編~
https://secure.okbiz.jp/ashisuto/faq/show/48743
※AWSC-2へログインして閲覧してください。
AutoUpgradeで12c従来構成のDBを19cマルチテナントのPDBに変換しながら移行する
アップグレードの手段としてご紹介したAutoUpgradeですが、従来構成からマルチテナントへの移行の際にも便利なユーティリティです。実際に12c従来構成のDBを19cマルチテナントへAutoUpgradeを使用して移行してみた手順とそこでの気づきをお伝えします。
まずは、そもそもAutoUpgradeとはどのような機能かをみていきましょう。
AutoUpgradeとは
「Auto」と名につくとおりアップグレード前後の工程含め大部分が自動化されるため、アップグレード全体の工程を簡略化できるユーティリティです(Standard Edition 2、Enterprise Editionで使用可)。単一DBだけでなく複数DBを一つのコマンドで19cにまとめてアップグレードすることもできるため、多くのDBをアップグレードしなければならない環境では特に、全体工数の削減や移行時間の短縮につながります。
従来構成/マルチテナントに関わらず使用できますが、従来構成DBをアップグレードしながら同時にマルチテナントのPDBへ変換できる点がとても便利だと感じます。11gの従来構成DBと12cの従来構成DBを一度にまとめて19cのCDB上に移行することもできます。
また、AutoUpgradeには4つのモード(analyze、fixups、deploy、upgrade)があり、要件に応じてモードを選択できます。
▽AutoUpgradeの4つのモード
| モード |
説明 |
| 分析 |
analyze |
アップグレード可能かチェック |
| 修正 |
fixups |
アップグレード可能かチェック + 修正が必要な項目を自動修正 |
| アップグレード |
upgrade |
アップグレードを実行 |
| デプロイ |
deploy |
分析・修正・アップグレードを一気通貫で実行 |
例えば同一筐体でアップグレードする場合、分析(analyze)モード単体で実行することで事前チェックを終えてから、デプロイ(deploy)モードでアップグレードまで一気に実行するのが基本的な流れとなります。
※デプロイ(deploy)モードのみの実行でもアップグレード可能ですが、分析(analyze)モードのみ個別に実行してチェックを済ませておくことが推奨されます。
※別筐体でアップグレードする場合、アップグレード元のサーバにて分析(analyze)、修正(fixups)モードを実行した後、アップグレード先のサーバにてアップグレード(upgrade)モードを実行します。実行サーバが異なるため、デプロイ(deploy)モードは使用しません。
アップグレード元・先のバージョン、SIDなどを記載したアップグレード用のファイルを作成すれば、アップグレード前の要件チェック、修正、アップグレード、アップグレード後の修正、従来構成DBからPDBへの変換などを自動で行えます。進行状況はコマンドで確認できるだけでなく、HTMLファイルでリアルタイムに確認できます。後ほど、実際にやってみた際の例をご紹介します。
AutoUpgradeの前提条件
AutoUpgradeを使用するには、対象の環境が前提条件を満たしている必要があります。詳細は以下のMy Oracle Supportドキュメントをご参照ください(内容は随時更新されるため、最新情報を確認するようにしてください)。
AutoUpgrade Tool (ドキュメントID 2485457.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2485457.1
※My Oracle Supportへのログインが必要です。
<前提条件の概要>
・Oracle Database のバージョンが、アップグレード元は最小で11.2.0.4、アップグレード先は
12.2 以降であること
・Java 8 以上であること(12.1.0.2 以上はOracleインストール時に同梱されている)
・アップグレード対象のDBがアーカイブモードであること(Editionに関わらず)
・高速リカバリ領域を設定していること(Enterprise Editionのみ)
高速リカバリ領域(フラッシュ・リカバリ領域)の概要と構成方法 (Doc ID 2681408.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2681408.1
※My Oracle Supportへのログインが必要です。
AutoUpgradeで非CDBをPDBに変換・アップグレードする場合の要件
AutoUpgradeを使用して非CDBをPDBに変換・アップグレードする場合、前述のAutoUgradeの前提条件に加え、以下の要件を満たす必要があります。
▽用語の説明
ソース :アップグレード元
ターゲット:アップグレード先
▽要件
・アップグレードを実行する前にターゲットCDBが作成されている
・非CDBから作成されたPDBの名前はソース非CDB名をそのまま使用する
※データベースの名前は変更できません。
・ターゲットでのOracle Databaseオプションのセットは、ソースと同じか、ソースでの
オプションのスーパーセットである
・ソース非CDBとターゲットCDBに、互換性のある文字セットと各国語文字セットがある
・ソース非CDBのDBとOSは、ターゲットCDBへの直接アップグレードがサポートされている
・ソース非CDBおよびターゲットCDBに対してOS認証が有効になっている
参考資料:
▽メーカーマニュアル
Oracle Database データベース・アップグレード・ガイド 21c
ソース非CDBおよびターゲットCDBの要件
https://docs.oracle.com/cd/F39414_01/upgrd/understanding-non-cdb-to-pdb-upgrades-autoupgrade.html#GUID-D739E4A4-F1B9-45BE-B0E2-F213FE70F665
21cのメーカーマニュアルに記載されていますが、21cに特化した内容ではありません。19cへのアップグレード時にもご参考ください。
AutoUpgradeで非CDBをPDBに変換・アップグレードする手順
同一サーバ(Linux)上で12.2の従来構成DBを19cマルチテナントにアップグレードする場合の例をもとに手順をご紹介します。今回はAutoUpgradeをanalyzeモードで実行し前提条件をチェックした後、deployモードで実行すればアップグレードからPDBへの変換など最後まで一気に自動で進めます。
①ターゲットとなる19cのOracle Databaseをインストールする(最新のRU適用を推奨)
②ターゲットCDBを作成する
③最新の「autoupgrade.jar」ファイルをMy Oracle Supportドキュメントよりダウンロードし、ターゲットの$ORACLE_HOME/rdbms/admin配下に配置する
(バージョンによってはインストール時に同梱されるが、最新ファイルの使用を推奨)
AutoUpgrade Tool (ドキュメントID 2485457.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?id=2485457.1
※My Oracle Supportへのログインが必要です。
④構成ファイル(拡張子「.cfg」のテキストファイル)を作成する。
以下の例では12.2の「testv12」を19.3のCDB「v193」に対してプラグするように最終行のパラメータにプラグ先のCDBのSIDを指定します。また、ログの出力先は「/u01/autoupgrade」配下を指定しています。
例)testv12.cfgファイルの内容
global.autoupg_log_dir=/u01/autoupgrade
upg1.log_dir=/u01/autoupgrade ★ログの出力先を指定します。
upg1.dbname=testv12
upg1.sid=testv12
upg1.source_home=/u01/app/oracle/product/12.2.0/dbhome_1
upg1.target_home=/u01/app/oracle/product/19.0.0/dbhome_1
upg1.target_base=/u01/app/oracle
upg1.target_version=19.3
upg1.start_time=NOW
upg1.upgrade_node=localhost
upg1.run_utlrp=yes
upg1.timezone_upg=yes
### NonCDB to PDB parameters ###
upg1.target_cdb=v193 ★CDBのSIDを指定します。
※パラメータの詳細は後述のメーカーマニュアルをご参照ください。
⑤アップグレード元のDBの完全なるバックアップを取得しておく。準備ができたらアップグレード元のDBは起動しておく。
⑥analyzeモード(分析)でアップグレード前のチェックを実行する。自動で設定が修正されるが、手動修正が必要なケースもあるため適宜対応する(例えばアップグレード先バージョンに合わせた初期化パラメータの修正やディクショナリ統計の取得などは自動で行われるが、高速リカバリ領域のサイズが足りない場合のサイズ拡張は手動で行う、など)。
※⑥を飛ばして⑦に進むことも可能ですが、事前チェックを確実に行うため⑥を実施いただくことを推奨します。
▽ジョブの進行を確認できる主なコマンド
| コマンド |
説明 |
| lsj |
進行中のジョブの概要を一覧できます |
| status |
・進行中の工程全体の進捗やログ出力先を確認できます
・オプションで「-job ジョブ番号」を指定すれば、特定ジョブの詳細のみ
確認できます |
▽ジョブの進行や結果を確認できる主なファイル
| ログファイル |
説明 |
| state.html |
・進行中のジョブの現在のステージをHTML形式で確認できます
・ブラウザで開くとその後は進行に応じて自動でリロードされます |
| status.log |
・完了したジョブの詳細情報をテキスト形式で確認できます
・ジョブ完了時、ログファイルが出力された旨のメッセージがプロンプト上に
自動で表示されます |
| status.html |
・status.log の内容をHTML形式で確認できます
・status.log と共に出力されます |
-
※ジョブが完了した際に出力されるHMTL形式ファイル(status.html)と名前が似ていますが、異なる役割のファイルです。
ジョブの進行に合わせて随時出力内容が変動していくのが「state.html」ファイルです。構成ファイルで指定したログ出力
配下のディレクトリにそれぞれ出力されます(具体的な出力先は「status」コマンドで確認できます)。
コマンド)
$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -config xxxxx.cfg -mode analyze
実行例)analyzeモードで実行する
$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -config /u01/autoupgrade/testv12.cfg -mode analyze
AutoUpgrade is not fully tested on OpenJDK 64-Bit Server VM, Oracle recommends to use Java HotSpot(TM)
AutoUpgrade 22.1.220311 launched with default internal options
構成ファイルの処理中 ...
+-----------------------------------+
| AutoUpgradeの実行を開始しています |
+-----------------------------------+
1 Non-CDB(s) will be analyzed
コンソール・コマンドを一覧するには'help'と入力します
upg>
実行例)analyzeモード実行中の様子をlsjコマンドで確認する
upg> lsj
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
|ジョブ#|DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
| 100|testv12|PRECHECKS|EXECUTING|RUNNING| 15:52:53| 4s ago|Loading database information|
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
ジョブの合計 1
※analyzeモードが完了すると、自動で結果が表示される
upg> Job 100 completed
------------------- Final Summary --------------------
Number of databases [ 1 ]
Jobs finished [1]
Jobs failed [0]
Please check the summary report at:
/u01/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html
/u01/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log
ログの出力例)テキスト形式(status.log)とHTML形式(status.html)で出力される
==========================================
Autoupgrade Summary Report
==========================================
[Date] Mon Apr 04 15:55:59 JST 2022
[Number of Jobs] 1
==========================================
[Job ID] 100
==========================================
[DB Name] testv12
[Version Before Upgrade] 12.2.0.1.0
[Version After Upgrade] 19.3.0.0.0
------------------------------------------
[Stage Name]PRECHECKS
[Status] SUCCESS
[Start Time]2022-04-04 15:52:53
[Duration]
[Log Directory] /u01/autoupgrade/testv12/100/prechecks
[Detail] /u01/autoupgrade/testv12/100/prechecks/testv12_preupgrade.log
Check passed and no manual intervention needed
------------------------------------------
※URL例:file:////u01/autoupgrade/testv12/100/prechecks/testv12_preupgrade.log
この例ではチェックがすべて完了し、手動での修正は必要ないことがわかります。
※コマンドやHTML形式で確認できる結果の体裁は、autoupgrade.jar のバージョンなど環境によって多少異なります。
⑦deployモード(アップグレードの一連の流れを最後まで実行)でアップグレードを実行する。
コマンド)
$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -config xxxxx.cfg -mode deploy
実行例)deployモードでAutoUpgradeを実行(ジョブ番号:101)
$ java -jar $ORACLE_HOME/rdbms/admin/autoupgrade.jar -config /u01/autoupgrade/testv12.cfg -mode deploy
AutoUpgrade is not fully tested on OpenJDK 64-Bit Server VM, Oracle recommends to use Java HotSpot(TM)
AutoUpgrade 22.1.220311 launched with default internal options
構成ファイルの処理中 ...
+--------------------------------+
| AutoUpgradeの実行を開始しています |
+--------------------------------+
1 Non-CDB(s) will be processed
コンソール・コマンドを一覧するには'help'と入力します
upg>
upg> lsj
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
|ジョブ#|DB_NAME| STAGE|OPERATION| STATUS|START_TIME|UPDATED| MESSAGE|
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
| 101|testv12|PRECHECKS|EXECUTING|RUNNING| 13:59:36| 1s ago|Loading database information|
+-------+-------+---------+---------+-------+----------+-------+----------------------------+
ジョブの合計 1
まずアップグレード前のチェックや修正が行われます。チェックの結果、手動で対応が必要になった場合は対応します(analyzeモード実行時と同じです)。
analyzeモードのジョブが100だったため、次のdeployモードのジョブは101で採番されています。
実行例)HTML形式(state.html)でジョブが実行中のステージを確認する
※URL例:file:////u01/autoupgrade/cfgtoollogs/upgrade/auto/state.html
※1つのファイル(state.html)を上書きしていく形で、その時のステージ情報が出力されます。
実行例)statusコマンドでジョブ番号を指定して確認する
upg> status -job 101
Details
Job No 101
Oracle SID testv12
Start Time 22/04/05 13:59:36
Elapsed (min): 57
End time: N/A
ジョブ・ログの場所
-----------------------------------
ログ・ベース:/u01/autoupgrade/testv12
ジョブ・ログ: /u01/autoupgrade/testv12/101
ステージ・ログ: /u01/autoupgrade/testv12/101/noncdbtopdb
TimeZone: /u01/autoupgrade/testv12/temp
Stages
SETUP <1 min
GRP <1 min
PREUPGRADE <1 min
PRECHECKS <1 min
PREFIXUPS 3 min
DRAIN <1 min
DBUPGRADE 41 min
DISPATCH <1 min
POSTCHECKS <1 min
POSTFIXUPS 7 min
POSTUPGRADE <1 min
NONCDBTOPDB ~3 min (RUNNING)
SYSUPDATES
Stage-Progress Per Container
The Stage NONCDBTOPDB does not have any data to show
※deployモードが完了すると、自動で結果が表示される
upg> Job 101 completed
------------------- Final Summary --------------------
Number of databases [ 1 ]
Jobs finished [1]
Jobs failed [0]
Jobs restored [0]
Jobs pending [0]
Please check the summary report at:
/u01/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html
/u01/autoupgrade/cfgtoollogs/upgrade/auto/status/status.log
無事にdeployモードが完了しました。ログ(status.log または status.html)にはsummary reportが出力されているため、ファイルを開いて内容を確認します。もし手動での作業が必要な記載があれば対応してください。
ログの出力例)HTML形式(status.html)でdeployモードの全体工程を確認する
※URL例:file:////u01/autoupgrade/cfgtoollogs/upgrade/auto/status/status.html
いかがでしたでしょうか。
私自身、初めてAutoUpgradeを使用してみた時は、analyzeモードで分析時に多数のエラーが発生しその原因調査に時間がかかりました。原因は設定ミスや、高速リカバリ領域のサイズが小さいなど前提条件を満たしていないことによるものがほとんどで、問題を修正しanalyzeモードが無事に完了した後はとても簡単でした。
deployモードで実行すると、後は自動でアップグレードやPDBへの変換をしてくれるため、私は時々コマンドやHTML形式のレポートでステータスを確認するだけで済みました。手動で作業が必要になるケースもあるため、
AutoUpgradeが出力するログファイルを必ずご確認ください。
参考資料:
▽メーカーマニュアル
AutoUpgradeによる同じオペレーティング・システムでの非CDBのPDBへのアップグレードと変換 19c
https://docs.oracle.com/cd/F19136_01/spucs/index.html
AutoUpgradeを使用して従来構成→マルチテナントへアップグレードする場合のマニュアルです。
まとめ
従来構成からマルチテナントへ移行する際は、CDB・PDBの構成などマルチテナントならではの仕様を理解しておく必要があります。アップグレードやデータ移行はData Pumpといったお馴染みの方法でも可能ですが、
AutoUpgradeのようなマルチテナントへの移行に便利な機能も提供されています。お客様環境の要件やご希望に合った方法をご検討ください。
本記事がアップグレードを検討、実施する際の一助になれば幸いです。
何かお困りの際は弊社サポートセンターへお気軽にお問い合わせください。また、弊社技術部隊による移行支援もご用意しておりますので、どうぞお気軽にご相談ください。
アシスト サポートセンターのご案内
https://www.ashisuto.co.jp/support/
アシスト Oracle Database技術サービスのご案内
https://www.ashisuto.co.jp/product/category/solution/dodai/service/#tab
執筆者情報
2006年アシスト入社。Oracle Databaseの研修講師に従事したのち、現在はサポートセンターでチームメンバーのフォローや技術資料作成などを担当している。プライベートでは3児の母。...show more