ヘッダーをスキップ

Oracle Database SQL言語リファレンス
11g リリース1(11.1)

E05750-03
目次
目次
索引
索引

戻る 次へ

14 SQL文: CREATE CLUSTER〜CREATE JAVA

この章では、次のSQL文について説明します。


CREATE CLUSTER

用途

CREATE CLUSTER文を使用すると、クラスタを作成できます。クラスタとは、1つ以上の表のデータが含まれているスキーマ・オブジェクトのことです。

既存のクラスタの情報を取得するには、データ・ディクショナリ・ビューUSER_CLUSTERSALL_CLUSTERSおよびDBA_CLUSTERSを問い合せます。

参照:

  • クラスタの概要は、『Oracle Database概要』を参照してください。

  • クラスタを使用するタイミングついては、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

  • データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

 

前提条件

自分のスキーマにクラスタを作成する場合は、CREATE CLUSTERシステム権限が必要です。他のユーザーのスキーマ内にクラスタを作成する場合は、CREATE ANY CLUSTERシステム権限が必要です。また、クラスタを設定するスキーマの所有者は、クラスタが定義されている表領域に対する領域の割当て制限、またはUNLIMITED TABLESPACEシステム権限のいずれかが必要です。

クラスタを最初に作成する場合は、Oracle Databaseはクラスタに対する索引を自動的に作成しません。このため、CREATE INDEX文でクラスタ索引を作成するまでは、索引クラスタのクラスタ表に対して、データ操作言語(DML)文を発行できません。

構文

create_cluster::=

画像の説明

physical_attributes_clause::=size_clause::=を参照)

physical_attributes_clause::=

画像の説明

storage_clause::=を参照)

parallel_clause::=

画像の説明

セマンティクス

schema

作成するクラスタが定義されるスキーマを指定します。schemaを指定しない場合、現行のスキーマにクラスタが作成されます。

cluster

作成するクラスタの名前を指定します。

クラスタを作成した後、そのクラスタに表を追加します。クラスタには、最大32個の表を指定できます。クラスタを作成し、そのクラスタに表を追加しても、クラスタを意識する必要はありません。クラスタ化されていない表と同様に、SQL文を使用してクラスタ化表にアクセスできます。

参照:

クラスタへの表の追加については、「CREATE TABLE」、「クラスタの作成例:」および「クラスタへの表の追加例:」を参照してください。 

column

クラスタ・キーに1つ以上の列名を指定します。最大16個のクラスタ・キー列を指定できます。これらの列は、データ型およびサイズについて、クラスタ化表の列と対応している必要があります。名前は対応している必要はありません。

クラスタ・キー列の定義の一部として整合性制約は指定できません。そのかわり、クラスタに属している表に整合性制約を対応付けることができます。

参照:

「クラスタ・キーの例:」 

datatype

各クラスタ・キー列のデータ型を指定します。

クラスタのデータ型の制限事項:

クラスタのデータ型には、次の制限事項があります。

SORT

SORTキーワードは、ハッシュ・クラスタを作成する場合にのみ有効です。この句を指定すると、Oracle Databaseに対して、ハッシュ・ファンクションを適用する前にこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。ハッシュ・クラスタの作成については、「HASHKEYS句」を参照してください。

physical_attributes_clause

physical_attributes_clauseを使用すると、クラスタの記憶特性を指定できます。クラスタ内の各表もこれらの記憶特性を使用します。これらのパラメータの値を指定しない場合、次のデフォルトが使用されます。

SIZE

同一クラスタ・キー値または同一ハッシュ値を持つすべての行を格納するために確保する領域を、バイト単位で指定します。次に、この領域によって、データ・ブロックごとに格納されるクラスタやハッシュ値の最大値が決まります。SIZEの値がデータ・ブロック・サイズの約数でない場合、Oracle Databaseは、次に大きい約数を使用します。SIZEがデータ・ブロック・サイズより大きい場合、データベースは、クラスタまたはハッシュ値ごとに、1つ以上のデータ・ブロックを確保し、オペレーティング・システムのブロック・サイズを採用します。

データベースは、クラスタ・キー値を持つ行に対して確保する必要がある領域を決定する際に、クラスタ・キーの長さを考慮します。クラスタ・キーが大きければ、それに必要なサイズも大きくなります。実際のサイズを参照するには、USER_CLUSTERSデータ・ディクショナリ・ビューのKEY_SIZE列を問い合せます(ハッシュ値は実際にはクラスタ内に格納されていないため、この値はハッシュ・クラスタには適用されません)。

このパラメータを指定しない場合、各クラスタ・キー値またはハッシュ値ごとにデータ・ブロックが1つ確保されます。

TABLESPACE

クラスタを作成する表領域を指定します。

INDEX句

INDEXを指定すると、索引クラスタを作成できます。索引クラスタには、同一のクラスタ・キー値が指定されている行がまとめて格納されます。それぞれのクラスタ・キー値は、そのキーを持つ表および行の数に関係なく、各データ・ブロックに1回のみ格納されます。INDEXHASHKEYSも指定しない場合は、デフォルトで索引クラスタが作成されます。

索引クラスタの作成後、クラスタ内の表に対してデータ操作言語(DML)文を発行する前に、そのクラスタ・キーに索引を作成する必要があります。この索引をクラスタ索引と呼びます。

ハッシュ・クラスタに対してクラスタ索引は作成できないため、ハッシュ・クラスタ・キーで索引を作成する必要はありません。

参照:

クラスタ索引の作成方法の詳細は「CREATE INDEX」、索引クラスタの概要は『Oracle Database概要』を参照してください。 

HASHKEYS句

HASHKEYSを指定すると、ハッシュ・クラスタを作成し、ハッシュ・クラスタのハッシュ値の数を指定できます。ハッシュ・クラスタには、同一のハッシュ・キー値を持つ行がまとめて格納されます。それぞれの行のハッシュ値は、そのクラスタのハッシュ・ファンクションが戻す値です。

Oracle Databaseは、ハッシュ値の実際の数を決めるため、HASHKEYS値を一番近い次の素数に切り上げます。このパラメータの最小値は2です。INDEX句とHASHKEYSパラメータの両方を指定しないとき、デフォルトで索引クラスタが作成されます。

ハッシュ・クラスタの作成時に、データベースは、SIZEパラメータおよびHASHKEYSパラメータの値に基づいて、クラスタに領域を割り当てます。

参照:

Oracle Databaseがクラスタに領域を割り当てる方法の詳細は、『Oracle Database概要』および「ハッシュ・クラスタの例:」を参照してください。 

SINGLE TABLE

SINGLE TABLEを指定すると、表を1つのみ持つタイプのハッシュ・クラスタを作成できます。この句によって、表がクラスタの一部でない場合より行へのアクセスが高速になります。

単一表クラスタの制限事項:

同時にクラスタに存在できる表は1つのみです。ただし、表を削除して、同一のクラスタに別の表を作成することはできます。

参照:

「単一表ハッシュ・クラスタの例:」 

HASH IS expr

ハッシュ・クラスタに対するハッシュ・ファンクションとして使用する式を指定します。式には、次の制限事項があります。

HASH IS句を指定しない場合、Oracle Databaseはハッシュ・クラスタに対して内部ハッシュ・ファンクションを使用します。

既存のクラスタの詳細は、データ・ディクショナリ表USER_CLUSTER_HASH_EXPRESSIONSALL_CLUSTER_HASH_EXPRESSIONSおよびDBA_CLUSTER_HASH_EXPRESSIONSに問い合せます。

ハッシュ列のクラスタ・キーは、任意のデータ型で構成される1つ以上の列を持つことができます。複合クラスタ・キー、または整数以外の列で構成されるクラスタ・キーを持つハッシュ・クラスタに対しては、内部ハッシュ・ファンクションを使用する必要があります。

参照:

データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 

parallel_clause

parallel_clauseを使用すると、クラスタの作成をパラレル化できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

NOROWDEPENDENCIES | ROWDEPENDENCIES

この句のクラスタに対する動作は、表に対する動作と同じです。詳細は、「CREATE TABLE」の「NOROWDEPENDENCIES | ROWDEPENDENCIES」を参照してください。

CACHE | NOCACHE

CACHE

CACHEを指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内の最高使用頻度(LRU)リストの最高使用頻度側に入れることができます。この句は、小規模な参照表で有効です。

NOCACHE

NOCACHEを指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内のLRUリストの最低使用頻度側に入れることができます。これはデフォルトの動作です。

NOCACHEは、storage_clauseKEEPを指定したクラスタには影響しません。

クラスタの作成例:

次の文は、クラスタ・キー列department、クラスタ・サイズ512バイトおよび記憶域パラメータ値を指定した索引クラスタpersonnelを作成します。

CREATE CLUSTER personnel
   (department NUMBER(4))
SIZE 512 
STORAGE (initial 100K next 50K);
クラスタ・キーの例:

次の文は、personnelのクラスタ・キーにクラスタ索引を作成します。

CREATE INDEX idx_personnel ON CLUSTER personnel;
 

クラスタ索引の作成後、索引に表を追加し、その表に対してDML操作を行うことができます。

クラスタへの表の追加例:

次の文は、サンプル表hr.employeesから部門表を作成し、前述の例で作成したpersonnelクラスタに追加します。

CREATE TABLE dept_10
   CLUSTER personnel (department_id)
   AS SELECT * FROM employees WHERE department_id = 10;

CREATE TABLE dept_20
   CLUSTER personnel (department_id)
   AS SELECT * FROM employees WHERE department_id = 20;
ハッシュ・クラスタの例:

次の文は、クラスタ・キー列cust_language、最大ハッシュ・キー値10(各サイズ512バイト)および記憶域パラメータ値を指定したハッシュ・クラスタlanguageを作成します。

CREATE CLUSTER language (cust_language VARCHAR2(3))
   SIZE 512 HASHKEYS 10
   STORAGE (INITIAL 100k next 50k);

この文では、HASH IS句を指定していないため、Oracle Databaseは、そのクラスタに対して内部ハッシュ・ファンクションを採用します。

次の文は、postal_codecountry_id列で構成されるクラスタ・キーを持つaddressという名前のハッシュ・クラスタを作成し、これらの列を含むSQL式をハッシュ・ファンクションに使用します。

CREATE CLUSTER address
   (postal_code NUMBER, country_id CHAR(2))
   HASHKEYS 20
   HASH IS MOD(postal_code + country_id, 101);
単一表ハッシュ・クラスタの例:

次の文は、クラスタ・キーcustomer_idおよび最大ハッシュ・キー値100(各サイズ512バイト)を指定した単一表ハッシュ・クラスタcust_ordersを作成します。

CREATE CLUSTER cust_orders (customer_id NUMBER(6))
   SIZE 512 SINGLE TABLE HASHKEYS 100;

CREATE CONTEXT

用途

CREATE CONTEXT文を使用すると、次の操作を実行できます。

専用パッケージのDBMS_SESSION.SET_CONTEXTプロシージャを使用して、コンテキスト属性を設定または再設定できます。

参照

  • コンテキストについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • DBMS_SESSION.SET_CONTEXTプロシージャについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

 

前提条件

コンテキスト・ネームスペースを作成する場合、CREATE ANY CONTEXTシステム権限が必要です。

構文

create_context::=

画像の説明

セマンティクス

OR REPLACE

OR REPLACEを指定すると、異なるパッケージを使用して既存のコンテキスト・ネームスペースを再定義できます。

namespace

作成または変更するコンテキスト・ネームスペース名を指定します。コンテキスト・ネームスペースは、常にスキーマSYSに格納されます。

参照:

コンテキスト・ネームスペースのネーミングに関するガイドラインは、「スキーマ・オブジェクトのネーミング規則」を参照してください。 

schema

packageを所有するスキーマを指定します。schemaを指定しない場合、Oracle Databaseは現行のスキーマを使用します。

package

ユーザー・セッションのネームスペースに基づくコンテキスト属性を設定または再設定するPL/SQLパッケージを指定します。

柔軟に設計できるように、Oracle Databaseは、コンテキスト作成時のスキーマの存在またはパッケージの妥当性を検証しません。

INITIALIZED句

INITIALIZED句を使用すると、コンテキスト・ネームスペースを初期化するOracle Database以外のエンティティを指定できます。

EXTERNALLY

EXTERNALLYを使用すると、セッション確立時にOCIインタフェースを使用してネームスペースを初期化できます。

参照:

OCIを使用したセッション確立の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。 

GLOBALLY

GLOBALLYを指定すると、グローバル・ユーザーがデータベースへ接続するときに、LDAPディレクトリによってネームスペースを初期化できます。

セッション確立後、設定したPL/SQLパッケージのみがネームスペースのすべての属性に書込みを行うコマンドを発行することができます。

参照:

  • グローバルに初期化されるコンテキストの確立の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  • LDAPディレクトリを介したデータベースへの接続の詳細は、『Oracle Internet Directory管理者ガイド』を参照してください。

 

ACCESSED GLOBALLY

この句を使用すると、namespaceに設定したすべてのアプリケーション・コンテキストによるインスタンス全体へのアクセスを許可できます。この設定によって、複数のセッションがアプリケーション属性を共有できます。

アプリケーション・コンテキストの作成例:

この例では、hrアプリケーションを検証および保護するPL/SQLパッケージempno_ctxを使用します。このアプリケーション・コンテキストを作成する例については、『Oracle Databaseセキュリティ・ガイド』を参照してください。次の文は、コンテキスト・ネームスペースhr_contextを作成し、empno_ctxパッケージに関連付けます。

CREATE CONTEXT hr_context USING empno_ctx;

SYS_CONTEXTファンクションを使用して、このコンテキストに基づいて、データ・アクセスを制御できます。たとえば、empno_ctxパッケージで、特定の従業員識別子として、属性employee_idが定義されているとします。次のコマンドを実行し、employee_idの値に基づいてアクセスを制限するビューを作成して、employees実表を保護できます。

CREATE VIEW hr_org_secure_view AS
   SELECT * FROM employees
   WHERE employee_id = SYS_CONTEXT('empno_ctx', 'employee_id');

参照:

「SYS_CONTEXT」 


CREATE CONTROLFILE


注意:

この文を使用する前に、データベース内のすべてのファイルの全体バックアップを実行することをお薦めします。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 


用途

CREATE CONTROLFILE文は、ごく限られた状況でのみ使用します。データベースによって使用されているすべての制御ファイルが失われ、かつバックアップ制御ファイルが存在しない場合に、この文を使用して制御ファイルを再作成します。 この文を使用して、REDOログ・ファイル・グループ、REDOログ・ファイル・メンバー、アーカイブREDOログ・ファイル、データ・ファイル、またはデータベースを同時にマウントおよびオープンするインスタンスの最大数を変更することもできます。

データベースの名前を変更するには、CREATE CONTROLFILE文ではなく、DBNEWIDユーティリティを使用することをお薦めします。データベース名の変更後にOPEN RESETLOGS操作が必要ないため、DBNEWIDの方が適しています。

参照:

  • DBNEWIDユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。

  • 既存のデータベース制御ファイルに基づくスクリプトの作成の詳細は、「ALTER DATABASE」の「BACKUP CONTROLFILE句」を参照してください。

 

前提条件

制御ファイルを作成する場合は、SYSDBAシステム権限が必要です。

データベースをマウントしているインスタンスがあってはいけません。制御ファイルが正常に作成された後、CLUSTER_DATABASEパラメータで指定したモードでデータベースがマウントされます。続いて、DBAは、データベースをオープンする前にメディア・リカバリを行う必要があります。データベースをOracle Real Application Clusters(RAC)と併用している場合、次のインスタンスが起動する前に、データベースを停止してSHAREDモード(CLUSTER_DATABASE初期化パラメータの値にTRUEを設定)で再マウントする必要があります。

構文

create_controlfile::=

画像の説明

storage_clause::=を参照)

logfile_clause::=

画像の説明

file_specification::=を参照)

character_set_clause::=

画像の説明

セマンティクス

CREATE CONTROLFILE文を発行すると、この文に指定した情報に基づいて、新しい制御ファイルが作成されます。制御ファイルは、CONTROL_FILES初期化パラメータで指定した場所に格納されます。このパラメータに値を指定していない場合、Oracle Managed Filesの制御ファイルは、次のいずれか(優先度の高い順に示します)のとおり、制御ファイルのデフォルトの格納先に作成されます。

  1. 1つ以上の制御ファイルがDB_CREATE_ONLINE_LOG_DEST_n初期化パラメータに指定されている場所に作成されます。最初のディレクトリのファイルは、プライマリ制御ファイルです。DB_CREATE_ONLINE_LOG_DEST_nを指定している場合、DB_CREATE_FILE_DESTまたはDB_RECOVERY_FILE_DEST(フラッシュ・リカバリ領域)には制御ファイルが作成されません。

  2. DB_CREATE_ONLINE_LOG_DEST_nに値を指定しておらず、DB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DESTの両方に値を指定している場合、それぞれの場所に1つの制御ファイルが作成されます。DB_CREATE_FILE_DESTに指定している場所は、プライマリ制御ファイルです。

  3. DB_CREATE_FILE_DESTにのみ値を指定している場合、その場所に1つの制御ファイルが作成されます。

  4. DB_RECOVERY_FILE_DESTにのみ値を指定している場合、その場所に1つの制御ファイルが作成されます。

これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所に制御ファイルが作成されます。この制御ファイルはOracle Managed Filesではありません。

句を指定しない場合、Oracle Databaseは、以前の制御ファイルに対する値ではなく、デフォルト値を使用します。制御ファイルが正常に作成された後、Oracle Databaseは、初期化パラメータCLUSTER_DATABASEで指定したモードでデータベースをマウントします。パラメータが設定されていないときのデフォルト値はFALSEで、その場合はEXCLUSIVEモードでデータベースがマウントされます。その後、インスタンスを停止し、データベースのすべてのファイルの全体バックアップを取ることをお薦めします。

参照:

『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』 

REUSE

REUSEを指定すると、初期化パラメータCONTROL_FILESによって特定される既存の制御ファイルを再利用可能にできます。このとき、この初期化パラメータに現在格納されている情報は上書きされます。この句を指定しないと、既存の制御ファイルがある場合に、エラーが戻ります。

DATABASE句

データベース名を指定します。このパラメータの値は、事前にCREATE DATABASE文またはCREATE CONTROLFILE文で設定した既存のデータベース名である必要があります。

SET DATABASE句

SET DATABASEを使用すると、データベース名を変更できます。データベース名には最大8バイトの名前を指定できます。

この句を指定する場合は、RESETLOGSも指定する必要があります。データベースの名前を変更し、既存のログ・ファイルを保持する場合は、このCREATE CONTROLFILE文を発行した後、ALTER DATABASE RECOVER USING BACKUP CONTROLFILE文を使用して、全データベースのリカバリを完了する必要があります。

logfile_clause

logfile_clauseを使用すると、データベースのREDOログ・ファイルを指定できます。すべてのREDOログ・ファイル・グループのすべてのメンバーを指定する必要があります。

オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、または自動ストレージ管理ディスク・グループのREDOログ・ファイルを指定するには、file_specificationのredo_log_file_spec書式(「file_specification」を参照)を使用します。ASM_filenameの書式を使用する場合、redo_log_file_specautoextend_clauseは指定できません。

この句にRESETLOGSを指定する場合、ASM_filenameのいずれかのファイル作成形式を使用する必要があります。NORESETLOGSを指定する場合、ASM_filenameのいずれかの参照書式を指定する必要があります。

参照:

構文の様々な書式は、「ASM_filename」を参照してください。自動ストレージ管理の使用方法の概要は、『Oracle Databaseストレージ管理者ガイド』を参照してください。 

GROUP integer

ログ・ファイル・グループ番号を指定します。GROUP値を指定した場合、データベースが前回オープンされたときのGROUP値を基にして、この値が検証されます。

この句を指定しない場合、システムのデフォルト値を使用してログ・ファイルが作成されます。また、DB_CREATE_ONLINE_LOG_DEST_n初期化パラメータまたはDB_CREATE_FILE_DEST初期化パラメータのいずれかを設定した場合、およびRESETLOGSを指定した場合は、DB_CREATE_ONLINE_LOG_DEST_nパラメータで指定したログ・ファイルのデフォルトの格納先に2つのログ・ファイルが作成されます。また、DB_CREATE_ONLINE_LOG_DEST_nを設定していない場合は、DB_CREATE_FILE_DESTパラメータで指定した格納先に作成されます。

参照:

この句の詳細は、「file_specification」を参照してください。 

RESETLOGS

RESETLOGSを指定すると、Oracle DatabaseにLOGFILE句にリストされたファイルの内容を無視させることができます。LOGFILE句に指定したファイルは、存在していなくてもかまいません。SET DATABASE句を指定した場合、この句を指定する必要があります。

LOGFILE句の各redo_log_file_specで、SIZEパラメータを指定する必要があります。データベースでは、スレッド1にすべてのオンラインREDOログ・ファイル・グループを割り当てることによって、このスレッドを任意のインスタンスで共通に使用できるようにします。この句を使用した後は、RESETLOGS句を指定したALTER DATABASE文を使用してデータベースをオープンする必要があります。

NORESETLOGS

NORESETLOGSを指定すると、Oracle Databaseに、LOGFILE句に指定したすべてのファイルを、前回データベースをオープンしたときの状態で使用させることができます。LOGFILE句に指定したファイルは、存在する必要があります。また、バックアップからのリストアではなく、現行のオンラインREDOログ・ファイルである必要があります。前回割り当てたスレッドに、REDOログ・ファイル・グループが再度割り当てられ、そのスレッドが前回と同じく再度使用可能になります。

SET DATABASE句を指定してデータベースの名前を変更した場合は、RESETLOGSを指定することはできません。詳細は、「SET DATABASE句」を参照してください。

DATAFILE句

データベースのデータ・ファイルを指定します。すべてのデータ・ファイルを指定する必要があります。これらのファイルは既存のファイルである必要がありますが、メディア・リカバリを必要とするリストア・バックアップでもかまいません。

DATAFILE句には、読取り専用の表領域のデータ・ファイルを含めないでください。これらのタイプのファイルは、後でデータベースに追加できます。また、この句には、一時データ・ファイル(一時ファイル)も含めないでください。

オペレーティング・システムのファイル・システム内の標準データ・ファイルと一時ファイル、または自動ストレージ管理ディスク・グループのファイルを指定するには、file_specificationのdatafile_tempfile_spec書式(「file_specification」を参照)を使用します。ASM_filenameの書式を使用する場合、ASM_filenameのいずれかの参照書式を使用する必要があります。構文の様々な書式は、「ASM_filename」を参照してください。

参照:

自動ストレージ管理の使用方法の概要は、『Oracle Databaseストレージ管理者ガイド』を参照してください。 

DATAFILEの制限事項:

このDATAFILE句では、file_specificationautoextend_clauseは指定できません。

MAXLOGFILES句

データベースに対して作成可能なオンラインREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値や最大値は、使用するオペレーティング・システムによって異なります。指定する値は、すべてのREDOログ・ファイル・グループのGROUPの最大値以上である必要があります。

MAXLOGMEMBERS句

REDOログ・ファイル・グループのメンバー(同一コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

MAXLOGHISTORY句

このパラメータは、Oracle DatabaseをARCHIVELOGモードで使用している場合にのみ有効です。データベースの自動メディア・リカバリに必要なアーカイブREDOログ・ファイル・グループの現在見積もられている最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。

最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。必要に応じてデータベースによって制御ファイルの該当セクションに引き続き領域が追加されるため、元の構成で十分でなくなった場合でも制御ファイルを再作成する必要はありません。その結果、このパラメータの実際の値は、指定した値を超える場合があります。

MAXDATAFILES句

CREATE DATABASEまたはCREATE CONTROLFILE実行時の、制御ファイルのデータ・ファイル・セクションの初期サイズを指定します。値がMAXDATAFILESより大きく、DB_FILES以下のファイルを追加した場合、データ・ファイル・セクションにさらに多くのファイルを格納できるように、Oracleの制御ファイルが自動的に拡張されます。

インスタンスでアクセスできるデータ・ファイルの数は、初期化パラメータDB_FILESの制限を受けます。

MAXINSTANCES句

データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCESの値より優先されます。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

ARCHIVELOG | NOARCHIVELOG

ARCHIVELOGを指定すると、REDOログ・ファイルを再利用する前に、ファイルの内容をアーカイブできます。この句を指定した場合、インスタンスまたはシステム障害リカバリのみでなく、メディア・リカバリも実行できるようになります。

ARCHIVELOG句およびNOARCHIVELOG句を指定しない場合、デフォルトでNOARCHIVELOGモードが選択されます。制御ファイルの作成後に、ALTER DATABASE文を使用して、ARCHIVELOGモードとNOARCHIVELOGモードを切り替えることができます。

FORCE LOGGING

この句を使用すると、制御ファイルの作成後にデータベースをFORCE LOGGINGモードにできます。データベースがこのモードで実行されている場合、一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、および各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。この句を指定しない場合、制御ファイルの作成後にデータベースはFORCE LOGGINGモードになりません。


注意:

FORCE LOGGINGモードは、パフォーマンスに影響する場合があります。この設定の使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。 


character_set_clause

キャラクタ・セットを指定した場合、制御ファイルのキャラクタ・セット情報が再構成されます。データベースのメディア・リカバリが後で必要となる場合、データベースがオープンする前にこの情報が使用可能になり、リカバリ時に表領域名が正しく解析されます。この句は、デフォルト以外のキャラクタ・セットを使用している場合にのみ必要です。デフォルトはオペレーティング・システムによって異なります。現行のデータベース・キャラクタ・セットは、起動時に$ORACLE_HOME/logのアラート・ログに出力されます。

表領域のリカバリにRecovery Managerを使用して制御ファイルを再作成する場合、およびデータ・ディクショナリに格納されているキャラクタ・セットとは異なるキャラクタ・セットを指定した場合、表領域のリカバリは失敗します。ただし、データベースのオープン時、制御ファイルのキャラクタ・セットは、データ・ディクショナリの正しいキャラクタ・セットに更新されます。

この句ではデータベース・キャラクタ・セットを変更できません。

参照:

表領域のリカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 

制御ファイルの作成例:

この文は、制御ファイルを再作成します。この文のデータベースdemoは、WE8DECキャラクタ・セットで作成されています。この例のpathには、ご使用のシステムでの適切なOracle Databaseディレクトリへのパスを挿入してください。

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "demo" NORESETLOGS NOARCHIVELOG
    MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 32
    MAXINSTANCES 1
    MAXLOGHISTORY 449
LOGFILE
  GROUP 1 '/path/oracle/dbs/t_log1.f'  SIZE 500K,
  GROUP 2 '/path/oracle/dbs/t_log2.f'  SIZE 500K
# STANDBY LOGFILE
DATAFILE
  '/path/oracle/dbs/t_db1.f',
  '/path/oracle/dbs/dbu19i.dbf',
  '/path/oracle/dbs/tbs_11.f',
  '/path/oracle/dbs/smundo.dbf',
  '/path/oracle/dbs/demo.dbf'
CHARACTER SET WE8DEC
;

CREATE DATABASE


注意:

この文を実行すると、データベースの初期設定が行われ、指定ファイル内の現行のデータは消去されます。そのことを十分理解したうえで、この文を使用してください。 



セキュリティの強化に関する注意

Oracle Databaseの今回のリリース以降では、デフォルトのデータベース・ユーザー・アカウントのセキュリティ機能が強化されています。今回のリリースのセキュリティ・チェックリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。このチェックリストに従ってデータベースを構成することをお薦めします。 


用途

CREATE DATABASE文を使用すると、汎用的なデータベースを作成できます。

この文を実行すると、データベースの初期使用に備えて、指定した既存のデータ・ファイル上のデータがすべて消去されます。したがって、既存のデータベースに対してこの文を実行した場合、データ・ファイル上のすべてのデータが失われます。

この文を指定した場合、データベースの作成後、データベースは排他モードまたはパラレル・モード(初期化パラメータCLUSTER_DATABASEの値に依存する)でマウントおよびオープンされ、通常の用途に使用可能になります。その後、データベースの表領域を作成できます。

参照:

  • データベースの変更の詳細は、「ALTER DATABASE」を参照してください。

  • Oracle Java Virtual Machineの作成の詳細は、『Oracle Database Java開発者ガイド』を参照してください。

  • 表領域の作成については、「CREATE TABLESPACE」を参照してください。

 

前提条件

データベースを作成する場合は、SYSDBAシステム権限が必要です。作成するデータベースの名前を持つ初期化パラメータ・ファイルが使用可能である必要があります。また、STARTUP NOMOUNTモードになっている必要があります。

構文

create_database::=

画像の説明

database_logging_clauses::=tablespace_clauses::=set_time_zone_clause::=を参照)

database_logging_clauses::=

画像の説明

file_specification::=を参照)

tablespace_clauses::=

画像の説明

file_specification::=default_tablespace::=default_temp_tablespace::=undo_tablespace::=を参照)

default_tablespace::=

画像の説明

default_temp_tablespace::=

画像の説明

file_specification::=を参照)

extent_management_clause::=

画像の説明

size_clause::=を参照)

undo_tablespace::=

画像の説明

file_specification::=を参照)

set_time_zone_clause::=

画像の説明

セマンティクス

database

作成するデータベースの名前を指定します。名前は、DB_NAME初期化パラメータの値と一致する必要があります。名前の長さは最大8バイトです。データベース名には、ASCII文字のみを指定できます。Oracle Databaseは、この名前を制御ファイルに書き込みます。後で、データベース名を明示的に指定するALTER DATABASE文を発行すると、制御ファイル内の名前に基づいて、そのデータベース名が検証されます。

データベース名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。


注意:

データベース名には、ヨーロッパやアジアのキャラクタ・セットの中の特殊文字は使用できません。たとえば、ウムラウト付きの文字は使用できません。 


CREATE DATABASE文でデータベース名を指定しない場合、DB_NAME初期化パラメータで指定した名前が採用されます。DB_NAME初期化パラメータは、データベースの初期化パラメータ・ファイルに設定する必要があります。そのパラメータの値とは異なる名前を指定した場合、データベースはエラーを戻します。データベース名のその他の規則については、「スキーマ・オブジェクトのネーミングのガイドライン」を参照してください。

USER SYS ...、USER SYSTEM ...

これらの句を使用すると、SYSおよびSYSTEMユーザーのパスワードを設定できます。これらの句は今回のリリースでは必須ではありません。ただし、いずれか一方の句を指定した場合は、もう一方の句も指定する必要があります。

これらの句を指定しない場合、Oracle Databaseは、デフォルト・パスワードとして、ユーザーSYSにはchange_on_installを、ユーザーSYSTEMにはmanagerを作成します。これらのパスワードは、後でALTER USER文を使用して変更できます。また、データベース作成後に、ALTER USERを使用してパスワード管理属性を追加することもできます。

参照:

「ALTER USER」 

CONTROLFILE REUSE句

CONTROLFILE REUSEを指定すると、初期化パラメータCONTROL_FILESで特定される既存の制御ファイルを再利用可能にできます。このとき、この初期化パラメータに現在格納されている情報は上書きされます。通常、この句は、初めてデータベースを作成する際ではなく、データベースを再作成する際に使用します。データベースを初めて作成する場合、制御ファイルはデフォルトの格納先に作成されます。この場所は、いくつかの初期化パラメータの値によって決まります (「CREATE CONTROLFILE」の「セマンティクス」を参照)。

制御ファイルを既存のファイルより大きくするためのパラメータ値もあわせて指定する場合、この句は使用できません。MAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYMAXDATAFILESおよびMAXINSTANCESがこのようなパラメータです。

この句を指定しないと、CONTROL_FILESで指定した制御ファイルのいずれかがすでに存在する場合、エラーが戻ります。

MAXDATAFILES句

CREATE DATABASEまたはCREATE CONTROLFILE実行時の、制御ファイルのデータ・ファイル・セクションの初期サイズを指定します。値がMAXDATAFILESより大きく、DB_FILES以下のファイルを追加した場合、データ・ファイル・セクションにさらに多くのファイルを格納できるように、Oracle Databaseの制御ファイルが自動的に拡張されます。

インスタンスでアクセスできるデータ・ファイルの数は、初期化パラメータDB_FILESの制限を受けます。

MAXINSTANCES

データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCESの値より優先されます。最小値は1です。最大値は1055です。デフォルトは、使用するオペレーティング・システムによって異なります。

CHARACTER SET句

データベースにデータを格納するときのキャラクタ・セットを指定します。サポートされているキャラクタ・セットおよびこのパラメータのデフォルト値は、使用するオペレーティング・システムによって異なります。

CHARACTER SETの制限事項:

AL16UTF16キャラクタ・セットは、データベース・キャラクタ・セットとして指定できません。

参照:

キャラクタ・セットの選択の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 

NATIONAL CHARACTER SET句

データ型がNCHARNCLOBまたはNVARCHAR2として定義された列にデータを格納する際に使用する各国語キャラクタ・セットを指定します。有効な値は、AL16UTF16およびUTF8です。デフォルトはAL16UTF16です。

参照:

Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 

database_logging_clauses

database_logging_clausesを使用すると、データベースのREDOログ・ファイルの処理方法を指定できます。

LOGFILE句

REDOログ・ファイルとして使用する1つ以上のファイルを指定します。オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、または自動ストレージ管理ディスク・グループのREDOログ・ファイルを作成するには、file_specificationredo_log_file_spec書式を使用します。ASM_filenameの書式を使用する場合、redo_log_file_specautoextend_clauseは指定できません。

redo_log_file_spec句には、1つ以上のREDOログ・ファイルのメンバー(コピー)を含むREDOログ・ファイル・グループを指定します。CREATE DATABASE文に指定したすべてのREDOログ・ファイルは、REDOログのスレッド番号1に追加されます。

参照:

この句の詳細は、「file_specification」を参照してください。 

LOGFILE句を指定しない場合、Oracle Managed Filesのログ・ファイル・メンバーは、次のいずれか(優先度の高い順に示します)のとおり、デフォルトの格納先に作成されます。

いずれの場合でも、パラメータ設定では、オペレーティング・システムのファイル名または作成書式自動ストレージ管理のファイル名を正確に指定する必要があります。

これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所にログ・ファイルが作成されます。このログ・ファイルはOracle Managed Filesではありません。

GROUP integer

REDOログ・ファイル・グループの識別番号を指定します。integerの値は1〜MAXLOGFILESパラメータの値の範囲です。データベースには、2つ以上のREDOログ・ファイル・グループが必要です。同一のGROUP値を持つREDOログ・ファイル・グループは複数指定できません。このパラメータを指定しない場合、値が自動的に生成されます。REDOログ・ファイル・グループのGROUP値は、動的パフォーマンス・ビューV$LOGで確認できます。

MAXLOGFILES句

データベースに対して作成可能なREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値、最小値および最大値は、使用するオペレーティング・システムによって異なります。

MAXLOGMEMBERS句

REDOログ・ファイル・グループのメンバー(コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

MAXLOGHISTORY句

このパラメータが有用なのは、Oracle Real Application Clusters(RAC)でOracle DatabaseをARCHIVELOGモードで使用している場合のみです。Oracle RACの自動メディア・リカバリに使用するアーカイブREDOログ・ファイルの最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。

ARCHIVELOG

ARCHIVELOGを指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容をアーカイブできます。この句を指定すると、メディア・リカバリを実行できるようになります。

NOARCHIVELOG

NOARCHIVELOGを指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容がアーカイブされません。この句を指定した場合、メディア・リカバリは実行できません。

デフォルトはNOARCHIVELOGモードです。データベースの作成後に、ALTER DATABASE文を使用して、ARCHIVELOGモードとNOARCHIVELOGモードを切り替えることができます。

FORCE LOGGING

この句を使用すると、データベースをFORCE LOGGINGモードにできます。一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、および各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。

FORCE LOGGINGモードは、データベースのインスタンスで永続的です。データベースを停止し、再起動しても、データベースはFORCE LOGGINGモードのままです。ただし、制御ファイルを再作成した場合は、CREATE CONTROLFILE文でFORCE LOGGINGを指定しないかぎり、データベースはFORCE LOGGINGモードではなくなります。


注意:

FORCE LOGGINGモードは、パフォーマンスに影響する場合があります。この設定の使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。 


参照:

「CREATE CONTROLFILE」 

tablespace_clauses

tablespace_clausesを使用すると、SYSTEMおよびSYSAUX表領域を構成したり、デフォルトの一時表領域とUNDO表領域を指定することができます。

extent_management_clause

この句を使用すると、ローカル管理SYSTEM表領域を作成できます。この句を指定しない場合、SYSTEM表領域はディクショナリ管理となります。


注意:

ローカル管理SYSTEM表領域を作成すると、この表領域をディクショナリ管理に変更することはできません。このデータベース内に別のディクショナリ管理表領域を作成することもできません。 


この句を指定した場合、ローカル管理のSYSTEM表領域には一時セグメントを格納できないため、データベースにデフォルトの一時表領域が必要になります。

インスタンスを自動UNDOモードでオープンしている場合も、データベースUNDO表領域には同様の要件があります。

SET DEFAULT TABLESPACE句

この句を使用すると、以降に作成される表領域、およびSYSTEMSYSAUX表領域のデフォルトの型を指定できます。以降に作成される表領域のデフォルトの型をbigfileまたはsmallfileに設定するには、BIGFILEまたはSMALLFILEを指定します。

この句を指定しない場合、デフォルトでsmallfile表領域が作成されます。

参照:

 

SYSAUX句

Oracle Databaseは、すべてのデータベースに、SYSTEMSYSAUXの両方の表領域を作成します。Oracle Managed Filesを使用しておらず、SYSAUX表領域の1つ以上のデータ・ファイルを指定する場合、この句を使用します。

DATAFILE句を使用してSYSTEM表領域の1つ以上のデータベースを指定した場合は、この句を指定する必要があります。Oracle Managed Filesを使用している場合、この句を指定しないと、SYSAUXデータ・ファイルがOracle Managed Filesに設定されたデフォルトの場所に作成されます。

Oracle Managed Filesを使用可能にした場合にSYSAUX句を省略すると、SYSAUX表領域が、オンライン表領域、永続表領域およびローカル管理表領域として作成されます。この表領域は、100MBの1つのデータ・ファイルを持ち、ロギングおよび自動セグメント領域管理が有効になっています。

SYSAUX表領域のデータ・ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、CREATE TABLESPACE文を使用して表領域の作成時にデータ・ファイルを指定する構文と同じです。

参照:

  • データベースのアップグレード時のSYSAUX表領域の作成方法、および表領域のデータ・ファイルの指定方法は、「CREATE TABLESPACE」を参照してください。

  • SYSAUX表領域の作成方法は、『Oracle Database管理者ガイド』を参照してください。

 

default_tablespace

この句を指定すると、データベースのデフォルトの永続表領域を作成できます。Oracle Databaseは、smallfile表領域を作成し、その後、この表領域に対して、別の永続表領域を指定していない、SYSTEM以外のユーザーを割り当てます。この句を指定しない場合、SYSTEM表領域が、SYSTEM以外のユーザーのデフォルトの永続表領域になります。

DATAFILE句およびextent_management_clauseは、CREATE TABLESPACE文で同じセマンティクスを持ちます。これらの句の詳細は、「DATAFILE | TEMPFILE句」および「extent_management_clause」を参照してください。

default_temp_tablespace

この句を指定すると、データベースのデフォルトの一時表領域を作成できます。Oracle Databaseは、この一時表領域に対して、別の一時表領域を指定していないユーザーを割り当てます。この句を指定しないと、データベースがローカル管理のSYSTEM表領域の作成時に、デフォルトの一時表領域を自動的に作成しない場合、SYSTEM表領域がデフォルトの一時表領域になります。

デフォルトの一時表領域がbigfileかsmallfileかを指定するには、BIGFILEまたはSMALLFILEを指定します。これらの句は、「SET DEFAULT TABLESPACE句」と同じセマンティクスを持ちます。

DB_CREATE_FILE_DEST初期化パラメータを設定してOracle Managed Filesを使用可能にした場合、この句のTEMPFILE句の部分はオプションです。このパラメータの値を指定していない場合は、TEMPFILE句を指定する必要があります。BIGFILEを指定した場合、この句で指定できるのは1つの一時ファイルのみです。

デフォルトの一時表領域の一時ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、CREATE TABLESPACE文を使用して一時表領域の作成時に一時ファイルを指定する構文と同じです。

参照:

一時ファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。 


注意:

オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。発生する可能性がある問題を回避するには、一時ファイルを作成またはサイズ変更する前に、ディスク領域が、新しく作成する一時ファイルまたはサイズ変更後の一時ファイルのサイズより大きいことを確認してください。ディスク領域に余裕を持たせることによって、関連のない操作が原因で増加が予想されるディスク使用量に対応できます。十分な領域があることを確認した後で、作成またはサイズ変更操作を実行してください。 


デフォルトの一時表領域の制限事項:

デフォルトの一時表領域には、次の制限事項があります。

extent_management_clause句のセマンティクスは、CREATE DATABASEおよびCREATE TABLESPACE文で同じです。この句の詳細は、「CREATE TABLESPACE ...」の「extent_management_clause」を参照してください。

undo_tablespace

インスタンスを自動UNDOモードでオープンした場合(UNDO_MANAGEMENT初期化パラメータをデフォルトのAUTOに設定した場合)、undo_tablespaceを指定して、UNDOデータで使用する表領域を作成できます。自動UNDOモードを使用することをお薦めします。ただし、UNDO領域管理をロールバック・セグメントによって処理する場合、この句は指定しないでください。UNDO_TABLESPACE初期化パラメータの値を設定した場合も、この句を省略できます。パラメータが設定されており、この句を指定した場合、tablespaceはそのパラメータ値と同じである必要があります。

UNDO表領域のデータ・ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、CREATE TABLESPACE文を使用して表領域の作成時にデータ・ファイルを指定する構文と同じです。

参照:

データファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。 

この句を指定すると、tablespaceという名前のUNDO表領域、およびUNDO表領域の一部として指定したデータ・ファイルが作成され、インスタンスのUNDO表領域としてこの表領域が割り当てられます。Oracle Databaseは、このUNDO表領域を使用してUNDOデータを管理します。この句のDATAFILE句は、「DATAFILE句」と同様に動作します。

初期化パラメータ・ファイル内のUNDO_TABLESPACE初期化パラメータの値を指定している場合は、データベースをマウントする前に、この句で同じ名前を指定する必要があります。この名前が異なると、データベースのオープン時にエラーが戻されます。

この句を指定しないと、SYS_UNDOTBSという名前のデフォルトのsmallfileのUNDO表領域を持つデフォルトのデータベースが作成され、インスタンスのUNDO表領域としてこのデフォルトの表領域が割り当てられます。このUNDO表領域は、CREATE DATABASE文で使用するデフォルトのファイルから、初期エクステントが10MBのディスク領域を割り当てます。Oracle Databaseは、システムが生成したデータ・ファイルを処理します(「DATAFILE句」を参照)。Oracle DatabaseがUNDO表領域を作成できない場合、CREATE DATABASE操作全体が失敗します。

参照:

  • 自動UNDO管理およびUNDO表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

  • データベースの作成後にUNDO表領域を作成する方法は、「CREATE TABLESPACE」を参照してください。

 

DATAFILE句

データ・ファイルとして使用する1つ以上のファイルを指定します。ファイルは、すべてSYSTEM表領域の一部となります。オペレーティング・システムのファイル・システム内の標準データ・ファイルと一時ファイル、または自動ストレージ管理ディスク・グループのファイルを作成するには、file_specificationのdatafile_tempfile_spec書式を使用します。


注意:

undo_tablespace句のDATAFILE句と同様に、この句はオプションです。したがって、あいまいさを回避するために、この句でSYSTEM表領域のデータ・ファイルを指定する場合は、オプションのDATAFILE句を含まないundo_tablespace句の直後にこの句を指定しないでください。指定した場合、Oracle DatabaseはDATAFILE句をundo_tablespace句の一部と認識します。 


SYSTEM表領域のデータ・ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、CREATE TABLESPACE文を使用して表領域の作成時にデータ・ファイルを指定する構文と同じです。

参照:

データ・ファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。 

自動UNDOモードでデータベースを実行し、SYSTEM表領域のデータ・ファイル名を指定した場合、すべての表領域に対してデータ・ファイルを生成するものとみなされます。Oracle Managed Filesを使用する場合(DB_CREATE_FILE_DEST初期化パラメータに値を設定している場合)、データ・ファイルは自動的に生成されます。ただし、Oracle Managed Filesを使用しないでこの句を指定する場合は、undo_tablespace句およびdefault_temp_tablespace句も指定する必要があります。

この句を指定しない場合、次のようになります。

set_time_zone_clause

SET TIME_ZONE句を使用すると、データベースのタイムゾーンを設定できます。次の2つ方法でタイムゾーンを設定します。

すべてのTIMESTAMP WITH LOCAL TIME ZONEデータは、ディスクに格納されるときにデータベースのタイムゾーンに正規化されます。SET TIME_ZONE句を指定しない場合、サーバーのオペレーティング・システムのタイムゾーンが使用されます。オペレーティング・システムのタイムゾーンがOracle Databaseで有効でない場合、データベースのタイムゾーンは、デフォルトでUTCになります。

データベースの作成例:

次の文は、すべての引数を指定してデータベースを作成します。

CREATE DATABASE sample
   CONTROLFILE REUSE 
   LOGFILE
      GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, 
      GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K 
   MAXLOGFILES 5 
   MAXLOGHISTORY 100 
   MAXDATAFILES 10 
   MAXINSTANCES 2 
   ARCHIVELOG 
   CHARACTER SET AL32UTF8
   NATIONAL CHARACTER SET AL16UTF16
   DATAFILE  
      'disk1:df1.dbf' AUTOEXTEND ON,
      'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE temp_ts
   UNDO TABLESPACE undo_ts 
   SET TIME_ZONE = '+02:00';

この例では、初期化パラメータ・ファイルのDB_CREATE_FILE_DESTパラメータに値を設定して、Oracle Managed Filesを使用可能にしている状態を想定しています。したがって、DEFAULT TEMPORARY TABLESPACEおよびUNDO TABLESPACE句にファイル指定は必要ありません。


CREATE DATABASE LINK

用途

CREATE DATABASE LINK文を使用すると、データベース・リンクを作成できます。データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。

データベース・リンクを作成した後で、表名またはビュー名に@dblinkを追加してそのリンクをSQL文で利用して、他のデータベース上の表およびビューを参照できます。SELECT文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT文、UPDATE文、DELETE文またはLOCK TABLE文を使用してもリモート表およびビューにアクセスできます。

参照:

  • PL/SQLファンクション、プロシージャ、パッケージおよびデータ型を使用してリモート表またはビューへアクセスする方法については、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • 分散データベース・システムについては、『Oracle Database管理者ガイド』を参照してください。

  • ALL_DB_LINKSDBA_DB_LINKSおよびUSER_DB_LINKSデータ・ディクショナリ・ビューの既存のデータベース・リンクの詳細、およびV$DBLINK動的パフォーマンス・ビューを使用して既存のリンクのパフォーマンスを監視する方法については、『Oracle Databaseリファレンス』を参照してください。

  • 既存のデータベース・リンクを削除する方法については、「DROP DATABASE LINK」を参照してください。

  • DML操作でリンクを使用する方法については、「INSERT」、「UPDATE」、「DELETE」および「LOCK TABLE」を参照してください。

 

前提条件

プライベート・データベース・リンクを作成する場合、CREATE DATABASE LINKシステム権限が必要です。パブリック・データベース・リンクを作成する場合、CREATE PUBLIC DATABASE LINKシステム権限が必要です。また、リモートのOracle Databaseに対するCREATE SESSION権限が必要です。

なお、ローカルとリモートの両方のOracle Databaseに、Oracle Netをインストールしておく必要があります。

構文

create_database_link::=

画像の説明

dblink_authentication::=

画像の説明

セマンティクス

PUBLIC

PUBLICを指定すると、すべてのユーザーが参照可能なパブリック・データベース・リンクを作成できます。この句を指定しない場合、データベース・リンクはプライベートとなり、作成したユーザー専用になります。

リモート・データベース上のアクセス可能なデータは、リモート・データベースへの接続時にデータベース・リンクで使用される識別によって異なります。

SHARED

SHAREDを指定すると、ソース・データベースからターゲット・データベースへの1つのネットワーク接続を使用する複数のセッションで共有可能な1つのデータベース・リンクを作成できます。共有サーバー構成では、共有データベース・リンクによって、リモート・データベースへの接続数が多くなりすぎるのを防ぐことができます。通常、共有リンクはパブリック・データベース・リンクでもあります。ただし、多くのクライアントが同じローカル・スキーマにアクセスして同じプライベート・データベース・リンクを使用する場合は、共有プライベート・データベース・リンクが役立つ場合もあります。

共有データベース・リンクでは、ソース・データベースの複数のセッションでターゲット・データベースへの同じ接続が共有されます。ターゲット・データベースでセッションが確立されると、ソース・データベースの別のセッションで接続を使用できるように、そのセッションは接続から関連付けを解除されます。認可されていないセッションがデータベース・リンクを使用して接続できないように、SHAREDを指定するときは、データベース・リンクの使用を認可されたユーザーに対してdblink_authentication句も指定する必要があります。

参照:

共有データベース・リンクの詳細は、『Oracle Database管理者ガイド』を参照してください。 

dblink

データベース・リンクの完全な名前または名前の一部を指定します。データベース名のみを指定した場合、ローカル・データベースのデータベース・ドメインが暗黙的に追加されます。

dblinkには、ASCII文字のみを使用してください。マルチバイト文字はサポートされていません。データベース・リンク名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。

GLOBAL_NAMES初期化パラメータの値がTRUEの場合、データベース・リンクは、接続先のデータベースと同じ名前を持つ必要があります。GLOBAL_NAMESの値がFALSEで、データベースのグローバル名を変更した場合、グローバル名を指定できます。

Oracle RAC構成の1つのセッションまたは1つのインスタンスでオープンできるデータベース・リンクの最大数は、OPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータの値で指定します。

データベース・リンク作成の制限事項:

他のユーザーのスキーマ内にはデータベース・リンクを作成できません。また、dblinkはスキーマ名を付けて指定できません(データベース・リンク名にはピリオドを指定できるため、ralph.linktosalesのような名前を付けた場合、スキーマralphlinktosalesという名前のデータベース・リンクと解析されるのではなく、名前全体が自分のスキーマにあるデータベース・リンク名と解析されます)。

参照:

  • データベース・リンクのネーミングのガイドラインについては、「リモート・データベース内のオブジェクトの参照」を参照してください。

  • GLOBAL_NAMESOPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータについては、『Oracle Databaseリファレンス』を参照してください。

  • データベースのグローバル名の変更については、「ALTER DATABASE」の「RENAME GLOBAL_NAME句」を参照してください。

 

CONNECT TO句

CONNECT TO句を使用すると、リモート・データベースへの接続に使用するユーザーおよび資格証明がある場合は、それらを指定できます。

CURRENT_USER句

CURRENT_USERを指定すると、現行のユーザーのデータベース・リンクを作成できます。現行のユーザーは、リモート・データベースに有効なアカウントを持つグローバル・ユーザーである必要があります。

データベース・リンクがストアド・オブジェクト内からではなく直接使用される場合、現行のユーザーは接続ユーザーと同じです。

データベース・リンクを開始するストアド・オブジェクト(プロシージャ、ビュー、トリガーなど)を実行する場合、CURRENT_USERは、ストアド・オブジェクトを所有するユーザーの名前であり、オブジェクトをコールしたユーザーの名前ではありません。たとえば、データベース・リンクが(scottによって作成された)プロシージャscott.p内にあり、ユーザーjaneがプロシージャscott.pをコールした場合、現行のユーザーはscottになります。

ただし、ストアド・オブジェクトが実行者権限ファンクション、プロシージャまたはパッケージである場合、実行者認可IDはリモート・ユーザーとしての接続に使用されます。たとえば、権限を持つデータベース・リンクがプロシージャscott.pscottによって作成された実行者権限プロシージャ)内にあり、ユーザーJaneがプロシージャscott.pをコールした場合、CURRENT_USERjaneであり、プロシージャは、Janeの権限で実行されます。

参照:

 

user IDENTIFIED BY password

固定ユーザー・データべース・リンクを使用して、リモート・データベースに接続するためのユーザー名およびパスワードを指定できます。この句を指定しない場合、データベース・リンクでは、データベースに接続している各ユーザーのユーザー名およびパスワードが使用されます。これを接続ユーザー・データベース・リンクといいます。

参照:

「固定ユーザー・データベース・リンクの定義例:」 

dblink_authentication

共有データベース・リンクを作成する場合(SHARED句を指定した場合)にのみ、この句を指定できます。ターゲット・インスタンスのユーザー名およびパスワードを指定します。この句は、リモート・サーバーに対してユーザーを認証するもので、セキュリティ上必要です。指定するユーザー名およびパスワードは、リモート・インスタンスで有効なユーザー名およびパスワードである必要があります。ユーザー名およびパスワードは、認証用としてのみ使用されます。このユーザーを対象とした認証以外の操作はありません。

USING 'connect string'

リモート・データベースのサービス名を指定します。データベース名のみを指定した場合、接続文字列にデータベース・ドメインが暗黙的に追加され、完全なサービス名が作成されます。したがって、リモート・データベースのデータベース・ドメインが現行のデータベース・ドメインと異なる場合は、完全なサービス名を指定する必要があります。

参照:

リモート・データベースの指定の詳細は、『Oracle Database管理者ガイド』を参照してください。 

次の例では、localという名前のデータベースとremoteという名前の2つのデータベースを使用することを想定しています。この例では、Oracle Databaseドメインを使用します。ご使用のドメインとは異なります。

パブリック・データベース・リンクの定義例:

次の例では、remoteという共有パブリック・データベース・リンクを定義します。このデータベース・リンクは、サービス名remoteで指定されたデータベースと対応しています。

CREATE PUBLIC DATABASE LINK remote 
   USING 'remote'; 

このデータベース・リンクによって、localデータベース上のユーザーhrがリモート・データベース上の表を更新できます(hrに適切な権限があることを想定しています)。

UPDATE employees@remote
   SET salary=salary*1.1
   WHERE last_name = 'Baer';
固定ユーザー・データベース・リンクの定義例:

次の例では、リモート・データベース上のユーザーhrが、localデータベース上のhrスキーマに、localという名前の固定ユーザー・データベース・リンクを定義します。

CREATE DATABASE LINK local 
   CONNECT TO hr IDENTIFIED BY password
   USING 'local';

このデータベース・リンクが作成されると、hrは、次のようにlocalデータベース上のスキーマhrの表を問い合せることができます。

SELECT * FROM employees@local;

ユーザーhrは、次のDML文を使用して、localデータベース上のデータを変更することもできます。

INSERT INTO employees@local
   (employee_id, last_name, email, hire_date, job_id)
   VALUES (999, 'Claus', 'sclaus@example.com', SYSDATE, 'SH_CLERK');

UPDATE jobs@local SET min_salary = 3000
   WHERE job_id = 'SH_CLERK';

DELETE FROM employees@local 
   WHERE employee_id = 999;

この固定データベース・リンクを使用すると、remoteデータベース上のユーザーhrは、同じデータベース上の他のユーザーが所有する表にもアクセスできます。この文は、ユーザーhroe.customers表に対するSELECT権限を持っていることを想定しています。この文では、localデータベースのユーザーhrに接続した後で、次のようにoe.customers表への問合せが行われます。

SELECT * FROM oe.customers@local;
CURRENT_USERデータベース・リンクの定義例:

次の文は、リンク名としてサービス名全体を使用して、remoteデータベースに対する現行のユーザーのデータベース・リンクを定義します。

CREATE DATABASE LINK remote.us.example.com
   CONNECT TO CURRENT_USER
   USING 'remote';

この文を発行するユーザーは、LDAPディレクトリ・サービスに登録されたグローバル・ユーザーである必要があります。

特定の表がremoteデータベース上にあることを示さないように、シノニムを作成できます。次の文によって、これ以降にemp_tableを参照すると、リモート・データベース上のhrが所有するemployees表にアクセスします。

CREATE SYNONYM emp_table 
   FOR oe.employees@remote.us.example.com;

CREATE DIMENSION

用途

CREATE DIMENSION文を使用すると、ディメンションを作成できます。ディメンションは、列集合の組の親子関係を定義します。列集合の列は、すべて同じ表から得られたものである必要があります。ただし、1つの列集合(レベル)の列は、別の集合の列とは異なる表から得ることができます。オプティマイザは、マテリアライズド・ビューとの関係を使用してクエリー・リライトを行います。SQLアクセス・アドバイザは、特定のマテリアライズド・ビューの作成の推奨にこの関係を使用します。


注意:

Oracle Databaseは、ディメンションの作成中に宣言する関係の妥当性チェックを自動的には行いません。hierarchy_clauseおよびCREATE DIMENSIONdimension_join_clauseで指定する関係の妥当性チェックを行うには、DBMS_OLAP.VALIDATE_DIMENSIONプロシージャを実行する必要があります。 


参照:

  • マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」を参照してください。

  • クエリー・リライト、オプティマイザおよびSQLアクセス・アドバイザの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

 

前提条件

自分のスキーマ内にディメンションを作成する場合は、CREATE DIMENSIONシステム権限が必要です。他のユーザーのスキーマ内にディメンションを作成する場合は、CREATE ANY DIMENSIONシステム権限が必要です。どちらの場合も、ディメンションで参照されるオブジェクトに対して、SELECTオブジェクト権限が必要です。

構文

create_dimension::=

画像の説明

level_clause::=

画像の説明

hierarchy_clause::=

画像の説明

dimension_join_clause::=

画像の説明

attribute_clause::=

画像の説明

extended_attribute_clause::=

画像の説明

セマンティクス

schema

ディメンションを作成するスキーマを指定します。schemaを指定しない場合、自分のスキーマ内にディメンションが作成されます。

dimension

ディメンション名を指定します。名前は、スキーマ内で一意である必要があります。

level_clause

ディメンションのレベルを指定します。レベルは、ディメンション階層および属性を定義します。

level

レベル名を指定します。

level_table . level_column

レベル内の列を指定します。最大32列を指定できます。この句で指定する表は、すでに存在している必要があります。

SKIP WHEN NULL

この句を指定すると、指定したレベルがNULLの場合、そのレベルはスキップされます。この句を使用すると、指定したレベルをスキップする代替パスによって、親子関係の階層のつながりを維持できます。「hierarchy_clause」を参照してください。

ディメンション・レベル列の制限事項:

ディメンション・レベル列には、次の制限事項があります。

hierarchy_clause

ディメンションのレベルの線形階層を定義します。各階層が、ディメンションのレベル間で親子関係の連鎖を形成します。ディメンションの階層は、互いに依存していません。階層は、共通の列を持つことができます。

ディメンションの各レベルは、句の中で最高1回指定され、level_clauseで名前を付けておく必要があります。

hierarchy

階層名を指定します。この名前は、ディメンションで一意である必要があります。

child_level

親レベルとn:1の関係を持つレベルの名前を指定します。child_levellevel_columnsはNULL以外である必要があります。各child_level値は、parent_levelという名前の次の値を一意に定義します。

level_tableが親level_tableと異なる場合、dimension_join_clauseでそれらの結合関係を指定する必要があります。

parent_level

レベル名を指定します。

dimension_join_clause

dimension_join_clauseを使用すると、複数の表に列が含まれるディメンションに内部等価結合関係を指定できます。この句は、階層で指定されたすべての列が同じ表にあるとはかぎらない場合にのみ指定する必要があり、このときのみ指定できます。

child_key_column

親レベルの列と結合互換性のある1つ以上の列を指定します。

スキーマおよび各child_columnの表を指定しない場合、hierarchy_clauseCHILD OF関係からスキーマおよび表が判断されます。child_key_columnのスキーマおよび列を指定する場合は、hierarchy_clauseparent_levelの子のスキーマおよび列の表と一致している必要があります。

parent_level

レベル名を指定します。

ディメンションの結合の制限事項:

ディメンションの結合には、次の制限事項があります。

attribute_clause

attribute_clauseを使用すると、階層レベルによって一意に定義されている列を指定できます。levelの列は、dependent_columnsと同じ表からすべて得る必要があります。dependent_columnsは、level_clauseで指定されている必要はありません。

たとえば、階層レベルが都道府県名、およびの場合、市長都道府県名知事首相を決定します。

extended_attribute_clause

この句を使用すると、1つ以上のレベルと列の関係に属性名を指定できます。この句で作成する属性の種類は、attribute_clauseを使用して作成される属性の種類と同じです。唯一の違いは、属性にレベル名とは異なる名前を割り当てることができることです。

ディメンションの作成例:

次の文は、サンプル・スキーマshcustomers_dimディメンションを作成します。

CREATE DIMENSION customers_dim 
   LEVEL customer   IS (customers.cust_id)
   LEVEL city       IS (customers.cust_city) 
   LEVEL state      IS (customers.cust_state_province) 
   LEVEL country    IS (countries.country_id) 
   LEVEL subregion  IS (countries.country_subregion) 
   LEVEL region     IS (countries.country_region) 
   HIERARCHY geog_rollup (
      customer      CHILD OF
      city          CHILD OF 
      state         CHILD OF 
      country       CHILD OF 
      subregion     CHILD OF 
      region 
   JOIN KEY (customers.country_id) REFERENCES country
   )
   ATTRIBUTE customer DETERMINES
   (cust_first_name, cust_last_name, cust_gender, 
    cust_marital_status, cust_year_of_birth, 
    cust_income_level, cust_credit_limit) 
   ATTRIBUTE country DETERMINES (countries.country_name)
;
拡張属性を持つディメンションの作成例:

また、次の例のように、attribute_clauseのかわりにextended_attribute_clauseを使用することもできます。

CREATE DIMENSION customers_dim 
   LEVEL customer   IS (customers.cust_id)
   LEVEL city       IS (customers.cust_city) 
   LEVEL state      IS (customers.cust_state_province) 
   LEVEL country    IS (countries.country_id) 
   LEVEL subregion  IS (countries.country_subregion) 
   LEVEL region     IS (countries.country_region) 
   HIERARCHY geog_rollup (
      customer      CHILD OF
      city          CHILD OF 
      state         CHILD OF 
      country       CHILD OF 
      subregion     CHILD OF 
      region 
   JOIN KEY (customers.country_id) REFERENCES country
   )
   ATTRIBUTE customer_info LEVEL customer DETERMINES
   (cust_first_name, cust_last_name, cust_gender, 
    cust_marital_status, cust_year_of_birth, 
    cust_income_level, cust_credit_limit) 
   ATTRIBUTE country DETERMINES (countries.country_name)
;
NULL列値を持つディメンションの作成例:

次の例は、レベル列のいずれかがNULLの場合に、階層のつながりを維持する際のディメンションの作成方法を示しています。この例では、簡単に説明するためにcust_marital_status列を使用しています。この列はNOT NULL列ではありません。この制約がある場合は、SKIP WHEN NULL句を使用する前にこの制約を使用禁止にする必要があります。

CREATE DIMENSION customers_dim
   LEVEL customer IS (customers.cust_id)
   LEVEL status IS (customers.cust_marital_status) SKIP WHEN NULL
   LEVEL city IS (customers.cust_city)
   LEVEL state IS (customers.cust_state_province)
   LEVEL country IS (countries.country_id)
   LEVEL subregion IS (countries.country_subregion) SKIP WHEN NULL
   LEVEL region IS (countries.country_region)
   HIERARCHY geog_rollup (
      customer CHILD OF
      city CHILD OF
      state CHILD OF
      country CHILD OF
      subregion CHILD OF
      region
   JOIN KEY (customers.country_id) REFERENCES country
   )
   ATTRIBUTE customer DETERMINES
   (cust_first_name, cust_last_name, cust_gender,
    cust_marital_status, cust_year_of_birth,
    cust_income_level, cust_credit_limit)
   ATTRIBUTE country DETERMINES (countries.country_name)
;

CREATE DIRECTORY

用途

CREATE DIRECTORY文を使用すると、ディレクトリ・オブジェクトを作成できます。ディレクトリ・オブジェクトは、外部バイナリ・ファイルLOB(BFILE)および外部表データが存在するサーバー・ファイル・システム上のディレクトリの別名を示します。PL/SQLコードおよびOCIコールでBFILEを参照する際、管理の汎用性のために、オペレーティング・システムのパス名をハード・エンコードせずにディレクトリ名を使用できます。

すべてのディレクトリは1つのネームスペースに作成されるため、個々のユーザーのスキーマで所有されるわけではありません。ディレクトリに対するオブジェクト権限を特定ユーザーに付与することによって、そのディレクトリ構造内に格納されているBFILEへのアクセスを制限できます。

参照:

 

前提条件

ディレクトリを作成する場合は、CREATE ANY DIRECTORYシステム権限が必要です。

ディレクトリを作成する場合、そのディレクトリに対するREADオブジェクト権限およびWRITEオブジェクト権限が自動的に付与され、他のユーザーおよびロールにこれらの権限を付与できます。DBAも、これらの権限を他のユーザーおよびロールに付与できます。

ディレクトリに対するWRITE権限は、外部表との接続に便利です。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。

ファイルの記憶域用に、それに応じたオペレーティング・システムのディレクトリ、ASMディスク・グループ、またはASMディスク・グループ内のディレクトリを作成する必要もあります。システム管理者およびデータベース管理者は、このオペレーティング・システムのディレクトリに、Oracle Databaseプロセスに対する読取り権限および書込み権限が正しく設定されていることを確認する必要があります。

ディレクトリに対して付与される権限は、オペレーティング・システムのディレクトリ用に定義されたアクセス権限とは無関係に作成されるため、これらの権限は完全に対応しない場合があります。たとえば、サンプル・ユーザーhrに、ディレクトリ・オブジェクトに対するREAD権限が付与されていても、それに対応するオペレーティング・システムのディレクトリにOracle Databaseプロセスに対するREAD権限が付与されていない場合は、エラーが発生します。

構文

create_directory::=

画像の説明

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のディレクトリ・データベース・オブジェクトを再作成できます。この句を指定した場合、既存のディレクトリに付与されているデータベース・オブジェクト権限を削除、再作成および再付与しなくても、そのディレクトリの定義を変更できます。

再定義したディレクトリに対する権限が付与されていたユーザーは、権限が再付与されなくてもそのディレクトリにアクセスできます。

参照:

データベースからのディレクトリの削除については、「DROP DIRECTORY」を参照してください。 

directory

作成するディレクトリ・オブジェクトの名前を指定します。directoryの最大長は30バイトです。ディレクトリ・オブジェクトは、スキーマ名で修飾できません。

指定したディレクトリが実際に存在するかどうかは検証されません。このため、オペレーティング・システムに存在するディレクトリを指定してください。また、オペレーティング・システムでパス名の大/小文字が区別される場合は、正しい形式でディレクトリ名を指定する必要があります。パス名の終わりにスラッシュを指定する必要はありません。

ディレクトリ名で親ディレクトリを参照しないでください。たとえば、次の構文は有効です。

CREATE DIRECTORY mydir AS '/scratch/file_data';

ただし、次の構文は無効です。

CREATE DIRECTORY mydir AS '/scratch/data/../file_data';

path_name

ファイルが格納されているサーバー上のオペレーティング・システムのディレクトリのフルパス名を指定します。指定するフルパス名は、一重引用符で囲む必要があります。また、パス名の大/小文字は区別されます。

ディレクトリの作成例:

次の文は、サーバーのディレクトリを示す、ディレクトリのデータベース・オブジェクトを作成します。

CREATE DIRECTORY admin AS 'oracle/admin';

次の文は、オペレーティング・システムのディレクトリ/usr/binに格納されているBFILEにアクセスできるように、ディレクトリのデータベース・オブジェクトbfile_dirを再定義します。

CREATE OR REPLACE DIRECTORY bfile_dir AS '/usr/bin/bfile_dir';

CREATE DISKGROUP


注意:

このSQL文は、自動ストレージ管理を使用しており、自動ストレージ管理インスタンスを起動している場合にのみ有効です。この文の発行は、通常のデータベース・インスタンスからではなく、自動ストレージ管理インスタンスから行う必要があります。自動ストレージ管理インスタンスの起動の詳細は、『Oracle Databaseストレージ管理者ガイド』 を参照してください。 


用途

CREATE DISKGROUP句を使用すると、ディスクのグループに名前を付け、そのグループをOracle Databaseが管理するように指定できます。Oracle Databaseは、ディスク・グループを論理単位として管理し、I/Oの均衡を保つために各ファイルを均等に分散します。また、ディスク・グループで使用可能なすべてのディスクにデータベース・ファイルを自動的に分散し、記憶域構成が変更されるたびに、自動的にストレージの均衡を再調整します。

この文を使用すると、ディスク・グループが作成され、1つ以上のディスクがディスク・グループに割り当てられ、ディスク・グループの初めてのマウントが実行されます。後続のインスタンスで、自動ストレージ管理によって自動的にディスク・グループをマウントさせる場合は、初期化パラメータ・ファイルのASM_DISKGROUPS初期化パラメータの値に、そのディスク・グループ名を追加する必要があります。SPFILEを使用している場合、そのディスク・グループは自動的に初期化パラメータに追加されます。

参照:

  • ディスク・グループの変更については、「ALTER DISKGROUP」を参照してください。

  • 自動ストレージ管理およびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Databaseストレージ管理者ガイド』を参照してください。

  • 初期化パラメータ・ファイルへのディスク・グループ名の追加の詳細は、ASM_DISKGROUPSを参照してください。

  • 自動ストレージ管理操作を監視する方法については、V$ASM_OPERATIONを参照してください。

  • ディスク・グループの削除については、「DROP DISKGROUP」を参照してください。

 

前提条件

この文を発行するには、SYSDBAシステム権限が必要です。

この文を発行する前に、オペレーティング・システムのフォーマット・ユーティリティを使用して、ディスクをフォーマットしておく必要があります。また、Oracle Databaseユーザーが読取り/書込み権限を持ち、ASM_DISKSTRINGを使用してディスクが検出可能であることを確認します。

ファイル・システムまたはRAWデバイスではなく、自動ストレージ管理ディスク・グループにデータベース・ファイルを格納している場合、自動ストレージ管理インスタンスを構成および起動してディスク・グループを管理しないと、データベース・インスタンスがディスク・グループのファイルにアクセスできません。

各データベース・インスタンスは、データベースと同じノード上にある1つの自動ストレージ管理インスタンスと通信します。同じノード上にある複数のデータベース・インスタンスが、1つの自動ストレージ管理インスタンスと通信できます。

構文

create_diskgroup::=

画像の説明

qualified_disk_clause::=

画像の説明

size_clause::=を参照)

セマンティクス

diskgroup_name

ディスク・グループ名を指定します。ディスク・グループには、データベース・スキーマ・オブジェクトと同じネーミング規則および制限が適用されます。データベース・オブジェクト名の詳細は、「スキーマ・オブジェクトのネーミング規則」を参照してください。

REDUNDANCY句

REDUNDANCY句を使用すると、ディスク・グループの冗長レベルを指定できます。

FAILGROUP句

この句を使用すると、1つ以上の障害グループの名前を指定できます。NORMAL REDUNDANCYまたはHIGH REDUNDANCYを指定している場合にこの句を省略すると、Oracle Databaseは、自動的にディスク・グループの各ディスクを障害グループに追加します。障害グループの暗黙的な名前は、オペレーティング・システムに依存しないディスク名と同じです(「NAME句」を参照)。

EXTERNAL REDUNDANCYディスク・グループを作成している場合、この句は指定できません。

qualified_disk_clause

DISK qualified_disk_clauseを指定すると、ディスク・グループにディスクを追加できます。

search_string

ディスク・グループに追加するディスクごとに、オペレーティング・システム依存の検索文字列を指定します。自動ストレージ管理では、この文字列を使用してディスクが検索されます。search_stringは、ASM_DISKSTRING初期化パラメータの文字列を使用した検索で戻される、ディスクのサブセットを指している必要があります。search_stringがOracle Databaseユーザーが読取り/書込み権限を持っているディスクを指していない場合、自動ストレージ管理はエラーを戻します。search_stringが異なるディスク・グループに割り当てられている1つ以上のディスクを指している場合、FORCEを指定していなければ、エラーが戻されます。

自動ストレージ管理では、有効な追加候補のディスクごとにディスク・ヘッダーがフォーマットされ、このディスクが新規のディスク・グループのメンバーであることが示されます。

参照:

検索文字列の指定の詳細は、「ASM_DISKSTRING初期化パラメータ」を参照してください。 

NAME句

NAME句は、search_stringが1つのディスクを指す場合にのみ有効です。この句を使用すると、オペレーティング・システムに依存しないディスクの名前を指定できます。名前は、最大30文字の英数字で指定できます。最初の文字は、英字にする必要があります。ASMLIBでディスクにラベルを割り当てている場合にこの句を省略すると、ディスク名としてそのラベルが使用されます。ASMLIBでラベルを割り当てていない場合にこの句を省略するすると、自動ストレージ管理は、「diskgroup_name_####」(####はディスク番号)という書式のデフォルト名を作成します。この名前を使用して、後続の自動ストレージ管理操作でディスクを参照できます。

SIZE句

この句を使用すると、ディスクのサイズをバイト単位で指定できます。ディスク容量を超えるサイズを指定すると、自動ストレージ管理はエラーを戻します。ディスク容量よりも小さいサイズを指定した場合、自動ストレージ管理で使用されるディスク領域が制限されます。この句を指定しない場合、自動ストレージ管理はプログラム的にディスクのサイズを決定します。

FORCE

FORCEを指定すると、自動ストレージ管理で、別のディスク・グループのメンバーであるディスクをディスク・グループに追加できます。


注意:

この方法でFORCEを使用すると、既存のディスク・グループが破棄される可能性があります。 


この句を有効にするには、ディスクはディスク・グループのメンバーである必要があり、ディスクがマウントされたディスク・グループの一部であってはなりません。

NOFORCE

NOFORCEを指定すると、自動ストレージ管理で、ディスクが別のディスク・グループのメンバーである場合にエラーを戻すことができます。デフォルトはNOFORCEです。

ATTRIBUTE句

この句を使用すると、ディスク・グループの属性値を設定できます。V$ASM_ATTRIBUTEビューを問い合せることによって、現在の属性値を確認できます。表14-1に、この句で設定できる属性を示します。属性値はすべて文字列です。

表14-1    ディスク・グループの属性 
属性  有効な値  説明 

AU_SIZE 

サイズ(バイト単位)。有効な値は、1M〜64Mの2の累乗です。例: 4M、4194304 

割当て単位サイズを指定します。この属性は、ディスク・グループの作成時にのみ設定でき、ALTER DISKGROUP文で変更することはできません。 

COMPATIBLE.RDBMS 

有効なOracle Databaseバージョン番号(注意1) 

この設定は元に戻すことができません。自動ストレージ管理インスタンスとデータベース・インスタンスの間で交換されるメッセージの形式を指定します。このパラメータには、異なる互換性設定で実行されている異なるデータベース・クライアントに対して、異なる値を設定できます。ただし、すべてのディスク・グループの互換性設定は、ディスク・グループを使用するデータベースのCOMPATIBLE初期化パラメータの値以下である必要があります。 

COMPATIBLE.ASM 

有効なOracle Databaseバージョン番号(注意1) 

この設定は元に戻すことができません。ディスク上のASMメタデータのデータ構造の形式を制御します。COMPATIBLE.ASMは、常に同じディスク・グループのCOMPATIBLE.RDBMS以上である必要があります。たとえば、ディスク・グループのCOMPATIBLE.ASMを11.0に設定し、ディスク・グループのCOMPATIBLE.RDBMSを10.1に設定できます。この場合、バージョンが11.0以上の自動ストレージ管理ソフトウェアによってのみディスク・グループは管理可能です。一方、バージョンが10.1以上のデータベース・クライアントは、このディスク・グループを使用できます。 

DISK_REPAIR_TIME 

0〜136年 

ディスクは、オフラインに切り替えられると、デフォルトの時間が経過した後にASMによって削除されます。compatible.rdbmscompatible.asmの両方の属性が11.1以上に設定されている場合、ディスクを修復してオンラインに戻すことができるように、ALTER DISKGROUP ... SET ATTRIBUTE文でdisk_repair_time属性を使用して、そのデフォルトの時間を変更できます。この属性は、ディスク・グループの作成時には設定できません。

時間は分単位(M)または時間単位(H)で指定できます。指定した経過時間は、ディスク・グループがマウントされているときにのみ加算されます。単位を省略した場合、デフォルトはHになります。この属性を省略し、compatible.rdbmscompatible.asmの両方が11.1以上に設定されている場合、デフォルトは3.6Hになります。それ以外の場合、ディスクは即時に削除されます。この属性は、ALTER DISKGROUP ... DISK OFFLINE文およびDROP AFTER句によって上書きできます。

注意: disk_repair_timeの現行の値を使用してディスクがオフラインに切り替えられ、その後この属性の値が変更された場合、変更された値がASMによってディスク・オフライン・ロジックで使用されます。

参照: 詳細は、「ALTER DISKGROUP」の「disk_offline_clause」および『Oracle Databaseストレージ管理者ガイド』を参照してください。 

注意1: 有効なOracle Databaseリリース番号の最初の2桁以上を指定してください。有効なバージョン番号の指定の詳細は、『Oracle Database管理者ガイド』を参照してください。たとえば、互換性を10.2または11.1として指定できます。 

参照:

これらの属性設定の管理の詳細は、『Oracle Databaseストレージ管理者ガイド』を参照してください。 

次の例では、ASM_DISKSTRINGパラメータは$ORACLE_HOME/disks/c*のスーパーセットであり、$ORACLE_HOME/disks/c*が自動ストレージ管理ディスクとして使用される1つ以上のデバイスを指し、Oracle Databaseユーザーはディスクに対する読取り/書込み権限を持っていることを想定しています。

参照:

自動ストレージ管理およびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Databaseストレージ管理者ガイド』を参照してください。 

ディスク・グループの作成例:

次の文は、自動ストレージ管理ディスク・グループdgroup_01を作成します。このディスク・グループには、自動ストレージ管理によって冗長性が提供されておらず、search_stringと一致するすべてのディスクが含まれています。

CREATE DISKGROUP dgroup_01
  EXTERNAL REDUNDANCY
  DISK '$ORACLE_HOME/disks/c*';

CREATE FLASHBACK ARCHIVE

用途

CREATE FLASHBACK ARCHIVE文を使用すると、フラッシュバック・データ・アーカイブを作成できます。フラッシュバック・データ・アーカイブによって、指定したデータベース・オブジェクトへのトランザクションでのデータ変更を自動的に追跡およびアーカイブできます。フラッシュバック・データ・アーカイブは複数の表領域で構成され、追跡対象の表に対するすべてのトランザクションの履歴データが格納されます。

フラッシュバック・データ・アーカイブには、RETENTIONパラメータで指定した期間の履歴データが格納されます。履歴データは、フラッシュバック問合せのAS OF句を使用して問い合せることができます。指定した保存期間を超えた古いアーカイブ済履歴データは、自動的に消去されます。

フラッシュバック・データ・アーカイブには、データベースに対するデータ定義言語(DDL)の変更があっても、DDLの変更が表の構造に影響しないかぎり、履歴データが保持されます。この規則の例外の1つとして、表に列が追加された場合にはフラッシュバック・データ・アーカイブに履歴データが保持されます。

参照:

  • フラッシュバック・データ・アーカイブの使用方法の概要は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

  • 表を追跡対象の表として指定する方法の詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。

  • フラッシュバック・データ・アーカイブの割当て制限属性と保存属性の変更およびフラッシュバック・データ・アーカイブにおける表領域の記憶域の追加と変更の詳細は、「ALTER FLASHBACK ARCHIVE」を参照してください。

 

前提条件

フラッシュバック・データ・アーカイブを作成するには、FLASHBACK ARCHIVE ADMINISTERシステム権限が必要です。また、フラッシュバック・データ・アーカイブを作成するにはCREATE TABLESPACEシステム権限が必要であり、履歴情報が格納される表領域に十分な割当て制限も必要です。フラッシュバック・データ・アーカイブをシステムのデフォルトのフラッシュバック・データ・アーカイブとして指定するには、SYSDBAとしてログインしている必要があります。

構文

create_flashback_archive::=

画像の説明

flashback_archive_quota::=

画像の説明

flashback_archive_retention::=

画像の説明

セマンティクス

DEFAULT

DEFAULTを指定するには、SYSDBAとしてログインしている必要があります。この句を使用すると、このフラッシュバック・データ・アーカイブをデータベースのデフォルトのフラッシュバック・データ・アーカイブとして指定できます。CREATE TABLE文またはALTER TABLE文に、フラッシュバック・データ・アーカイブ名を指定しないでflashback_archive_clauseが指定されている場合は、データベースはデフォルトのフラッシュバック・データ・アーカイブを使用して、該当する表のデータを格納します。

デフォルトのフラッシュバック・データ・アーカイブがすでに存在する場合は、この句を指定することはできません。ただし、ALTER FLASHBACK ARCHIVE ... SET DEFAULT句を使用して、既存のデフォルトのフラッシュバック・データ・アーカイブを置き換えることはできます。

参照:

詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。 

flashback_archive

フラッシュバック・データ・アーカイブの名前を指定します。名前は、「スキーマ・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

TABLESPACE句

このフラッシュバック・データ・アーカイブのアーカイブ・データが格納される表領域を指定します。この句では表領域を1つのみ指定できます。ただし、ALTER FLASHBACK ARCHIVE文を使用して、後で表領域をフラッシュバック・データ・アーカイブに追加できます。

flashback_archive_quota

アーカイブ・データ用に確保する初期表領域の領域を指定します。フラッシュバック・データ・アーカイブ内のアーカイブ用の領域が一杯になると、このフラッシュバック・データ・アーカイブを使用する追跡対象の表でのDML操作は失敗します。フラッシュバック・データ・アーカイブの内容が指定された割当て制限の90%になると、領域不足のアラートがデータベースから発行され、古いデータを消去するか、割当て制限を追加する時間が与えられます。この句を省略すると、指定された表領域でフラッシュバック・データ・アーカイブの割当て制限が無制限になります。

flashback_archive_retention

アーカイブされたデータがフラッシュバック・データ・アーカイブに保持される時間の長さを月、日または年単位で指定します。指定した時間でフラッシュバック・データ・アーカイブが一杯になると、データベースは「flashback_archive_quota」で説明されているように応答します。

次の文では、2つのフラッシュバック・データ・アーカイブがテストのために作成されます。最初のフラッシュバック・データ・アーカイブは、データベースのデフォルトとして指定されます。どちらも、領域割当て制限は1MBであり、アーカイブの保存は1日です。

CREATE FLASHBACK ARCHIVE DEFAULT test_archive1
   TABLESPACE example
   QUOTA 1 M
   RETENTION 1 DAY;

CREATE FLASHBACK ARCHIVE test_archive2
   TABLESPACE example
   QUOTA 1 M
   RETENTION 1 DAY;

次の文では、デフォルトのフラッシュバック・データ・アーカイブを変更して、保存期間を1か月に延長します。

ALTER FLASHBACK ARCHIVE test_archive1
   MODIFY RETENTION 1 MONTH;

次の文では、oe.customers表の追跡を指定します。フラッシュバック・データ・アーカイブが指定されていないため、データはデフォルトのフラッシュバック・データ・アーカイブtest_archive1にアーカイブされます。

ALTER TABLE oe.customers
   FLASHBACK ARCHIVE;

次の文では、oe.orders表の追跡を指定します。この場合、データは指定したフラッシュバック・データ・アーカイブtest_archive2にアーカイブされます。

ALTER TABLE oe.orders
   FLASHBACK ARCHIVE test_archive2;

次の文では、test_archive2フラッシュバック・データ・アーカイブを削除します。

DROP FLASHBACK ARCHIVE test_archive2;

CREATE FUNCTION

用途

ファンクションはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE FUNCTION文を使用すると、スタンドアロン・ストアド・ファンクションまたはコール仕様を作成できます。

前提条件

自分のスキーマ内にファンクションを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にファンクションを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

構文

ファンクションはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_function::=

画像の説明

plsql_sourceについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のファンクションを再作成できます。この句を指定した場合、既存のファンクションに付与されているオブジェクト権限を削除、再作成および再付与しなくても、そのファンクションの定義を変更できます。ファンクションを再定義した場合、そのファンクションは再コンパイルされます。

再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。

ファンクション索引がファンクションに依存している場合、索引にDISABLEDのマークが付きます。

参照:

SQLを使用したファンクションの再コンパイルについては、「ALTER FUNCTION」を参照してください。 

plsql_source

plsql_sourceの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。


CREATE INDEX

用途

CREATE INDEX文を使用すると、次のものに索引を作成できます。

索引は、スキーマ・オブジェクトの1つで、索引には、表またはクラスタの索引付き列の中に表示される各値のエントリが入ります。索引を使用した場合、行に直接、かつ高速にアクセスできます。Oracle Databaseは、次の索引をサポートしています。

前提条件

自分のスキーマ内に索引を作成する場合は、次のいずれかの条件が満たされている必要があります。

他のユーザーのスキーマ内に索引を作成する場合は、CREATE ANY INDEXシステム権限が必要です。また、索引が定義されているスキーマの所有者には、UNLIMITED TABLESPACEシステム権限、あるいはその索引または索引パーティションを格納するための表領域の割当て制限のいずれかが必要です。

自分のスキーマにドメイン索引を作成する場合、従来索引の作成の前提条件の他に、索引タイプに対するEXECUTEオブジェクト権限が必要です。他のユーザーのスキーマにドメイン索引を作成する場合、索引の所有者にも索引タイプおよびその基礎となる実装タイプに対するEXECUTEオブジェクト権限が必要です。ドメイン索引を作成する前に、索引タイプを定義する必要があります。

ファンクション索引を作成する場合は、従来索引の作成の前提条件の他に、索引がユーザー定義ファンクションに基づいている場合は、ファンクションにDETERMINISTICのマークを付ける必要があります。また、これらのファンクションが他のユーザーに所有されている場合、ファンクション索引で使用されるユーザー定義ファンクションに対する、EXECUTEオブジェクト権限を持っている必要があります。

参照:

「CREATE INDEXTYPE」 

構文

create_index::=

画像の説明

cluster_index_clause::=

画像の説明

index_attributes::=を参照)

table_index_clause::=

画像の説明

index_properties::=を参照)

bitmap_join_index_clause::=

画像の説明

local_partitioned_index::=index_attributes::=を参照)

index_expr::=

画像の説明

index_properties::=

画像の説明

global_partitioned_index::=local_partitioned_index::=index_attributes::=domain_index_clause::=XMLIndex_clause::=を参照)

index_attributes::=

画像の説明

physical_attributes_clause::=logging_clause::=key_compression::=parallel_clause::=を参照)

physical_attributes_clause::=

画像の説明

storage_clause::=を参照)

logging_clause::=

画像の説明

key_compression::=

画像の説明

domain_index_clause::=

画像の説明

parallel_clause::=を参照)

local_domain_index_clause::=

画像の説明

XMLIndex_clause::=

画像の説明

XMLIndex_parametersについては、『Oracle XML DB開発者ガイド』を参照してください。)

local_XMLIndex_clause::=

画像の説明

global_partitioned_index::=

画像の説明

index_partitioning_clause::=individual_hash_partitions::=hash_partitions_by_quantity::=を参照)

individual_hash_partitions::=

画像の説明

partitioning_storage_clause::=を参照)

partitioning_storage_clause::=

画像の説明

LOB_partitioning_storage::=

画像の説明

hash_partitions_by_quantity::=

画像の説明

index_partitioning_clause::=

画像の説明

segment_attributes_clause::=を参照)

local_partitioned_index::=

画像の説明

on_range_partitioned_table::=on_list_partitioned_table::=on_hash_partitioned_table::=on_comp_partitioned_table::=を参照)

on_range_partitioned_table::=

画像の説明

segment_attributes_clause::=を参照)

on_list_partitioned_table::=

画像の説明

segment_attributes_clause::=を参照)

segment_attributes_clause::=

画像の説明

physical_attributes_clause::=logging_clause::=を参照)

on_hash_partitioned_table::=

画像の説明

on_comp_partitioned_table::=

画像の説明

segment_attributes_clause::=index_subpartition_clause::=を参照)

index_subpartition_clause::=

画像の説明

parallel_clause::=

画像の説明

storage_clause::=を参照)

セマンティクス

UNIQUE

UNIQUEを指定すると、索引のベースとなっている列の値が一意である必要があることを指定できます。

一意索引の制限事項:

一意索引には、次の制限事項があります。

BITMAP

BITMAPを指定すると、indexが各行を分割した索引付けではなく、各個別キーのビットマップで作成されることを指定できます。ビットマップ索引では、キー値にビットマップとして関連付けられたROWIDが格納されます。ビットマップ内の各ビットは、使用可能なROWIDに対応しています。ビットが設定されていれば、それに対応するROWIDを持つ行に、キー値が設定されていることになります。ビットマップの内部表現は、データ・ウェアハウスなど、低レベルの同時実行トランザクションが実行されるアプリケーションに最適です。


注意:

Oracleでは、すべてのキー列がNULLの表の行には索引を付けません(ただし、ビットマップ索引の場合を除きます)。したがって、表のすべての行に索引を作成する場合、索引のキー列にNOT NULL制約を指定するか、またはビットマップ索引を作成する必要があります。 


ビットマップ索引の制限事項:

ビットマップ索引には、次の制限事項があります。

schema

索引を作成するスキーマを指定します。schemaを指定しない場合、自分のスキーマ内に索引が作成されます。

index

作成する索引の名前を指定します。

参照:

「索引の作成例:」および「XMLType表の索引の作成例:」を参照してください。 

cluster_index_clause

cluster_index_clauseを使用すると、クラスタ索引を作成するクラスタを指定できます。clusterをschemaで修飾しない場合、そのクラスタは自分のスキーマ内にあるとみなされます。ハッシュ・クラスタにはクラスタ索引を作成できません。

参照:

CREATE CLUSTER」および「クラスタ索引の作成例:」を参照してください。 

table_index_clause

索引を定義する表を指定します。tableschemaで修飾しない場合、その表は自分のスキーマにあるとみなされます。

ネストした表の記憶表に索引を作成することによって、ネストした表の列に索引を作成します。記憶表のNESTED_TABLE_ID疑似列を組み込んだ一意索引を作成することは、ネストした表の値を持つ行がそれぞれ確実に異なるようにする有効な手段です。

参照:

「ネストした表の索引の例:」 

セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER TABLEDROP TABLECREATE INDEXなど)を実行できます。セッションを一時表にバインドするには、一時表でINSERT操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMITまたはROLLBACK文を発行します。

table_index_clauseの制限事項:

この句には、次の制限事項があります。

t_alias

索引を作成する表に対して相関名(別名)を指定します。


注意:

index_exprがオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要になります。「型メソッドのファンクション索引の作成例:」および「置換可能な列の索引の作成例:」を参照してください。 


index_expr

索引のベースとなる列または列の式を指定します。

column

表内の1つ以上の列の名前を指定します。ビットマップ索引には最大30列を指定できます。他の索引には最大32列を指定できます。これらの列は主キーを定義します。

索引がローカル非同一キー索引(14-89ページの「local_partitioned_index」を参照)の場合、索引キーはパーティション・キーを含んでいる必要があります。

スカラー・オブジェクト属性列またはネストした表の記憶表のシステム定義のNESTED_TABLE_ID列には索引を作成できます。オブジェクト属性列を指定する場合、列名を表名で修飾する必要があります。ネストした表の列属性を指定する場合は、この属性は、一番外側の表の名前、ネストした表が定義されている列の名前、およびそのネストした表の列属性となるすべての中間属性の名前で修飾する必要があります。

索引列の制限事項:

Oracle Databaseでサポートされている、SCOPE句で定義したREF型の列または属性の索引を除き、ユーザー定義型、LONGLONG RAW、LOBまたはREF型の列または属性に索引を作成できません。

column_expression

tableの列、定数、SQLファンクションおよびユーザー定義ファンクションから作成された式を指定します。column_expressionを指定した場合、ファンクション索引が作成されます。

参照:

「列式」「ファンクション索引の注意事項:」「ファンクション索引の制限事項:」および「ファンクション索引の例」を参照してください。 

ファンクションの名前解決は、索引作成者のスキーマに基づきます。column_expressionで使用されるユーザー定義ファンクションは、CREATE INDEX操作中に完全に名前解決されます。

ファンクション索引の作成後、DBMS_STATSパッケージを使用して、索引と実表の両方に関する統計情報を収集します。これらの統計情報によって、Oracle Databaseは索引を使用するタイミングを正しく判断できます。

ファンクションの一意索引は、列または列の組合せに対して条件付きの一意制約を定義する場合に便利なことがあります。例については、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。

参照:

DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。 

ファンクション索引の注意事項:

ファンクション索引には、次の注意事項があります。

ファンクション索引の制限事項:

ファンクション索引には、次の制限事項があります。

ASC | DESC

ASCまたはDESCを使用すると、索引を昇順で作成するか降順で作成するかを指定できます。文字データの索引は、データベース・キャラクタ・セットの文字値の昇順または降順で作成されます。

Oracle Databaseは、降順索引をファンクション索引として扱います。他のファンクション索引のように、最初に索引および索引が定義されている表を分析するまで、降順索引は使用しません。14-83ページの「column_expression」を参照してください。

昇順の一意索引は、複数のNULL値を含むことができます。ただし、降順の一意索引の場合は、複数のNULL値は重複した値として扱われるため、許可されていません。

昇順索引および降順索引の制限事項:

これらの句は、ドメイン索引に対して指定できません。逆索引にはDESCを指定できません。indexをビットマップ化したり、COMPATIBLE初期化パラメータに8.1.0未満の値を設定すると、DESCは無視されます。

index_attributes

オプションの索引属性を指定します。

physical_attributes_clause

physical_attributes_clauseを使用すると、索引の物理特性および記憶特性の値を設定できます。

この句を指定しない場合、PCTFREEが10、INITRANSが2に設定されます。

索引の物理属性の制限事項:

PCTUSEDパラメータは、索引に対して指定できません。

参照:

これらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。 

TABLESPACE

索引、索引パーティションまたは索引サブパーティションを格納する表領域の名前を指定します。この句を指定しない場合、その索引を定義しているスキーマの所有者のデフォルトの表領域内に索引が作成されます。

ローカル索引の場合、tablespaceのかわりにキーワードDEFAULTを指定できます。ローカル索引に追加される新規パーティションまたはサブパーティションは、基礎となる表の対応するパーティションまたはサブパーティションと同じ表領域内に作成されます。

key_compression

COMPRESSを指定すると、キー圧縮を使用可能にできます。これによって、キー列値の繰返しがなくなり、記憶域を大幅に削減できます。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。

Oracle Databaseでは、索引(一意でない索引または2列以上の一意索引)が圧縮されます。パーティション索引の圧縮を使用する場合は、索引レベルで圧縮を有効にして索引を作成する必要があります。そのようなパーティション索引の個々のパーティションの圧縮設定は、後で有効および無効にすることができます。個々のパーティションを再作成するときに圧縮を有効および無効にできます。索引の再作成時にのみ、既存の非パーティション索引を変更して圧縮を有効または無効にできます。

キー圧縮の制限事項:

COMPRESSは、ビットマップ索引に対して指定できません。

参照:

「索引の圧縮例:」 

NOCOMPRESS

NOCOMPRESSを指定すると、キー圧縮を使用禁止にできます。これはデフォルトです。

SORT | NOSORT

索引の作成時に、Oracle Databaseはデフォルトで索引を昇順ソートします。NOSORTを指定すると、索引の作成時に、データベース内ですでに昇順で格納されている行のソートを行わないようにできます。索引列の行または列が昇順に格納されていない場合、データベースはエラーを戻します。ソート時間および領域を削減するため、列を表へ初期ロードした直後にこの句を使用します。これらのキーワードのいずれも指定しない場合、デフォルトでSORTが使用されます。

NOSORTの制限事項:

このパラメータには、次の制限事項があります。

REVERSE

REVERSEを指定すると、ROWID以外の索引ブロックのバイトを逆順に格納できます。

逆索引の制限事項:

逆索引には、次の制限事項があります。

VISIBLE | INVISIBLE

この句を使用すると、オプティマイザで索引を参照可能にするかどうかを指定できます。参照不可の索引はDML操作によってメンテナンスされますが、パラメータOPTIMIZER_USE_INVISIBLE_INDEXESをセッションまたはシステム・レベルで明示的にTRUEに設定しないと、問合せ時にオプティマイザによって使用されません。

既存の索引がオプティマイザによって参照可能か参照不可かを確認するには、USER_DBA_ALL_INDEXESデータ・ディクショナリ・ビューのVISIBILITY列を問い合せます。

参照:

この機能の詳細は、『Oracle Database管理者ガイド』を参照してください。 

logging_clause

索引作成を、REDOログ・ファイル内に記録する(LOGGING)か記録しない(NOLOGGING)かを指定します。この設定によって、索引に対する後続のダイレクト・ローダー(SQL*Loader)およびダイレクト・パス・インサート操作を記録するか記録しないかも決定されます。デフォルトはLOGGINGです。

非パーティション索引の場合、この句は索引のロギング属性を指定します。

パーティション索引の場合、この句は次の値を決定します。

索引のロギング属性は、その実表の属性に依存しません。

この句を指定しない場合、ロギング属性は表が存在する表領域の属性になります。

参照:

 

ONLINE

ONLINEを指定すると、索引作成中の表でのDML操作を許可できます。

オンライン索引の作成の制限事項:

オンライン索引の作成には、次の制限事項があります。

parallel_clause

parallel_clauseを指定すると、索引の作成をパラレル化できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

Index Partitioning句

global_partitioned_index句およびlocal_partitioned_index句を使用すると、indexをパーティション化できます。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

参照:

「パーティション索引の例」 

global_partitioned_index

global_partitioned_indexを使用すると、索引のパーティション化がユーザー定義であり、基礎となる表と同一レベルでパーティション化されないことを指定できます。デフォルトでは、非パーティション索引はグローバル索引です。

グローバル索引には、レンジ・パーティション化またはハッシュ・パーティション化を実行できます。どちらの場合でも、パーティション・キー列に最大32列を指定できます。列リストをパーティション化する場合、索引の列リストの左の接頭辞を指定する必要があります。索引が列abおよびcに定義されている場合は、列に(a, b, c)、(a, b)または(a, c)は指定できますが、(b, c)(c)または(b, a)は指定できません。パーティション名を指定しない場合、SYS_Pnの形式でパーティション名が割り当てられます。

GLOBAL PARTITION BY RANGE

この句を使用すると、レンジ・パーティション・グローバル索引を作成できます。列リストに指定した表の列の値の範囲に基づいて、グローバル索引がパーティション化されます。

参照:

「レンジ・パーティション・グローバル索引の作成例:」 

GLOBAL PARTITION BY HASH

この句を使用すると、ハッシュ・パーティション・グローバル索引を作成できます。パーティション・キー列の値にハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。

参照:

ハッシュ・パーティションの2つの方法については、「CREATE TABLE」句の「hash_partitions」および「ハッシュ・パーティション・グローバル索引の作成例:」を参照してください。 

グローバル・パーティション索引の制限事項:

グローバル・パーティション索引には、次の制限事項があります。

index_partitioning_clause

この句を使用すると、個々の索引パーティションを記述できます。この句が繰り返される数によってパーティションの数が決まります。partitionを指定しない場合、名前はSYS_Pnの形式で生成されます。

VALUES LESS THAN(value_list)には、グローバル索引の現在のパーティションの境界は含まない上限を指定します。値のリストは、global_partitioned_index句の列リストに対応するリテラル値を含む、カンマで区切られた順序リストです。最後のパーティションの値としては、必ずMAXVALUEを指定します。


注意:

索引がDATE列でパーティション化されている場合、および日付書式で年の最初の2桁の数字が指定されていない場合、年の4文字書式マスクでTO_DATEファンクションを使用する必要があります。日付書式は、NLS_TERRITORYによって暗黙的に決定され、NLS_DATE_FORMATによって明示的に決定されます。これらの初期化パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 


参照:

「レンジ・パーティション化の例:」 

local_partitioned_index

local_partitioned_index句を使用すると、tableと同じパーティション数および同じパーティション境界を使用し、同じ列で索引をパーティション化できます。基礎となる表が再パーティション化された場合、ローカル索引のパーティションは自動的に保持されます。

on_range_partitioned_table

この句を使用すると、レンジ・パーティション表の索引パーティションの名前および属性を指定できます。この句を指定する場合、PARTITION句は、表パーティションと同一の数と順序である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。

索引にキー圧縮が指定されていない場合、索引パーティションにキー圧縮を指定することはできません。

on_list_partitioned_table

on_list_partitioned_table句は、「on_range_partitioned_table」と同一です。

on_hash_partitioned_table

この句を使用すると、ハッシュ・パーティション表の索引パーティションの名前および表領域の記憶域を指定できます。

PARTITION句を指定する場合、これらの句の数は表パーティションの数と同一である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。オプションで、1つ以上の個々のパーティションに表領域の記憶域を指定できます。この句またはSTORE IN句に表領域の記憶域を指定しない場合、各索引パーティションが、対応する表パーティションと同じ表領域に格納されます。

STORE IN句を使用して、すべての索引ハッシュ・パーティションを分散させる1つ以上の表領域を指定できます。表領域の数は、索引パーティションの数と等しくなる必要はありません。索引パーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。

on_comp_partitioned_table

この句を使用すると、コンポジット・パーティション表の索引パーティションの名前および属性を指定できます。

STORE IN句は、レンジ-ハッシュまたはリスト-ハッシュ・コンポジット・パーティション表に対してのみ有効です。この句を使用して、すべてのパーティションのすべての索引ハッシュ・サブパーティションを分散させる1つ以上のデフォルト表領域を指定できます。index_subpartition_clauseの第2 STORE IN句で個々のパーティションのサブパーティションに対して異なるデフォルトの表領域の記憶域を指定すると、この記憶域を上書きできます。

レンジ-レンジ、レンジ-リストおよびリスト-リスト・コンポジット・パーティション表に対しては、PARTITION句に指定したレンジまたはリスト・サブパーティションのデフォルトの属性を指定できます。index_subpartition_clauseSUBPARTITION句の個々のパーティションのレンジまたはリスト・サブパーティションに異なる属性を指定すると、この記憶域を上書きできます。

索引にキー圧縮が指定されていない場合、索引パーティションにキー圧縮を指定することはできません。

index_subpartition_clause

この句を使用すると、コンポジット・パーティション表の索引サブパーティションに名前および表領域の記憶域を指定できます。

STORE IN句は、レンジ-ハッシュおよびリスト-ハッシュ・コンポジット・パーティション表のハッシュ・サブパーティションに対してのみ有効です。この句を使用して、すべての索引ハッシュ・サブパーティションを分散させる1つ以上の表領域を指定できます。SUBPARTITION句は、すべてのサブパーティション・タイプに対して有効です。

SUBPARTITION句を指定する場合、これらの句の数は表サブパーティションの数と同一である必要があります。subpartitionを指定しない場合、対応する表のサブパーティションと一貫した名前が生成されます。その名前が既存の索引サブパーティション名と競合する場合は、SYS_SUBPnの形式が使用されます。

表領域の数は、索引サブパーティションの数と等しくなる必要はありません。索引サブパーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。

on_comp_partitioned_table句またはindex_subpartition_clauseにサブパーティションの表領域の記憶域を指定しない場合、indexに指定された表領域が使用されます。indexに表領域の記憶域を指定しない場合、サブパーティションが、対応する表サブパーティションと同じ表領域に格納されます。

domain_index_clause

indexが、アプリケーション固有のindextype索引タイプのインスタンスであるドメイン索引であることを指定します。

ドメイン索引を作成する前に、複数の操作を行う必要があります。まず、索引タイプの実装タイプを作成します。また、ファンクション実装を作成し、そのファンクションを使用する演算子も作成します。次に、演算子と実装タイプを関連付ける索引タイプを作成します。最後にこの句を使用してドメイン索引を作成します。付録E「詳細な例」に、これらのすべての操作を含んだ単純なドメイン索引の作成例を記載しています。

index_expr

index_exprtable_index_clause内)に、索引が定義されている表の列またはオブジェクトの属性を指定します。基礎となる索引タイプが異なり、その索引タイプがユーザー定義操作の分割セットをサポートする場合のみ、1つの列に複数のドメイン索引を定義できます。

ドメイン索引の制限事項:

ドメイン索引には、次の制限事項があります。

indextype

索引タイプの名前を指定します。名前は、作成済の有効なスキーマ・オブジェクトである必要があります。

Oracle Textをインストールしている場合、様々な組込み索引タイプを使用して、Oracle Textドメイン索引を作成できます。Oracle TextおよびOracle Textが使用する索引の詳細は、『Oracle Textリファレンス』を参照してください。

参照:

「CREATE INDEXTYPE」 

local_domain_index_clause

この句を使用すると、パーティション表のローカル索引を索引にするように指定できます。

parallel_clause

parallel_clauseを使用すると、ドメイン索引の作成をパラレル化できます。非パーティション・ドメイン索引の場合、Oracle Databaseは明示的またはデフォルトの並列度をODCIIndexCreateカートリッジ・ルーチンに渡し、ODCIIndexCreateカートリッジ・ルーチンが索引の並列性を確立します。ローカル・ドメイン索引の場合、この句によって索引パーティションはパラレルに作成されます。

参照:

Oracle Data Cartridge Interface(ODCI)ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 

PARAMETERS

未解析のまま適切なODCI索引タイプ・ルーチンに渡されたパラメータ文字列を指定します。パラメータ文字列の最大長は1,000文字です。

構文の最上位でこの句を指定した場合、パラメータは索引パーティションのデフォルトのパラメータになります。local_domain_index_clauseの一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。

ドメイン索引が作成されると、適切なODCIルーチンがコールされます。ルーチンが正常に戻らない場合、ドメイン索引はFAILEDのマークが付けられます。失敗したドメイン索引でサポートされる操作は、DROP INDEXおよびREBUILD INDEX(非ローカル索引用)のみです。

参照:

Oracle Data Cartridge Interface(ODCI)ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 

XMLIndex_clause

XMLIndex_clauseを使用すると、一般にはXMLデータが含まれる列に、XMLIndex索引を定義できます。XMLIndex索引は、特にXMLデータのドメイン用に設計されたドメイン索引の一種です。

PARAMETERS

PARAMETERS句を使用すると、パス表に関する情報およびXMLIndexのコンポーネントに対応する2次索引に関する情報を指定できます。パラメータ文字列の最大長は1,000文字です。

構文の最上位でこの句を指定した場合、パラメータは索引のパラメータおよび索引パーティションのデフォルトのパラメータになります。local_xmlindex_clause句の一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。

参照:

PARAMETERS句の構文およびセマンティクスの詳細、およびXMLIndexの使用の詳細は、『Oracle XML DB開発者ガイド』を参照してください。 

bitmap_join_index_clause

bitmap_join_index_clauseを使用すると、ビットマップ結合索引を定義できます。ビットマップ結合索引は、単一の表に定義します。ディメンション表の列で構成される索引キーには、そのキーに対応するファクト表のROWIDが格納されます。データ・ウェアハウス環境では、一般的に、索引を定義する表をファクト表といい、ファクト表と結合した表をディメンション表といいます。ただし、結合索引の作成にはスター・スキーマは必須ではありません。

ON

ON句には、まずファクト表を指定し、次に索引を定義するディメンション表の列をカッコ内に指定します。

FROM

FROM句には、結合した表を指定します。

WHERE

WHERE句には、結合条件を指定します。

基礎となるファクト表がパーティション化されている場合、local_partitioned_index句(「local_partitioned_index」を参照)のいずれかを指定する必要があります。

ビットマップ結合索引の制限事項:

一般的なビットマップ索引の制限事項(「BITMAP」を参照)に加え、ビットマップ結合索引には次の制限事項があります。

UNUSABLE

UNUSABLEを指定すると、UNUSABLE状態で索引を作成できます。使用禁止の索引を使用可能にする場合、再構築するか、または削除して再作成する必要があります。

索引がパーティション化されている場合は、すべての索引パーティションにUNUSABLEのマークが付けられます。後で一部の索引パーティションのみを再作成してUSABLEにすることができます。これは、一部の索引パーティションのみで索引を保持する場合に有効です。たとえば、新しいパーティションでは索引アクセスを有効にするものの、古いパーティションでは有効にしない場合などに有効です。

索引または索引の一部のパーティションまたはサブパーティションにUNUSABLEのマークが付けられている場合は、次の状況でのみ、索引はオプティマイザによってアクセス・パスとみなされます。オプティマイザはどのパーティションがアクセスされるかをコンパイル時に認識している必要があり、アクセスされるすべてのパーティションにUSABLEのマークが付けられている必要があります。そのため、問合せにバインド変数を含めることはできません。

索引への使用禁止のマーク付けの制限事項:

この句は、一時表の索引に対して指定できません。

一般的な索引の例
索引の作成例:

次の文は、サンプル表oe.orderscustomer_id列にサンプル索引ord_customer_ixを作成します。

CREATE INDEX ord_customer_ix
   ON orders (customer_id);
索引の圧縮例:

次の文は、COMPRESS句を使用して索引ord_customer_ix_demoを作成します。

CREATE INDEX ord_customer_ix_demo 
   ON orders (customer_id, sales_rep_id)
   COMPRESS 1;

索引は、customer_id列値の繰返し項目を圧縮します。

NOLOGGINGモードでの索引の作成例:

サンプル表ordersが高速パラレル・ロードで作成された場合(すべての行がソート済である場合)、次の文は、迅速に索引を作成します。

/* Unless you first sort the table oe.orders, this example fails
   because you cannot specify NOSORT unless the base table is
   already sorted.
*/
CREATE INDEX ord_customer_ix_demo
   ON orders (order_mode)
   NOSORT
   NOLOGGING;
クラスタ索引の作成例:

次の文は、personnelクラスタ(「クラスタの作成例:」で作成)に対して索引を作成します。

CREATE INDEX idx_personnel ON CLUSTER personnel; 

クラスタ・キーのすべての列にクラスタ索引が自動的に作成されるため、索引列は指定しません。クラスタ索引の場合は、すべての行に索引が付きます。

XMLType表の索引の作成例:

次の文は、xwarehouses表(「XMLType表の例:」で作成)の領域要素に索引を作成します。

CREATE INDEX area_index ON xwarehouses e 
   (EXTRACTVALUE(VALUE(e),'/Warehouse/Area'));

この索引によって、たとえば、次の文にあるような倉庫の面積(平方フィート)に基づいた表から選択する問合せのパフォーマンスが大幅に向上します。

SELECT e.getClobVal() AS warehouse
   FROM xwarehouses e
   WHERE EXISTSNODE(VALUE(e),'/Warehouse[Area>50000]') = 1;

参照:

EXISTSNODE」および「VALUE」を参照してください。 

ファンクション索引の例

次の例では、ファンクション索引を作成および使用する方法を示します。

ファンクション索引の作成例:

次の文は、last_name列の大文字評価に基づくemployees表にファンクション索引を作成します。

CREATE INDEX upper_ix ON employees (UPPER(last_name)); 

ファンクション索引の作成に必要な権限およびパラメータ設定の詳細は、「前提条件」を参照してください。

Oracle Databaseが全表スキャンを実行するのではなく、索引を使用するようにするには、ファンクションが戻す値を後続の問合せでNULL以外にします。たとえば、次の文では、必ず索引が使用されます。

SELECT first_name, last_name 
   FROM employees WHERE UPPER(last_name) IS NOT NULL
   ORDER BY UPPER(last_name);

WHERE句を指定しないと、全表スキャンが実行される場合があります。

索引の作成および後続の問合せを示す次の文では、問合せで列の順序が逆であっても、Oracle Databaseはincome_ixを使用します。

CREATE INDEX income_ix 
   ON employees(salary + (salary*commission_pct));

SELECT first_name||' '||last_name "Name"
   FROM employees 
   WHERE (salary*commission_pct) + salary > 15000
   ORDER BY employee_id;
LOB列のファンクション索引の作成例:

次の文は、text_lengthファンクションを使用し、サンプル・スキーマpmのLOB列にファンクション索引を作成します。このファンクションを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。例では、CLOB列が1000字未満のサンプル表print_mediaから行を検索します。

CREATE INDEX src_idx ON print_media(text_length(ad_sourcetext));

SELECT product_id FROM print_media 
   WHERE text_length(ad_sourcetext) < 1000
   ORDER BY product_id;

PRODUCT_ID
----------
      2056
      2268
      3060
      3106
型メソッドのファンクション索引の作成例:

この例には、2つの数値属性(lengthおよびwidth)を含むオブジェクト型rectangleが必要です。area()メソッドは、四角形の面積を計算します。

CREATE TYPE rectangle AS OBJECT  
( length   NUMBER, 
  width    NUMBER, 
  MEMBER FUNCTION area RETURN NUMBER DETERMINISTIC 
); 
 
CREATE OR REPLACE TYPE BODY rectangle AS 
  MEMBER FUNCTION area RETURN NUMBER IS 
  BEGIN 
   RETURN (length*width); 
  END; 
END; 

rectangle型の表rect_tabを作成する場合、次のようにarea()メソッドにファンクション索引を作成できます。

CREATE TABLE rect_tab OF rectangle; 
CREATE INDEX area_idx ON rect_tab x (x.area()); 

この索引を効率的に使用して、次の形式の問合せを評価できます。

SELECT * FROM rect_tab x WHERE x.area() > 100; 
ファンクション索引の使用による条件付き一意性の定義例:

次の文は、oe.orders表に一意なファンクション索引を作成して、プロモーションID 2(大規模なセール)を顧客が2回以上利用できないようにします。

CREATE UNIQUE INDEX promo_ix ON orders
   (CASE WHEN promotion_id =2 THEN customer_id ELSE NULL END,
    CASE WHEN promotion_id = 2 THEN promotion_id ELSE NULL END);

INSERT INTO orders (order_id, order_date, customer_id, order_total, promotion_id)
   VALUES (2459, systimestamp, 106, 251, 2);
1 row created.

INSERT INTO orders (order_id, order_date, customer_id, order_total, promotion_id)
   VALUES (2460, systimestamp+1, 106, 110, 2);
insert into orders (order_id, order_date, customer_id, order_total, promotion_id)
*
ERROR at line 1:
ORA-00001: unique constraint (OE.PROMO_IX) violated

promotion_idが2以外の行を索引から削除するようにします。Oracle Databaseでは、すべてのキーがNULLの行は索引内に格納されません。したがって、この例では、promotion_idが2である場合以外は、customer_idpromotion_idの両方がNULLにマップされます。その結果、customer_id値が同じ2つの行についてpromotion_idが2の場合にのみ、索引の制約に違反することになります。

パーティション索引の例
レンジ・パーティション・グローバル索引の作成例:

次の文は、コストの範囲を3つのグループに分割した3つのパーティションを含むサンプル表sh.salesにグローバル同一キー索引cost_ixを作成します。

CREATE INDEX cost_ix ON sales (amount_sold)
   GLOBAL PARTITION BY RANGE (amount_sold)
      (PARTITION p1 VALUES LESS THAN (1000),
       PARTITION p2 VALUES LESS THAN (2500),
       PARTITION p3 VALUES LESS THAN (MAXVALUE));
ハッシュ・パーティション・グローバル索引の作成例:

次の文は、4つのパーティションを持つサンプル表sh.customersに、ハッシュ・パーティション・グローバル索引cust_last_name_ixを作成します。

CREATE INDEX cust_last_name_ix ON customers (cust_last_name)
  GLOBAL PARTITION BY HASH (cust_last_name)
  PARTITIONS 4;
ハッシュ・パーティション表の索引の作成例:

次の文は、hash_productsパーティション表(「ハッシュ・パーティション化の例:」で作成)のproduct_id列にローカル索引を作成します。LOCALの直後に記述されたSTORE IN句は、hash_productsがハッシュ・パーティション化されていることを示します。Oracle Databaseは、tbs1表領域とtbs2表領域にハッシュ・パーティションを分散させます。

CREATE INDEX prod_idx ON hash_products(category_id) LOCAL
   STORE IN (tbs_01, tbs_02);

索引を作成するには、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_1およびtbs_2の作成例については、「CREATE TABLESPACE」を参照してください。

コンポジット・パーティション表の索引の作成例:

次の文は、composite_sales表(「コンポジット・パーティション表の例:」で作成)にローカル索引を作成します。STORAGE句では、索引のデフォルトの記憶域属性を指定します。ただし、別のTABLESPACE記憶域が指定されているため、このデフォルトは、パーティションq3_2000およびq4_2000の5つのサブパーティションに上書きされます。

索引を作成するには、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_1およびtbs_2の作成例については、「CREATE TABLESPACE」を参照してください。

CREATE INDEX sales_ix ON composite_sales(time_id, prod_id)
   STORAGE (INITIAL 1M MAXEXTENTS UNLIMITED)
   LOCAL
   (PARTITION q1_1998,
    PARTITION q2_1998,
    PARTITION q3_1998,
    PARTITION q4_1998,
    PARTITION q1_1999,
    PARTITION q2_1999,
    PARTITION q3_1999,
    PARTITION q4_1999,
    PARTITION q1_2000,
    PARTITION q2_2000
      (SUBPARTITION pq2001, SUBPARTITION pq2002, 
       SUBPARTITION pq2003, SUBPARTITION pq2004,
       SUBPARTITION pq2005, SUBPARTITION pq2006, 
       SUBPARTITION pq2007, SUBPARTITION pq2008),
    PARTITION q3_2000
      (SUBPARTITION c1 TABLESPACE tbs_02, 
       SUBPARTITION c2 TABLESPACE tbs_02, 
       SUBPARTITION c3 TABLESPACE tbs_02,
       SUBPARTITION c4 TABLESPACE tbs_02,
       SUBPARTITION c5 TABLESPACE tbs_02),
    PARTITION q4_2000
      (SUBPARTITION pq4001 TABLESPACE tbs_03, 
       SUBPARTITION pq4002 TABLESPACE tbs_03,
       SUBPARTITION pq4003 TABLESPACE tbs_03,
       SUBPARTITION pq4004 TABLESPACE tbs_03)
);
ビットマップ索引の例

次の文は、表oe.hash_products「ハッシュ・パーティション化の例:」で作成)にビットマップ結合索引を作成します。

CREATE BITMAP INDEX product_bm_ix 
   ON hash_products(list_price)
   TABLESPACE tbs_1
   LOCAL(PARTITION ix_p1 TABLESPACE tbs_02,
         PARTITION ix_p2,
         PARTITION ix_p3 TABLESPACE tbs_03,
         PARTITION ix_p4,
         PARTITION ix_p5 TABLESPACE tbs_04 );

hash_productsはパーティション表であるため、ビットマップ結合索引はローカル・パーティションである必要があります。この例では、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_2tbs_3およびtbs_4を作成する例は、「CREATE TABLESPACE」を参照してください。

ネストした表の索引の例:

サンプル表pm.print_mediaには、記憶表textdocs_nestedtabに格納されたネストした表の列ad_textdocs_ntabが含まれます。次の文は、記憶表textdocs_nestedtabに一意索引を作成します。

CREATE UNIQUE INDEX nested_tab_ix
      ON textdocs_nestedtab(NESTED_TABLE_ID, document_typ);

疑似列NESTED_TABLE_IDを組み込むことによって、ネストした表の列ad_textdocs_ntab内に固有の行が確保されます。

置換可能な列の索引の作成例:

置換可能な列を宣言した型の属性に、索引を作成できます。また、適切なTREATファンクションの使用によって、サブタイプの属性を参照できます。次の例では、表books「置換可能な表および列のサンプル:」で作成)を使用します。この文は、books表の、すべてのemployee_t型のauthorのsalary属性に索引を作成します。

CREATE INDEX salary_i 
   ON books (TREAT(author AS employee_t).salary);

TREATファンクションの引数のターゲットとなる型は、参照する属性を追加した型である必要があります。例では、TREATのターゲットは、employee_tで、salary属性を追加した型です。

この条件を満たさない場合、TREATファンクションがファンクションの定義式として解析され、ファンクション索引が作成されます。たとえば、次の文は、パートタイム従業員のsalary属性にファンクション索引を作成し、型の階層に含まれる他のすべての型のインスタンスにNULLを割り当てます。

CREATE INDEX salary_func_i ON persons p
   (TREAT(VALUE(p) AS part_time_emp_t).salary);

SYS_TYPEIDファンクションの使用によって、置換可能な列を基礎とする型判別式の列に索引を作成できます。


注意:

Oracle Databaseは型判別式の列を使用し、IS OF type条件を含む問合せを評価します。型ID列のカーディナリティが通常低い場合、ビットマップ索引を作成することをお薦めします。 


次の文は、books表のauthor列の型IDにビットマップ索引を作成します。

CREATE BITMAP INDEX typeid_i ON books (SYS_TYPEID(author));

参照:

  • books表を基礎とする型の階層の作成については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

  • TREAT」、「SYS_TYPEID」および「IS OF type条件」を参照してください。

 


CREATE INDEXTYPE

用途

CREATE INDEXTYPE文を使用すると、(アプリケーション固有の)ドメイン索引を管理するルーチンを指定するオブジェクトである索引タイプを作成できます。索引タイプは、表、ビューおよび他のスキーマ・オブジェクトと同じネームスペースにあります。この文は、索引タイプ名を実装タイプに結合し、順番に索引タイプを実装するユーザー定義索引ファンクションおよびプロシージャを指定し、参照します。

参照:

索引タイプの実装の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 

前提条件

自分のスキーマに索引タイプを作成する場合は、CREATE INDEXTYPEシステム権限が必要です。他のユーザーのスキーマ内に索引タイプを作成する場合は、CREATE ANY INDEXTYPEシステム権限が必要です。どちらの場合も、実装タイプおよびサポートしている演算子に対するEXECUTEオブジェクト権限が必要です。

索引タイプは、1つ以上の演算子をサポートしているため、索引タイプを作成する前に、サポートする演算子を設計し、これらの演算子に機能的な実装を提供する必要があります。

参照:

「CREATE OPERATOR」 

構文

create_indextype::=

画像の説明

using_type_clause::=

画像の説明

array_DML_clause::=

画像の説明

storage_table_clause::=

画像の説明

セマンティクス

schema

索引タイプが存在するスキーマ名を指定します。schemaを指定しない場合、自分のスキーマ内に索引タイプが作成されます。

indextype

作成する索引タイプの名前を指定します。

FOR句

FOR句を使用すると、索引タイプでサポートされる演算子のリストを指定できます。

using_type_clause

USING句を使用すると、新しい索引タイプを実装するタイプを指定できます。

implementation_typeには、適切なOracle Data Cartridge Interface(ODCI)を実装するタイプ名を指定します。

WITH LOCAL RANGE PARTITION

この句を使用すると、その索引タイプを使用してレンジ・パーティション表にローカル・ドメイン索引を作成するように指定できます。この句を省略すると、後でこの索引タイプを使用してパーティション表にローカル・ドメイン索引を作成することはできません。

storage_table_clause

この句を使用すると、この索引タイプに基づいて作成された索引の記憶表およびパーティション・メンテナンス操作の管理方法を指定できます。

array_DML_clause

この句を使用すると、索引タイプでODCIIndexInsertメソッドの配列インタフェースをサポートできるようになります。

typeおよびvarray_type

索引付けする列のデータ型がユーザー定義のオブジェクト型である場合、この句を指定して、Oracleがtypeの列値を保持するために使用するVARRAYのvarray_typeを識別する必要があります。索引タイプで型のリストがサポートされている場合、対応するVARRAY型のリストを指定できます。typeまたはvarray_typeschemaを省略した場合、型が自分のスキーマ内に定義されているとみなされます。

索引付けする列のデータ型が組込みシステム型である場合、その索引タイプに指定されたVARRAY型は、システムで定義されたODCI型よりも優先されます。

参照:

ODCI配列インタフェースの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。 

索引タイプの作成例:

次の文は、position_indextypeという名前の索引タイプを作成し、その索引タイプでサポートされているposition_between演算子、および索引インタフェースを実装するposition_imタイプを指定します。この索引タイプを使用する拡張索引作成機能の使用例については、「拡張索引作成機能の使用方法」を参照してください。

CREATE INDEXTYPE position_indextype
   FOR position_between(NUMBER, NUMBER, NUMBER)
   USING position_im;


CREATE JAVA

用途

CREATE JAVAを使用すると、Javaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成できます。

参照:

  • Javaの概要およびJavaストアド・プロシージャの詳細は、『Oracle Database Java開発者ガイド』を参照してください。

  • JDBCについては、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

 

前提条件

自分のスキーマにJavaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にスキーマ・オブジェクトを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

構文

create_java::=

画像の説明

invoker_rights_clause::=

画像の説明

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のJavaクラス、ソースまたはリソースを含むスキーマ・オブジェクトを再作成できます。この句を指定した場合、付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のオブジェクトの定義を変更できます。

Javaスキーマ・オブジェクトを再定義し、RESOLVEまたはCOMPILEを指定した場合、そのオブジェクトが再コンパイルまたは変換されます。正常に変換またはコンパイルされたかどうかにかかわらず、Javaスキーマ・オブジェクトを参照するクラスは有効になります。

再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。

参照:

その他の情報は、「ALTER JAVA」を参照してください。 

RESOLVE | COMPILE

RESOLVEおよびCOMPILEは、同義のキーワードです。この文が正常に実行された場合に作成されるJavaスキーマ・オブジェクトを変換することを指定します。

RESOLVEおよびCOMPILEの制限事項:

Javaリソースには、これらのキーワードを指定できません。

NOFORCE

RESOLVEまたはCOMPILEを指定しても、正常に変換またはコンパイルできない場合は、NOFORCEを指定するとCREATEコマンドの結果をロールバックできます。このオプションを指定しないと、正常に変換またはコンパイルできない場合でも何も処理が行われず、作成されたスキーマ・オブジェクトはそのままです。

JAVA SOURCE句

JAVA SOURCEを指定すると、Javaソース・ファイルをロードできます。

JAVA CLASS句

JAVA CLASSを指定すると、Javaクラス・ファイルをロードできます。

JAVA RESOURCE句

JAVA RESOURCEを指定すると、Javaリソース・ファイルをロードできます。

NAMED句

NAMED句は、Javaソースまたはリソースの場合に指定します。primary_nameは、二重引用符で囲む必要があります。

primary_nameの小文字、または大文字と小文字の組合せを保持するには、二重引用符を使用します。

schemaを指定しない場合、自分のスキーマ内にオブジェクトが作成されます。

NAMED Javaクラスの制限事項:

NAMED句には、次の制限事項があります。

SCHEMA句

SCHEMA句は、Javaクラスにのみ適用されます。このオプションは、Javaファイルを含むオブジェクトが存在するスキーマを指定します。この句を指定しない場合、自分のスキーマ内にオブジェクトが作成されます。

invoker_rights_clause

invoker_rights_clauseを使用すると、クラスを所有するユーザーのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドが実行されるか、または、CURRENT_USERのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するかを指定できます。

また、この句は、問合せ、DML操作、およびその型のメンバー・ファンクションおよびプロシージャ内の動的SQL文の外部名の変換方法も定義します。

AUTHID CURRENT_USER

CURRENT_USERを使用すると、クラスのメソッドがCURRENT_USER権限で実行されることを指定できます。この句はデフォルトで、実行者権限クラスを作成します。

また、この句は、問合せ、DML操作、および動的SQL文の外部名をCURRENT_USERのスキーマで変換することも指定します。他のすべての文における外部名は、メソッドを含むスキーマで変換します。

AUTHID DEFINER

DEFINERを使用すると、クラスが存在するスキーマの所有者権限でクラスのメソッドを実行すること、およびクラスが存在するスキーマで外部名を変換することを指定できます。この句によって定義者権限クラスが作成されます。

参照:

  • 『Oracle Database Java開発者ガイド』

  • CURRENT_USERの判断方法については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

 

RESOLVER句

RESOLVER句を使用すると、Javaスキーマ・オブジェクトに対する完全修飾Java名のマッピングを指定できます。ここでは次のとおりです。

このマッピングは、後の変換で(暗黙的に、またはALTER JAVA ... RESOLVE文で明示的に)使用されるコマンドで作成されるスキーマ・オブジェクトの定義とともに格納されます。

USING句

USINGは、Javaクラスまたはリソースに対する文字データ(CLOBまたはBFILE)またはバイナリ・データ(BLOBまたはBFILE)の順序を決定します。文字の順序を使用して、1つのファイルがJavaクラスまたはリソースに、または1つのソース・ファイルおよび1つ以上の導出クラスがJavaソースに定義されます。

BFILE句

順序を含む、オペレーティング・システム(directory_object_name)およびサーバー・ファイル(server_file_name)であらかじめ作成されているファイルのディレクトリおよびファイル名を指定します。BFILEは、通常、CREATE JAVA SOURCEによって文字順序として、CREATE JAVA CLASSまたはCREATE JAVA RESOURCEによってバイナリ順序として解析されます。

CLOB | BLOB | BFILE subquery

指定した型(CLOBBLOBまたはBFILE)の行と列を選択する副問合せを指定します。列の値は文字列を構成します


注意:

以前のリリースでは、USING句は暗黙的にキーワードSELECTを提供しました。今回のリリースでは提供されません。ただし、キーワードSELECTなしの副問合せは、(下位互換性のために)サポートされています。 


key_for_BLOB

key_for_BLOB句は、次の暗黙的な問合せを提供します。

SELECT LOB FROM CREATE$JAVA$LOB$TABLE 
   WHERE NAME = 'key_for_BLOB';
key_for_BLOB句の制限事項:

このパラメータを使用する場合、表CREATE$JAVA$LOB$TABLEが現行のスキーマ内にあり、BLOB型のLOB列およびVARCHAR2型のNAME列が存在する必要があります。

AS source_char

Javaソースの文字列を指定します。

Javaクラス・オブジェクトの作成例:

次の文は、Javaバイナリ・ファイルにある名前を使用して、Javaクラスを含むスキーマ・オブジェクトを作成します。

CREATE JAVA CLASS USING BFILE (java_dir, 'Agent.class')
/

この例では、JavaクラスAgent.classを含むオペレーティング・システム・ディレクトリを指すディレクトリ・オブジェクトjava_dirがすでに存在していると想定しています。この例では、クラス名がJavaクラス・スキーマ・オブジェクトの名前を決定します。

Javaソース・オブジェクトの作成例:

次の文は、Javaソース・スキーマ・オブジェクトを作成します。

CREATE JAVA SOURCE NAMED "Welcome" AS
   public class Welcome {
      public static String welcome() {
         return "Welcome World";   } }
/
Javaリソース・オブジェクトの作成例:

次の文は、bfileからapptextという名前のJavaリソース・スキーマ・オブジェクトを作成します。

CREATE JAVA RESOURCE NAMED "appText" 
   USING BFILE (java_dir, 'textBundle.dat')
/


戻る 次へ
Oracle
Copyright © 1996, 2008, Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引