Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03 |
|
この章の内容は次のとおりです。
関連項目:
Oracle Databaseの表領域を使用して作業する前に、次の各項で説明するガイドラインについて理解してください。
データベース操作を実行する際に複数の表領域を使用すると、システムの柔軟性が向上します。データベースに複数の表領域があるときには、次のことが可能です。
一部のオペレーティング・システムでは、同時にオープン可能なファイルの数に制限が設けられています。このような制限によって、同時にオンライン化可能な表領域の数に影響が出ることがあります。そのため、使用しているオペレーティング・システムの制限を超えないように、表領域を効率よく計画する必要があります。表領域はデータベースの要件を満たすために必要な数だけ作成し、構成するファイル数もできるかぎり少なくなるようにしてください。表領域のサイズを大きくする必要がある場合は、小さいデータファイルを多数作成するのではなく、1つまたは2つの大きなデータファイルを追加するか、または自動拡張を使用可能にしてデータファイルを作成します。
これらの要素を考慮に入れてデータを再検討し、データベース設計に必要となる表領域の数を決定してください。
表、クラスタ、マテリアライズド・ビュー、索引およびその他のオブジェクトを作成しようとするユーザーには、そのオブジェクトを作成するための権限と、そのオブジェクトのセグメントを格納する表領域の割当て制限(領域の許容または制限)を付与します。
表領域を作成する前に、それを格納するデータベースを作成する必要があります。どのデータベースでも、重要な表領域はSYSTEM
表領域です。この表領域には、データ・ディクショナリやシステム・ロールバック・セグメントなど、データベース・サーバー機能の基本となる情報が格納されます。SYSTEM
表領域は、データベース作成時に最初に作成される表領域です。他の表領域と同様に管理されますが、より高いレベルの権限が必要で、一部の機能は制限されます。たとえば、SYSTEM
表領域の名前変更、削除、オフライン化は実行できません。
SYSAUX
表領域は、SYSTEM
表領域の補助表領域として機能し、データベース作成時に常に作成されます。この補助表領域には、様々なOracle製品および機能で使用される情報とスキーマが格納されるため、各製品で独自の表領域を持つ必要がなくなります。SYSTEM
表領域と同様に、SYSAUX
表領域を管理するためには他の表領域より高いレベルのセキュリティが必要で、この表領域の名前変更や削除はできません。SYSAUX
表領域の管理については、「SYSAUX表領域の管理」を参照してください。
表領域を作成する手順はオペレーティング・システムによって異なりますが、必ず最初に、オペレーティング・システムを使用して、データファイルが割り当てられるディレクトリ構造を作成する必要があります。ほとんどのオペレーティング・システムでは、新しい表領域を作成するとき、またはデータファイルを加えて既存の表領域を変更するときに、データファイルのサイズと完全なファイル名を指定します。新しい表領域を作成するとき、または既存の表領域を変更するときは、いずれの場合も、データベースは、指定されたとおりにデータファイルを自動的に割り当てて、フォーマットします。
新しい表領域を作成するには、SQL文CREATE TABLESPACE
またはCREATE TEMPORARY TABLESPACE
を使用します。表領域を作成するには、CREATE TABLESPACE
システム権限が必要です。後で、ALTER TABLESPACE
またはALTER DATABASE
文を使用して、この表領域を変更できます。そのためには、ALTER TABLESPACE
またはALTER DATABASE
システム権限が必要です。
また、CREATE UNDO TABLESPACE
文を使用して、UNDO表領域と呼ばれる特別なタイプの表領域も作成できます。この表領域は、UNDOレコードを格納するために特別に設計されています。UNDOレコードとはデータベースが生成するレコードで、リカバリや読込み一貫性のために、またはROLLBACK
文の要求によって、データベースの変更をロールバックまたは取り消す際に使用されます。UNDO表領域の作成と管理については、第14章「UNDOの管理」を参照してください。
永続表領域および一時表領域の作成とメンテナンスについては、次の各項で説明します。
関連項目:
CREATE TABLESPACE
、CREATE TEMPORARY TABLESPACE
、ALTER TABLESPACE
およびALTER DATABASE
文の構文とセマンティクスの詳細は、『Oracle Database SQLリファレンス』を参照してください。
ローカル管理表領域では、その表領域内のすべてのエクステント情報がビットマップを使用して追跡されるため、次のような利点があります。
AUTOALLOCATE
句を指定すると、データベースで適切なエクステント・サイズが自動的に選択されるため、領域割当てが簡素化されます。
SYSTEM
表領域も含めて、すべての表領域をローカルに管理できます。
DBMS_SPACE_ADMIN
パッケージによって、ローカル管理表領域のメンテナンス手順が提供されます。
関連項目:
|
ローカル管理表領域を作成するには、CREATE TABLESPACE
文のEXTENT MANAGEMENT
句にLOCAL
を指定します。これは新しい永続表領域に対するデフォルトですが、AUTOALLOCATE
句またはUNIFORM
句を指定する場合は、EXTENT
MANAGEMENT
LOCAL
句を指定する必要があります。AUTOALLOCATE
句(デフォルト)を指定してデータベースでエクステントを自動的に管理するか、または表領域を特定サイズ(UNIFORM
)の均一エクステントで管理するかを指定できます。
様々なサイズのオブジェクトが表領域に含まれ、異なるエクステント・サイズの多数のエクステントが必要と予測される場合は、AUTOALLOCATE
を選択してください。領域の割当てと割当て解除を厳密に制御しなくてもよい場合は、AUTOALLOCATE
を選択すると表領域の管理作業が簡素化されます。この設定では、ある程度の領域が無駄になるという短所もありますが、ほとんどの場合、Oracle Databaseによって領域が管理されるという利点のほうが重要です。
未使用領域の厳密な制御が必要で、オブジェクトに割り当てられる領域、エクステントの数とサイズを正確に予測できる場合は、UNIFORM
を選択してください。この設定によって、表領域から使用できない領域がなくなります。
エクステント管理のタイプを明示的に指定しない場合は、Oracle Databaseによってエクステント管理が次のように判断されます。
CREATE TABLESPACE
文にDEFAULT
記憶域句を指定しない場合、データベースでは自動割当てのローカル管理表領域が作成されます。
CREATE TABLESPACE
文にDEFAULT
記憶域句を指定した場合、データベースでは次のことが考慮されます。
MINIMUM EXTENT
句を指定した場合は、MINIMUM EXTENT
、INITIAL
およびNEXT
の値が等しいかどうかと、PCTINCREASE
の値が0(ゼロ)かどうかが評価されます。3つの値が等しく、PCTINCREASE
の値が0(ゼロ)の場合は、エクステント・サイズ = INITIAL
で均一なローカル管理表領域が作成されます。MINIMUM EXTENT
、INITIAL
およびNEXT
パラメータの値が等しくない場合、またはPCTINCREASE
が0(ゼロ)でない場合は、指定したエクステント記憶域パラメータが無視され、自動割当てのローカル管理表領域が作成されます。
MINIMUM EXTENT
句を指定しない場合は、INITIAL
およびNEXT
の記憶域パラメータの値が等しいかどうかと、PCTINCREASE
が0(ゼロ)かどうかのみが評価されます。2つの値が等しく、PCTINCREASE
が0(ゼロ)の場合は、均一なローカル管理表領域が作成されます。それ以外の場合は、ローカル管理の表領域が作成され、自動的に割り当てられます。
次の文は、ローカル管理表領域lmtbsb
を作成し、AUTOALLOCATE
を指定しています。
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
AUTOALLOCATE
を指定すると、表領域はシステム管理になり、最小エクステント・サイズは64KBとなります。
AUTOALLOCATE
のかわりにUNIFORM
を指定すると、表領域は均一サイズのエクステントで管理されます。このサイズは、UNIFORM
のSIZE
句で指定できます。SIZE
を指定しないと、デフォルト・サイズは1MBになります。
次の例では、128KBの均一エクステントの表領域を作成しています(ブロック・サイズが2KBのデータベースでは、各エクステントは64個のデータベース・ブロックに相当します)。128KBの各エクステントは、このファイルのエクステント・ビットマップでは1ビットで表されます。
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
EXTENT MANAGEMENT LOCAL
を明示的に指定する場合は、DEFAULT
の記憶域句、MINIMUM EXTENT
またはTEMPORARY
を指定できません。ローカル管理の一時表領域を作成するには、CREATE TEMPORARY TABLESPACE
文を使用します。
ローカル管理表領域では、Oracle Databaseでセグメント領域の管理に使用できる方法は、自動と手動の2つです。手動セグメント領域管理では、「空きリスト」と呼ばれるリンクされたリストを使用してセグメント内の空き領域を管理します。一方、自動セグメント領域管理では、ビットマップを使用します。自動セグメント領域管理の方がより効率的な方法で、新しい永続ローカル管理表領域すべてのデフォルトです。
自動セグメント領域管理では、手動セグメント領域管理に比べて領域の使用効率が向上します。また、ユーザー数やインスタンス数の増加につれて拡張されるという点で自己チューニング型です。Oracle Real Application Clusters環境の場合、自動セグメント領域管理ではインスタンスに対する領域の動的アフィニティに対処できます。さらに、多くの標準的な処理負荷の場合、自動セグメント領域管理を使用したアプリケーションのパフォーマンスは、手動セグメント領域管理を使用して適切にチューニングされたアプリケーションよりも向上します。
自動セグメント領域管理は新しい永続ローカル管理表領域のデフォルトですが、SEGMENT SPACE MANAGEMENT AUTO
句を使用して明示的に使用可能にできます。
次の文は、自動セグメント領域管理を行うlmtbsb
表領域を作成します。
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
SEGMENT SPACE MANAGEMENT MANUAL
句を指定すると、自動セグメント領域管理を使用禁止にできます。
表領域の作成時に指定するセグメント領域管理方法は、その後表領域に作成されたすべてのセグメントに対して適用されます。表領域のセグメント領域管理モードは変更できません。
自動セグメント領域管理を使用するローカル管理表領域は、単一ファイル表領域、つまり、大型ファイル表領域(「大型ファイル表領域」を参照)としても作成できます。
大型ファイル表領域は、単一で非常に大きい(最大40億ブロック)データファイルを持つ表領域です。これに対して、従来の小型ファイル表領域には複数のデータファイルを格納できますが、各データファイルは大きくありません。大型ファイル表領域の利点は、次のとおりです。
CREATE DATABASE
文とCREATE CONTROLFILE
文のDB_FILES
初期化パラメータとMAXDATAFILES
パラメータを調整すると、データファイル情報に必要なSGA領域の量と制御ファイルのサイズを削減できます。
ALTER
TABLESPACE
文のSQL構文を使用すると、基礎となる各データファイルではなく表領域で操作を実行できます。
大型ファイル表領域は、自動セグメント領域管理を指定したローカル管理表領域でのみサポートされます。ただし、ローカル管理のUNDO表領域、一時表領域およびSYSTEM
表領域の3つは例外です。
大型ファイル表領域を作成するには、CREATE
TABLESPACE
文のBIGFILE
キーワード(CREATE
BIGFILE
TABLESPACE
...)を指定します。Oracle Databaseは、自動セグメント領域管理を指定したローカル管理表領域を自動的に作成します。この文には、EXTENT
MANAGEMENT
LOCAL
およびSEGMENT
SPACE
MANAGEMENT
AUTO
を必要に応じて指定できます。ただし、EXTENT
MANAGEMENT
DICTIONARY
またはSEGMENT
SPACE
MANAGEMENT
MANUAL
を指定すると、データベースはエラーを返します。この文の残りの構文はCREATE TABLESPACE
文と同じですが、指定できるのは1つのデータファイルのみです。次に例を示します。
CREATE BIGFILE TABLESPACE bigtbs DATAFILE '/u02/oracle/data/bigtbs01.dbf' SIZE 50G ...
SIZE
は、キロバイト(KB)、メガバイト(MB)、ギガバイト(GB)またはテラバイト(TB)で指定できます。
データベース作成時にデフォルトの表領域タイプをBIGFILE
に設定している場合は、CREATE TABLESPACE
文にBIGFILE
キーワードを指定する必要はありません。この場合、大型ファイル表領域はデフォルトで作成されます。
データベース作成時にデフォルトの表領域タイプをBIGFILE
に設定しておきながら、従来の表領域(小型ファイル)を作成する場合は、CREATE
SMALLFILE
TABLESPACE
文を指定すると、デフォルトの表領域タイプよりも作成する表領域が優先されます。
次のビューには、表領域を大型ファイル表領域として識別するBIGFILE
列が含まれています。
大型ファイル表領域は、その単一データファイルの相対ファイル番号によっても識別できます。その番号は、ほとんどのプラットフォームで1024ですが、OS/390では4096です。
永続表領域を暗号化して機密データを保護できます。表領域の暗号化はアプリケーションに対して完全に透過的であるため、アプリケーションの変更は不要です。暗号化された表領域は、主に、データベースを介さない手段による不当なアクセスからデータを保護します。たとえば、暗号化された表領域を、Oracleデータベース間で移動したり、保管のために外部の設備に移動するなどの目的で、バックアップ・メディアに書き込む場合、それらの表領域は暗号化されたままです。また、暗号化された表領域は、ユーザーがデータベースのセキュリティ機能を迂回してオペレーティング・システムのファイル・システムから直接データベース・ファイルにアクセスしようとした場合に、そのユーザーからデータを保護します。
表領域の暗号化によって、すべてのセキュリティ問題に対処できるわけではありません。たとえば、データベース内からのアクセスは制御できません。暗号化された表領域に格納されているオブジェクトに対する権限が付与されたユーザーは、追加のパスワードやキーを指定せずにそれらのオブジェクトにアクセスできます。
表領域を暗号化すると、すべての表領域ブロックが暗号化されます。暗号化は、表、クラスタ、索引、LOB(BASICFILE
とSECUREFILE
)、表パーティション、索引パーティションなどを含むすべてのセグメント・タイプに対してサポートされています。
最大限のセキュリティを確保するために、暗号化された表領域のデータは、UNDO表領域、REDOログおよび一時表領域に書き込まれる場合は自動的に暗号化されます。暗号化されたUNDO表領域や一時表領域を明示的に作成する必要はありません。実際、それらの表領域タイプに暗号化を指定することはできません。
異なる表領域に別のパーティションがあるパーティション表およびパーティション索引表の場合は、同じ表または索引で、暗号化された表領域と暗号化されていない表領域の両方を使用できます。
表領域の暗号化ではOracle Databaseの透過的データ暗号化が使用されます。この機能を使用するには、データベースのマスター暗号化キーを格納するためのOracleウォレットを作成する必要があります。暗号化された表領域を作成する場合、および暗号化データを格納または取得する場合は、ウォレットがオープンしている必要があります。ウォレットは、オープンするとすべてのセッションで使用可能になり、明示的にクローズするか、データベースが停止されるまではオープンしたままになります。
表領域を暗号化するには、COMPATIBLE
初期化パラメータを11.1.0以上に設定した状態でデータベースをオープンする必要があります。Oracle Database11g リリース1の新規インストールでは、COMPATIBLE
のデフォルト設定は11.1.0です。表領域を作成できるユーザーは、暗号化された表領域も作成できます。
透過的データ暗号化では、次に示すAdvanced Encryption Standard(AES)アルゴリズムやTriple Data Encryption Standard(3DES)アルゴリズムなど、業界標準の暗号化アルゴリズムがサポートされています。
暗号化キーの長さはアルゴリズム名で示されています。たとえば、AES128アルゴリズムでは128ビットのキーが使用されます。使用するアルゴリズムは表領域の作成時に指定します。表領域ごとに異なるアルゴリズムを使用できます。理論上は、キーの長さが長くなるほどセキュリティが強化されますが、その分、CPUオーバーヘッドがかかります。CREATE
TABLESPACE
文でアルゴリズムを指定しない場合は、AES128がデフォルトとなります。表領域の暗号化では、ディスク領域のオーバーヘッドは発生しません。
次の文では、デフォルトの暗号化アルゴリズムを使用して暗号化された表領域を作成しています。
CREATE TABLESPACE securespace DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M ENCRYPTION DEFAULT STORAGE(ENCRYPT);
次の文では、AES256アルゴリズムを使用して同じ表領域を作成しています。
CREATE TABLESPACE securespace DATAFILE '/u01/app/oracle/oradata/orcl/secure01.dbf' SIZE 100M ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
暗号化された表領域の制限事項は、次のとおりです。
ALTER
TABLESPACE
文で暗号化できません。ただし、データ・ポンプまたはSQL文(CREATE
TABLE
AS
SELECT
やALTER
TABLE
MOVE
など)を使用して、既存の表データを暗号化された表領域に移動できます。
SHUTDOWN
ABORT
の後、またはデータベース・インスタンスが停止する致命的なエラーの後など)は、リカバリ・プロセスがデータ・ブロックとREDOを復号化できるように、データベースのマウントの後にOracleウォレットをオープンしてからデータベースをオープンする必要があります。
また、透過的データ暗号化に関する一般的な制限事項については、『Oracle Database Advanced Security管理者ガイド』を参照してください。
DBA_TABLESPACES
とUSER_TABLESPACES
のデータ・ディクショナリ・ビューには、ENCRYPTED
という列が含まれています。表領域が暗号化されている場合は、この列にYES
と表示されます。
V$ENCRYPTED_TABLESPACES
ビューには、現在暗号化されているすべての表領域がリストされます。次の問合せでは、暗号化された表領域の名前と暗号化アルゴリズムが表示されます。
SELECT t.name, e.encryptionalg algorithm FROM v$tablespace t, v$encrypted_tablespaces e WHERE t.ts# = e.ts#; NAME ALGORITHM ------------------------------ --------- SECURESPACE AES128
関連項目:
|
一時表領域には、セッションの間のみ存続する一時データが格納されます。一時表領域を使用すると、メモリーに格納できない複数のソート操作の同時実行性を改善し、ソート時の領域管理操作の効率を改善できます。
一時表領域は、次の情報を格納するために使用します。
特定のインスタンスのソート操作はすべて、一時表領域内の1つのソート・セグメントを共有し、ソート・セグメントは、一時領域を必要とするソート操作を実行するすべてのインスタンスに存在します。ソート・セグメントは、一時表領域を使用してソート処理を実行する最初の文によってインスタンスの起動後に作成され、停止時にのみ解放されます。
デフォルトでは、新規にOracle Databaseをインストールするたびに、TEMP
という単一の一時表領域が作成されます。追加の一時表領域は、CREATE
TABLESPACE
文で作成できます。一時表領域を各データベース・ユーザーに割り当てるには、CREATE USER
文またはALTER USER
文を使用します。複数のユーザーが単一の一時表領域を共有できます。
一時表領域には、オブジェクトを明示的に作成できません。
注意: 前述の説明の例外は、一時表です。一時表を作成すると、その行はデフォルト一時表領域に格納されます。ただし、一時表を新規の一時表領域内に作成する場合を除きます。 詳細は、「一時表の作成」を参照してください。 |
一時表領域が明示的に割り当てられていないユーザーは、データベースのデフォルト一時表領域(新規インストールではTEMP
)を使用します。データベースのデフォルト一時表領域は次のコマンドで変更できます。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;
データベースの現行のデフォルト一時表領域を判断するには、次の問合せを実行します。
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE'; PROPERTY_NAME PROPERTY_VALUE -------------------------- ------------------------------ DEFAULT_TEMP_TABLESPACE TEMP
一時表領域のソート・セグメントの領域割当てと割当て解除は、V$SORT_SEGMENT
ビューを使用して表示できます。V$SORT_USAGE
ビューでは、そのセグメント内の現行のソート・ユーザーが識別されます。
一時表領域を使用するソート操作が完了しても、ソート・セグメントに割り当てられたエクステントの割当ては解除されず、エクステントには、使用可能マークおよび再利用可能マークが付けられます。DBA_TEMP_FREE_SPACE
ビューには、各一時表領域の割当済領域の合計と空き領域が表示されます。 詳細は、「一時表領域の領域使用情報の表示」を参照してください。大量の未使用領域があるローカル管理の一時表領域は手動で縮小できます。 詳細は、「ローカル管理の一時表領域の縮小」を参照してください。
ローカル管理表領域では、領域の管理がより簡単で効率的であるため、一時表領域には理想的です。ローカル管理の一時表領域では、一時ファイルが使用されます。一時表領域の外側のデータは変更されず、一時表領域データのREDOは発生しません。このため、読取り専用データベースまたはスタンバイ・データベースでディスク上ソート操作を実行できます。
一時ファイルの情報を表示するには、データファイルの場合とは異なるビューを使用します。V$TEMPFILE
およびDBA_TEMP_FILES
ビューは、V$DATAFILE
およびDBA_DATA_FILES
ビューに相当します。
ローカル管理の一時表領域を作成するには、CREATE TEMPORARY TABLESPACE
文を使用します。この文を発行するには、CREATE TABLESPACE
システム権限が必要です。
次の文では、各エクステントが16MBの一時表領域が作成されます。16MBの各エクステント(標準ブロック・サイズが2KBのときは8000個のブロックに相当)は、このファイルのビットマップに1ビットで表されます。
CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE '/u02/oracle/data/lmtemp01.dbf' SIZE 20M REUSE EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;
すべての一時表領域は均一サイズのローカル管理エクステントを使用して作成されるため、一時表領域の場合、エクステント管理句はオプションです。SIZE
のデフォルトは1MBです。ただし、SIZE
に別の値を指定する必要がある場合は、前述の文を使用します。
通常の表領域と同様に、単一ファイル(大型ファイル)の一時表領域を作成できます。単一ファイルの一時表領域を作成するには、CREATE BIGFILE TEMPORARY TABLESPACE
文を使用します。 大型ファイル表領域については、「大型ファイル表領域の作成」および「大型ファイル表領域の変更」を参照してください。ただし、データファイルではなく一時ファイルを使用する一時表領域の作成を検討してください。
DBA_TEMP_FREE_SPACE
ディクショナリ・ビューには、各一時表領域の領域使用に関する情報が表示されます。この情報には、割当て済領域と空き領域が含まれます。これらの統計を表示するには、次のコマンドを使用してこのビューを問い合せます。
SELECT * from DBA_TEMP_FREE_SPACE; TABLESPACE_NAME TABLESPACE_SIZE ALLOCATED_SPACE FREE_SPACE ----------------------------------- --------------- --------------- ---------- TEMP 250609664 250609664 249561088
ユーザーは、一時表領域グループを使用して複数の表領域から一時領域を消費できます。単一の一時表領域ではなく表領域グループを使用することによって、ソート(特に多数のパーティションがある表でのソート)の結果を保持するのに1つの表領域では不十分な場合に発生する問題を回避できます。パラレル実行のサーバーで表領域グループを使用すると、1回のパラレル操作で複数の一時表領域を使用できます。
表領域グループには、次の特性があります。
表領域グループは明示的に作成しません。表領域グループは、最初の一時表領域がグループに割り当てられると暗黙的に作成されます。また、表領域グループに含まれる最後の一時表領域がグループから削除されると、その表領域グループが削除されます。
DBA_TABLESPACE_GROUPS
ビューには、表領域グループとそのメンバーの表領域がリスト表示されます。
表領域グループは、CREATE TEMPORARY TABLESPACE
文またはALTER TABLESPACE
文にTABLESPACE GROUP
句を指定したときに、指定した表領域グループが存在していない場合に暗黙的に作成されます。
たとえば、group1
およびgroup2
が両方とも存在しない場合は、次の文によってこの2つのグループが作成され、それぞれのグループには指定の表領域のみがメンバーとして含まれます。
CREATE TEMPORARY TABLESPACE lmtemp2 TEMPFILE '/u02/oracle/data/lmtemp201.dbf' SIZE 50M TABLESPACE GROUP group1; ALTER TABLESPACE lmtemp TABLESPACE GROUP group2;
表領域を既存の表領域グループに追加するには、CREATE TEMPORARY TABLESPACE
文またはALTER TABLESPACE
文のTABLESPACE GROUP
句で既存の表領域グループ名を指定します。
次の文は、表領域を既存のグループに追加します。この文では、表領域lmtemp3
を作成してgroup1
に追加します。その結果、group1
には表領域lmtemp2
とlmtemp3
が含まれます。
CREATE TEMPORARY TABLESPACE lmtemp3 TEMPFILE '/u02/oracle/data/lmtemp301.dbf' SIZE 25M TABLESPACE GROUP group1;
次の文も表領域を既存のグループに追加しますが、この場合、表領域lmtemp2
はすでにgroup1
に属しているため、実質的にはgroup1
からgroup2
への移動となります。
ALTER TABLESPACE lmtemp2 TABLESPACE GROUP group2;
この結果、group2
にはlmtemp
とlmtemp2
が含まれ、group1
にはtmtemp3
のみが含まれます。
次の文を使用すると、表領域をグループから削除できます。
ALTER TABLESPACE lmtemp3 TABLESPACE GROUP '';
これによって、表領域lmtemp3
はどのグループにも属さなくなります。さらに、group1
に属するメンバーがなくなるため、group1
は暗黙的に削除されます。
ALTER DATABASE...DEFAULT
TEMPORARY
TABLESPACE
文を使用して、表領域グループをデータベースのデフォルト一時表領域として割り当てます。次に例を示します。
ALTER DATABASE sample DEFAULT TEMPORARY TABLESPACE group2;
これで、明示的に一時表領域が割り当てられていないユーザーは表領域lmtemp
とlmtemp2
を使用することになります。
表領域グループがデフォルト一時表領域に指定されている場合、そのグループのメンバーの表領域は削除できません。メンバーの表領域を削除するには、最初にその表領域を表領域グループから削除する必要があります。同様に、単一の一時表領域がデフォルト一時表領域に指定されている場合は、その一時表領域は削除できません。
DB_BLOCK_SIZE
初期化パラメータで指定された標準のデータベース・ブロック・サイズとは異なるブロック・サイズの表領域を作成できます。この機能によって、ブロック・サイズの異なる表領域をデータベース間でトランスポートできます。
CREATE TABLESPACE
文のBLOCKSIZE
句を使用して、データベースの標準とは異なるブロック・サイズを指定して表領域を作成できます。BLOCKSIZE
句を正しく実行するためには、DB_CACHE_SIZE
と、少なくとも1つのDB_nK_CACHE_SIZE
初期化パラメータをすでに設定している必要があります。さらに、BLOCKSIZE
句で指定する整数を1つのDB_nK_CACHE_SIZEパラメータの設定に対応付ける必要があります。冗長な指定になりますが、BLOCKSIZE
をDB_BLOCK_SIZE
初期化パラメータで指定されている標準のブロック・サイズと同じに指定することも可能です。
次の文は表領域lmtbsb
を作成しますが、ブロック・サイズをDB_BLOCK_SIZE
初期化パラメータで指定されている標準のデータベース・ブロック・サイズとは異なるサイズにします。
CREATE TABLESPACE lmtbsb DATAFILE '/u02/oracle/data/lmtbsb01.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K BLOCKSIZE 8K;
関連項目:
|
一部のデータベース操作については、データベースでREDOレコードを生成するかどうかを制御できます。REDOを使用しないと、メディア・リカバリはできません。ただし、REDOの生成を抑制するとパフォーマンスが改善されるため、簡単にリカバリできる操作に適している場合があります。たとえば、CREATE TABLE...AS SELECT
文は、データベース障害やインスタンス障害が発生した場合に操作を繰り返すことができます。
これらの操作を表領域内のオブジェクトに対して実行するときにREDOを抑制する必要がある場合は、CREATE TABLESPACE
文にNOLOGGING
句を指定します。この句を指定しないか、かわりにLOGGING
を指定した場合は、表領域内のオブジェクトに変更が行われるとREDOが生成されます。一時セグメントや一時表領域の場合は、ロギング属性に関係なくREDOは生成されません。
表領域レベルで指定するロギング属性は、その表領域内で作成されるオブジェクトのデフォルト属性になります。このデフォルトのロギング属性は、CREATE TABLE
文を使用するなど、スキーマ・オブジェクト・レベルでLOGGING
やNOLOGGING
を指定することで上書きできます。
スタンバイ・データベースがある場合は、NOLOGGING
句を指定すると、そのスタンバイ・データベースの可用性と精度に問題が生じます。この問題を克服するために、FORCE LOGGING
モードを指定できます。CREATE TABLESPACE
文にFORCE LOGGING
句を指定すると、表領域内のオブジェクトを変更するすべての操作について、REDOレコードを強制的に生成させることができます。これにより、オブジェクト・レベルでの指定が上書きされます。
FORCE LOGGING
モードの表領域を別のデータベースにトランスポートすると、新しい表領域ではFORCE LOGGING
モードは維持されません。
関連項目:
|
オンラインの表領域をオフライン化すると、一般的な使用を一時的に禁止にできます。データベースの残りの部分はオープンしていて使用可能であり、ユーザーはデータにアクセスできます。逆に、オフライン状態の表領域をオンライン化して、データベース・ユーザーがその表領域内のスキーマ・オブジェクトを使用できるようにすることもできます。表領域の可用性を変更するには、データベースをオープンする必要があります。
表領域の可用性を変更するには、ALTER TABLESPACE
文を使用します。そのためには、ALTER TABLESPACE
またはMANAGE TABLESPACE
システム権限が必要です。
表領域は、次のような場合にオフライン化できます。
詳細は、「データファイルの名前変更と再配置」を参照してください。
表領域をオフライン化すると、その関連ファイルがすべてオフライン化されます。
次の表領域はオフライン化できません。
表領域をオフライン化する前に、その表領域がデフォルト表領域としてすでに割り当てられているユーザーの表領域割当ての変更を考慮してください。このようなユーザーは表領域がオフラインの間その中のオブジェクトにアクセスできないため、表領域割当ての変更をお薦めします。
ALTER TABLESPACE...OFFLINE
文では、次のパラメータを指定できます。
TEMPORARY
は、表領域を通常の方法でオフライン化できないときのみ指定してください。この場合、エラーのためにオフライン化されたファイルのみをリカバリする必要があり、その後に表領域をオンライン化できます。IMMEDIATE
は、NORMAL設定とTEMPORARY設定を試した後にのみ指定してください。
次の例では、users
表領域を通常の方法でオフライン化しています。
ALTER TABLESPACE users OFFLINE NORMAL;
データベースがオープンされている場合は、いつでもOracle Database内の任意の表領域をオンライン化できます。通常、表領域は、データベース・ユーザーがその中のデータを使用できるようにオンラインになっています。
オンライン化しようとする表領域が、正常に(ALTER TABLESPACE OFFLINE
文のNORMAL
句を使用して)オフライン化されていない場合は、最初にメディア・リカバリをしないかぎりオンライン化できません。メディア・リカバリを実行しないと、エラーが返されて表領域はオフラインのままになります。
次の文は、users
表領域をオンライン化します。
ALTER TABLESPACE users ONLINE;
表領域を読取り専用にすると、表領域のデータファイルに対して書込み操作ができなくなります。読取り専用表領域の主な目的は、データベース内の大規模かつ静的部分のバックアップおよびリカバリを実行しなくて済むようにすることです。また、読取り専用表領域は、ユーザーが履歴データを変更できないように履歴データを完全に保護する手段でもあります。表領域を読取り専用にすると、その表領域内のすべての表はユーザーの更新権限レベルに関係なく更新できません。
注意: 表領域は、それが作成されたデータベース内でしかオンライン化できないため、読取り専用にすること自体でアーカイブ要件やデータ公開要件を満たすことはできません。 ただし、「データベース間での表領域のトランスポート」で説明するように、トランスポータブル表領域機能を使用すると、これらの要件を満たすことができます。 |
表や索引などの項目は読取り専用表領域から削除できますが、読取り専用表領域内のオブジェクトは作成または変更できません。ALTER TABLE...ADD
またはALTER TABLE...MODIFY
など、データ・ディクショナリ内のファイル記述を更新する文は実行できますが、新しい記述は表領域を読取り/書込み用にするまでは使用できません。
読取り専用表領域は、他のデータベースにトランスポートすることもできます。読取り専用表領域は更新できないため、CD-ROMまたはWrite Once-Read Many(WORM)デバイスに格納できます。
この項の内容は、次のとおりです。
すべての表領域は、最初は読取り/書込み用として作成されます。表領域を読取り専用に変更するには、ALTER TABLESPACE
文でREAD ONLY
キーワードを使用します。そのためには、ALTER TABLESPACE
またはMANAGE TABLESPACE
システム権限が必要です。
表領域を読取り専用にするには、あらかじめ次の条件を満たす必要があります。
SYSTEM
表領域にしない。
読取り専用表領域のデータにアクセスする際のパフォーマンスを向上させるため、表領域を読取り専用にする直前に、表領域内の表のブロックすべてにアクセスする問合せを発行することをお薦めします。各表に対してSELECT COUNT (*)
などの単純な問合せを実行しておくと、それ以降、表領域のデータ・ブロックに最も効率的にアクセスできるようになります。これによって、最後にブロックを変更したトランザクションの状態をデータベースが確認する必要がなくなるからです。
次の文は、flights
表領域を読取り専用にします。
ALTER TABLESPACE flights READ ONLY;
データベースのトランザクション処理中に、ALTER TABLESPACE...READ ONLY
文を発行できます。この文が発行されると、表領域は推移読取り専用状態になります。トランザクションでは、その表領域に対してDML文を使用した変更ができなくなります。変更を試行すると、そのトランザクションは終了してロールバックされます。ただし、すでに変更を実行し、追加変更を試行しないトランザクションは、コミットまたはロールバックできます。
ALTER TABLESPACE...READ ONLY
文は、戻る前に、表領域に対する変更が保留中またはコミット解除されたトランザクション、およびこの文の発行前に開始されたトランザクションがコミットまたはロールバックされるのを待機します。 文の発行前に開始されたトランザクションがアクティブなままであっても、表領域に対する変更をロールバックしてセーブポイントまでロールバックすると、文はこのアクティブ・トランザクションを待機しなくなります。
ALTER TABLESPACE
文の完了までに長時間かかる場合は、読取り専用状態になるのを妨げているトランザクションを識別できます。次に、それらのトランザクションの所有者に通知し、必要に応じてトランザクションを終了させるかどうかを決定できます。
次の例では、ALTER TABLESPACE...READ ONLY
文に対応するトランザクション・エントリが識別され、そのセッション・アドレス(saddr
)が表示されます。
SELECT SQL_TEXT, SADDR FROM V$SQLAREA,V$SESSION WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%'; SQL_TEXT SADDR ---------------------------------------- -------- alter tablespace tbs1 read only 80034AF0
各アクティブ・トランザクションの開始システム変更番号(SCN)は、V$TRANSACTION
ビューに格納されています。このビューを開始SCNの昇順でソートして表示すると、トランザクションが実行順にリストされます。前述の例の場合は、読取り専用文のトランザクション・エントリのセッション・アドレスがわかっているので、V$TRANSACTION
ビューで特定できます。開始SCNよりも小さい番号を持つトランザクション(以前に実行されたトランザクションを示します)はすべて、表領域の停止とその後の読取り専用状態になるのを妨げている可能性があります。
SELECT SES_ADDR, START_SCNB FROM V$TRANSACTION ORDER BY START_SCNB; SES_ADDR START_SCNB -------- ---------- 800352A0 3621 --> waiting on this txn 80035A50 3623 --> waiting on this txn 80034AF0 3628 --> this is the ALTER TABLESPACE statement 80037910 3629 --> don't care about this txn
この時点で、ブロックしているトランザクションの所有者を見つけることができます。
SELECT T.SES_ADDR, S.USERNAME, S.MACHINE FROM V$SESSION S, V$TRANSACTION T WHERE T.SES_ADDR = S.SADDR ORDER BY T.SES_ADDR SES_ADDR USERNAME MACHINE -------- -------------------- -------------------- 800352A0 DAVIDB DAVIDBLAP --> Contact this user 80035A50 MIKEL LAB61 --> Contact this user 80034AF0 DBA01 STEVEFLAP 80037910 NICKD NICKDLAP
表領域を読取り専用にした後は、その表領域のバックアップをただちに作成することをお薦めします。表領域は読取り専用になっているかぎり変更できないため、それ以後のバックアップは不要です。
表領域を書込み可能に変更するには、ALTER TABLESPACE
文でREAD WRITE
キーワードを指定します。そのためには、ALTER TABLESPACE
またはMANAGE TABLESPACE
システム権限が必要です。
表領域を読取り/書込み用にするには、前提条件として、表領域のみでなく、そのすべてのデータファイルをオンライン化する必要があります。データファイルをオンライン化するには、ALTER DATABASE
文のDATAFILE...ONLINE
句を使用します。データファイルの現行の状態を確認するには、V$DATAFILE
ビューを使用します。
次の文は、flights
表領域を書込み可能にします。
ALTER TABLESPACE flights READ WRITE;
読取り専用表領域を書込み可能に変更すると、データファイルの制御ファイル・エントリが更新されるため、読取り専用バージョンのデータファイルをリカバリの開始点として使用できます。
CD-ROMまたはWORMデバイスに読取り専用表領域を作成する手順は、次のとおりです。
RENAME DATAFILE
句を指定したALTER TABLESPACE
文を使用します。データファイルの名前を変更すると、制御ファイルに記述されているこれらのファイルの名前も変更されます。
大規模データベースのほとんどが、アクセス速度の遅いデバイスや階層形式の記憶デバイス上にある読取り専用表領域に格納されている場合は、READ_ONLY_OPEN_DELAYED
初期化パラメータをTRUE
に設定することを検討する必要があります。これにより、読取り専用表領域内のデータファイルは、そこに格納されたデータの読取り試行時に初めてアクセスされるため、データベースのオープンなど、特定の操作が高速になります。
READ_ONLY_OPEN_DELAYED=TRUE
に設定すると、次のような副次的な影響があります。
ALTER SYSTEM CHECK DATAFILES
では、読取り専用ファイルはチェックされません。
ALTER TABLESPACE...ONLINE
およびALTER DATABASE
DATAFILE...ONLINE
では、読取り専用ファイルはチェックされません。最初のアクセス時にのみチェックされます。
V$RECOVER_FILE
、V$BACKUP
およびV$DATAFILE_HEADER
は、読取り専用ファイルにアクセスしません。読取り専用ファイルは結果リスト上に「DELAYED OPEN
」というエラーで示され、他の列の値は0(ゼロ)になります。
V$DATAFILE
は読取り専用ファイルにアクセスしません。読取り専用ファイルにはサイズ「0」がリストされます。
V$RECOVER_LOG
は読取り専用ファイルにアクセスしません。リカバリに必要な可能性があるログは、リストに追加されません。
ALTER DATABASE NOARCHIVELOG
は読取り専用ファイルにアクセスしません。リカバリが必要な読取り専用ファイルがある場合でも、処理が継続します。ここでは、表領域の変更とメンテナンスに関する事項について説明します。この項の内容は、次のとおりです。
ローカル管理表領域をローカル管理の一時表領域に変更できません。また、セグメント領域の管理方法を変更することもできません。ローカル管理表領域では、使用可能エクステントを結合する必要はありません。ただし、次のような操作の場合は、ALTER TABLESPACE
文をローカル管理表領域に対して使用できます。
ALTER TABLESPACE lmtbsb ADD DATAFILE '/u02/oracle/data/lmtbsb02.dbf' SIZE 1M;
ONLINE
/OFFLINE
)を変更する場合。 「表領域の可用性の変更」を参照してください。
ALTER TABLESPACE
文の次の2つの句は、大型ファイル表領域使用時におけるデータファイルの透過性をサポートします。
RESIZE
: RESIZE
句を使用すると、大型ファイル表領域内の単一データファイルを参照せずに、そのデータファイルのサイズを絶対サイズに変更できます。次に例を示します。
ALTER TABLESPACE bigtbs RESIZE 80G;
AUTOEXTEND
(ADD
DATAFILE
句の範囲外で使用):大型ファイル表領域では、ADD
DATAFILE
句の範囲外でAUTOEXTEND
句を使用できます。次に例を示します。
ALTER TABLESPACE bigtbs AUTOEXTEND ON NEXT 20G;
大型ファイル表領域に対してADD
DATAFILE
句を指定すると、エラーが発生します。
次の例のように、ALTER TABLESPACE
を使用すると、一時ファイルを追加、オフライン化またはオンライン化できます。
ALTER TABLESPACE lmtemp ADD TEMPFILE '/u02/oracle/data/lmtemp02.dbf' SIZE 18M REUSE; ALTER TABLESPACE lmtemp TEMPFILE OFFLINE; ALTER TABLESPACE lmtemp TEMPFILE ONLINE;
ALTER DATABASE
文を使用すると、一時ファイルを変更できます。
次の文では、一時ファイルをオフラインにしてから、オンラインに戻しています。前述の例の最後の2つのALTER
TABLESPACE
文と同様に動作します。
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' OFFLINE; ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' ONLINE;
次の文では、一時ファイルのサイズが変更されます。
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' RESIZE 18M;
次の文では、一時ファイルが削除され、オペレーティング・システム・ファイルが削除されます。
ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP INCLUDING DATAFILES;
この一時ファイルが属していた表領域は残ります。アラート・ログには、一時ファイルが削除されたことを示すメッセージが書き込まれます。オペレーティング・システム・エラーによってファイルが削除されなかった場合でも文は正常終了しますが、エラーを示すメッセージがアラート・ログに書き込まれます。
また、ALTER DATABASE
文を使用して、既存の一時ファイルの自動拡張を使用可能または使用禁止にしたり、一時ファイル名を変更(RENAME FILE
)できます。 必要な構文については、『Oracle Database SQLリファレンス』を参照してください。
データベースで大規模なソート操作を実行すると、一時表領域が増大し、ディスク領域の容量が大幅に占有される場合があります。ソート操作が完了しても余分になった領域は解放されず、使用可能マークと再利用可能マークが付けられるのみです。したがって、単一の大規模なソート操作を実行すると、ソート操作の完了後に大量の割当て済一時領域が未使用のままになります。このため、データベースでは、ローカル管理の一時表領域を縮小して未使用領域を解放できます。
一時表領域を縮小する場合は、ALTER TABLESPACE
文のSHRINK SPACE
句を使用します。一時表領域の特定の一時ファイルを縮小する場合は、ALTER TABLESPACE
文のSHRINK TEMPFILE
句を使用します。表領域または一時ファイルの他の属性を維持しながら可能なかぎり空き領域を縮小します。オプションのKEEP
句は、表領域または一時ファイルの最小サイズを定義します。
縮小はオンライン操作です。これは、ユーザー・セッションは必要に応じてソート・エクステントの割当てを継続でき、すでに実行中の問合せは影響を受けないことを意味します。
次の例では、ローカル管理の一時表領域のlmtmp1
を20MBのサイズに縮小しています。
ALTER TABLESPACE lmtemp1 SHRINK SPACE KEEP 20M;
次の例では、ローカル管理の一時表領域lmtmp2
の一時ファイルlmtemp02.dbf
を縮小しています。KEEP
句を省略しているため、データベースでは、一時ファイルを最小可能サイズまで縮小することを試みます。
ALTER TABLESPACE lmtemp2 SHRINK TEMPFILE '/u02/oracle/data/lmtemp02.dbf';
永続表領域または一時表領域の名前は、ALTER TABLESPACE
文のRENAME TO
句を使用して変更できます。たとえば、次の文はusers
表領域の名前を変更します。
ALTER TABLESPACE users RENAME TO usersts;
表領域の名前を変更すると、データ・ディクショナリ、制御ファイルおよび(オンライン)データファイル・ヘッダー内でその表領域名への参照がすべて更新されます。表領域IDは変更されないため、たとえば、その表領域がユーザーのデフォルト表領域の場合、DBA_USERS
ビューには名前が変更された表領域がユーザーのデフォルト表領域として表示されます。
この文の操作では、次の点に注意してください。
COMPATIBLE
パラメータは、10.0.0以上に設定する必要があります。
SYSTEM
表領域またはSYSAUX
表領域の場合、名前は変更されず、エラーが発生します。
DATABASE_PROPERTIES
ビューに新しい名前が表示されます。
SPFILE
)の表領域名は新しい表領域名に変更されます。
従来の初期化パラメータ・ファイル(PFILE
)を使用している場合は、初期化パラメータ・ファイルを手動で変更する必要があることを示すメッセージがアラート・ログに書き込まれます。
表領域とその内容が不要になった場合は、その表領域と内容(表領域に含まれるセグメント)をデータベースから削除できます。表領域を削除するには、DROP
TABLESPACE
システム権限が必要です。
表領域を削除すると、対応付けられたデータベースの制御ファイル中のファイル・ポインタのみが削除されます。必要に応じて、削除された表領域を構成していたオペレーティング・システム・ファイル(データファイル)を削除するようにOracle Databaseに指示することもできます。表領域の削除と同時にデータファイルを削除するようにデータベースに指示しない場合は、後でオペレーティング・システムの適切なコマンドを使用して削除する必要があります。
アクティブなセグメントを含む表領域は削除できません。たとえば、表領域内の表が現在使用されている場合、またはコミットされていないトランザクションをロールバックする必要があるUNDOデータが表領域に含まれている場合、その表領域は削除できません。表領域はオンラインでもオフラインでもかまいませんが、削除する前にオフラインにすることをお薦めします。
表領域を削除するには、DROP TABLESPACE
文を使用します。次の文は、users
表領域を、その中のセグメントも含めて削除します。
DROP TABLESPACE users INCLUDING CONTENTS;
表領域が空の場合(表、ビューまたは他の構造が格納されていない場合)は、INCLUDING CONTENTS
句を指定する必要はありません。CASCADE CONSTRAINTS
句を使用すると、表領域内の表の主キーと一意キーを参照する別の表領域の表から、すべての参照整合性制約を削除できます。
表領域の削除と同時に表領域に対応付けられたデータファイルを削除するには、INCLUDING CONTENTS AND DATAFILES
句を使用します。次の文は、users
表領域とそれに対応付けられているデータファイルを削除します。
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;
アラート・ログには、削除された各データファイルのメッセージが書き込まれます。オペレーティング・システム・エラーによってファイルが削除されなかった場合でもDROP TABLESPACE
文は正常終了しますが、エラーを示すメッセージがアラート・ログに書き込まれます。
SYSAUX
表領域は、データベースの作成時に、SYSTEM
表領域の補助表領域としてインストールされます。これまで個別に表領域を作成して使用していた一部のデータベースのコンポーネントは、SYSAUX
表領域に含まれるようになりました。
SYSAUX
表領域が使用不可能になった場合でも、データベースのコア機能は実行可能です。SYSAUX
表領域を使用しているデータベース機能はエラーとなるか、機能が制限される可能性があります。
SYSAUX
表領域の登録済占有データのリストは、「SYSAUX表領域の概要」を参照してください。これらのコンポーネントはSYSAUX
表領域を使用し、SYSAUX
表領域を占有する方法がインストール時に提供されます。
SYSAUX
表領域の占有データは、V$SYSAUX_OCCUPANTS
ビューを使用して監視できます。このビューには、SYSAUX
表領域の占有データに関する次の情報がリスト表示されます。
ビュー情報は、占有データ別にメンテナンスされます。
コンポーネントのインストール時には、コンポーネントをSYSAUX
に常駐させないように指定することもできます。また、後でコンポーネントを指定の表領域に再配置する必要が生じた場合、そのコンポーネントについては、V$SYSAUX_OCCUPANTS
ビューで指定した移動プロシージャを使用して移動を実行できます。
たとえば、デフォルトの表領域であるSYSAUX
にOracle Ultra Searchをインストールしたとします。後で、Ultra Searchがかなりの領域を使用していることがわかりました。SYSAUX
への領域負担を軽減するために、V$SYSAUX_OCCUPANTS
ビューで指定したPL/SQL移動プロシージャをコールして、Ultra Searchを別の表領域に再配置できます。
移動プロシージャを使用すると、コンポーネントを他の表領域からSYSAUX
表領域に移動することもできます。
SYSAUX
表領域は、多数のデータベース・コンポーネントによって占有され(表2-2を参照)、その合計サイズはそれらのコンポーネントが消費する領域によって決定します。同様に、コンポーネントが消費する領域は、使用される機能およびデータベース・ワークロードの性質によって決定します。
SYSAUX
表領域を最も大きく占有するのは自動ワークロード・リポジトリ(AWR)です。AWRが消費する領域は、特定の時間におけるシステム内でのアクティブなセッションの数、スナップショット間隔、履歴データ保存期間など、いくつかの要因によって決定します。 同時にアクティブなセッションが平均10ある標準的なシステムでは、AWRデータ用として約200〜300MBの領域が必要になる場合があります。
次の表に、システム構成と予測される負荷に基づいてSYSAUX
表領域のサイズを設定するためのガイドラインを示します。
パラメータ/推奨設定 | 小型 | 中型 | 大型 |
---|---|---|---|
CPU数 |
2 |
8 |
32 |
同時アクティブ・セッション数 |
10 |
20 |
100 |
ユーザー・オブジェクト数: 表および索引 |
500 |
5,000 |
50,000 |
デフォルト構成で安定した状態での予測 |
500 MB |
2 GB |
5 GB |
AWRのサイズを制御するには、スナップショット間隔と履歴データ保存期間を変更します。 AWRのスナップショット間隔と保存期間の管理の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
SYSAUX
表領域のもう1つの主要な占有データは、埋込みのEnterprise Manager(EM)リポジトリです。このリポジトリはOracle Enterprise Manager Database Controlで使用され、そのメタデータが格納されます。このリポジトリのサイズは、データベース・アクティビティ、およびリポジトリに格納された構成関連情報によって異なります。
他のデータベース・コンポーネントが消費するSYSAUX
表領域の領域サイズは、関連する機能(Oracle UltraSearch、Oracle Text、Oracle Streamsなど)を使用中の場合のみ大きくなります。このような機能を使用していない場合、これらのコンポーネントはSYSAUX
表領域のサイズに大きく影響しません。
Oracle Databaseには、DBMS_SPACE_ADMIN
パッケージが組み込まれています。このパッケージは、ローカル管理表領域の問題の診断と修復に使用するサポートの集まりです。
次の表に、DBMS_SPACE_ADMIN
パッケージに含まれるプロシージャを示します。 各プロシージャの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
次の使用例では、DBMS_SPACE_ADMIN
パッケージを使用して問題を診断し、解決できる代表的な状況について説明します。
関連項目:
|
TABLESPACE_VERIFY
プロシージャの使用時に、ビットマップ内で「空き」マークが付いているブロックがセグメントに割り当てられたにもかかわらず、セグメント間のオーバーラップがレポートされていないことが検出された場合。
この使用例では、次のタスクを実行してください。
SEGMENT_DUMP
プロシージャをコールして、管理者がそのセグメントに割り当てた範囲をダンプします。
TABLESPACE_EXTENT_MAKE_USED
オプションを指定してTABLESPACE_FIX_BITMAPS
プロシージャをコールし、領域に使用済のマークを付けます。
TABLESPACE_REBUILD_QUOTAS
をコールして割当て制限を再作成します。
ビットマップに「空き」マークが付いたセグメント・ブロックがあるため、セグメントを削除できない場合。このセグメントには、自動的に「破損」マークが付けられます。
この使用例では、次のタスクを実行してください。
SEGMENT_VERIFY_EXTENTS_GLOBAL
オプションを指定してSEGMENT_VERIFY
プロシージャをコールします。オーバーラップがレポートされない場合は、手順2から5までを実行します。
SEGMENT_DUMP
プロシージャをコールして、そのセグメントに割り当てられたデータ・ブロック・アドレス範囲をダンプします。
TABLESPACE_EXTENT_MAKE_FREE
オプションを指定してTABLESPACE_FIX_BITMAPS
プロシージャをコールし、領域に「空き」のマークを付けます。
SEGMENT_DROP_CORRUPT
をコールしてSEG$
エントリを削除します。
TABLESPACE_REBUILD_QUOTAS
をコールして割当て制限を再作成します。
TABLESPACE_VERIFY
プロシージャで、いくつかオーバーラップがレポートされる場合。前の内部エラーに基づいて、一部の実データを削除する必要があります。
この場合、表t1
などの削除するオブジェクトを選択してから、次のタスクを実行します。
t1
がオーバーラップしているすべてのオブジェクトのリストを作成します。
t1
を削除します。必要に応じて、SEGMENT_DROP_CORRUPT
プロシージャをコールしてフォローアップします。
t1
がオーバーラップしていたすべてのオブジェクトに対して、SEGMENT_VERIFY
プロシージャをコールします。必要に応じて、TABLESPACE_FIX_BITMAPS
プロシージャをコールして該当するビットマップに使用済を示すマークを付けます。
TABLESPACE_VERIFY
プロシージャを再度実行し、問題が解決したかどうかを検証します。
ビットマップ・ブロックの集合にメディア破損がある場合。
この使用例では、次のタスクを実行してください。
TABLESPACE_REBUILD_BITMAPS
プロシージャをコールします。
TABLESPACE_REBUILD_QUOTAS
をコールして割当て制限を再作成します。
TABLESPACE_VERIFY
プロシージャをコールして、ビットマップの整合性を検証します。
TABLESPACE_MIGRATE_TO_LOCAL
プロシージャを使用して、ディクショナリ管理表領域をローカル管理表領域に移行する場合。この操作はオンラインで実行されますが、領域管理操作は移行が完了するまでブロックされます。つまり、移行処理中にデータの読取りや変更はできますが、大量のデータをロードする場合は追加のエクステントの割当てが必要になるため、操作がブロックされる場合があります。
データベースのブロック・サイズは2KB、表領域tbs_1
の既存のエクステント・サイズは10、50および10,000ブロック(それぞれ使用済、使用済および使用可能)とします。MINIMUM EXTENT
値は20KB(10ブロック)です。システムにビットマップの割当て単位を選択させることができます。MINIMUM EXTENT
を超えない範囲の最大公分母であることから、10ブロックの値が選択されます。
tbs_1
をローカル管理表領域に変換する文は、次のとおりです。
EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL ('tbs_1');
割当て単位のサイズを指定する場合は、必ずシステムによって計算される単位サイズの因数にします。
DBMS_SPACE_ADMIN
パッケージを使用して、SYSTEM
表領域をディクショナリ管理からローカル管理に移行します。次の文は、この移行を実行します。
SQL> EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');
移行を実行する前に、次の条件を満たす必要があります。
SYSTEM
ではないこと。
コールド・バックアップを除き、前述のすべての条件はTABLESPACE_MIGRATE_TO_LOCAL
プロシージャにより施行されます。
ここでは、データベース間で表領域をトランスポートする方法について説明します。この項の内容は、次のとおりです。
トランスポータブル表領域セットを生成するには、Oracle8i 以上のEnterprise Editionを使用する必要があります。ただし、Oracle8i 以上であれば、どのエディションでもトランスポータブル表領域セットを同じプラットフォーム上のOracle Databaseにインポートできます。トランスポータブル表領域セットを別のプラットフォーム上のOracle Databaseにインポートするには、両方のデータベースの互換性が10.0以上に設定されている必要があります。 表領域の移動に伴うリリース・レベルでのデータベースの互換性の詳細は、「トランスポータブル表領域の互換性に関する注意事項」を参照してください。
注意:
トランスポータブル表領域機能を使用すると、表領域セットを別のOracle Databaseにコピーできます。
ディクショナリ管理またはローカル管理のどちらの表領域でもトランスポートできます。Oracle9iから、トランスポートする表領域をターゲット・データベースの標準ブロック・サイズと同じブロック・サイズにする必要がなくなりました。
同じデータのエクスポート/インポートやアンロード/ロードを使用するよりも、トランスポータブル表領域を使用してデータを移動するほうが高速です。これは、実際のすべてのデータを含むデータファイルが単に移動先にコピーされるためです。表領域オブジェクトのメタデータのみを新規データベースにトランスポートするには、データ・ポンプを使用します。
トランスポータブル表領域機能は、次のような場合に役立ちます。
これらの使用例については、「トランスポータブル表領域の使用: 使用例」を参照してください。
表領域をトランスポートする方法は、次の2通りあります。
「表領域のトランスポート」ウィザードを実行する手順は、次のとおりです。
Oracle Database 11gから、プラットフォーム間で表領域のトランスポートが可能になりました。この機能を使用すると、次のことが可能になります。
多くのプラットフォーム(すべてではありません)では、クロス・プラットフォームでの表領域のトランスポートがサポートされます。V$TRANSPORTABLE_PLATFORM
ビューを問い合せると、サポートされているプラットフォームを参照して、各プラットフォームのendian形式(バイトの並び順)を確認できます。次の問合せを実行すると、プラットフォーム間での表領域のトランスポートがサポートされているプラットフォームが表示されます。
SQL> COLUMN PLATFORM_NAME FORMAT A32 SQL> SELECT * FROM V$TRANSPORTABLE_PLATFORM; PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT ----------- -------------------------------- -------------- 1 Solaris[tm] OE (32-bit) Big 2 Solaris[tm] OE (64-bit) Big 7 Microsoft Windows IA (32-bit) Little 10 Linux IA (32-bit) Little 6 AIX-Based Systems (64-bit) Big 3 HP-UX (64-bit) Big 5 HP Tru64 UNIX Little 4 HP-UX IA (64-bit) Big 11 Linux IA (64-bit) Little 15 HP Open VMS Little 8 Microsoft Windows IA (64-bit) Little 9 IBM zSeries Based Linux Big 13 Linux 64-bit for AMD Little 16 Apple Mac OS Big 12 Microsoft Windows 64-bit for AMD Little 17 Solaris Operating System (x86) Little 16 rows selected.
ソースおよびターゲットのプラットフォームでendiannessが異なる場合は、ソースまたはターゲットのプラットフォームで、トランスポートする表領域をターゲットの形式に変換する必要があります。両方のプラットフォームでendiannessが同じ場合は変換する必要はなく、表領域は同じプラットフォーム上にある場合と同様にトランスポートできます。
表領域を別のプラットフォームにトランスポートする前に、その表領域が属するプラットフォームをデータファイル・ヘッダーで識別する必要があります。互換性が10.0.0以上に設定されているOracle Databaseでは、データファイルの読取りまたは書込みを1回以上実行することによってプラットフォームを識別できます。
表領域をトランスポートする場合は、次の制限事項に注意してください。
次の問合せでは、XMLTypeを含む表領域のリストが返されます。
select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t where t.table_name=x.table_name and t.tablespace_name=p.tablespace_name and x.owner=u.username
XMLTypeの詳細は、『Oracle XML DB開発者ガイド』を参照してください。
XMLTypeを含む表領域のトランスポートには、次の制限事項があります。
ignore=y
オプションを設定しないと、エラーが返されます。
他の制限事項は次のとおりです。
トランスポータブル表領域は、複数受信者を持つ8.0互換のアドバンスト・キューをサポートしません。
SYSTEM表領域またはユーザーSYSが所有するオブジェクトはトランスポートできません。これに該当するオブジェクトは、PL/SQL、Javaクラス、コールアウト、ビュー、シノニム、ユーザー、権限、ディメンション、ディレクトリ、順序などです。
解釈がアプリケーション固有で、データベースに対して不透明なタイプ(RAW
、BFILE
など)は、トランスポートできますが、クロス・プラットフォームのトランスポート操作では変換されません。このタイプの実際の構造はアプリケーションのみが認識するため、このタイプが新規プラットフォームに移動した後、アプリケーションではendiannessの問題に対処する必要があります。OPAQUE型を使用するタイプとオブジェクトも、直接的または間接的にこの制限の影響を受けます。
BINARY_FLOAT
型およびBINARY_DOUBLE
型は、データ・ポンプを使用してトランスポートできます。
Oracle Databaseでは、トランスポータブル表領域セットを作成するときに、ターゲット・データベースで実行する必要のある最も低い互換性レベルが計算されます。このレベルのことを、トランスポータブル・セットの互換性レベルと呼びます。Oracle Database 11gからは、ターゲット・データベースが同じプラットフォーム上にあるか別のプラットフォーム上にあるかに関係なく、表領域は同等以上の互換性が設定されたデータベースに常にトランスポートできます。トランスポータブル・セットの互換性レベルがターゲット・データベースの互換性レベルよりも高い場合は、エラーが通知されます。
次の表に、様々な使用例でのソース表領域とターゲット表領域の互換性の最低要件を示します。ソース・データベースとターゲット・データベースの互換性設定は同一である必要はありません。
トランスポートの使用例 |
互換性の最低設定 |
|
---|---|---|
ソース・データベース |
ターゲット・データベース |
|
同じプラットフォーム上のデータベース間 |
8.0 |
8.0 |
データベース・ブロック・サイズがターゲット・データベースと異なる表領域 |
9.0 |
9.0 |
異なるプラットフォーム上のデータベース間 |
10.0 |
10.0 |
次に、表領域のトランスポート処理の手順を示します。各手順の詳細は、後続の例で示します。
V$TRANSPORTABLE_PLATFORM
ビューを問い合せて両方のプラットフォームのendian形式をチェック(クロス・プラットフォームでのトランスポートの場合)同じプラットフォームに表領域セットをトランスポートする場合は、この手順をスキップしてください。
トランスポータブル表領域セット(トランスポータブル・セット)は、トランスポートされる表領域セットのデータファイルと、そのセットの構造情報(メタデータ)を含むエクスポート・ファイルから構成されます。データ・ポンプを使用してエクスポートを実行します。
endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合は、表領域セットをターゲット・プラットフォームのendiannessに変換する必要があります。ソース側で変換する場合はこの手順の中で実行し、ターゲット側で変換する場合は手順4で実行できます。
データファイルとエクスポート・ファイルをターゲット・データベースからアクセス可能な場所にコピーします。
endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートし、ソース側で表領域セットをターゲット・プラットフォームのendiannessに変換していない場合は、ここでターゲット側での変換を実行する必要があります。
データ・ポンプ・ユーティリティを起動して、表領域セットのメタデータをターゲット・データベースにインポートします。
表領域をトランスポートする手順については、次のデータファイルと表領域を想定した例で詳細に説明します。
表領域 | データファイル |
---|---|
|
/u01/oracle/oradata/salesdb/sales_101.dbf |
|
/u01/oracle/oradata/salesdb/sales_201.dbf |
この手順は、ソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合のみ実行します。
ソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートする場合は、ソースおよびターゲットのプラットフォームの両方でプラットフォーム間の表領域トランスポートがサポートされているかどうかと、各プラットフォームのendiannessを確認します。両方のプラットフォームのendiannessが同じ場合、変換は必要ありません。endiannessが異なる場合は、ソース・データベースまたはターゲット・データベースのいずれかで、表領域セットを変換する必要があります。
sales_1
およびsales_2
を異なるプラットフォームにトランスポートする場合は、各プラットフォームで次の問合せを実行できます。問合せで行が返される場合、そのプラットフォームではプラットフォーム間の表領域トランスポートがサポートされています。
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
ソース・プラットフォームでの問合せの結果は次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ------------------------- -------------- Solaris[tm] OE (32-bit) Big
ターゲット・プラットフォームでの問合せの結果は次のとおりです。
PLATFORM_NAME ENDIAN_FORMAT ------------------------- -------------- Microsoft Windows NT Little
この問合せ結果によって、endian形式が異なっているため、表領域セットをトランスポートする場合に変換が必要であることがわかります。
トランスポータブル・セット内のオブジェクトとセット外のオブジェクトとの間に、論理的または物理的な依存関係が存在することがあります。トランスポートできるのは、自己完結した表領域セットのみです。この場合、自己完結とは、表領域セット内から外部への参照がないことを意味します。次に、自己完結した表領域に違反する例を示します。
コピーする表領域セットは、パーティション化した表のすべてのパーティションが含まれている状態、またはまったく含まれていない状態にしてください。パーティション表のサブセットをトランスポートする場合は、パーティションを表に変換する必要があります。
表領域セットをトランスポートするときには、参照整合性制約を含めるかどうかを選択できます。ただし、参照整合性制約を含めることによって、表領域セットの自己完結性に影響を与える場合があります。制約をトランスポートしなければ、その制約はポインタとは見なされません。
LOB
を指すLOB
列が含まれている場合
表領域セットが自己完結型かどうかを判断するには、オラクル社が提供するパッケージDBMS_TTS
のTRANSPORT_SET_CHECK
プロシージャをコールします。このプロシージャを実行するには、EXECUTE_CATALOG_ROLE
ロール(最初はSYS
に付与されている)を付与されている必要があります。
DBMS_TTS
パッケージをコールするときは、自己完結かどうかを調べるトランスポータブル・セットの表領域のリストを指定します。制約を含むかどうかを指定することもできます。厳密または完全な完結であるかを調べる場合は、TTS_FULL_CHECK
パラメータをTRUE
に設定する必要があります。
厳密または完全な完結のチェックは、トランスポータブル・セットから外部への参照のみではなく、外部からトランスポータブル・セットへの参照も捕捉する必要がある場合に実行します。依存オブジェクトがトランスポータブル・セットに完全に含まれているか、またはトランスポータブル・セットの外部にのみ存在することが必要な場合は、TSPITRを実行します。
たとえば、表t
を含んでいるが、その索引i
を含んでいない表領域に対してTSPITRを実行すると、トランスポート後に索引とデータの整合性がなくなるため、これは違反になります。完全完結チェックを実行することにより、トランスポータブル・セットからの依存関係またはトランスポータブル・セットへの依存関係がないことが保証されます。 詳細は、『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』のTSPITRの例を参照してください。
次の文を使用して、表領域sales_1
およびsales_2
が自己完結しているかどうかを、参照整合性制約を考慮して(TRUE
を指定して)調べます。
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('sales_1,sales_2', TRUE);
このPL/SQLパッケージをコールした後に、TRANSPORT_SET_VIOLATIONS
ビューからすべての違反を選択して表示できます。表領域セットが自己完結している場合、このビューは空になります。次の問合せ例は、2つの違反がある場合を示しています。1つ目は表領域セットの境界を超えている外部キー定数dept_fk
で、2つ目は表領域セットに部分的に含まれているパーティション表jim.sales
です。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS; VIOLATIONS --------------------------------------------------------------------------- Constraint DEPT_FK between table JIM.EMP in tablespace SALES_1 and table JIM.DEPT in tablespace OTHER Partitioned table JIM.SALES is partially contained in the transportable set
これらの違反は、sales_1
およびsales_2
をトランスポータブルにする前に解決する必要があります。次の手順で説明するように、整合性制約違反を回避するための選択肢の1つとして、整合性制約をエクスポートしない方法があります。
この手順は、権限を持つユーザーが実行できます。ただし、トランスポータブル表領域のエクスポート操作を実行するためには、EXP_FULL_DATABASE
ロールが割り当てられている必要があります。
トランスポートする表領域セットが自己完結であることを確認した後に、次の処理を実行してトランスポータブル表領域セットを生成します。
SQL> ALTER TABLESPACE sales_1 READ ONLY; Tablespace altered. SQL> ALTER TABLESPACE sales_2 READ ONLY; Tablespace altered.
SQL> HOST $ EXPDP system/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir TRANSPORT_TABLESPACES = sales_1,sales_2
エクスポート操作のモードを決定するTRANSPORT_TABLESPACES
は、常に指定する必要があります。この例では、次のように指定しています。
DUMPFILE
パラメータでは、作成する構造情報エクスポート・ファイルの名前をexpdat.dmp
と指定します。
DIRECTORY
パラメータでは、オペレーティング・システムまたは自動ストレージ管理のダンプ・ファイルの場所を示すデフォルトのディレクトリ・オブジェクトを指定します。DIRECTORY
オブジェクトはデータ・ポンプを起動する前に作成し、ディレクトリに対するREAD
およびWRITE
オブジェクト権限をPUBLIC
に付与する必要があります。 CREATE
DIRECTORY
コマンドの詳細は、『Oracle Database SQLリファレンス』を参照してください。
表領域のトランスポート操作を厳密完結チェック付きで実行する場合は、次の例に示すように、TRANSPORT_FULL_CHECK
パラメータを使用します。
EXPDP system/password DUMPFILE=expdat.dmp DIRECTORY = dpump_dir TRANSPORT_TABLESPACES=sales_1,sales_2 TRANSPORT_FULL_CHECK=Y
この例では、データ・ポンプ・エクスポート・ユーティリティによって、トランスポータブル・セット内のオブジェクトとトランスポータブル・セット外のオブジェクトとの間に依存性がないことを検証します。トランスポートする表領域セットが自己完結していない場合、エクスポートは失敗し、トランスポータブル・セットが自己完結していないことがわかります。その場合は、手順1に戻ってすべての違反を解決する必要があります。
$ EXIT
sales_1
およびsales_2
表領域を異なるプラットフォームにトランスポートする場合に、各プラットフォームのendiannessが異なるため、表領域セットをトランスポートする前に変換を行う場合は、sales_1
およびsales_2
を構成するデータファイルを変換します。
SQL> HOST
CONVERT
コマンドを使用して変換を実行します。Recovery Managerを起動し、ターゲット・データベースに接続します。
$ RMAN TARGET / Recovery Manager: Release 10.1.0.0.0 Copyright (c) 1995, 2003, Oracle Corporation. All rights reserved. connected to target database: salesdb (DBID=3295731590)
/temp
で、このディレクトリはすでに作成されています。変換されたデータファイルの名前は、システムによって割り当てられます。
RMAN> CONVERT TABLESPACE sales_1,sales_2 2> TO PLATFORM 'Microsoft Windows NT' 3> FORMAT '/temp/%U'; Starting backup at 08-APR-03 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=11 devtype=DISK channel ORA_DISK_1: starting datafile conversion input datafile fno=00005 name=/u01/oracle/oradata/salesdb/sales_101.dbf converted datafile=/temp/data_D-10_I-3295731590_TS-ADMIN_TBS_FNO-5_05ek24v5 channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15 channel ORA_DISK_1: starting datafile conversion input datafile fno=00004 name=/u01/oracle/oradata/salesdb/sales_101.dbf converted datafile=/temp/data_D-10_I-3295731590_TS-EXAMPLE_FNO-4_06ek24vl channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:45 Finished backup at 08-APR-03
RMAN> exit Recovery Manager complete.
表領域のデータファイルとエクスポート・ファイルの両方を、ターゲット・データベースからアクセスできる場所にトランスポートします。
ソースとターゲットの両方がファイル・システムの場合は、次の機能を使用できます。
DBMS_FILE_TRANSFER
パッケージ
ソースとターゲットのいずれかが自動ストレージ管理(ASM)ディスク・グループの場合は、次の機能を使用できます。
/sys/asm
仮想フォルダ間でのFTP詳細は、『Oracle Databaseストレージ管理者ガイド』を参照してください。
DBMS_FILE_TRANSFER
パッケージ
endiannessがソース・プラットフォームとは異なるプラットフォームに表領域セットをトランスポートし、表領域セットをまだ変換していない場合は、この手順を実行します。この例では、トランスポートする前に次の手順を完了していると想定しています。
ターゲット・プラットフォーム上で変換するデータファイルは、ターゲット・プラットフォーム上の一時的な場所に移動できます。ただし、変換前か変換後かに関係なく、すべてのデータファイルをターゲット・プラットフォーム上の指定の場所に移動する必要があります。
ここで、次の例に示すように、Recovery Managerを使用してトランスポート済の必要なデータファイルを移動先ホストのendian形式に変換し、その結果を/orahome/dbsに格納します。
RMAN> CONVERT DATAFILE 2> '/hq/finance/work/tru/tbs_31.f', 3> '/hq/finance/work/tru/tbs_32.f', 4> '/hq/finance/work/tru/tbs_41.f' 5> TO PLATFORM="Solaris[tm] OE (32-bit)" 6> FROM PLATFORM="HP TRu64 UNIX" 7> DB_FILE_NAME_CONVERT= 8> "/hq/finance/work/tru/", "/hq/finance/dbs/tru" 9> PARALLELISM=5;
データファイルは、表領域名ではなくファイル名で識別します。表領域のメタデータがインポートされるまで、ローカル・インスタンスでは対象の表領域名を認識できません。ソース・プラットフォームとターゲット・プラットフォームはオプションです。Recovery Managerでは、データファイルを調べてソース・プラットフォームを判別します。また、デフォルトのターゲット・プラットフォームは、変換を実行するホストのプラットフォームになります。
関連項目:
DBMS_FILE_TRANSFERパッケージを使用して、トランスポートされるファイルとそのメタデータをコピーする方法は、「データベース・サーバーを使用したファイルのコピー」を参照してください。 |
この手順は、権限を持つユーザーが実行できます。表領域セットをインポートするには、次のタスクを実行します。
impdp
を使用して、次のように表領域のメタデータをインポートします。
IMPDP system/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir TRANSPORT_DATAFILES= /salesdb/sales_101.dbf, /salesdb/sales_201.dbf REMAP_SCHEMA=(dcranney:smith) REMAP_SCHEMA=(jfee:williams)
この例では、次の指定を行います。
DUMPFILE
パラメータでは、インポートされる表領域のメタデータが含まれるエクスポート・ファイルを指定します。
DIRECTORY
パラメータでは、ダンプ・ファイルの場所を識別するディレクトリ・オブジェクトを指定します。
TRANSPORT_DATAFILES
パラメータによって、インポートする表領域が含まれるすべてのデータファイルを識別します。
REMAP_SCHEMA
パラメータによって、データベース・オブジェクトの所有権を変更します。REMAP_SCHEMA
を指定しない場合、すべてのデータベース・オブジェクト(表や索引など)は同じユーザー・スキーマ内でソース・データベースとして作成され、そのユーザーはターゲット・データベース内にすでに存在している必要があります。ユーザーが存在しない場合は、インポート・ユーティリティによってエラーが返されます。この例では、ソース・データベース内でdcranney
が所有している表領域セット内のオブジェクトは、表領域セットをインポートした後のターゲット・データベース内ではsmith
の所有となります。同様に、ソース・データベース内でjfee
が所有しているオブジェクトは、ターゲット・データベース内ではwilliams
の所有となります。この場合、ターゲット・データベースにユーザーdcranney
およびjfee
は存在しなくてもかまいませんが、ユーザーsmith
およびwilliams
は存在する必要があります。
この文が正常に実行されると、コピーするセット内のすべての表領域は読取り専用モードのままになります。インポート・ログをチェックして、エラーが発生しなかったかどうかを確認してください。
多数のデータファイルを扱う場合、データファイル名のリストを文の行で指定することは煩雑です。また、文の行制限を超える場合もあります。このような場合には、インポート・パラメータ・ファイルを使用できます。たとえば、次のようにしてデータ・ポンプ・インポート・ユーティリティを起動できます。
IMPDP system/password PARFILE='par.f'
パラメータ・ファイルpar.f
の内容は、次のとおりです。
DIRECTORY=dpump_dir DUMPFILE=expdat.dmp TRANSPORT_DATAFILES="'/db/sales_jan','/db/sales_feb'" REMAP_SCHEMA=dcranney:smith REMAP_SCHEMA=jfee:williams
ALTER TABLESPACE sales_1 READ WRITE; ALTER TABLESPACE sales_2 READ WRITE;
次の各項では、トランスポータブル表領域の用途について説明します。
標準的な企業のデータ・ウェアハウスには、1つ以上の大きいファクト表が含まれています。これらのファクト表は、企業データ・ウェアハウスを履歴データベースにするために、日付別にパーティション化されていることがあります。この場合、索引を作成すると、スター・クエリーを高速化できます。履歴データベースから最も古いパーティションを削除するたびにグローバル索引を再作成しなくても済むように、この種の履歴パーティション表についてローカル索引を作成することをお薦めします。
たとえば、1か月分のデータをデータ・ウェアハウスに毎月ロードする場合を考えます。データ・ウェアハウスには、sales
という大型のファクト表があり、次の列が含まれています。
CREATE TABLE sales (invoice_no NUMBER, sale_year INT NOT NULL, sale_month INT NOT NULL, sale_day INT NOT NULL) PARTITION BY RANGE (sale_year, sale_month, sale_day) (partition jan98 VALUES LESS THAN (1998, 2, 1), partition feb98 VALUES LESS THAN (1998, 3, 1), partition mar98 VALUES LESS THAN (1998, 4, 1), partition apr98 VALUES LESS THAN (1998, 5, 1), partition may98 VALUES LESS THAN (1998, 6, 1), partition jun98 VALUES LESS THAN (1998, 7, 1));
次のようにして、ローカルの非同一キー索引を作成します。
CREATE INDEX sales_index ON sales(invoice_no) LOCAL;
最初は、すべてのパーティションは空で、同じデフォルト表領域にあります。パーティションを毎月1つ作成し、パーティション表sales
に連結する必要があります。
現在が1998年7月で、7月分の売上データをパーティション表にロードするとします。ステージング・データベース内で、新しい表領域ts_jul
を作成します。また、その表領域内で、sales
表と正確に同じ列タイプを持つ表jul_sales
も作成します。表jul_sales
は、CREATE
TABLE
... AS
SELECT
文を使用して作成できます。jul_sales
を作成して移入した後に、sales
表内のローカル索引と同じ列に索引を付けて、この表の索引jul_sale_index
を作成することもできます。索引の作成後に、表領域ts_jul
をデータ・ウェアハウスにトランスポートします。
データ・ウェアハウスでは、7月分の売上データ用のsales
表にパーティションを追加します。これにより、ローカルの非同一キー索引用にも1つのパーティションが作成されます。
ALTER TABLE sales ADD PARTITION jul98 VALUES LESS THAN (1998, 8, 1);
トランスポートされた表jul_sales
を新しいパーティションに変換して、表sales
に連結します。
ALTER TABLE sales EXCHANGE PARTITION jul98 WITH TABLE jul_sales INCLUDING INDEXES WITHOUT VALIDATION;
この文により、新しいデータがパーティション表に連結され、7月分の売上データが新しいパーティションjul98
に格納されます。また、索引jul_sale_index
がsales
表のローカル索引のパーティションに変換されます。この文では、構造情報を操作するだけであり、データベースのポインタを切り替えれば済むので、結果は即時に返されます。新しいパーティション内のデータが旧パーティション内のデータとオーバーラップしないことがわかっている場合は、WITHOUT VALIDATION
句を指定してください。この句を指定しないと、新しいパーティションの範囲を検証するために、そこに含まれる新しいデータがすべて検査されます。
sales
表のすべてのパーティションが同じステージング・データベースから取り込まれる場合(ステージング・データベースが破壊されることはありません)、変換文は常に成功します。ただし、一般に、パーティション表のデータが異なるデータベースから取り込まれる場合は、変換操作が失敗する可能性があります。たとえば、sales
のjan98
パーティションが同じステージング・データベースから取り込まれていない場合は、前述の変換操作が失敗して次のエラーが返されることがあります。
ORA-19728: 表JUL_SALESとパーティションJAN98(表SALES)間で、データ・オブジェクト番号が競合してい ます。
この競合を解決するには、次の文を発行して、競合しているパーティションを移動します。
ALTER TABLE sales MOVE PARTITION jan98;
次に、変換操作を再試行してください。
交換が成功した後は、jul_sales
とjul_sale_index
を削除しても安全です(どちらも空になっています)。これで、7月分の売上データはデータ・ウェアハウスに正常にロードされたことになります。
トランスポータブル表領域を使用すると、構造化データをCDで公開できます。データ・プロバイダは、公開するデータを含む表領域をロードし、トランスポータブル・セットを生成し、トランスポータブル・セットをCDにコピーできます。これにより、このCDを配布できます。
顧客は、このCDを受け取って既存のデータベースにCDの内容を追加できます。CDからディスク記憶域にデータファイルをコピーする必要はありません。たとえば、Windows NTマシンのDドライブがCDドライブであるとします。次のようにして、データファイルcatalog.f
とエクスポート・ファイルexpdat.dmp
を含むトランスポータブル・セットをインポートできます。
IMPDP system/password DUMPFILE=expdat.dmp DIRECTORY=dpump_dir TRANSPORT_DATAFILES='D:¥catalog.f'
CDは、データベースの稼働中に取り出すことができます。この場合、その表領域への後続の問合せでは、CD上のデータファイルをオープンできないことを示すエラーが返されます。ただし、このデータベースの他の部分への操作は影響を受けません。CDをドライブに戻すと、表領域は再び読込み可能になります。
CDを取り出すのは、読取り専用表領域のデータファイルを削除するのと同じことです。データベースを停止して再起動すると、削除されたデータファイルが見つからず、データベースをオープンできないことを示すメッセージが表示されます(初期化パラメータREAD_ONLY_OPEN_DELAYED
をTRUE
に設定していない場合)。READ_ONLY_OPEN_DELAYED
がTRUE
に設定されている場合は、トランスポートされた表領域を問い合せるときにのみ、このファイルが読み込まれます。したがって、CDから表領域をトランスポートする場合は、そのCDがデータベースに永続的に連結されないかぎり、常にREAD_ONLY_OPEN_DELAYED
初期化パラメータをTRUE
に設定しておく必要があります。
トランスポータブル表領域を使用すると、複数のデータベースで1つの表領域を読取り専用でマウントできます。これにより、データを別々のディスクに複製しなくても、異なるデータベースで同じデータを共有できます。表領域のデータファイルは、どのデータベースからもアクセス可能にする必要があります。データベースの破損を回避するために、表領域はマウント先のすべてのデータベース内で読取り専用のままにしてください。
次に、複数のデータベースで同じ表領域を読取り専用でマウントする方法を2つ示します。
ソース・データベースでトランスポータブル・セットを生成し、すべてのデータベースからアクセス可能なディスクにそのトランスポータブル・セットを格納し、その後、表領域をマウントする各データベースにメタデータをインポートします。
データファイルがすでに共有ディスクに格納されているとします。表領域がすでに格納されているデータベース上で、この表領域を読取り専用にしてトランスポータブル・セットを生成し、データファイルは共有ディスク上の同じ位置に残したまま、表領域を他のデータベースにインポートします。
ディスクを複数のコンピュータからアクセス可能にするには、いくつかの方法があります。クラスタ・ファイル・システムまたはRAWディスクのいずれかを使用できます。ネットワーク・ファイル・システム(NFS)を使用することも可能です。ただし、NFSの停止中にユーザーが共有表領域を問い合せると、NFS操作がタイムアウトになるまでデータベースが停止することがあります。
後で、一部のデータベースから読取り専用表領域を削除できます。読取り専用表領域を削除しても、表領域のデータファイルは変更されません。したがって、削除操作によって表領域が破損することはありません。表領域をマウントしているデータベースが1つしかない場合を除き、表領域は読取り/書込み可能にしないでください。
トランスポータブル表領域セットは、任意のOracle Databaseにインポートできる自己完結したファイル・セットであるため、この章で説明するトランスポータブル表領域の手順を使用して、企業データ・ウェアハウスに旧データまたは履歴データをアーカイブできます。
トランスポータブル表領域を使用して、表領域のTSPITRを実行できます。
トランスポータブル表領域機能を使用して異なるプラットフォーム間でデータベースを移動するには、移動先プラットフォームに新規データベースを作成して、すべてのユーザー表領域をトランスポートします。 詳細は、『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』を参照してください。
SYSTEM
表領域はトランスポートできません。したがって、SYSTEM
表領域に依存する順序、PL/SQLパッケージなどのオブジェクトはトランスポートできません。このため、移動先のデータベースにこれらのオブジェクトを手動で作成するか、またはデータ・ポンプを使用して、トランスポータブル表領域で移動できないオブジェクトをトランスポートする必要があります。
次のデータ・ディクショナリ・ビューおよび動的パフォーマンス・ビューは、データベースの表領域に関して役立つ情報を提供します。
次に示すのは、これらのビューのごく一部の使用例です。
データベースに含まれるすべての表領域の名前とデフォルト記憶域パラメータをすべて表示するには、DBA_TABLESPACES
ビューに対して次の問合せを使用します。
SELECT TABLESPACE_NAME "TABLESPACE", INITIAL_EXTENT "INITIAL_EXT", NEXT_EXTENT "NEXT_EXT", MIN_EXTENTS "MIN_EXT", MAX_EXTENTS "MAX_EXT", PCT_INCREASE FROM DBA_TABLESPACES; TABLESPACE INITIAL_EXT NEXT_EXT MIN_EXT MAX_EXT PCT_INCREASE ---------- ----------- -------- ------- ------- ------------ RBS 1048576 1048576 2 40 0 SYSTEM 106496 106496 1 99 1 TEMP 106496 106496 1 99 0 TESTTBS 57344 16384 2 10 1 USERS 57344 57344 1 99 1
データファイルの名前、サイズおよびデータベースの対応する表領域を表示するには、DBA_DATA_FILES
ビューに対して次の問合せを入力します。
SELECT FILE_NAME, BLOCKS, TABLESPACE_NAME FROM DBA_DATA_FILES; FILE_NAME BLOCKS TABLESPACE_NAME ------------ ---------- ------------------- /U02/ORACLE/IDDB3/DBF/RBS01.DBF 1536 RBS /U02/ORACLE/IDDB3/DBF/SYSTEM01.DBF 6586 SYSTEM /U02/ORACLE/IDDB3/DBF/TEMP01.DBF 6400 TEMP /U02/ORACLE/IDDB3/DBF/TESTTBS01.DBF 6400 TESTTBS /U02/ORACLE/IDDB3/DBF/USERS01.DBF 384 USERS
データベース内の各表領域について、使用可能エクステントと結合アクティビティの統計を生成するには、次の問合せを入力します。
SELECT TABLESPACE_NAME "TABLESPACE", FILE_ID, COUNT(*) "PIECES", MAX(blocks) "MAXIMUM", MIN(blocks) "MINIMUM", AVG(blocks) "AVERAGE", SUM(blocks) "TOTAL" FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME, FILE_ID; TABLESPACE FILE_ID PIECES MAXIMUM MINIMUM AVERAGE TOTAL ---------- ------- ------ ------- ------- ------- ------ RBS 2 1 955 955 955 955 SYSTEM 1 1 119 119 119 119 TEMP 4 1 6399 6399 6399 6399 TESTTBS 5 5 6364 3 1278 6390 USERS 3 1 363 363 363 363
PIECES
は表領域ファイル内の空き領域エクステント数を示し、MAXIMUM
およびMINIMUM
はデータベース・ブロック内の領域で連続する最大領域と最小領域を示します。また、AVERAGE
は空き領域があるエクステントの平均ブロック・サイズを示し、TOTAL
は各表領域ファイル内の空き領域のブロック数を示します。新しいオブジェクトを作成しようとしているとき、またはセグメントを拡張予定であり、表領域に十分な領域があることを確かめるときに、この問合せを使用します。