- AWS
- Oracle Cloud
- Oracle Database
- Exadata
アーキテクチャ解説&予想!Oracle Database@AWS解析白書②
2024年12月1日、ついにOracle Database@AWSがLimited Previewにて提供されました!今回は現時点で判明している情報について、ドキュメントを読み解きながらOracle Database@AWSのアーキテクチャの予想も交えてお伝えします。
|
前回はOracle Database 12cで新しく実装されたマルチテナント機能(Oracle Multitenant)の概要を紹介しました。第2回目となる今回は、Oracle Multitenantの環境を実際に構築し、操作しながら仕組みを解説していきます。
前回は12cの目玉機能であるOracle Multitenantの概要を紹介しました。Oracle Multitenantは「データベースの中にデータベースを作成する機能」であり、11gR2以前と比べてアーキテクチャが大きく変更されています。今回は、その仕組みをより詳しく理解するために、12cのマルチテナント環境を実際に構築し、操作してみます。
まず始めに、12cのソフトウェアをインストールします。インストールに自信がない方でも、コマンドが1つひとつ書かれた日本語の手順書がありますので、これを利用すれば手順を間違えることなく短時間でインストールできます。12cのソフトウェアとインストール手順書はOracle.comのアカウントがあれば、Oracle Technology Network(OTN)からダウンロードすることができます。
|
12cダウンロード:http://www.oracle.com/technetwork/jp/database/enterprise-edition/downloads/index.html
2013年8月末時点で、12cが対応しているプラットフォームは以下のとおりです。いずれも64bitのみの対応になります。なお、Oracle Clientは12cになっても32bit版が引き続き提供されています。
|
Certified Matrix:http://www.oracle.com/jp/system-requirement/db-matrix-195845-ja.html
今回はLinux環境にインストールを行います。ソフトウェアをダウンロードしたら、手順書に従ってインストールを行います。Oracle Universal Installer(OUI)を立ち上げたら、あとは画面に従って情報を入力していくだけですので非常に簡単です。マルチテナントを構築する場合、途中のエディション選択画面でEnterprise Editionを選択してください。
|
Standard Edition OneとStandard Editionでもマルチテナントを構築できますが、作成可能なプラガブル・データベース(PDB)の数が1つに制限されています。これはあらかじめPDBとしてデータベースを作成しておくことで、Unplug/Plugによって簡単にEE環境へデータベースを移行/バージョンアップできるようにするための措置です。複数のPDBを作成する場合は、Enterprise Editionを使用します。
|
ソフトウェアのインストールが完了したら、Database Configuration Assistant(DBCA)を使用してデータベースを作成します。マルチテナントを構築する場合、『コンテナ・データベースとして作成』にチェックを入れてください。同時にPDBを作成したい場合は、PDBの数と接頭辞を入力します。以下のように入力すると、『pdb1』『pdb2』『pdb3』という3つのPDBが作成されます。
|
あとは画面に従って情報を入力していけば、データベースの作成は完了です。
データベースを作成したら、早速接続してみましょう。今回の環境には、『cdb1』というコンテナ・データベース(CDB)の中に、『pdb1』『pdb2』『pdb3』という3つのプラガブル・データベース(PDB)があります。それぞれに接続しながら、内部構造を見ていきます。
|
まず、CDBに接続します。特別な方法は必要なく、11gR2以前のデータベースと同じようにSQL*Plusでローカル接続することができます。
|
どこに接続されたのかを確認するには、SHOWコマンドを使用します。CDBに接続した場合、SHOWコマンドの結果は『CDB$ROOT』になります。ROOTとは12cのマルチテナントから新しく登場した概念で、データベース全体で共有するオブジェクトやメタデータを持つという意味です。12cのマルチテナントでは各PDBにアプリケーションのデータを格納して利用しますが、Oracle固有のオブジェクトであるデータ・ディクショナリなどは、CDB$ROOTに格納されています。
|
続いてPDBに接続します。PDBへの接続にも特別な方法は必要ありません。PDBを作成すると同名のサービスも併せて作成されるため、このサービス名をクライアントから指定するだけです。今回の環境では『pdb1.world』『pdb2.world』『pdb3.world』というサービスがリスナーに登録されています。
|
サービスが登録されていることを確認したら、11gR2以前と同じくtnsnames.oraにエントリを記述するか、EZCONNECT(簡易接続ネーミング)を使用して接続します。今回はEZCONNECTを使用してpdb1に接続します。
|
一度接続した後に接続先を切り替えたい場合は、ALTER SESSION文を使用します。例えば以下のコマンドを実行すると、pdb1からpdb2に接続先を切り替えることができます。
|
ALTER SESSION文で切り替えが可能なのは、SYSやSYSTEMといったデータベース全体で共通して使われるユーザのみです。マルチテナントでは特定のPDBにしか存在しないローカル・ユーザを作成することもできますが、その場合はALTER SESSION文による接続先の切り替えができないため、CONNECTし直す必要があります。
ここでは12cのSQL*Plusを使用した接続を行いましたが、既存のクライアントやアプリケーションから12cに接続できるかどうか試したい場合は、接続互換性を考慮する必要があります。12cに接続することができるクライアントのバージョンは10gR2(10.2)以上のみで、10gR1(10.1)以前のクライアントでは接続がサポートされていませんので、ご注意ください。
無事接続できたところで、データ・ファイルやオンラインREDOログファイル、制御ファイルなどの物理構造がマルチテナントではどうなっているかを確認してみましょう。まずはCDBに接続し、V$LOGFILEビューとV$CONTROLFILEビューを参照します。
|
制御ファイルとオンラインREDOログ・ファイルについては、マルチテナントでない場合と比べて何も変わっていません。PDBの数に比例してファイル数が増えたりすることはなく、共通して使われます。
続いて、データ・ファイルがどうなっているかを確認します。12cには『CDB』から始まる新しいディクショナリ・ビューが追加されており、例えばCDB_DATA_FILESやCDB_TEMP_FILESを参照するとROOTや全PDBの情報を一度に確認することができます。
|
※掲載上の都合でFILE_NAME列のパスを一部省略しています。
SYSTEMやSYSAUXといったデフォルト表領域の名前とデータ・ファイルのパスが表示されました。マルチテナントの環境ではそれらが複数存在していることがわかります。例えば、SYSTEM表領域だけで見ても全部で5つ存在します。マルチテナントの環境では、ROOTやPDBがそれぞれ個別にデータ・ファイルを持っており、ここが11gR2以前のデータベースと大きく異なります。CON_ID列を参照することで、データ・ファイルがどのデータベースの持ち物であるかを判断できます。
ここまでの結果から、マルチテナント環境の物理構造が以下のようになっていることがわかります。データベース全体で共有するものと、個別に存在するものがあることを理解しておきましょう。なお、PDB$SEEDとはPDBが作成される際の初期テンプレートです。今回はDBCAからPDBを作成しましたが、その際発行されるCREATE PLUGGABLE DATABASEコマンドにおいて、PDB$SEEDの内容がコピーされるという仕組みです。なお、PDB$SEEDはCDBを作成すると自動的に1つ作成され、読み取り専用として扱われるためオブジェクトの追加や変更はできません。
|
続いて、マルチテナント特有の基本操作を試してみましょう。まずはデータベースの起動と停止を行います。11gR2以前のデータベースであればSTARTUPコマンドで起動、SHUTDOWNコマンドで停止を行っていましたが、マルチテナントの場合はPDB単位で起動と停止が行えます。まずは起動のステップから確認してみましょう。この時点でデータベースが起動している場合は、いったん以下のSHUTDOWNコマンドで停止してください。
|
停止が完了したら、STARTUPコマンドを実行します。
|
11gR2以前のデータベースであればこれで起動完了なのですが、SHOWコマンドでPDBの状態を確認すると、『MOUNTED』になっています。マルチテナントの場合はここからさらにALTER文でPDBをオープンする必要があります。
|
PDBを停止する場合も同様にALTER文を使用します。SHUTDOWNコマンドを発行するとすべてのPDBが停止するので注意してください。
|
PDBの数が多い場合はALL句で全PDBをまとめて起動停止したり、特定のPDB以外を起動停止したりといった柔軟な操作が可能です。また、STARTUPと同時にPDBもオープンしたい場合は、システム・イベントのトリガーを作成して対応します。例えば、以下のようなトリガーを作成すれば、STARTUPと同時に全PDBがオープンされます。
|
12cのマルチテナントには、各PDBに共通して存在する『共通ユーザ』と、特定のPDBにしか存在しない『ローカル・ユーザ』の2種類があります。共通ユーザにはSYSやSYSTEMなどがあり、主にデータベースの管理作業で使用します。ローカル・ユーザは各アプリケーションごとのユーザです。
|
ユーザの一覧を確認するには、CDB_USERSビューを使用します。COMMON列がYESの場合は共通ユーザで、NOの場合はローカル・ユーザです。例えば、SYSは共通ユーザなのでCOMMON列がYESになります。
|
新しく共通ユーザを追加したい場合は、CDBに接続してCREATE USER文を発行します。この時、共通ユーザの名前には『c##』という接頭辞が必要になります。この接頭辞がない場合はエラーになるのでご注意ください。
|
ローカル・ユーザを追加する場合は、PDBに接続してCREATE USER文を発行します。ローカル・ユーザには接頭辞のルールがないので、自由に名前を付けることができます。
|
いくつかの初期化パラメータについては、PDBごとに異なる値を設定することがサポートされています。V$PARAMETERビューのISPDB_MODIFIABLE列がTRUEになっていれば、PDBごとに異なる値を設定できます。現時点ではTRUEのパラメータ数が171、FALSEのパラメータ数が196となっています。
|
初期化パラメータを変更するには、今までどおりALTER SYSTEM文を使用します。CDBに接続して変更を行った場合、すべてのPDBに適用されます。PDBに接続して変更を行った場合は、そのPDBだけが変更の対象になります。
|
PDBは1つひとつが独立してローカル・ユーザやデータを保持しているため、USBメモリのように抜き差しして別のCDBに移動することができます。PDBを取り外すことを『Unplug』、取り付けることを『Plug』と呼びます。今回はpdb1をUnplugし、cdb2という別のデータベースにPlugしてみます。
|
まず、PDBをUnplugします。Unplugの操作はコマンド・ラインの他にDBCAやOracle Enterprise Manager Cloud Controlを使用して行うことができます。今回はDBCAを使用します。DBCAを起動したら、『プラガブル・データベースの管理』→『プラガブル・データベースの切断』の順に進みます。
|
続いて、UnplugするPDBを選択します。今回はcdb1にあるpdb1をUnplugします。UnplugされたPDBの情報はXMLのメタデータ・ファイルとRMANのバックアップで構成されるので、それらの出力先も併せて指定します。別のサーバにあるCDBにPlugしたい場合は、共有ディレクトリのパスを指定しておくと作業が楽になります。
|
これでUnplugは完了です。操作に必要な時間はデータ量に依存しますが、作業自体は非常に簡単です。Plugを行うには、再度DBCAを起動してから『プラガブル・データベースの管理』→『プラガブル・データベースの作成』の順に進みます。
|
Plug先として、cdb2を選択します。
|
『PDBファイルを使用してプラガブル・データベースの作成』を選択し、先ほど生成されたXMLとバックアップファイルを指定します。
|
Plug時にPDB名やデータ・ファイルのパスを変更することもできます。今回は同名のpdb1としてPlugします。
|
Plugが完了すると、pdb1がcdb2に移動します。SHOWコマンドで結果を確認してみましょう。
|
同じ要領で何度でもPDBを作成することができるため、あらかじめ特定のデータを入れてテンプレート化しておき、各利用者にPDBを作成するといった運用にも使えます。今回解説したUnplugとPlugは『カット&ペースト』のような動作をしますが、『コピー&ペースト』のようにPDBのクローンを作成することもできます。これは本番のデータを開発環境で利用したい場合などに便利な機能です。
今回はマルチテナントの基本的な操作を紹介しましたが、アーキテクチャの変更やUnplug/Plugといった新しい要素が数多く盛り込まれている一方で、従来と同じ手法で管理操作ができたりといった互換性も保たれています。構築は非常に簡単ですので、是非皆さんもマルチテナントの世界を体感していただきたいと思います。
次回はセキュリティとバックアップの新機能について解説します。
・徹底解説!Oracle Database 12cのすべて Vol.1
・徹底解説!Oracle Database 12cのすべて Vol.3
・徹底解説!Oracle Database 12cのすべて Vol.4
・徹底解説!Oracle Database 12cのすべて Vol.5
|
岸和田 隆
|
|
関 俊洋
|
最後までご覧いただきありがとうございました。
本記事でご紹介した製品・サービスに関するコンテンツをご用意しています。また、この記事の他にも、IT技術情報に関する執筆記事を多数公開しておりますのでぜひご覧ください。
■本記事の内容について
本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
2024年12月1日、ついにOracle Database@AWSがLimited Previewにて提供されました!今回は現時点で判明している情報について、ドキュメントを読み解きながらOracle Database@AWSのアーキテクチャの予想も交えてお伝えします。
Oracle Database 23aiでは生成AIに関連する新機能が多く追加。特にAutonomous Database 23aiの「Select AI」機能は大規模言語モデル(LLM)を使用して、自然言語による問い合わせやテストデータの自動生成が可能に。本記事では、Select AIの機能について検証結果を交えて紹介します。
RMANを使って表単位リカバリをする際には制御ファイルのバックアップにも注意する必要があります。世代管理の設定次第では意図せずリカバリができないことがあるため、注意点をお伝えします。