41 SQL*Plusを使用したCDBの管理
SQL*Plusを使用したマルチテナント・コンテナ・データベース(CDB)の管理には、CDB内のコンテナへのアクセス、CDBの変更、CDBでのDDL文の実行、CDBでのオラクル社が提供するSQLスクリプトの実行などのタスクが含まれます。
注意:
この章のタスクは、SQL*PlusまたはOracle SQL Developerを使用して実行できます。- CDBの管理について
CDBの管理は非CDBの管理と似ていますが、いくつかの違いがあります。ほとんどの違いの原因は、管理タスクによって、CDB全体に該当したり、CDBルート、アプリケーション・コンテナ、アプリケーション・ルート、特定のプラガブル・データベース(PDB)およびアプリケーションPDBに該当したりすることです。 - SQL*Plusを使用したCDB内のコンテナへのアクセス
SQL*Plusを使用してCDB内のコンテナにアクセスできます。 - DBMS_SQLパッケージを使用したコンテナのコードの実行
CDBのコンテナ内でPL/SQLコードを実行する場合に別のコンテナで1つ以上のSQL文を実行する場合、DBMS_SQL
パッケージを使用してコンテナを切り替えます。 - CDBの変更
CDB全体、ルートまたは1つ以上のPDBを変更できます。 - CDBにおけるALTER SYSTEM SET文の使用方法
ALTER
SYSTEM
SET
文では、CDB内の1つ以上のコンテナの初期化パラメータを動的に設定できます。 - CDB内のコンテナに対するDML文の発行
CDBルートで発行されるDML (データ操作言語)文では、CDB内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。 - CDBでのDDL文の実行
CDBでは、現在のコンテナまたはすべてのコンテナでデータ定義言語(DDL)文を実行できます。 - CDBのUNDOモードの管理
ローカルUNDOが有効になっている場合、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があります。ローカルUNDOが無効になっている場合は、CDB全体に対して1つのUNDO表領域があります。 - CDBでのオラクル社が提供するSQLスクリプトの実行
catcon.plスクリプトを使用して、Oracleが提供するSQLスクリプトをCDBで実行できます。 - CDBインスタンスの停止
CDBインスタンスは、非CDBインスタンスを停止する場合と同じ方法で停止できます。
関連トピック
親トピック: マルチテナント環境の管理
41.1 CDBの管理について
CDBの管理は非CDBの管理と似ていますが、いくつかの違いがあります。ほとんどの違いの原因は、管理タスクによって、CDB全体に該当したり、CDBルート、アプリケーション・コンテナ、アプリケーション・ルート、特定のプラガブル・データベース(PDB)およびアプリケーションPDBに該当したりすることです。
- 現在のコンテナについて
CDB内の各コンテナのデータ・ディクショナリは分かれており、現在のコンテナのデータ・ディクショナリは、名前解決と権限の承認に使用されます。現在のコンテナは、CDBルート、アプリケーション・ルート、PDBまたはアプリケーションPDBにできます。各セッションの現在のコンテナは、どの時点においても常に1つのみですが、セッションのコンテナは別のコンテナに切り替えることが可能です。 - CDBにおける管理タスクについて
共通ユーザーがCDBの管理タスクを実行します。 - CDBにおける管理性機能の使用について
CDB内のOracle Databaseの各管理機能について、データの場所とデータの可視性を理解することが重要です。 - CDBにおけるデータベース・オブジェクトの管理について
CDBでは、異なるコンテナに異なるデータベース・オブジェクトを含めることができます。 - PDBのフラッシュ・バックについて
FLASHBACK PLUGGABLE DATABASE
文を使用して、PDBを過去の時点またはシステム変更番号(SCN)に戻すことができます。 - セキュリティを強化するためのPDBユーザーの制限について
セキュリティを強化するためにPDBユーザーを制限する方法はいくつかあります。PDBロックダウン・プロファイルは、特定のPDB内のユーザーが使用可能な機能とオプションを制限します。PDB_OS_CREDENTIAL
初期化パラメータでは、PDBに一意のオペレーティング・システム・ユーザーを指定して、オペレーティング・システム・アクセスを制限できます。また、PATH_PREFIX
およびCREATE_FILE_DEST
句がPDBの作成時に指定された場合は、ファイル・システム・アクセスを制限します。
親トピック: SQL*Plusを使用したCDBの管理
41.1.1 現在のコンテナについて
CDB内の各コンテナのデータ・ディクショナリは分かれており、現在のコンテナのデータ・ディクショナリは、名前解決と権限の承認に使用されます。現在のコンテナは、CDBルート、アプリケーション・ルート、PDBまたはアプリケーションPDBにできます。各セッションの現在のコンテナは、どの時点においても常に1つのみですが、セッションのコンテナは別のコンテナに切り替えることが可能です。
各コンテナにはCDB内で一意のIDと名前があります。USERENV
ネームスペースのCON_ID
およびCON_NAME
パラメータを使用すると、SYS_CONTEXT
ファンクションで現在のコンテナのIDと名前を判断できます。たとえば、次の問合せは現在のコンテナ名を返します。
SELECT SYS_CONTEXT ('USERENV', 'CON_NAME') FROM DUAL;
CDB内のコンテナには、様々な方法でアクセスできます。たとえば、SQL*PlusのCONNECT
コマンドを使用し、ALTER
SESSION
SET
CONTAINER
文を使用すると、現在のセッションのコンテナを切り替えることができます。
CDBの現在のコンテナには、次のルールが適用されます。
-
共通ユーザーの場合にのみ、現在のコンテナは
CDB$ROOT
(CDBルート)にできます。 -
共通ユーザーおよびローカル・ユーザーの場合に、現在のコンテナは特定のPDBにできます。
-
アプリケーション・ルートで作成された共通ユーザーまたはアプリケーション共通ユーザーの場合、現在のコンテナにできるのはアプリケーション・ルートのみです。
-
共通ユーザー、アプリケーション共通ユーザーおよびローカル・ユーザーの場合に、現在のコンテナは特定のアプリケーションPDBにできます。
-
SQL文に
CONTAINER = ALL
が含まれる場合、現在のコンテナはCDBルートまたはアプリケーション・ルートである必要があります。CONTAINER
句は、CREATE USER
、ALTER USER
、CREATE ROLE
、GRANT
、REVOKE
およびALTER SYSTEM
文などのいくつかのSQL文に含めることができます。 -
SQL文に
CONTAINER = ALL
が含まれ、現在のコンテナがCDBルートの場合、SQL文は、すべてのPDB、アプリケーション・ルートおよびアプリケーションPDBを含む、CDB内のすべてのコンテナに影響します。 -
SQL文に
CONTAINER = ALL
が含まれ、現在のコンテナがアプリケーション・ルートの場合、SQL文は、アプリケーション・ルートおよびアプリケーション・ルートに属するすべてのアプリケーションPDBを含む、アプリケーション・コンテナ内のすべてのコンテナに影響します。SQL文は、CDBルート、PDB、または現在のアプリケーション・ルートに属さないアプリケーションPDBには影響しません。 -
共通に
SET CONTAINER
権限が付与されている共通ユーザーまたはアプリケーション共通ユーザーのみ、CONTAINER = ALL
を含むSQL文を実行できます。
41.1.2 CDBにおける管理タスクについて
共通ユーザーがCDBの管理タスクを実行します。
共通ユーザーは1つのIDを持ち、CDBルート、アプリケーション・ルート、PDBまたは権限を持つアプリケーションPDBにログインできます。CDBインスタンスの起動などの一部のタスクは、共通ユーザーのみが実行できます。
その他の管理タスクについては、CDBと非CDBとで違いはありません。表41-1は、これらのタスクの一部についての説明と、関連ドキュメントへのポインタを示しています。
表41-1 CDBと非CDBに共通する管理タスク
タスク | 説明 | 関連情報 |
---|---|---|
CDBインスタンスの起動 |
CDBインスタンスを起動するには、現在のユーザーは、その現在のコンテナがCDBルートである共通ユーザーである必要があります。 CDBをオープンすると、CDBルートがオープンされますが他のコンテナはマウントされます。 |
|
プロセスの管理 |
CDBには、CDBルートとすべてのコンテナによって共有された1セットのバックグラウンド・プロセスが存在します。 |
|
メモリーの管理 |
CDBには、単一のシステム・グローバル領域(SGA)および単一の集計プログラム・グローバル領域(PGA)があります。CDBで必要なメモリーは、CDBに含められるすべてのコンテナのメモリー要件の合計となります。 |
|
セキュリティの管理 |
CDBでは、共通ユーザー、アプリケーション共通ユーザーおよびローカル・ユーザーを作成および削除できます。また、これらのユーザーに対して権限の追加および取消しを行うこともできます。共通ユーザーおよびアプリケーション共通ユーザーの さらに、次のロールを適切なユーザーに付与します。
|
|
エラーおよびアラートの監視 |
CDBには、CDB全体について1つのアラート・ログが存在します。アプリケーション・コンテナ、PDBまたはアプリケーションPDBの名前は、該当する場合にトレース・ファイルのレコードに含まれます。 |
|
診断データの管理 |
CDBでは、Oracle Databaseの障害診断インフラストラクチャおよび自動診断リポジトリ(ADR)を使用できます。 |
|
制御ファイルの管理 |
CDBには1つの制御ファイルが存在します。 |
|
オンラインREDOログ・ファイルおよびアーカイブREDOログ・ファイルの管理 |
CDBには、1つのオンラインREDOログ・ファイルおよび1セットのアーカイブREDOログ・ファイルが存在します。 |
|
表領域の管理 |
CDBルートおよび個々のコンテナの表領域および一時表領域を作成、変更および削除できます。また、CDBルートのデフォルトの表領域、デフォルトの表領域タイプおよびデフォルトの一時表領域を指定することもできます。CDBルートには、オラクル社が提供する表領域( |
|
データファイルおよび一時ファイルの管理 |
CDBルートには独自のデータファイルがあり、他のコンテナには独自のデータファイルがあります。CDBでは、非CDBの場合と基本的に同じ方法でデータファイルと一時ファイルを管理できます。ただし、CDBには次の例外が適用されます。
|
|
UNDOの管理 |
CDBは、ローカルUNDOモードまたは共有UNDOモードで実行できます。ローカルUNDOモードは、CDB内のすべてのコンテナがローカルUNDOを使用することを意味します。共有UNDOモードは、単一インスタンスCDBに1つのアクティブなUNDO表領域があるか、Oracle RAC CDBの場合はインスタンスごとに1つのアクティブなUNDO表領域があることを意味します。 CDBでは、 |
|
コンテナ間のデータの移動 |
非CDB間でデータを移動する場合と同じ方法を使用して、コンテナ間でデータを移動できます。たとえば、データをトランスポートしたり、データ・ポンプ・エクスポートおよびインポートを使用してデータを移動できます。 |
|
Oracle Managed Filesの使用 |
Oracle Managed Filesを使用すると、CDBと非CDB両方の管理を簡素化できます。 |
|
透過的データ暗号化は、個々の表の列をデータファイルに格納する前に暗号化するか、表領域全体を暗号化する機能です。CDBには、コンテナごとに透過的データ暗号化の独自のマスター・キーが存在し、適用可能な場合、 |
||
Oracle Data Guardを使用すると、CDBのフィジカル・スタンバイまたはロジカル・スタンバイを構成できます。Data Guardは、CDB内の個々のコンテナではなくCDB全体を操作します。 |
||
Oracle Database Vault共通レルムは、共通オブジェクトのアプリケーション・ルートにスコープ指定できます。Database Vault共通コマンド・ルールは、CDBまたはアプリケーション・ルートにスコープ指定できます。ローカル・レルムとコマンド・ルールは、個々のPDBまたはアプリケーションPDBにローカルにスコープ指定できます。Oracle Database Vaultセキュリティ・オブジェクトがCDBルートまたはアプリケーション・ルートにある場合は、セキュリティ・オブジェクトの施行はOracle Database Vaultが有効になっているコンテナにのみ適用されます。 |
||
データベースの削除 |
CDBを削除すると、CDB内のすべてのコンテナがデータとともに削除されます。これらのコンテナには、CDBルートおよびCDBシードと、すべてのアプリケーション・コンテナ、アプリケーション・シード、PDBおよびアプリケーションPDBが含まれます。
|
関連項目:
CDBのアーキテクチャの詳細は、『Oracle Database概要』を参照してください。
親トピック: CDBの管理について
41.1.3 CDBにおける管理性機能の使用について
CDB内のOracle Databaseの各管理機能について、データの場所とデータの可視性を理解することが重要です。
CDBにおいて、Oracle Databaseの管理性機能のためのデータがどこに格納されるかを理解することは重要です。この機能のためデータがCDBルートにのみ格納されている場合、PDBが切断されていると、PDBに関連するデータは含められません。ただし、この機能のためデータがPDBに格納されている場合、PDBに関連するデータはPDBが切断されていても含められ、PDBが同じCDBまたは別のCDBに接続されると、このデータはPDBの一部として存続します。
また、異なるユーザーに対して表示されるデータについて理解することも重要です。通常、CDBでは、共有ユーザーの現在のコンテナがCDBルートである場合、共通ユーザーはCDBルートおよび複数のPDBのデータを表示できます。共通ユーザーは、コンテナ・データ・オブジェクトを問い合せてこのデータを表示できます。表示できる特定のデータは、管理性機能によって異なります。現在のコンテナがPDBであるユーザーは、そのPDBのデータのみを表示できます。
表41-2で、CDBにおける管理性機能の動作について説明します。
表41-2 CDBにおける管理性機能
管理性機能 | データの場所 | データの可視性 | 関連情報 |
---|---|---|---|
アクティブ・セッション履歴(ASH) ASHにより、アクティブ・データベース・セッションに関する情報が収集されます。この情報を使用して、パフォーマンス上の問題を分析および識別できます。 |
ほとんどのASHデータは、メモリーに格納されます。ごく一部のASHデータ・サンプルは、CDBルートに格納されます。 PDBが切断されていると、PDBに関連するASHデータは含まれません。 |
現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのASHデータを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのASHデータのみを表示できます。 |
|
アラート アラートとは、考えられる問題の通知です。 |
PDBに関連するしきい値設定は、PDBに格納されます。 しきい値に違反したときに転送されるアラートは、CDBルートのアラート・キューにエンキューされます。 PDBに関連するしきい値設定は、PDBが切断されていても含まれます。PDBが切断されていると、PDBに関連するアラートは含まれません。 |
現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのアラートを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのアラートしきい値およびアラートのみを表示できます。 |
|
自動データベース・メンテナンス・タスク 自動化データベース・メンテナンス・タスクとは、データベースのメンテナンス操作を実行するために、一定の間隔をおいて自動的に開始されるタスクです。自動タスクには、自動オプティマイザ統計収集、自動セグメント・アドバイザ・タスクおよび自動SQLチューニング・アドバイザ・タスクが含まれます。
|
ユーザーは、メンテナンス期間をスケジュールして、現在のコンテナのみのメンテナンス・タスクを有効または無効にできます。現在のコンテナがCDBルートである場合、変更はCDBルートにのみ適用されます。現在のコンテナがPDBの場合、変更はPDBにのみ適用されます。 PDBに関連するデータは、自動オプティマイザ統計収集および自動セグメント・アドバイザのPDBに格納されます。このデータは、PDBが切断されていても含まれます。 自動SQLチューニング・アドバイザは、CDBルートでのみ実行されます。自動SQLチューニング・アドバイザによって収集されたデータの詳細は、この表のSQLチューニング・アドバイザの行を参照してください。 |
管理性機能(自動オプティマイザ統計収集、オプティマイザ統計アドバイザ、自動セグメント・アドバイザおよび自動SQLチューニング・アドバイザ)に関するデータの可視性の詳細は、この表の適切な行を参照してください。 |
|
自動データベース診断モニター(ADDM) ADDMを使用すると、データベースのパフォーマンスを診断して、識別された問題の解決方法を判断できます。 |
ADDMによって実行されるものはすべて、CDBルートで実行する必要があります。すべてのADDM結果はCDBルートに格納されます。 ADDMにより、現在の分析ターゲットのコンテキスト内でPDBのアクティビティが分析されます。ADDMでは、一度に1つのPDBを分析するわけではありません。以前のリリースと同様に、ADDMは、インスタンス全体またはOracle Real Application Clusters (Oracle RAC)データベースのいずれかのターゲットを使用して実行されます。 PDBが切断されていると、PDBに関連するADDM結果は含まれません。 |
ADDM結果は、現在のコンテナがCDBルートである共通ユーザーにのみ表示されます。ADDM結果には、複数のPDBに関する情報が含まれる場合があります。現在のコンテナがPDBである場合、ADDM結果を表示することはできません。 |
|
自動オプティマイザ統計収集 自動オプティマイザ統計収集により、データベース内に統計がないか、古い統計のみがあるすべてのスキーマ・オブジェクトに関するオプティマイザ統計を収集します。このタスクで収集された統計は、SQLの実行パフォーマンスを改善するためにSQL問合せオプティマイザによって使用されます。 |
自動オプティマイザ統計収集タスクによりPDBのデータが収集されると、このデータはPDBに格納されます。このデータは、PDBが切断されていても含まれます。 |
現在のコンテナがCDBルートである共通ユーザーは、PDBのオプティマイザ統計データを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのオプティマイザ統計データのみを表示できます。 |
|
自動セグメント・アドバイザ 自動セグメント・アドバイザでは、再生可能な領域が存在しているセグメントを識別し、それらのセグメントの断片化を解消する方法について推奨事項を生成します。 |
自動セグメント・アドバイザによってPDBのデータが収集されると、このデータはPDBに格納されます。このデータは、PDBが切断されていても含まれます。 |
現在のコンテナがCDBルートである共通ユーザーは、PDBの自動セグメント・アドバイザ・データを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBの自動セグメント・アドバイザ・データのみを表示できます。 |
|
自動ワークロード・リポジトリ(AWR) AWRにより、問題の検出および自己チューニングを目的として、パフォーマンス統計を収集、処理およびメンテナンスします。このデータはデータベースに格納されます。採取したデータは、レポートおよびビューで表示できます。 |
AWRレポートは、CDBルートまたはPDBで生成できます。CDBルートで生成されたAWRレポートはCDB全体に関係し、PDBが現在のコンテナであるときに生成されたAWRレポートはそのPDBにのみ関係します。 CDBルートで生成されたAWRデータは、そのCDBルートに格納されます。PDBで生成されたAWRデータは、PDBに格納されます。 PDBが切断されている場合、CDBルートに格納されているAWRデータは含められません。 PDBに格納されたAWRデータは、PDBが切断されていても含められます。 |
現在のコンテナがCDBルートである共通ユーザーは、CDBルートとPDBのAWRデータを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのAWRデータのみを表示できます。 |
|
データベース・リプレイ データベース・リプレイは、Oracle Real Application Testingの機能です。データベース・リプレイは、データベースのワークロードを取得して、テスト・データベースで正確にそれをリプレイします。 |
データベースの取得およびリプレイに関する情報は、CDBルートに保存されます。 |
現在のコンテナがCDBルートである共通ユーザーは、データベースの取得およびリプレイの情報を表示できます。 |
|
オプティマイザ統計アドバイザ オプティマイザ統計アドバイザは、統計の収集方法を分析し、統計収集を微調整するために行うことのできる変更を提案します。 |
PDBに関連するデータは、オプティマイザ統計アドバイザのPDBに格納されます。このデータは、PDBが切断されていても含まれます。 |
現在のコンテナがCDBルートである共通ユーザーは、PDBのオプティマイザ統計アドバイザ・データを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのオプティマイザ統計アドバイザ・データのみを表示できます。 |
|
SQL管理ベース(SMB) SMBにより、文のログ、計画履歴、SQL計画ベースラインおよびSQLプロファイルが、データ・ディクショナリに格納されます。 |
PDBに関連するSMBデータは、PDBに格納されます。PDBに関連するSMBデータは、PDBが切断されていても含められます。 |
現在のコンテナがCDBルートである共通ユーザーは、PDBのSMBデータを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのSMBデータのみを表示できます。 |
|
SQLパフォーマンス・アナライザ(SPA) SPAでは、SQLチューニングおよびその他のシステム変更がSQLパフォーマンスに及ぼす影響を分析できます。通常、SPAはデータベース・リプレイで使用されます。 |
現在のコンテナがCDBルートである共通ユーザーは、任意のPDBのSPAを実行できます。この場合、SPAの結果データはCDBルートに格納され、PDBが切断されている場合は含められません。 現在のコンテナがPDBであるユーザーは、そのPDBについてSPAを実行できます。この場合、SPA結果データはPDBに格納され、PDBが切断されていても含められます。 |
現在のコンテナがCDBルートである共通ユーザーは、PDBのSPA結果データを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのSPA結果データのみを表示できます。 |
|
SQLチューニング・セット(STS) STSは、1つ以上のSQL文とその実行統計および実行コンテキストを含むデータベース・オブジェクトで、ユーザーの優先順位ランキングを含む場合があります。 STSを使用すると、SQL文のグループをチューニングしたり、SPAを使用してパフォーマンスをテストできます。 |
STSはCDBルートまたは任意のPDBに格納できます。CDBルートに格納されている場合は、任意のPDBからSQL文をロードできます。 PDBが切断されていると、STSにPDBからのSQL文が含まれている場合でも、CDBルートに格納されたSTSは含められません。 PDBに格納されたSTSは、PDBが切断されていても含められます。 |
現在のコンテナがCDBルートである共通ユーザーは、CDBルートに格納されたSTSデータのみを表示できます。 現在のコンテナがPDBであるユーザーは、そのPDBのSTSデータのみを表示できます。 |
|
SQLチューニング・アドバイザ SQLチューニング・アドバイザでは、高負荷SQL文として識別されたSQL文が最適化されます。 |
自動SQLチューニング・アドバイザ・データは、CDBルートに格納されます。このデータには、PDBで実行され、アドバイザによって分析されたSQL文に関する結果が含まれていることがありますが、PDBが切断されている場合、これらの結果は含まれません。 現在のコンテナがCDBルートである共通ユーザーは、任意のPDBからのSQL文についてSQLチューニング・アドバイザを手動で実行できます。文をチューニングすると、その文を実行する任意のコンテナでチューニングされます。 現在のコンテナがPDBであるユーザーも、PDBからのSQL文についてSQLチューニング・アドバイザを手動で実行できます。SQLチューニング・アドバイザがPDBから手動で実行される場合、その結果は実行元のPDBに格納されます。この場合、文は現在のPDB用にのみチューニングされ、PDBが切断されているとPDBに関連する結果が含まれます。 |
SQLチューニング・アドバイザが自動的に実行される場合、その結果は、現在のコンテナがCDBルートである共通ユーザーにのみ表示されます。現在のコンテナがPDBである場合、これらの結果を表示することはできません。 SQLチューニング・アドバイザが、現在のコンテナがPDBであるユーザーによって手動で実行された場合、結果は現在のコンテナがそのPDBであるユーザーにのみ表示されます。 |
SPAまたはSQLチューニング・アドバイザをPDBからのSQL文について実行するには、共通ユーザーに次の権限が必要です。
-
PDBにおける共通権限
SET
CONTAINER
またはローカル権限SET
CONTAINER
-
PDBでSQL文を実行するために必要な権限
関連項目:
-
コンテナ・データ・オブジェクトの概要については、「ビューにおけるCDBおよびPDB情報について」を参照してください
-
コンテナ・データ・オブジェクトの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
親トピック: CDBの管理について
41.1.4 CDBにおけるデータベース・オブジェクトの管理について
CDBでは、異なるコンテナに異なるデータベース・オブジェクトを含めることができます。
Oracle Databaseには、表、索引、ディレクトリなどのデータベース・オブジェクトが格納されます。スキーマに所有されているデータベース・オブジェクトはスキーマ・オブジェクトと呼ばれ、スキーマによって所有されていないデータベース・オブジェクトは非スキーマ・オブジェクトと呼ばれます。ルートおよびPDBにはスキーマが含まれ、スキーマにはスキーマ・オブジェクトが含まれています。ルートおよびPDBに、ユーザー、ロール、表領域、ディレクトリ、エディションなどの非スキーマ・オブジェクトを含めることもできます。
CDBでは、ルートにはオラクル社が提供するスキーマおよびデータベース・オブジェクトが含まれています。SYS
やSYSTEM
などのオラクル社が提供する共通ユーザーは、これらのスキーマおよび共通データベース・オブジェクトを所有します。また、これらのユーザーは、ルートとPDBの両方にローカル・オブジェクトを所有することもできます。
ルートに共通ユーザーを作成して、CDBのコンテナを管理できます。ユーザーが作成した共通ユーザーは、ルートにデータベース・オブジェクトを作成できます。ルートでは、ユーザーが作成した共通ユーザーによって所有されるスキーマには、データベース・トリガーおよびそれらの定義で使用されるオブジェクトのみを含めることをお薦めします。ユーザーが作成した共通ユーザーは、PDBの任意のタイプのローカル・オブジェクトを所有することもできます。
PDBにローカル・ユーザーを作成できます。PDBのローカル・ユーザーは、PDBにスキーマ・オブジェクトおよび非スキーマ・オブジェクトを作成できます。ルートにローカル・ユーザーを作成することはできません。
CDBでの名前解決は、非CDBでの名前解決と似ていますが、ユーザーの現在のコンテナの、ディクショナリのコンテキストで名前が解決されることが異なります。
関連項目:
-
スキーマ・オブジェクトおよび非スキーマ・オブジェクトの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
共通ユーザーおよびローカル・ユーザーの概要は、『Oracle Database概要』を参照してください。
-
共通ユーザーおよびローカル・ユーザーの作成の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
親トピック: CDBの管理について
41.1.5 PDBのフラッシュ・バックについて
FLASHBACK PLUGGABLE DATABASE
文を使用して、PDBを過去の時点またはシステム変更番号(SCN)に戻すことができます。
PDBのリストア・ポイントを作成して、CDBまたは他のPDBに影響を与えずに、PDBをリストア・ポイントにフラッシュバックできます。
親トピック: CDBの管理について
41.1.6 セキュリティを強化するためのPDBユーザーの制限について
セキュリティを強化するためにPDBユーザーを制限する方法はいくつかあります。PDBロックダウン・プロファイルは、特定のPDB内のユーザーが使用可能な機能とオプションを制限します。PDB_OS_CREDENTIAL
初期化パラメータでは、PDBに一意のオペレーティング・システム・ユーザーを指定して、オペレーティング・システム・アクセスを制限できます。また、PATH_PREFIX
およびCREATE_FILE_DEST
句がPDBの作成時に指定された場合は、ファイル・システム・アクセスを制限します。
PDBロックダウン・プロファイル
アイデンティティがPDB間で共有される場合は、過剰な権限が存在することがあります。ロックダウン・プロファイルを使用すると、この過剰な権限を防止できます。IDは、次の状況で共有できます。
-
オペレーティング・システム・レベルでは、データベースがファイルやプロセスなどのオペレーティング・システム・リソースと対話するとき
-
ネットワーク・レベルでは、データベースが他のシステムと通信するとき
-
データベースの内部では、PDBが共通オブジェクトをアクセスまたは作成するか、データベース・リンクなどの機能を使用してコンテナ境界を越えて通信するとき
セキュリティを高めるために、CDB管理者はPDBロックダウン・プロファイルを使用して特定のPDBのユーザーを制限できます。PDBロックダウン・プロファイルでは、ALTER SYSTEM
文などの指定したSQL文をユーザーが実行できないようにしたり、UTL_SMTP
パッケージなど、ネットワークにアクセスできるパッケージへのアクセスを無効にしたりできます。PDBロックダウン・プロファイルでは、共通ユーザー、共通オブジェクトおよび管理ツール(Oracle XML DB、管理機能(カーソル共有など)、データベース・オプション(Oracle Databaseアドバンスト・キューイングなど)など)へのアクセスも制限できます。PDBロックダウン・プロファイルでは、XDB_PROTOCOLS
機能でPDBによるXDBプロトコル(FTP、HTTP、HTTPS)の使用を禁止できます。
PDBロックダウン・プロファイルは、CREATE LOCKDOWN PROFILE
文を使用してCDBに作成します。制約を追加および削除するには、ALTER LOCKDOWN PROFILE
文を使用します。共通SYSDBA
権限または共通ALTER SYSTEM
権限を持つ共通ユーザーのみが、ロックダウン・プロファイルを作成または変更できます。
PDBロックダウン・プロファイルは、PDB_LOCKDOWN
初期化パラメータを使用して指定します。このパラメータを設定できるのは、設定されたPDBのみにプロファイルが適用されるPDBレベルか、すべてのPDBにプロファイルが適用されるCDBレベルのいずれかです。共通ユーザーは特定のPDBに対するCDB全体の設定をオーバーライドできますが、これはユーザーに共通SYSDBA
権限または共通ALTER SYSTEM
権限がある場合のみです。
関連項目:
-
CREATE LOCKDOWN PROFILE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
PDB_LOCKDOWN
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください
PDB_OS_CREDENTIAL初期化パラメータ
データベースがextproc
エージェントで外部プロシージャにアクセスする際に、PDB_OS_CREDENTIAL
初期化パラメータはPDBからオペレーティング・システムと対話するときに採用されるオペレーティング・システム・ユーザー(OSユーザー)のIDを決定します。名前がPDB_OS_CREDENTIAL
初期化パラメータの値として指定された資格証明で記述されるOSユーザーを使用すると、オペレーティング・システムの対話が強力な権限を持たないユーザーとして実行され、あるPDBに属するデータを別のPDBに接続しているユーザーからアクセスできないように保護する機能が提供されます。資格証明は、DBMS_CREDENTIAL
パッケージ内のCREATE_CREDENTIAL
プロシージャを使用して作成されるオブジェクトです。
Oracle OSユーザーは、通常は高い権限を持つユーザーであり、オペレーティング・システムの対話にこのユーザーを使用することはお薦めしません。また、異なるPDBからのオペレーティング・システムの対話に同じOSユーザーを使用すると、特定のPDBに属するデータが危険にさらされる可能性があります。
関連項目:
-
PDB_OS_CREDENTIAL
初期化パラメータの詳細は、Oracle Databaseリファレンスを参照してください
PATH_PREFIXおよびCREATE_FILE_DEST PDB作成句
CREATE PLUGGABLE DATABASE
文のPATH_PREFIX
句は、PDBと関連付けられているすべてのディレクトリ・オブジェクト・パスが、指定したディレクトリまたはそのサブディレクトリに制限されるようにします。また、PDBに関連付けられているファイル(PDBのOracle XMLリポジトリ、CREATE PFILE
文で作成されたファイル、およびOracleウォレットのエクスポート・ディレクトリ)が、指定されたディレクトリに制限されるようにします。
CREATE PLUGGABLE DATABASE
文のCREATE_FILE_DEST
句は、PDBに属するすべてのデータベース・ファイルが、指定したディレクトリまたはそのサブディレクトリに制限されるようにします。この句を使用すると、PDBでOracle Managed Filesが有効になり、PDBのファイルのデフォルトのファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定できます。
親トピック: CDBの管理について
41.2 SQL*Plusを使用したCDB内のコンテナへのアクセス
SQL*Plusを使用してCDB内のコンテナにアクセスできます。
- SQL*Plusを使用したCDB内のコンテナへのアクセスについて
SQL*Plusを使用して、CDB内のルートまたはPDBにアクセスできます。SQL*PlusCONNECT
コマンドを使用してコンテナに接続するか、またはALTER
SESSION
SET
CONTAINER
SQL文を使用してコンテナに切り替えることができます。 - SQL*Plus CONNECTコマンドを使用したコンテナへの接続
SQL*PlusCONNECT
コマンドを使用してルートまたはPDBに接続できます。 - ALTER SESSION文を使用したコンテナへの切替え
共通ユーザーとしてコンテナに接続している場合、ALTER SESSION
文を使用して、別のコンテナおよびアプリケーション・サービスに切り替えることができます。
親トピック: SQL*Plusを使用したCDBの管理
41.2.1 SQL*Plusを使用したCDB内のコンテナへのアクセスについて
SQL*Plusを使用してCDB内のルートまたはPDBにアクセスできます。SQL*Plus CONNECT
コマンドを使用してコンテナに接続するか、またはALTER
SESSION
SET
CONTAINER
SQL文を使用してコンテナに切り替えることができます。
この項では、SQL*Plusで非CDBに接続する方法を理解していることを想定しています。詳細は、「データベースに対するコマンドとSQLの発行」を参照してください。
クライアントからは、データベース・サービスを使用してルートまたはPDBにアクセスします。データベース・サービスには、オプションのPDB
プロパティがあります。PDBが作成されると、PDBの新しいデフォルト・サービスが自動的に作成されます。サービスには、PDBと同じ名前が付いています。サービス名を使用すると、簡易接続構文またはtnsnames.oraファイル内のネット・サービス名を使用してPDBにアクセスできます。このサービスにアクセスするクライアントには、Oracle Net Serviceが正しく構成されている必要があります。
ユーザーがnull以外のPDB
プロパティを含むサービスを使用して接続する場合、ユーザー名は指定したPDBのコンテキストで解決されます。ユーザーがサービスを指定しないか、またはnullのPDB
プロパティを含むサービス名を使用して接続する場合、ユーザー名はルートのコンテキストで解決されます。サービスのPDB
プロパティを表示するには、CDB_SERVICES
データ・ディクショナリ・ビューを問い合せるか、またはconfig
service
コマンドをSRVCTLユーティリティで実行します。
SESSIONS
初期化パラメータの設定によって、PDBに接続されたセッションなどのCDBで使用できるセッションの合計数が制限されます。CDBの制限に達すると、ユーザーはPDBに接続できなくなります。1つのPDBで過剰なセッションが使用されないようにするには、PDBでSESSIONS
初期化パラメータを設定して、PDBで使用できるセッションの数を制限できます。
注意:
同じコンピュータ・システム上の2つ以上のCDBで同じリスナーが使用され、これらのCDB内で2つ以上のPDBが同じサービス名を持つ場合、このサービス名を指定する接続は、そのサービス名のPDBの1つにランダムに接続します。不正に接続されることを回避するには、コンピュータ・システム上のPDBのすべてのサービス名が一意であることを確認するか、コンピュータ・システム上の各CDBに別のリスナーを構成します。
関連項目:
-
CDBのデータベース・サービスの詳細は、『Oracle Database概要』を参照してください。
-
Oracle Net Servicesの構成の詳細は、『Oracle Database Net Services管理者ガイド』を参照してください。
親トピック: SQL*Plusを使用したCDB内のコンテナへのアクセス
41.2.2 SQL*Plus CONNECTコマンドを使用したコンテナへの接続
SQL*Plus CONNECT
コマンドを使用してルートまたはPDBに接続できます。
- SQL*Plus CONNECTコマンドを使用したルートへの接続
非CDBに接続する場合と同じ方法でルートに接続できます。 - SQL*Plus CONNECTコマンドを使用したPDBへの接続
SQL*PlusCONNECT
コマンドを使用してPDBに接続するには、簡易接続またはネット・サービス名を使用できます。
親トピック: SQL*Plusを使用したCDB内のコンテナへのアクセス
41.2.2.1 SQL*Plus CONNECTコマンドを使用したルートへの接続
非CDBに接続する場合と同じ方法でルートに接続できます。
具体的には、SQL*Plus CONNECT
コマンドでルートに接続するために、次の手法を使用できます。
-
ローカル接続
-
オペレーティング・システム認証を使用したローカル接続
-
簡易接続を使用したデータベース接続
-
サービス名を使用したデータベース接続
-
外部認証を使用したリモート・データベース接続
ユーザーがルートに接続するには、次の前提条件を満たしている必要があります。
-
ユーザーは共通ユーザーである必要があります。
-
ユーザーは、ルートでの
CREATE
SESSION
権限を付与されている必要があります。
SQL*Plus CONNECTコマンドを使用してルートに接続するには:
-
SQL*Plusを起動できるよう、環境を構成します。
「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
/NOLOG
引数を使用してSQL*Plusを起動します。sqlplus /nolog
-
次の例のように、SQL*Plusの
CONNECT
コマンドを発行し、ルートとして接続します。
例41-1 ローカル接続を使用したルートへの接続
この例では、ユーザーSYSTEM
としてローカルCDBのルートに接続します。SQL*Plusによって、ユーザーSYSTEM
のパスワードの入力が求められます。
connect system
例41-2 オペレーティング・システム認証を使用したルートへの接続
この例では、オペレーティング・システム認証を使用してSYSDBA
管理権限でルートにローカルに接続します。
connect / as sysdba
例41-3 ネット・サービス名を使用したルートへの接続
CDBのルートのネット・サービス名が含まれるようにクライアントが構成されていると想定します。たとえば、ネット・サービス名をtnsnames.oraファイルのエントリに含めることができます。
この例では、共通ユーザーc##dba
として、ネット・サービス名mycdb
によって指定されたデータベース・サービスに接続します。SQL*Plusによって、ユーザーc##dba
のパスワードの入力が求められます。
connect c##dba@mycdb
関連項目:
41.2.2.2 SQL*Plus CONNECTコマンドを使用したPDBへの接続
SQL*Plus CONNECT
コマンドを使用してPDBに接続するには、簡易接続またはネット・サービス名を使用できます。
PDBに接続するには、ユーザーは次のいずれかである必要があります。
-
CREATE
SESSION
権限が共通に付与されているか、PDBでローカルに付与されている共通ユーザー -
CREATE
SESSION
権限を持つPDBで定義されたローカル・ユーザー
SYSDBA
、SYSOPER
、SYSBACKUP
またはSYSDG
権限を持つユーザーのみが、マウント・モードのPDBに接続できます。PDBのオープン・モードを変更するには、「PDBのオープン・モードの変更」を参照してください。
SQL*Plus CONNECTコマンドを使用してPDBに接続するには:
-
SQL*Plusを起動できるよう、環境を構成します。
「SQL*Plusを使用したデータベースへの接続」を参照してください。
-
/NOLOG
引数を使用してSQL*Plusを起動します。sqlplus /nolog
-
簡易接続またはネット・サービス名を使用してSQL*Plus
CONNECT
コマンドを発行し、PDBに接続します。
例41-4 PDBへの接続
PDBごとに各PDB名と一致するネット・サービス名を持つように、クライアントが構成されていると想定します。たとえば、ネット・サービス名をtnsnames.oraファイルのエントリに含めることができます。
次のコマンドにより、salespdb
PDB内のsh
ローカル・ユーザーに接続します。
CONNECT sh@salespdb
次のコマンドにより、salespdb
PDB内のSYSTEM
共通ユーザーに接続します。
CONNECT system@salespdb
他の例は、「ステップ4: SQL*PlusのCONNECTコマンドの発行」を参照してください。
41.2.3 ALTER SESSION文を使用したコンテナへの切替え
共通ユーザーとしてコンテナに接続している場合、ALTER SESSION
文を使用して、別のコンテナおよびアプリケーション・サービスに切り替えることができます。
次の文を使用して、別のコンテナおよびアプリケーション・サービスに切り替えることができます。
ALTER SESSION SET CONTAINER = container_name [SERVICE = service_name]
container_nameについては、次のいずれかを指定します。
-
CDBルートに切り替えるには
CDB$ROOT
-
CDBシードに切り替えるには
PDB$SEED
-
PDBに切り替えるにはPDB名
現在のコンテナがルートである場合、
DBA_PDBS
ビューを問い合せると、CDB内のPDBの名前を表示できます。
service_nameには、PDBで実行されているサービスを指定します。CDBルートを除くCDBのコンテナで実行されているサービスをリストするには、CDBルートが現在のコンテナであるときに次の問合せを発行します。
COL NAME FORMAT A30
COL CON_NAME FORMAT A20
SELECT NAME,CON_NAME, CON_ID
FROM V$ACTIVE_SERVICES
WHERE UPPER(NAME) != CON_NAME
AND CON_ID !=1
ORDER BY CON_ID;
デフォルトでは、コンテナに切り替えると、セッションはコンテナのデフォルト・サービスを使用します。ただし、PDBのデフォルト・サービスでは、すべてのサービス属性および機能(サービス・メトリック、高速アプリケーション通知(FAN)、ロード・バランシング、リソース・マネージャ、トランザクション・ガード、アプリケーション・コンティニュイティなど)がサポートされているわけではありません。ベスト・プラクティスは、SERVICE = service_name
(service_nameはサービスの名前)を指定することによって、コンテナにデフォルト以外のサービスを使用することです。
この新しい機能によって、接続プールでサービスを切り替えたり、プールの接続を使用した接続でPDBが必要な場合に切り替えることができます。Oracle Database 12cリリース2 (12.2.0.1)以降では、接続プールはUCP (Universal Connection Pool)を使用して複数のデータベース・サービスをサポートします。スタンドアロンで使用することもできます。
サービスを切り替える場合は、データベース・サービスの識別、優先順位、測定および高可用性が維持されたままで、アプリケーションをCDBに統合できます。デフォルト以外のサービスに切り替えると、次のような利点があります。
-
サービス属性および機能が維持されます。
-
これらのテナントに使用される接続が多すぎる過剰な接続プールがなくなります。
-
アプリケーションが、接続プールを過剰に消費することなく、ワークロード制御のためにデータベース・サービスをさらに使用できます。顧客は、データベース接続のサイズが大きくなりすぎることなく、サービスを使用したワークロードを識別し、優先することができます。
ALTER
SESSION
SET
CONTAINER
文を使用する場合は、次のことを考慮する必要があります。
-
文が正常に完了した後、セッションの現行スキーマは、指定されたコンテナの共通ユーザーが所有するスキーマに設定されます。
-
文が正常に完了した後、セキュリティ・コンテキストは、指定されたコンテナの共通ユーザーが所有するスキーマのセキュリティ・コンテキストにリセットされます。
-
文が正常に完了した後、指定されたコンテナのログイン・トリガーは起動されません。
トリガーが必要な場合は、
ALTER
SESSION
SET
CONTAINER
文が実行される前または後に起動するように、BEFOREまたはAFTERSET CONTAINER
トリガーをPDBで定義できます。 -
この文が正常に完了し、
SERVICE
句によってPDBにデフォルト以外のサービスが指定されている場合、セッションは設定されている属性(新しいサービスのメトリック、FAN、TAF、アプリケーション・コンティニュイティ、Transaction Guard、drain_timeout
およびstop_option
を含む)を使用して新しいサービスを使用します。 -
パッケージの状態は複数のコンテナにわたって共有されません。
-
PDBをクローズするとき、PDBに切り替えられたセッションおよびPDBに直接接続されたセッションは同様に処理されます。
-
トランザクションを複数のコンテナにわたって実行することはできません。トランザクションを開始し、
ALTER
SESSION
SET
CONTAINER
を使用して別のコンテナに切り替えると、そのトランザクションを開始したコンテナに再び切り替えるまで、DML、DDL、COMMIT
またはROLLBACK
文を発行できなくなります。 -
カーソルをオープンし、
ALTER
SESSION
SET
CONTAINER
を使用して別のコンテナに切り替えると、カーソルをオープンしたコンテナに再び切り替えるまで、このカーソルからデータをフェッチできなくなります。 -
接続プーリングおよび拡張CDB管理に、
SERVICE
句を指定したALTER
SESSION
SET
CONTAINER
文を使用できます。たとえば、マルチテナンシ・アプリケーションのPDBで、接続プーリングにこの文を使用できます。マルチテナンシ・アプリケーションでは、サーバー上のソフトウェアの単一インスタンスを使用して、複数の顧客(テナント)に対処します。非CDBでは、通常、アプリケーションで使用されるすべての表にテナントを識別する余分な列を追加することによってマルチテナンシがサポートされており、テナントは接続プールから接続をチェック・アウトします。PDBが含まれるCDBでは、テナントごとに独自のPDBを設定でき、接続プーリング構成で
ALTER
SESSION
SET
CONTAINER
文を使用できます。 -
複数のアプリケーションを処理する接続プールを使用している場合、アプリケーションは別のサービスのデータ・ソースを使用できます。
SERVICE
句を指定してALTER SESSION SET CONTAINER
文を使用すると、接続プールで多数のアプリケーションに同じ接続を使用して、サービスを共有できます。
ALTER
SESSION
SET
CONTAINER
文を使用するには、次の前提条件を満たしている必要があります。
-
現在のユーザーは共通ユーザーである必要があります。初期接続は、SQL*Plus
CONNECT
コマンドを使用して確立する必要があります。 -
Oracle Databaseで提供されていない共通ユーザーとして、セッションを変更してPDBに切り替える場合、現在のユーザーには、
SET
CONTAINER
権限が共通に付与されているか、またはこの権限がPDBでローカルに付与されている必要があります。
注意:
ALTER
SESSION
SET
CONTAINER
文を使用して現在のコンテナを切り替える場合、このような前提条件は強制されず、満たされていない場合、エラー・メッセージは返されません。
SERVICE
句を指定してALTER SESSION SET CONTAINER
文を発行する前に、次の前提条件を満たしている必要があります。
-
切り替える先のサービスがアクティブである必要があります。実行されていないサービスに切り替えることはできません。
-
サービス間で切り替える場合は、切り替える元のサービスと切り替える先のサービスのサービス属性が一致している必要があります。たとえば、切り替える元と切り替える先のサービスの両方が、TAFを持っているか、アプリケーション・コンティニュイティを使用しているか、
drain_timeout
設定がある必要があります。
ALTER SESSION文を使用してコンテナに切り替えるには:
-
SQL*Plusで、必要な権限を持つ共通ユーザーとしてコンテナに接続します。
「SQL*Plus CONNECTコマンドを使用したコンテナへの接続」を参照してください。
-
切替え先のコンテナの現在のオープン・モードを確認します。
ルートまたはPDBの現在のオープン・モードを確認するには、現在のコンテナがルートのときに、
V$CONTAINERS
ビューでOPEN_MODE
列を問い合せます。ルートのオープン・モードを変更する必要がある場合は、「データベースの可用性の変更」の手順に従って、オープン・モードを変更します。
PDBのオープン・モードを変更する必要がある場合は、「PDBのオープン・モードの変更」の手順に従って、オープン・モードを変更します。
ルートのオープン・モードにより、PDBのオープン・モードが制限されます。たとえば、PDBをオープンするには、ルートがオープンしている必要があります。したがって、PDBのオープン・モードを変更する前に、ルートのオープン・モードを変更することが必要な場合があります。
-
特定のサービスに切り替える場合は、そのサービスが実行されていることを確認します。
サービスのアクティブ・ステータスを確認するには、現在のコンテナがCDBルートであるときに
V$ACTIVE_SERVICES
ビューを問い合せます。サービスが実行されていない場合は、SRVCTLユーティリティまたは
DBMS_SERVICE
パッケージを使用して、サービスを開始します。 -
ALTER
SESSION
SET
CONTAINER
文を実行して、切替え先のコンテナを指定します。SERVICE
句を含めて、特定のアプリケーション・サービスに切り替えます。
次の例では、ALTER
SESSION
を使用して様々なコンテナに切り替えます。
例41-5 PDB salespdbへの切替えとsalesrepサービスの使用
ALTER SESSION SET CONTAINER = salespdb SERVICE = salesrep;
例41-6 PDB salespdbへの切替えとデフォルト・サービスの使用
ALTER SESSION SET CONTAINER = salespdb;
例41-7 CDBルートへの切替え
ALTER SESSION SET CONTAINER = CDB$ROOT;
例41-8 CDBシードへの切替え
ALTER SESSION SET CONTAINER = PDB$SEED;
例41-9 CDBルートのダミー・サービスを使用したサービスの切替え
コンテナおよびサービスを切り替える接続プールを設計するには、CDBルートにダミー・サービスを作成し、必要なすべての属性(たとえば、drain_timeout
、TAFまたはアプリケーション・コンティニュイティ)をこのダミー・サービスに設定することが1つの方法です。サービス属性は、CDBルートおよびPDB間で一致している必要があります。この方法を使用するには、次のステップを実行します。
-
最初に接続プールを作成するとき、および新しい接続を作成するときに、ダミー・サービスに接続します。
-
サービスが各PDBに追加されると、これらの実際のサービスに同じ属性が設定されます。
-
アプリケーションが接続を必要とする場合は、次のいずれかのアクションを実行します。
-
ダミー・サービスへの新しい接続を作成し、そのPDBおよびサービスに切替えます。
-
プールの空き接続を使用して、PDBおよびサービスに切り替えます。
PDB間で切り替える場合、CDBに戻る必要はありません。
-
PDB間で切り替える場合、CDBに戻る必要はありません。
関連項目:
-
ユニバーサル接続プールの詳細は、Oracle Universal Connection Pool開発者ガイドを参照してください
親トピック: SQL*Plusを使用したCDB内のコンテナへのアクセス
41.3 DBMS_SQLパッケージを使用したコンテナのコードの実行
CDBのコンテナ内でPL/SQLコードを実行する場合に別のコンテナで1つ以上のSQL文を実行する場合、DBMS_SQL
パッケージを使用してコンテナを切り替えます。
たとえば、複数のコンテナで同じアクションを実行する必要がある場合は、DBMS_SQL
パッケージを使用してコンテナを切り替えることができます。
コンテナの切替えにDBMS_SQL
を使用する場合、次を考慮します。
-
トランザクションを複数のコンテナにわたって実行することはできません。
ターゲット・コンテナ内で実行する必要のあるアクションのセットがトランザクションである必要がある場合、最終アクションとしてコミットまたはロールバックを行う、自律型のトランザクションの使用を検討します。
-
SET
ROLE
文は許可されていません。
例41-10 複数のコンテナでの同一のアクションの実行
次の例のPL/SQLブロックは、2つのPDB (pdb1
およびpdb2
)のhr
スキーマにidentact
表を作成します。この例では、両方のPDBのidentact
表に行も挿入します。
DECLARE c1 INTEGER; rowcount INTEGER; taskList VARCHAR2(32767) := 'DECLARE PRAGMA AUTONOMOUS TRANSACTION; BEGIN -- Create the hr.identact table. EXECUTE IMMEDIATE ''CREATE TABLE hr.identact (actionno NUMBER(4) NOT NULL, action VARCHAR2 (10))''; EXECUTE IMMEDIATE ''INSERT INTO identact VALUES(1, 'ACTION1')''; -- A commit is required if the tasks include DML. COMMIT; EXCEPTION WHEN OTHERS THEN -- If there are errors, then drop the table. BEGIN EXECUTE IMMEDIATE ''DROP TABLE identact''; EXCEPTION WHEN OTHERS THEN NULL; END; END;'; TYPE containerListType IS TABLE OF VARCHAR2(128) INDEX BY PLS_INTEGER; containerList containerListType; BEGIN containerList(1) := 'PDB1'; containerList(2) := 'PDB2'; c1 := DBMS_SQL.OPEN_CURSOR; FOR conIndex IN containerList.first..containerList.last LOOP DBMS_OUTPUT.PUT_LINE('Creating in container: ' || containerList(conIndex)); DBMS_SQL.PARSE(c => c1 , statement => taskList, language_flag => DBMS_SQL.NATIVE, edition= > NULL, apply_crossedition_trigger => NULL, fire_apply_trigger => NULL, schema => 'HR', container => containerList(conIndex)); rowcount := DBMS_SQL.EXECUTE(c=>c1); END LOOP; DBMS_SQL.CLOSE_CURSOR(c=>c1); END; /
関連項目:
-
DBMS_SQL
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
自律型トランザクションの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
親トピック: SQL*Plusを使用したCDBの管理
41.4 CDBの変更
CDB全体、ルートまたは1つ以上のPDBを変更できます。
- CDBの変更について
ALTER
DATABASE
文はCDBを変更します。ALTER
PLUGGABLE
DATABASE
文では、1つ以上のPDBのオープン・モードを変更できます。 - CDBを変更する文について
現在のコンテナがルートである共通ユーザーとして接続した場合、ALTER
DATABASE
文は、CDBと非CDBとで同様に動作します。 - CDB内表領域の管理の概要
CDB内表領域を管理できます。 - CDB全体の変更
ALTER
DATABASE
文を使用して、ルートおよびPDBすべてを含むCDB全体を変更できます。ほとんどのALTER
DATABASE
文は、CDB全体を変更します。 - ルートの変更
ALTER
DATABASE
文を使用して、CDBのルートのみを変更できます。 - PDBのオープン・モードの変更
PDBのオープン・モードは、ALTER
PLUGGABLE
DATABASE
のSQL文またはSQL*PlusのSTARTUP
コマンドを使用して変更できます。 - CDB再起動時のPDBのオープン・モードの保持または破棄
pdb_save_or_discard_state句を指定してALTER
PLUGGABLE
DATABASE
SQL文を使用すると、CDBの再起動時に1つ以上のPDBのオープン・モードを保持できます。
親トピック: SQL*Plusを使用したCDBの管理
41.4.1 CDBの変更について
ALTER
DATABASE
文はCDBを変更します。ALTER
PLUGGABLE
DATABASE
文では、1つ以上のPDBのオープン・モードを変更できます。
表41-3に、ALTER
DATABASE
およびALTER
PLUGGABLE
DATABASE
文の句によって変更されるコンテナをリストします。
表41-3 CDBのコンテナを変更する文
CDB全体の変更 | ルートのみの変更 | 1つ以上のPDBの変更 |
---|---|---|
現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含む |
現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含む 次の句を含む これらの句を使用すると、特定のPDBにデフォルト以外の値を設定できます。 |
現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含む 現在のコンテナがPDBである場合、この句を含む 現在のコンテナがルートである共通ユーザーとして接続した場合、次の句を含む |
この項では、次の項目について説明します。
親トピック: CDBの変更
41.4.2 CDBを変更する文について
現在のコンテナがルートである共通ユーザーとして接続した場合、ALTER
DATABASE
文は、CDBと非CDBとで同様に動作します。
ほとんどのALTER
DATABASE
文は、CDB全体に影響します。例外については、表41-3の「ルートのみの変更」列にリストされています。
RENAME
GLOBAL_NAME
句を含むALTER
DATABASE
文を使用すると、CDBのドメインが変更され、CDBのドメインにデフォルト設定された各PDBのドメインに影響を及ぼします。
現在のコンテナがルートである共通ユーザーとして接続した場合、pdb_change_state句を含むALTER
PLUGGABLE
DATABASE
文を使用すると、複数のPDBのオープン・モードが変更されます。
現在のコンテナがPDBである場合、ALTER
DATABASE
文およびALTER
PLUGGABLE
DATABASE
文を使用すると、現在のPDBのみが変更されます。
親トピック: CDBの変更
41.4.3 CDB内表領域の管理
CDB内表領域を管理できます。
- CDB内表領域の管理について
表領域とは、記憶域を使用するデータベース・オブジェクト(表や索引など)の論理記憶域コンテナです。物理レベルでは、表領域のデータは、1つ以上のデータファイルまたは一時ファイルに格納されます。ALTER
DATABASE
文を使用すると、CDB内の表領域を管理できます。 - CDB内永続表領域の管理について
永続表領域を関連付けることができるコンテナは1つのみです。したがって、永続表領域はルートまたは1つのPDBと関連付けることができます。 - CDB内の一時表領域の管理について
CDB内の各コンテナには、独自のデフォルト一時表領域(または表領域グループ)があります。
親トピック: CDBの変更
41.4.3.1 CDB内表領域の管理について
表領域とは、記憶域を使用するデータベース・オブジェクト(表や索引など)の論理記憶域コンテナです。物理レベルでは、表領域のデータは、1つ以上のデータファイルまたは一時ファイルに格納されます。ALTER
DATABASE
文を使用すると、CDB内の表領域を管理できます。
CDBの表領域については、次のことを考慮する必要があります。
-
永続表領域を関連付けることができるコンテナは1つのみです。
-
コンテナに表領域を作成する場合、表領域はそのコンテナに関連付けられます。
-
ローカルUNDOがCDBに対して無効になっている場合、CDBには、アクティブなUNDO表領域が1つのみ存在するか、またはOracle RAC CDBのインスタンスごとにアクティブなUNDO表領域が1つ存在します。ローカルUNDOがCDBに対して有効になっている場合、CDB内の各コンテナには独自のUNDO表領域があります。
-
PDBがオープンされるOracle Real Application Clusters (Oracle RAC)クラスタの各ノードに、ローカルUNDO表領域が必要となります。
-
CDBルート、各PDB、各アプリケーション・ルート、各アプリケーションPDBなど、CDB内のコンテナごとに1つのデフォルト一時表領域があります。
親トピック: CDB内表領域の管理
41.4.3.2 CDB内永続表領域の管理について
永続表領域を関連付けることができるコンテナは1つのみです。したがって、永続表領域はルートまたは1つのPDBと関連付けることができます。
CDB内のコンテナごとに独自のデフォルト永続表領域が存在する必要があり、デフォルト永続表領域をコンテナ間で共有することはできません。表領域を明示的に割り当てられていないユーザーがコンテナに接続された場合、コンテナのデフォルト永続表領域を使用します。
親トピック: CDB内表領域の管理
41.4.3.3 CDB内の一時表領域の管理について
CDB内の各コンテナには、独自のデフォルト一時表領域(または表領域グループ)があります。
追加の一時表領域を個々のコンテナに作成して、コンテナの特定のユーザーをこれらの一時表領域に割り当てることができます。PDBを切断すると、その一時表領域も切断されます。
ユーザーにコンテナ内の一時表領域が明示的に割り当てられていない場合、ユーザーの一時表領域はコンテナのデフォルト一時表領域です。
親トピック: CDB内表領域の管理
41.4.4 CDB全体の変更
ALTER
DATABASE
文を使用して、ルートおよびPDBすべてを含むCDB全体を変更できます。ほとんどのALTER
DATABASE
文は、CDB全体を変更します。
これらの文のリストは、表41-3の「CDB全体の変更」列を参照してください。
CDB全体を変更するには、次の前提条件を満たしている必要があります。
-
現在のユーザーは、
ALTER
DATABASE
権限を持つ共通ユーザーである必要があります。 -
recovery_clauseを含む
ALTER
DATABASE
文を実行するには、共通に現在のユーザーにSYSDBA
管理権限が付与されている必要があります。この場合、接続時にAS
SYSDBA
を使用して、この権限を行使する必要があります。
CDB全体を変更するには:
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
CDB全体を変更する句を含む
ALTER
DATABASE
文を実行します。
例41-11 CDBの制御ファイルのバックアップ
このALTER
DATABASE
文では、recovery_clauseを使用して制御ファイルをバックアップします。
ALTER DATABASE BACKUP CONTROLFILE TO '+DATA/dbs/backup/control.bkp';
例41-12 CDBへのREDOログ・ファイルの追加
このALTER
DATABASE
文では、logfile_clauseを使用してREDOログ・ファイルを追加します。
ALTER DATABASE cdb ADD LOGFILE GROUP 4 ('/u01/logs/orcl/redo04a.log','/u02/logs/orcl/redo04b.log') SIZE 100M BLOCKSIZE 512 REUSE;
親トピック: CDBの変更
41.4.5 ルートの変更
ALTER
DATABASE
文を使用して、CDBのルートのみを変更できます。
現在のコンテナがルートである場合、これらのALTER
DATABASE
文を使用すると、PDBのいずれかを直接変更することなくルートが変更されます。これらの文のリストは、表41-3の「ルートのみの変更」列を参照してください。
これらの文には、CDB内のPDBにデフォルトを設定するものがあります。PDBのこれらのデフォルトを上書きするには、ALTER
PLUGGABLE
DATABASE
文を使用します。
ルートを変更するには、現在のユーザーにルートでのALTER
DATABASE
権限が必要です。
ルートを変更するには:
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
ルートを変更する句を含む
ALTER
DATABASE
文を実行します。
次の例では、ルートが変更されています。
現在のコンテナがルートであり、表領域を明示的に割り当てられていないユーザーは、ルートのデフォルト永続表領域を使用します。ALTER
DATABASE
文で指定された表領域は、ルートに存在している必要があります。
この文を実行すると、これ以降にルートで作成される表領域のデフォルトタイプはbigfileになります。この設定はPDBのデフォルトでもあります。
ALTER
DATABASE
文で指定された表領域または表領域グループは、ルートに存在している必要があります。
例41-13 ルートのデフォルト永続表領域の変更
このALTER
DATABASE
文では、DEFAULT
TABLESPACE
句を使用して、ルートのデフォルト永続表領域をroot_tbs
に設定します。
ALTER DATABASE DEFAULT TABLESPACE root_tbs;
例41-14 ルートのデータファイルのオンライン化
このALTER
DATABASE
文では、database_file_clauseを使用して、/u02/oracle/cdb_01.dbfデータファイルをオンライン化します。
ALTER DATABASE DATAFILE '/u02/oracle/cdb_01.dbf' ONLINE;
例41-15 ルートのデフォルト表領域タイプの変更
このALTER
DATABASE
文では、SET
DEFAULT
TABLESPACE
句を使用して、ルートのデフォルト表領域タイプをbigfileに変更します。
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;
例41-16 ルートのデフォルト一時表領域の変更
このALTER
DATABASE
文では、DEFAULT
TEMPORARY
TABLESPACE
句を使用して、ルートのデフォルト一時表領域をroot_temp
に設定します。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE root_temp;
親トピック: CDBの変更
41.4.6 PDBのオープン・モードの変更
PDBのオープン・モードは、ALTER
PLUGGABLE
DATABASE
のSQL文またはSQL*PlusのSTARTUP
コマンドを使用して変更できます。
- PDBのオープン・モードについて
PDBには様々なモードがあります。 - ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更について
現在のコンテナがルートである場合、pdb_change_state句を含むALTER
PLUGGABLE
DATABASE
文を使用すると、指定されたPDBのオープン・モードが変更されます。 - SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更について
現在のコンテナがルートである場合、STARTUP
PLUGGABLE
DATABASE
コマンドを使用すると、単一のPDBをオープンできます。 - ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更
pdb_change_state句を指定したALTER
PLUGGABLE
DATABASE
文を使用して、PDBのオープン・モードを変更できます。 - SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更
STARTUP
PLUGGABLE
DATABASE
コマンドを使用して、単一のPDBをオープンできます。
親トピック: CDBの変更
41.4.6.1 PDBのオープン・モードについて
PDBは様々なモードにすることができます。
表41-4で、使用可能なPDBモードについて説明します。
表41-4 PDBモード
モード | 説明 |
---|---|
|
読取り/書込みオープン・モードのPDBでは、問合せおよびユーザー・トランザクションを実行でき、ユーザーはREDOログを生成できます。 |
|
読取り専用オープン・モードのPDBでは、問合せは実行できますが、ユーザー変更を実行することはできません。 |
|
PDBが移行オープン・モードの場合は、PDBでデータベース・アップグレード・スクリプトを実行できます。
|
|
PDBは、マウント・モードでは、マウント・モードの非CDBと同じように動作します。どのオブジェクトの変更も行えず、またデータベース管理者のみがアクセス可能です。データファイルからの読取りも、データファイルへの書込みもできません。PDBに関する情報は、メモリー・キャッシュから削除されます。PDBのコールド・バックアップを実行できます。 |
読取り/書込み、読取り専用、移行の各オープン・モードは、PDBでのRESTRICTED
SESSION
権限を持つユーザーに制限できます。
PDBがマウント・モードまたは読取り専用モードの場合、データベース管理者は、CDBの共通ユーザーおよびロールを作成、変更または削除できます。PDBのオープン・モードが、読取り/書込みモードでオープンするように変更されると、CDBによって、これらの変更がPDBに適用されます。変更が適用される前には、PDBにおける共通ユーザーおよびロールの記述が、CDBの残りの部分における説明と異なる場合があります。
PDBをオープンすると、Oracle DatabaseによってPDBとCDBとの互換性がチェックされます。互換性違反が検出されるたびに、警告またはエラーが返されます。互換性違反が警告の場合、警告はアラート・ログに記録されますが、PDBは正常にオープンされ、警告メッセージは表示されません。互換性違反がエラーの場合は、PDBをオープンするときにPDBが不正に変更されたことを示すメッセージが表示され、エラーがアラート・ログに記録されます。エラーの原因となった状況を修正する必要があります。エラーがある場合、PDBはオープンできますが、PDBへのアクセスは互換性違反に対処できるよう、RESTRICTED
SESSION
権限を持つユーザーに制限されます。PDB_PLUG_IN_VIOLATIONS
ビューを問い合せることで、違反の説明を表示できます。
関連項目:
-
現在のコンテナがルートの場合に1つ以上のPDBのオープン・モードを変更するには、「PDBのオープン・モードの変更」を参照してください
-
現在のコンテナがPDBの場合にPDBのオープン・モードを変更するには、「ALTER PLUGGABLE DATABASE文を使用したPDBの変更」を参照してください
-
PDBのその他の属性を変更するには、「PDBの変更」を参照してください
親トピック: PDBのオープン・モードの変更
41.4.6.2 ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更について
現在のコンテナがルートである場合、pdb_change_state句を含むALTER
PLUGGABLE
DATABASE
文を使用すると、指定されたPDBのオープン・モードが変更されます。
次の表は、PDBのモードを変更するALTER
PLUGGABLE
DATABASE
文の句について説明しています。
表41-5 PDBのモードを変更するALTER PLUGGABLE DATABASEの句
句 | 説明 |
---|---|
|
読取り/書込みモードでPDBをオープンします。
|
|
読取り専用モードでPDBをオープンします。
|
|
移行モードでPDBをオープンします。
|
|
PDBをマウント・モードにします。
|
ALTER
PLUGGABLE
DATABASE
OPEN
文を発行するとき、オープンするPDBが、フィジカル・スタンバイ・データベースとして使用されているCDBに属している場合にはREAD
ONLY
がデフォルトとなり、それ以外の場合はREAD
WRITE
がデフォルトとなります。
変更するPDBは、次の方法で指定できます。
-
1つ以上のPDBをリストします。
-
すべてのPDBを変更するには、
ALL
を指定します。 -
リストされたPDBを除くすべてのPDBを変更するには、
ALL
EXCEPT
を指定します。
services句
services句を使用して、次の方法で単一PDBをオープンする場合に開始されるサービスを指定できます。
-
次の形式で、services句に1つ以上のサービスをリストします。
SERVICES = ('service_name' [,'service_name'] … )
-
次の例のように、services句に
ALL
を指定してすべてのPDBのサービスを開始します。SERVICES = ALL
-
次の形式でservices句に
ALL
EXCEPT
を指定して、リストされているサービスを除くすべてのPDBのサービスを開始します。SERVICES = ALL EXCEPT('service_name' [,'service_name'] … )
-
次の例のように、services句に
NONE
を指定して、PDBのデフォルト・サービスのみ開始し、他のPDBのサービスは開始しません。SERVICES = NONE
NONE
は、services句のデフォルト設定です。PDBのデフォルト・サービスは、services句の設定にかかわらず、常に開始されます。
instances句
Oracle Real Application Clusters (Oracle RAC) CDBの場合、instances句を使用して、PDBを変更するインスタンスを次の方法で指定できます。
-
次の形式で、instances句に1つ以上のインスタンスをリストします。
INSTANCES = ('instance_name' [,'instance_name'] … )
-
すべての実行中のインスタンスのPDBを変更するには、次の例のように、instances句に
ALL
を指定します。INSTANCES = ALL
-
リストされたインスタンスを除くすべてのインスタンスのPDBを変更するには、次の形式で、instancesに
ALL
EXCEPT
を指定します。INSTANCES = ALL EXCEPT('instance_name' [,'instance_name'] … )
また、Oracle RAC CDBでPDBをクローズする場合、次のオプションを含むrelocate句を使用できます。
-
現行インスタンスでPDBをクローズするには、デフォルトである
NORELOCATE
を指定します。 -
指定したインスタンスでPDBを再オープンするには、
RELOCATE
TO
を指定してインスタンス名を指定します。 -
Oracle Databaseで選択された別のインスタンス上のPDBを再オープンするには、
RELOCATE
を指定します。
注意:
services句とinstances句の両方が同じALTER PLUGGABLE DATABASE
文に指定されている場合、指定されたサービスは指定したインスタンスで開始されます。
relocate句
Oracle RAC CDBでPDBをクローズする場合、次のオプションを含むrelocate句を使用できます。
-
現行インスタンスでPDBをクローズするには、デフォルトである
NORELOCATE
を指定します。 -
指定したインスタンスでPDBを再オープンするには、
RELOCATE
TO
を指定してインスタンス名を指定します。 -
Oracle Databaseで選択された別のインスタンス上のPDBを再オープンするには、
RELOCATE
を指定します。
ALTER
PLUGGABLE
DATABASE
文を使用して、PDBのオープン・モードを変更するには、次の前提条件を満たしている必要があります。
-
現行ユーザーには、
SYSDBA
、SYSOPER
、SYSBACKUP
またはSYSDG
管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS
SYSDBA
、AS
SYSOPER
、AS
SYSBACKUP
またはAS
SYSDG
をそれぞれ使用して、権限を行使する必要があります。 -
RESTRICTED
SESSION
を有効にした場合、RESTRICTED
はPDBがオープンされているときに指定する必要があります。 -
Oracle RAC CDBでは、PDBが1つ以上のOracle RACインスタンスでオープンしている場合、このPDBを追加インスタンスでオープンできますが、このPDBがすでにオープンしているインスタンスと同じモードでオープンする必要があります。一部のインスタンスでPDBをクローズし、他のインスタンスでオープンできます。
ALTER PLUGGABLE DATABASE文の要件のサマリー
ALTER
PLUGGABLE
DATABASE
文を使用して、PDBのオープン・モードを変更するには、次の前提条件を満たしている必要があります。
-
現行ユーザーには、
SYSDBA
、SYSOPER
、SYSBACKUP
またはSYSDG
管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS
SYSDBA
、AS
SYSOPER
、AS
SYSBACKUP
またはAS
SYSDG
をそれぞれ使用して、権限を行使する必要があります。 -
RESTRICTED
SESSION
を有効にした場合、RESTRICTED
はPDBがオープンされているときに指定する必要があります。 -
Oracle RAC CDBでは、PDBが1つ以上のOracle RACインスタンスでオープンしている場合、このPDBを追加インスタンスでオープンできますが、このPDBがすでにオープンしているインスタンスと同じモードでオープンする必要があります。一部のインスタンスでPDBをクローズし、他のインスタンスでオープンできます。
ALTER
PLUGGAGLE
DATABASE
文を使用してPDBを特定のターゲット・モードにするには、次の表で説明されている要件を満たす必要があります。
表41-6 ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更
PDBのターゲット・モード | ALLキーワードが含まれている | FORCEキーワードが含まれている | ルートに必要なモード | 変更対象のPDBごとに必要なモード |
---|---|---|---|---|
読取り/書込み |
はい |
はい |
読取り/書込み |
マウント、読取り専用または読取り/書込み |
読取り/書込み |
はい |
いいえ |
読取り/書込み |
マウントまたは読取り/書込み |
読取り/書込み |
いいえ |
はい |
読取り/書込み |
マウント、読取り専用または読取り/書込み |
読取り/書込み |
いいえ |
いいえ |
読取り/書込み |
マウント済 |
読取り専用 |
はい |
はい |
読取り専用または読取り/書込み |
マウント、読取り専用または読取り/書込み |
読取り専用 |
はい |
いいえ |
読取り専用または読取り/書込み |
マウントまたは読取り専用 |
読取り専用 |
いいえ |
はい |
読取り専用または読取り/書込み |
マウント、読取り専用または読取り/書込み |
読取り専用 |
いいえ |
いいえ |
読取り専用または読取り/書込み |
マウント済 |
移行 |
はい |
適用なし |
読取り専用または読取り/書込み |
マウント済 |
移行 |
いいえ |
適用なし |
読取り専用または読取り/書込み |
マウント済 |
マウント済 |
はい |
適用なし |
読取り専用または読取り/書込み |
マウント、読取り専用、移行または読取り/書込み |
マウント済 |
いいえ |
適用なし |
読取り専用または読取り/書込み |
読取り専用、移行または読取り/書込み |
注意:
現在のコンテナがPDBである場合に、PDBのオープン・モードを変更することもできます。「ALTER PLUGGABLE DATABASE文を使用したPDBの変更」を参照してください。
親トピック: PDBのオープン・モードの変更
41.4.6.3 SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更について
現在のコンテナがルートである場合、STARTUP
PLUGGABLE
DATABASE
コマンドを使用すると、単一のPDBをオープンできます。
STARTUP
PLUGGABLE
DATABASE
コマンドの次のオプションを使用して、PDBをオープンします。
-
FORCE
読取り/書込みモードで再オープンする前に、オープン状態のPDBをクローズします。このオプションが指定されている場合、他のオプションは使用できません。
-
RESTRICT
PDBで
RESTRICTED
SESSION
システム権限を持つユーザーのみがそのPDBにアクセスできるようにします。OPEN
READ
WRITE
もOPEN
READ
ONLY
も指定されていない場合、PDBは、属しているCDBがフィジカル・スタンバイ・データベースのときは読取り専用モードでオープンされます。そうでないときは、PDBは読取り/書込みモードでオープンされます。 -
OPEN
open_pdb_optionsPDBを読取り/書込みモードまたは読取り専用モードでオープンします。
OPEN
READ
WRITE
またはOPEN
READ
ONLY
を指定できます。他のオプションを使用しないでOPEN
を指定した場合は、READ
WRITE
がデフォルトになります。
次の前提条件を満たしている必要があります。
-
現行ユーザーには、
SYSDBA
、SYSOPER
、SYSBACKUP
またはSYSDG
管理権限があり、その権限は共通に付与されているか、またはPDBでローカルで付与されている必要があります。ユーザーは、接続時にAS
SYSDBA
、AS
SYSOPER
、AS
SYSBACKUP
またはAS
SYSDG
をそれぞれ使用して、権限を行使する必要があります。 -
RESTRICTED
SESSION
を有効にした場合、RESTRICT
はPDBがオープンされているときに指定する必要があります。
また、STARTUP
PLUGGAGLE
DATABASE
コマンドを使用してPDBを特定のターゲット・モードにするには、次の表で説明されている要件を満たす必要があります。
表41-7 STARTUP PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更
PDBのターゲット・モード | FORCEオプションが含まれている | ルートに必要なモード | 変更対象のPDBの必要なモード |
---|---|---|---|
読取り/書込み |
はい |
読取り/書込み |
マウント、読取り専用または読取り/書込み |
読取り/書込み |
いいえ |
読取り/書込み |
マウント済 |
読取り専用 |
いいえ |
読取り専用または読取り/書込み |
マウント済 |
注意:
現在のコンテナがPDBである場合にPDBのオープン・モードを変更するには、STARTUP
コマンドを使用することもできます。「PDBでのSTARTUP SQL*Plusコマンドの使用」を参照してください。
親トピック: PDBのオープン・モードの変更
41.4.6.4 ALTER PLUGGABLE DATABASEを使用したPDBのオープン・モードの変更
pdb_change_state句を指定したALTER
PLUGGABLE
DATABASE
文を使用して、PDBのオープン・モードを変更できます。
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
pdb_change_state句を含む
ALTER
PLUGGABLE
DATABASE
文を実行します。
例41-17 リストされたPDBのオープン・モードの変更
この文は、PDB salespdb
およびhrpdb
のオープン・モードを読取り/書込みモードでオープンするよう変更します。
ALTER PLUGGABLE DATABASE salespdb, hrpdb OPEN READ WRITE;
この文は、PDB salespdb
のオープン・モードを読取り専用モードでオープンするよう変更します。RESTRICTED
により、PDBでのRESTRICTED
SESSION
権限を持つユーザーのみがPDBにアクセスできることを指定します。
ALTER PLUGGABLE DATABASE salespdb OPEN READ ONLY RESTRICTED;
この文は、PDB salespdb
のオープン・モードを移行モードでオープンするよう変更します。
ALTER PLUGGABLE DATABASE salespdb OPEN UPGRADE;
例41-18 すべてのPDBのオープン・モードの変更
次の問合せを実行して、CDBに関連付けられるPDBごとのオープン・モードを表示します。
SELECT NAME, OPEN_MODE FROM V$PDBS WHERE CON_ID > 2; NAME OPEN_MODE ------------------------------ ---------- HRPDB READ WRITE SALESPDB MOUNTED DWPDB MOUNTED
hrpdb
はすでに読取り/書込みモードであることに注意してください。salespdb
およびdwpdb
のオープン・モードを読取り/書込みモードでオープンするよう変更するには、次の文を使用します。
ALTER PLUGGABLE DATABASE ALL OPEN READ WRITE;
hrpdb
PDBはすでに読取り/書込みオープン・モードであるため、変更されません。2つのPDBはマウント・モードであり、1つのPDB (hrpdb
)は指定されたモード(読取り/書込み)であるため、この文はエラーを返しません。同様に、すべてのPDBがマウント・モードである場合、この文はエラーを返しません。
ただし、いずれかのPDBが読取り専用モードである場合、この文はエラーを返します。エラーを回避してCDB内ですべてのPDBを読取り/書込みモードで開くには、FORCE
キーワードを指定します。
ALTER PLUGGABLE DATABASE ALL OPEN READ WRITE FORCE;
FORCE
のキーワードが含まれていると、読取り専用モードのPDBを含むすべてのPDBは読取り/書込みモードでオープンされます。
例41-19 リストされたPDBを除くすべてのPDBのオープン・モードの変更
この文は、salespdb
およびhrpdb
を除くすべてのPDBのモードをマウント・モードに変更します。
ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb CLOSE IMMEDIATE;
注意:
PDBのオープン・モードを変更するALTER
PLUGGABLE
DATABASE
文は、インスタンス固有です。したがって、Oracle RACインスタンスに接続しているときにこの文を発行する場合、この文はそのインスタンスのPDBのオープン・モードにのみ影響を及ぼします。
関連項目:
-
PDBのその他の属性を変更するには、「PDBの変更」を参照してください
-
データベース・モードおよびその使用の詳細は、「データベースの可用性の変更」を参照してください
-
停止モードの詳細は、『Oracle Database概要』を参照してください。
親トピック: PDBのオープン・モードの変更
41.4.6.5 SQL*PlusのSTARTUPコマンドを使用したPDBのオープン・モードの変更
STARTUP
PLUGGABLE
DATABASE
コマンドを使用して、単一のPDBをオープンできます。
STARTUP
PLUGGABLE
DATABASE
コマンドを使用してPDBを変更するには:
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
STARTUP
PLUGGABLE
DATABASE
コマンドを実行します。
注意:
現在のコンテナがルートである場合、CDBインスタンスはSQL*PlusのSHUTDOWN
コマンドで常に停止されます。これを使用して個々のPDBをクローズすることはできません。
例41-20 STARTUPコマンドを使用してPDBを読取り/書込みモードでオープンする方法
STARTUP PLUGGABLE DATABASE hrpdb OPEN
例41-21 STARTUPコマンドを使用した読取り/書込み制限モードでのPDBのオープン
STARTUP PLUGGABLE DATABASE hrpdb RESTRICT
例41-22 STARTUPコマンドを使用してPDBを読取り専用制限モードでオープンする方法
STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY RESTRICT
例41-23 STARTUPコマンドを使用してPDBを読取り専用モードでオープンする方法
STARTUP PLUGGABLE DATABASE hrpdb OPEN READ ONLY
例41-24 STARTUPコマンドおよびFORCEオプションを使用してPDBを読取り/書込みモードでオープンする方法
この例では、hrpdb
PDBが現在オープンしていることを想定しています。FORCE
オプションによって、PDBがクローズされ、その後、読取り/書込みモードでオープンされます。
STARTUP PLUGGABLE DATABASE hrpdb FORCE
関連項目:
-
現在のコンテナがPDBである場合の
STARTUP
またはSHUTDOWN
コマンドの使用の詳細は、「SQL*PlusのSTARTUPおよびSHUTDOWNコマンドを使用したPDBの変更」を参照してください。
親トピック: PDBのオープン・モードの変更
41.4.7 CDB再起動時のPDBのオープン・モードの保持または破棄
pdb_save_or_discard_state句を指定してALTER
PLUGGABLE
DATABASE
SQL文を使用すると、CDBの再起動時に1つ以上のPDBのオープン・モードを保持できます。
注意:
この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。
次に示す方法で実行できます。
-
CDBの再起動時にPDBのモードを保持するには、
SAVE STATE
を指定します。たとえば、CDBの再起動前にPDBがオープンの読取り/書込みモードである場合、CDBの再起動後のPDBはオープンの読取り/書込みモードです。CDBの再起動前にPDBがマウント・モードの場合、CDBの再起動後のPDBはマウント・モードです。
-
CDBの再起動時にPDBのオープン・モードを無視するには、
DISCARD STATE
を指定します。PDBに
DISCARD STATE
を指定すると、CDBの再起動後のPDBは常にマウントされます。
変更するPDBは、次の方法で指定できます。
-
1つ以上のPDBをリストします。
-
すべてのPDBを変更するには、
ALL
を指定します。 -
リストされたPDBを除くすべてのPDBを変更するには、
ALL
EXCEPT
を指定します。
Oracle RAC CDBの場合、pdb_save_or_discard_state句でinstances句を使用すると、PDBのオープン・モードを保持するインスタンスを次の方法で指定できます。
-
次の形式で、instances句に1つ以上のインスタンスをリストします。
INSTANCES = ('instance_name' [,'instance_name'] … )
-
すべての実行中のインスタンスのPDBを変更するには、次の例のように、instances句に
ALL
を指定します。INSTANCES = ALL
-
リストされたインスタンスを除くすべてのインスタンスのPDBを変更するには、次の形式で、instancesに
ALL
EXCEPT
を指定します。INSTANCES = ALL EXCEPT('instance_name' [,'instance_name'] … )
Oracle RAC CDBのPDBの場合、SAVE STATE
およびDISCARD STATE
は現行インスタンスのモードにのみ作用します。instances句に複数のインスタンスを指定している場合でも、他のインスタンスのモードには作用しません。
pdb_save_or_discard_state句を指定してALTER
PLUGGABLE
DATABASE
SQL文を発行するには、現行ユーザーにルートでのALTER
DATABASE
権限が必要です。
CDBの再起動時にPDBのオープン・モードを保持または破棄するには、次の手順を実行します。
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
pdb_save_or_discard_state句を指定して
ALTER
PLUGGABLE
DATABASE
文を実行します。
次の例では、CDBの再起動時に、1つ以上のPDBのオープン・モードを保持または破棄しています。
例41-25 CDB再起動時のPDBのオープン・モードの保持
この文は、CDBの再起動時にsalespdb
のオープン・モードを保持します。
ALTER PLUGGABLE DATABASE salespdb SAVE STATE;
例41-26 CDB再起動時のPDBのオープン・モードの破棄
この文は、CDBの再起動時にsalespdb
のオープン・モードを破棄します。
ALTER PLUGGABLE DATABASE salespdb DISCARD STATE;
例41-27 CDB再起動時の全PDBのオープン・モードの保持
この文は、CDBの再起動時にすべてのPDBのオープン・モードを保持します。
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
例41-28 CDB再起動時のリストされたPDBのオープン・モードの保持
この文は、CDBの再起動時にsalespdb
およびhrpdb
のオープン・モードを保持します。
ALTER PLUGGABLE DATABASE salespdb, hrpdb SAVE STATE;
例41-29 CDB再起動時のリストされたPDB以外全部のオープン・モードの保持
この文は、salespdb
およびhrpdb
を除くすべてのPDBのオープン・モードを保持します。
ALTER PLUGGABLE DATABASE ALL EXCEPT salespdb, hrpdb SAVE STATE;
親トピック: CDBの変更
41.5 CDBにおけるALTER SYSTEM SET文の使用方法
ALTER
SYSTEM
SET
文では、CDB内の1つ以上のコンテナの初期化パラメータを動的に設定できます。
CDBでは初期化パラメータの継承モデルが使用されます。このモデルでは、PDBがルートから初期化パラメータの値を継承します。この場合、継承は、ルートの特定のパラメータ値が個別PDBに適用されることを意味します。
一部のパラメータについては、各PDBでルートの設定を上書きできます。これは、各PDBが初期化パラメータごとにtrueまたはfalseの継承プロパティを持つことを意味します。あるパラメータでPDBがルートの値を継承する場合、そのパラメータの継承プロパティはtrueです。PDBがルートの値を継承しない場合、そのパラメータの継承プロパティはfalseです。
一部のパラメータについては、継承プロパティがtrueである必要があります。その他のパラメータでは、継承プロパティを変更できます。この変更を行うには、現在のコンテナが操作対象のPDBであるときに、ALTER
SYSTEM
SET
文を使用してパラメータを設定します。V$SYSTEM_PARAMETER
ビューで初期化パラメータのISPDB_MODIFIABLE
値がTRUE
になっている場合、そのパラメータの継承プロパティをfalseに設定できます。
現在のコンテナがルートである場合、ALTER
SYSTEM
SET
文のCONTAINER
句で設定されるパラメータ値を継承するPDBが制御されます。CONTAINER
句の構文は次のとおりです。
CONTAINER = { CURRENT | ALL }
次の設定を使用できます。
-
デフォルトの
CURRENT
は、パラメータ設定は現在のコンテナのみに適用されることを意味します。現在のコンテナがルートである場合は、ルートと、そのパラメータについてtrueの継承プロパティを持つすべてのPDBにそのパラメータ設定が適用されます。
-
ALL
は、そのパラメータ設定がルートおよびすべてのPDBを含むCDB内のすべてのコンテナに適用されることを意味します。ALL
を指定すると、すべてのPDB内のパラメータの継承プロパティはtrueに設定されます。
CONTAINER
句およびそれに適用するルールの詳細は、「現在のコンテナについて」を参照してください。
CDBのルートでALTER
SYSTEM
SET
は、次のように使用します。
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
現在のユーザーには、
ALTER
SYSTEM
権限が共通して付与されている必要があります。「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
ALTER
SYSTEM
SET
文を実行します。
注意:
特定のPDBの特定のパラメータの継承プロパティをfalseからtrueに変更したい場合、現在のコンテナがPDBであるときにALTER
SYSTEM
RESET
文を実行し、パラメータをリセットします。次の例は、OPEN_CURSORS
パラメータをリセットします。
ALTER SYSTEM RESET OPEN_CURSORS SCOPE = SPFILE;
例41-30 すべてのコンテナへの初期化パラメータの設定
このALTER
SYSTEM
SET
文では、すべてのコンテナのOPEN_CURSORS
初期化パラメータを200
に設定し、各PDBの継承プロパティをTRUE
に設定します。
ALTER SYSTEM SET OPEN_CURSORS = 200 CONTAINER = ALL;
例41-31 ルートの初期化パラメータの設定
このALTER
SYSTEM
SET
文では、ルートおよびPDBのOPEN_CURSORS
初期化パラメータを200
に設定します(このとき、パラメータの継承プロパティはtrueです)。
ALTER SYSTEM SET OPEN_CURSORS = 200 CONTAINER = CURRENT;
関連項目:
-
ALTER
SYSTEM
SET
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: SQL*Plusを使用したCDBの管理
41.6 CDB内のコンテナに対するDML文の発行
CDBルートで発行されるDML (データ操作言語)文では、CDB内の1つ以上のコンテナを変更できます。また、DML文に対して1つ以上のデフォルト・コンテナ・ターゲットを指定できます。
- CDB内のコンテナに対するDML文の発行について
DML文は、CDB内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。 - CDB内のDML文のデフォルト・コンテナの指定
CDB内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET
句を指定したALTER DATABASE
文を発行します。
親トピック: SQL*Plusを使用したCDBの管理
41.6.1 CDB内のコンテナに対するDML文の発行について
DML文は、CDB内の複数のコンテナ内のデータベース・オブジェクトに影響することがあります。
CDBルートまたはアプリケーション・ルートで、CONTAINERS
句を含む単一のDML文は、CDBまたはアプリケーション・コンテナ内の1つ以上のコンテナ内の表またはビューを変更できます。CONTAINERS
句を使用するには、変更される表またはビューをCONTAINERS
句に指定し、影響を受けるコンテナをWHERE
句に指定します。INSERT VALUES
文でターゲット・コンテナを指定するには、VALUES
句にCON_ID
値を指定します。また、UPDATE
文またはDELETE
文でターゲット・コンテナを指定するには、WHERE
句にCON_ID
述語を指定します。
sales.customers
表を7
または8
のCON_ID
で更新します。UPDATE CONTAINERS(sales.customers) ctab
SET ctab.city_name='MIAMI'
WHERE ctab.CON_ID IN(7,8) AND
CUSTOMER_ID=3425;
WHERE
句のCON_ID
に指定する値は、CDBの一部であるコンテナ(PDB、アプリケーション・ルートおよびアプリケーションPDBを含む)のIDである必要があります。
また、DML操作のデフォルト・ターゲット・コンテナを指定できます。DML文でWHERE
句にCON_ID
の値が指定されていない場合、DML操作のターゲット・コンテナはCDBルートのデータベース・プロパティCONTAINERS_DEFAULT_TARGET
で指定されたコンテナです。CDBルートで発行した場合、次のDML文はCDBのデフォルト・ターゲット・コンテナを変更します。
UPDATE CONTAINERS(sales.customers) ctab
SET ctab.city_name='MIAMI'
WHERE CUSTOMER_ID=3425;
INSERT VALUES
文でターゲット・コンテナを指定するには、VALUES
句にCON_ID
値を指定します。また、UPDATE
文またはDELETE
文でターゲット・コンテナを指定するには、WHERE
句にCON_ID
述語を指定します。
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='CONTAINERS_DEFAULT_TARGET';
CONTAINERS
句には、次の制限事項が適用されます。
-
INSERT
のターゲットがCONTAINERS()
内にあるSELECT
文を使用したINSERT
文はサポートされません。 -
INSERT
のターゲットがCONTAINERS()
内にある、複数表に対するINSERT
文はサポートされません。 -
CONTAINERS
句を使用するDML文では、データベース・リスナーがTCP (IPCではなく)を使用して構成され、PORT
値およびHOST
値がPORT
句およびHOST
句を使用して各ターゲットPDBに指定されている必要があります。
親トピック: CDB内のコンテナに対するDML文の発行
41.6.2 CDBにおけるDML文のデフォルト・コンテナの指定
CDB内のDML文のデフォルト・コンテナを指定するには、CONTAINERS DEFAULT TARGET
句を指定したALTER DATABASE
文を発行します。
WHERE
句でコンテナを指定せずにDML文がCDBルートで発行されている場合、DML文はCDBのデフォルト・コンテナに影響します。デフォルトのコンテナは、CDB内のコンテナ(CDBルート、PDB、アプリケーション・ルートまたはアプリケーションPDBを含む)にすることができます。1つのデフォルトのコンテナのみを使用できます。
例41-32 CDB内のDML文のデフォルト・コンテナの指定
この例では、PDB1
がCDB内のDML文のデフォルト・コンテナであることを指定します。
ALTER DATABASE CONTAINERS DEFAULT TARGET = (PDB1);
例41-33 デフォルト・コンテナのクリア
この例は、デフォルト・コンテナ設定をクリアしています。設定されていない場合、デフォルト・コンテナはCDBルートです。
ALTER DATABASE CONTAINERS DEFAULT TARGET = NONE;
親トピック: CDB内のコンテナに対するDML文の発行
41.7 CDBでのDDL文の実行
CDBでは、現在のコンテナまたはすべてのコンテナでデータ定義言語(DDL)文を実行できます。
- CDBにおけるDDL文の実行について
CDBでは、DDL文をすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。 - 現在のコンテナにおけるDDL文の実行
DDL文のCONTAINER
句にCURRENT
を指定して、現在のコンテナで文を実行します。 - CDB内のすべてのコンテナにおけるDDL文の実行
DDL文のCONTAINER
句にALL
を指定して、CDB内のすべてのコンテナで文を実行します。
親トピック: SQL*Plusを使用したCDBの管理
41.7.1 CDBにおけるDDL文の実行について
CDBでは、DDL文をすべてのコンテナに適用できる場合も、現在のコンテナにのみ適用できる場合もあります。
影響を受けるコンテナを指定するには、CONTAINER
句を使用します。
CONTAINER = { CURRENT | ALL }
次の設定を使用できます。
-
CURRENT
は、文は現在のコンテナのみに適用されることを意味します。 -
ALL
は、文がルートおよびすべてのPDBを含むCDB内のすべてのコンテナに適用されることを意味します。
DDL文のCONTAINER
句には、次の制限があります。
-
「現在のコンテナについて」で説明している制限があります。
-
CONTAINER
句は、表41-8にリストされているDDL文でのみ使用できます。
表41-8 CDBでのDDL文およびCONTAINER句
DDL文 | CONTAINER = CURRENT | CONTAINER = ALL |
---|---|---|
|
現在のPDBにローカル・ユーザーを作成します。 |
共通ユーザーを作成します。 |
|
現在のPDBのローカル・ユーザーを変更します。 |
共通ユーザーを変更します。 |
|
現在のPDBにローカル・ロールを作成します。 |
共通ロールを作成します。 |
|
ローカル・コンテナでの権限をローカル・ユーザー、共通ユーザーまたはローカル・ロールに付与します。
|
共通オブジェクトに対するシステム権限またはオブジェクト権限を、共通ユーザーまたは共通ロールに付与します。指定された権限は、CDB全体にわたってユーザーまたはロールに付与されます。 |
|
ローカル・コンテナでの権限をローカル・ユーザー、共通ユーザーまたはローカル・ロールから取り消します。 この文では、ローカル・コンテナの指定されたユーザーまたはロールから、
|
共通オブジェクトに対するシステム権限またはオブジェクト権限を、共通ユーザーまたは共通ロールから取り消します。指定された権限は、CDB全体にわたってユーザーまたはロールから取り消されます。 この文では、指定された共通ユーザーまたは共通ロールから、 |
他のすべてのDDL文は、現在のコンテナにのみ適用されます。
ユーザー、ロールおよびプロファイルの名前の通常のルールに加えて、CDBでユーザー、ロールまたはプロファイルを作成する場合には、次のルールおよびベスト・プラクティスが適用されます。
-
共通のユーザー、ロールおよびプロファイルの名前のベスト・プラクティスは、共通のユーザー、ロールおよびプロファイルとローカルのユーザー、ロールおよびプロファイルの間に名前の競合が発生しないように、接頭辞で開始することです。この接頭辞は、CDBルートで
COMMON_USER_PREFIX
初期化パラメータを使用して指定します。デフォルトでは、CDBルートでの接頭辞はC##
またはc##
です。 -
アプリケーション・コンテナでの共通ユーザー、ロールおよびプロファイルの名前のベスト・プラクティスは、アプリケーションの共通ユーザー、ロールおよびプロファイルとローカルのユーザー、ロールおよびプロファイルとの間に名前の競合が発生しないように接頭辞で開始することです。この接頭辞は、アプリケーション・ルートで
COMMON_USER_PREFIX
初期化パラメータを使用して指定します。デフォルトでは、アプリケーション・ルートでの接頭辞はNULL
です。 -
COMMON_USER_PREFIX
初期化パラメータがアプリケーション・ルートで設定されている場合、設定はアプリケーション・コンテナ内のアプリケーション共通ユーザー、ロールおよびプロファイルの名前に適用されます。接頭辞はCDBルートとアプリケーション・ルートで異なる場合があり、各アプリケーション・コンテナでも異なる場合があります。 -
共通のユーザー、ロールおよびプロファイルの名前は、ASCII文字のみで構成する必要があります。この制限は、アプリケーションの共通のユーザー、ロールおよびプロファイルの名前には適用されません。
-
ローカルのユーザー、ロールおよびプロファイルの名前は、
COMMON_USER_PREFIX
初期化パラメータで共通ユーザーに指定した接頭辞で始めることができません。 -
ローカルのユーザー、ロールおよびプロファイルの名前は、
C##
またはc##
で始めないでください。 -
CDBルートの
COMMON_USER_PREFIX
の値に関係なく、アプリケーションの共通ユーザー、ロールおよびプロファイルの名前をC##
またはc##
で開始することはできません。 -
アプリケーションの共通ユーザー、ロールおよびプロファイルの名前は、
COMMON_USER_PREFIX
初期化パラメータで共通ユーザーに指定した接頭辞で始めることができません。
関連項目:
-
CDBでのユーザー管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
-
COMMON_USER_PREFIX
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
CDBでの
ALTER
SYSTEM
システム制御文の使用の詳細は、「CDBにおけるALTER SYSTEM SET文の使用方法」を参照してください。
親トピック: CDBでのDDL文の実行
41.7.2 現在のコンテナにおけるDDL文の実行
DDL文のCONTAINER
句にCURRENT
を指定して、現在のコンテナで文を実行します。
サポートされるDDL文を表41-8に示します。
現在のユーザーは、現在のコンテナでDDL文を実行するために必要な権限を付与されている必要があります。たとえば、ユーザーを作成するには、現在のユーザーに現在のコンテナでのCREATE
USER
システム権限が付与されている必要があります。
現在のコンテナでDDL文を実行するには:
-
SQL*Plusでコンテナにアクセスします。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
CONTAINER
がCURRENT
に設定されたDDL文を実行します。
ローカル・ユーザーのユーザー名は、COMMON_USER_PREFIX
初期化パラメータで指定した接頭辞で始めることができません。デフォルトでは、CDBルートでは接頭辞はC##
またはc##
です。アプリケーション・ルートでは、アプリケーション・コンテナに独自の接頭辞を指定できます。さらに、共通ユーザーの名前はASCII文字のみで構成する必要があります。指定する表領域は、PDBに存在している必要があります。
例41-34 PDBでのローカル・ユーザーの作成
この例では、現在のPDBにローカル・ユーザーtestpdb
を作成します。
CREATE USER testpdb IDENTIFIED BY password
DEFAULT TABLESPACE pdb1_tbs
QUOTA UNLIMITED ON pdb1_tbs
CONTAINER = CURRENT;
親トピック: CDBでのDDL文の実行
41.7.3 CDB内のすべてのコンテナにおけるDDL文の実行
DDL文のCONTAINER
句にALL
を指定して、CDB内のすべてのコンテナで文を実行します。
サポートされるDDL文を表41-8に示します。
次の前提条件を満たしている必要があります。
-
現在のユーザーは共通ユーザーである必要があります。
-
現在のユーザーは、DDL文を実行するために必要な権限を共通に付与されている必要があります。たとえば、ユーザーを作成するには、現在のユーザーには共通で
CREATE
USER
システム権限を付与する必要があります。
CDB内のすべてのコンテナでDDL文を実行するには:
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plusを使用したCDB内のコンテナへのアクセス」を参照してください。
-
CONTAINER
がALL
に設定されたDDL文を実行します。
共通ユーザーのユーザー名は、COMMON_USER_PREFIX
初期化パラメータで指定した接頭辞で始める必要があります。デフォルトでは、CDBルートでは接頭辞はC##
またはc##
です。アプリケーション・ルートでは、アプリケーション・コンテナに独自の接頭辞を指定できます。さらに、共通ユーザーの名前はASCII文字のみで構成する必要があります。指定する表領域は、ルートおよびすべてのPDBに存在している必要があります。
例41-35 CDBでの共通ユーザーの作成
この例では、共通ユーザーc##testcdb
を作成します。
CREATE USER c##testcdb IDENTIFIED BY password
DEFAULT TABLESPACE cdb_tbs
QUOTA UNLIMITED ON cdb_tbs
CONTAINER = ALL;
親トピック: CDBでのDDL文の実行
41.8 CDB UNDOモードの管理
ローカルUNDOが有効になっている場合、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があります。ローカルUNDOが無効になっている場合は、CDB全体に対して1つのUNDO表領域があります。
- CDB UNDOモードについて
すべてのコンテナでローカルUNDOを使用するか、CDB全体で共有UNDOを使用するようにCDBを構成できます。 - ローカルUNDOモードを使用するためのCDBの構成
CDBが共有UNDOモードの場合、ALTER DATABASE LOCAL UNDO ON
文を発行し、データベースを再起動することで、ローカルUNDOモードを使用するように変更できます。 - 共有UNDOモードを使用するためのCDBの構成
CDBがローカルUNDOモードの場合、ALTER DATABASE LOCAL UNDO OFF
文を発行し、データベースを再起動することで、共有UNDOモードを使用するように変更できます。
親トピック: SQL*Plusを使用したCDBの管理
41.8.1 CDBのUNDOモードについて
すべてのコンテナでローカルUNDOを使用するか、CDB全体で共有UNDOを使用するようにCDBを構成できます。
CDBは、ローカルUNDOモードまたは共有UNDOモードで実行できます。CREATE DATABASE
文のENABLE PLUGGABLE DATABASE
句で、CDB作成時にCDBのUNDOモードを指定できます。CDBの作成後にALTER DATABASE
文を発行し、CDBを再起動することで、CDBのUNDOモードを変更できます。UNDOモードはCDB全体に適用されます。したがって、すべてのコンテナは共有UNDOまたはローカルUNDOを使用します。
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
問合せでPROPERTY_VALUE
に対してTRUE
が返された場合、CDBはローカルUNDOモードです。そうでない場合、CDBは共有UNDOモードです。
ローカルUNDOモード
ローカルUNDOモードは、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があることを意味します。このモードでは、Oracle DatabaseはCDB内のすべてのコンテナ用のUNDO表領域を自動的に作成します。Oracle RAC CDBの場合、アクティブなUNDO表領域はローカルUNDOモードの各PDBのインスタンスごとに1つ存在します。
ローカルUNDOモードでは、各コンテナの分離が向上し、コンテナの切断やコンテナに対するポイント・イン・タイム・リカバリの実行など、一部の操作の効率が向上します。またローカルUNDOモードは、PDBの再配置やオープン読取り/書込みモードでのPDBのクローニングなど、いくつかの操作をサポートするために必要です。
CDBがローカルUNDOモードの場合は、次のことが適用されます。
-
現在のコンテナに対する適切な権限を持つユーザーは、コンテナのUNDO表領域を作成できます。
必要な権限の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
-
UNDO表領域は、CDB内のすべてのコンテナの静的データ・ディクショナリ・ビューおよび動的パフォーマンス(V$)ビューに表示されます。
共有UNDOモード
共有UNDOモードは、シングル・インスタンスCDBに対して1つのアクティブなUNDO表領域があることを意味します。Oracle RAC CDBの場合、アクティブなUNDO表領域はインスタンスごとに1つ存在します。
CDBが共有UNDOモードの場合は、次のことが適用されます。
-
適切な権限を持ち、現在のコンテナがCDBルートである共通ユーザーのみが、UNDO表領域を作成できます。
-
現在のコンテナがCDBルートでない場合、UNDO表領域を作成しようとすると失敗し、エラーが返されます。
-
現在のコンテナがCDBルートである場合、UNDO表領域は静的データ・ディクショナリ・ビューおよび動的パフォーマンス(V$)・ビューに表示されます。現在のコンテナがPDB、アプリケーション・ルートまたはアプリケーションPDBである場合、UNDO表領域は動的パフォーマンス・ビューにのみ表示されます。
注意:
-
CDBのUNDOモードを変更した場合、新しいUNDOモードは変更後にコンテナが初めてオープンされたときに個別のコンテナに適用されます。
-
CDBのUNDOモードを変更した場合、CDB内のコンテナは変更前の時間またはSCNにフラッシュ・バックできません。
関連トピック
親トピック: CDB UNDOモードの管理
41.8.2 ローカルUNDOモードを使用するようにCDBを構成する方法
CDBが共有UNDOモードの場合、ALTER DATABASE LOCAL UNDO ON
文を発行し、データベースを再起動することで、ローカルUNDOモードを使用するように変更できます。
CDBがローカルUNDOモードである場合、コンテナがオープンされる各インスタンスで、各コンテナに独自のUNDO表領域があります。Oracle Databaseは、UNDO表領域を持たないCDB内のコンテナにUNDO表領域を自動的に作成します。UNDO表領域のないPDBがローカルUNDOモードを使用するように構成されたCDBにクローニング、再配置または接続される場合、Oracle Databaseは初めてオープンされるときにPDBのUNDO表領域を自動的に作成します。
CDBを共有UNDOモードからローカルUNDOモードに切り替えると、Oracle Databaseによって必要なUNDO表領域が自動的に作成されます。
親トピック: CDB UNDOモードの管理
41.8.3 共有UNDOモードを使用するようにCDBを構成する方法
CDBがローカルUNDOモードの場合、ALTER DATABASE LOCAL UNDO OFF
文を発行し、データベースを再起動することで、共有UNDOモードを使用するように変更できます。
親トピック: CDB UNDOモードの管理
41.9 CDBでのオラクル社が提供するSQLスクリプトの実行
catcon.plスクリプトを使用して、Oracleが提供するSQLスクリプトをCDBで実行できます。
- CDBでのオラクル社が提供するSQLスクリプトの実行について
CDBでは、SQLスクリプトおよびSQL文を実行する場合、catcon.plスクリプトが最良の方法となります。 - catcon.plの構文およびパラメータ
catcon.plスクリプトはPerlスクリプトであり、オペレーティング・システムのプロンプトで実行される必要があります。 - catcon.plスクリプトの実行
catcon.plスクリプトの実行を例で示します。
親トピック: SQL*Plusを使用したCDBの管理
41.9.1 CDBでのオラクル社が提供するSQLスクリプトの実行について
CDBでは、SQLスクリプトおよびSQL文を実行する場合、catcon.plスクリプトが最良の方法となります。
Oracle Databaseインストールには、複数のSQLスクリプトが含まれています。これらのスクリプトにより、データ・ディクショナリ・ビューの作成やオプションのインストールなどの操作が実行されます。
catcon.plスクリプトは、ルートおよび指定したPDBでスクリプトを正しい順序で実行でき、SQLスクリプトまたはSQL文で予期しないエラーが生成されなかったことを確認するために表示できるログ・ファイルを生成できます。また、これにより、複数のプロセスが開始され、それらのプロセスが、事前に割り当てられたスクリプトの実行を完了すると、新しいスクリプトがプロセスに割り当てられます。
注意:
-
catcon.plを実行するときにCDBシードを除外しないかぎり、SQLスクリプトまたはSQL文はCDBシード上で実行されます。
-
catcon.plスクリプトを使用して、CDBと非CDBの両方でスクリプトを実行できます。
親トピック: CDBでのオラクル社が提供するSQLスクリプトの実行
41.9.2 catcon.plの構文およびパラメータ
catcon.plスクリプトはPerlスクリプトであり、オペレーティング・システムのプロンプトで実行される必要があります。
catcon.plスクリプトには、次の構文およびパラメータが含まれています。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl [--usr username[/password]] [--int_usr username[/password]] [--script_dir directory] [--log_dir directory] [{--incl_con|--excl_con} container] [--echo] [--spool] [--error_logging { ON | errorlogging-table-other-than-SPERRORLOG } ] [--app_con application_root] [--no_set_errlog_ident] [--diag] [-ignore_unavailable_pdbs] [--verbose] [--force_pdb_mode pdb_mode] [--recover] --log_file_base log_file_name_base -- { SQL_script [arguments] | --x'SQL_statement' }
--x
SQL_statementは、1文字のパラメータが続く場合、前に--
を付けます。--x
SQL_statementの前にスクリプト名または別の--x
SQL_statementを指定する場合、前の--
は付けません。また、SQL文は一重引用符で囲む必要があります。
SQLスクリプトにコマンドライン・パラメータは、--p
を使用して導入します。SQLスクリプトに対話型(シークレット)パラメータは、--P
を使用して導入します。
catcon.plスクリプトのヘルプを参照するには、次のコマンドを実行してください。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --help
表41-9で、catcon.plパラメータについて説明します。必須と指定されていないかぎり、パラメータはオプションです。
次の表に示す短いパラメータ名は、下位互換性があります。短縮名がないパラメータもあります。
表41-9 catcon.plパラメータ
パラメータ | 説明 |
---|---|
短縮名: |
ルートおよび指定されたPDBに接続するユーザー名およびパスワードを指定します。SQLスクリプトまたはSQL文を実行するために必要な権限を持つ共通ユーザーを指定します。デフォルトは |
短縮名: |
ルートおよび指定されたPDBに接続するユーザー名およびパスワードを指定します。CDBメタデータに対し問合せを実行するなどの内部タスクを実行するには、必要な権限を持つ共通ユーザーを指定します。デフォルトは |
短縮名: |
SQLスクリプトを含むディレクトリ。デフォルトはカレント・ディレクトリ。 |
短縮名: |
catcon.plによってログ・ファイルが書き込まれるディレクトリ。デフォルトはカレント・ディレクトリ。 |
短縮名: |
SQLスクリプトを実行するコンテナまたは実行しないコンテナ。
一重引用符で囲まれたPDB名のスペース区切りリストで、コンテナを指定します。
このパラメータを使用する場合、 |
短縮名: |
スクリプト実行時のエコーを |
短縮名: |
すべてのスクリプトの出力を次の名前でファイルにスプーリングします。 log-file-name-base_script-name-without-extension_[container-name-if-any].default-extension |
短縮名: |
エラー・ロギング表の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。 |
短縮名: |
アプリケーション・ルートを指定します。スクリプトは、アプリケーション・ルートと、アプリケーション・ルートにプラグインされるアプリケーションPDBで実行されます。 このパラメータを使用する場合、 |
短縮名: |
|
短縮名: |
デバッグ情報の生成をオンにします。 |
短縮名: |
冗長出力をオンにします |
短縮名: |
クローズされているPDBあるいは このオプションを指定せず、指定されたPDBの一部が存在しなかったり、オープンされていない場合、エラーが返されてコンテナは処理されません。 |
|
スクリプトを実行する対象のPDBすべてに必要なオープン・モード。次のいずれかの値を指定します。
デフォルトの |
短縮名: |
catcon.plによって起動されたSQL*Plusプロセスが予期せず終了した場合に、catcon.plでSQL*Plusプロセスのリカバリを試みます。このパラメータを指定しない場合、catcon.plはプロセスのリカバリを思考せずにクローズします。 |
短縮名: |
(必須)ログ・ファイル名のベース名。 |
親トピック: CDBでのオラクル社が提供するSQLスクリプトの実行
41.9.3 catcon.plスクリプトの実行
catcon.plスクリプトの実行を例で示します。
catcon.plで実行されるSQLスクリプトまたはSQL文によって、データ操作言語(DML)またはデータ定義言語(DDL)の各操作を実行する場合、変更対象のコンテナは、読取り/書込みモードである必要があります。「PDBのオープン・モードの変更」を参照してください。
catcon.plスクリプトを実行するには:
-
コマンドライン・プロンプトをオープンします。
-
catcon.plスクリプトを実行し、1つ以上のSQLスクリプトまたはSQL文を指定します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl parameters SQL_script $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl parameters -- --xSQL_statement
catcon.plスクリプトの実行例
次の例では、catcon.plスクリプトを実行しています。
例41-36 CDB内のすべてのコンテナにおけるcatblock.sqlスクリプトの実行
この例では、CDBのすべてのコンテナでcatblock.sqlスクリプトを実行します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --script_dir $ORACLE_HOME/rdbms/admin --log_file_base catblock_output catblock.sql
次のパラメータが指定されます。
-
--usr
パラメータは、SYS
ユーザーが各コンテナでスクリプトを実行することを指定します。 -
--script_dir
パラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。 -
--log_file_base
パラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。
デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。--incl_con
と--excl_con
のいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてスクリプトが実行されます。
例41-37 特定のPDBにおけるcatblock.sqlスクリプトの実行
この例では、CDB内のPDB hrpdb
およびsalespdb
で、catblock.sqlスクリプトが実行されます。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --int_usr SYS --script_dir $ORACLE_HOME/rdbms/admin --log_dir '/disk1/script_output' --incl_con 'HRPDB SALESPDB' --log_file_base catblock_output catblock.sql
次のパラメータが指定されます。
-
--usr
パラメータは、SYS
ユーザーが各コンテナでスクリプトを実行することを指定します。 -
--int_usr
パラメータは、SYS
ユーザーが内部タスクを実行することを指定します。 -
--script_dir
パラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。 -
--log_dir
パラメータは、出力ファイルが/disk1/script_outputディレクトリに配置されることを指定します。 -
--incl_con
パラメータは、SQLスクリプトがPDBhrpdb
およびsalespdb
で実行されることを指定します。スクリプトは、CDB内の他のコンテナでは実行されません。 -
--log_file_base
パラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。
例41-38 特定のPDBを除くすべてのコンテナにおけるcatblock.sqlスクリプトの実行
この例では、PDB hrpdb
およびsalespdb
を除くCDB内のすべてのコンテナで、catblock.sqlスクリプトを実行します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --script_dir $ORACLE_HOME/rdbms/admin --log_dir '/disk1/script_output' --excl_con 'HRPDB SALESPDB' --log_file_base catblock_output catblock.sql
次のパラメータが指定されます。
-
--usr
パラメータは、SYS
ユーザーが各コンテナでスクリプトを実行することを指定します。 -
--script_dir
パラメータは、SQLスクリプトが$ORACLE_HOME/rdbms/adminディレクトリに存在することを指定します。 -
--log_dir
パラメータは、出力ファイルが/disk1/script_outputディレクトリに配置されることを指定します。 -
--excl_con
パラメータは、PDBhrpdb
およびsalespdb
を除くCDB内のすべてのコンテナで、SQLスクリプトを実行することを指定します。 -
--log_file_base
パラメータでは、ログ・ファイル名のベース名がcatblock_outputであることを指定します。
例41-39 コマンドライン・パラメータを使用したSQLスクリプトの実行
この例は、CDB内のすべてのコンテナに対し、custom_script.sqlスクリプトを実行します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --script_dir /u01/scripts --log_file_base custom_script_output custom_script.sql '--phr' '--PEnter password for user hr:'
次のパラメータが指定されます。
-
--usr
パラメータは、SYS
ユーザーが各コンテナでスクリプトを実行することを指定します。 -
--script_dir
パラメータは、SQLスクリプトが/u01/scriptsディレクトリ内にあることを指定します。 -
--log_file_base
パラメータは、ログ・ファイル名のベース名がcustom_script_outputであることを指定します。 -
--p
パラメータは、コマンドライン・パラメータに対してhr
を指定します。 -
--P
パラメータは、ユーザーhr
のパスワードを求める対話型パラメータを指定します。
デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。-incl_con
と-excl_con
のいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてスクリプトが実行されます。
例41-40 CDB内のすべてのコンテナにおけるSQL文の実行
この例では、CDBのすべてのコンテナでSQL文を実行します。
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl --usr SYS --echo --log_file_base select_output -- --x"SELECT * FROM DUAL"
次のパラメータが指定されます。
-
--usr
パラメータは、SYS
ユーザーが各コンテナでスクリプトを実行することを指定します。 -
--echo
パラメータは、SQL文に対する出力を表示します。 -
--log_file_base
パラメータは、ログ・ファイル名のベース名がselect_outputであることを指定します。 -
SQL文
SELECT * FROM DUAL
は引用符で囲まれ、前に--x
が付きます。--x
の前にはパラメータ(--log_file_base
)が指定されているため、--
を前に付ける必要があります。
デフォルトのパラメータ値は、その他すべてのパラメータに使用されます。-incl_con
と-excl_con
のいずれのパラメータも指定されていません。したがって、catcon.plにより、デフォルトですべてのコンテナにおいてSQL文が実行されます。
親トピック: CDBでのオラクル社が提供するSQLスクリプトの実行
41.10 CDBインスタンスの停止
CDBインスタンスは、非CDBインスタンスを停止する場合と同じ方法で停止できます。
次の前提条件を満たしている必要があります。
-
CDBインスタンスは、マウントされているか、またはオープンしている必要があります。
-
現在のユーザーは、
SYSDBA
、SYSOPER
、SYSBACKUP
またはSYSDG
の管理権限を持つ共通ユーザーである必要があります。CDBを停止するには、ユーザーは接続時にAS
SYSDBA
、AS
SYSOPER
、AS
SYSBACKUP
またはAS
SYSDG
をそれぞれ使用して、権限を行使する必要があります。
CDBを停止するには:
-
SQL*Plusで、現在のコンテナがルートであることを確認します。
「SQL*Plus CONNECTコマンドを使用したコンテナへの接続」を参照してください。
-
CDBインスタンスを停止します。
親トピック: SQL*Plusを使用したCDBの管理