Oracle Database SQL言語リファレンス 11g リリース1(11.1) E05750-03 |
|
この章では、次のSQL文について説明します。
CREATE
CLUSTER
文を使用すると、クラスタを作成できます。クラスタとは、1つ以上の表のデータが含まれているスキーマ・オブジェクトのことです。
既存のクラスタの情報を取得するには、データ・ディクショナリ・ビューUSER_CLUSTERS
、ALL_CLUSTERS
およびDBA_CLUSTERS
を問い合せます。
自分のスキーマにクラスタを作成する場合は、CREATE
CLUSTER
システム権限が必要です。他のユーザーのスキーマ内にクラスタを作成する場合は、CREATE
ANY
CLUSTER
システム権限が必要です。また、クラスタを設定するスキーマの所有者は、クラスタが定義されている表領域に対する領域の割当て制限、またはUNLIMITED
TABLESPACE
システム権限のいずれかが必要です。
クラスタを最初に作成する場合は、Oracle Databaseはクラスタに対する索引を自動的に作成しません。このため、CREATE
INDEX
文でクラスタ索引を作成するまでは、索引クラスタのクラスタ表に対して、データ操作言語(DML)文を発行できません。
(physical_attributes_clause::=、size_clause::=を参照)
(storage_clause::=を参照)
作成するクラスタが定義されるスキーマを指定します。schema
を指定しない場合、現行のスキーマにクラスタが作成されます。
作成するクラスタの名前を指定します。
クラスタを作成した後、そのクラスタに表を追加します。クラスタには、最大32個の表を指定できます。クラスタを作成し、そのクラスタに表を追加しても、クラスタを意識する必要はありません。クラスタ化されていない表と同様に、SQL文を使用してクラスタ化表にアクセスできます。
クラスタ・キーに1つ以上の列名を指定します。最大16個のクラスタ・キー列を指定できます。これらの列は、データ型およびサイズについて、クラスタ化表の列と対応している必要があります。名前は対応している必要はありません。
クラスタ・キー列の定義の一部として整合性制約は指定できません。そのかわり、クラスタに属している表に整合性制約を対応付けることができます。
各クラスタ・キー列のデータ型を指定します。
クラスタのデータ型には、次の制限事項があります。
LONG
、LONG
RAW
、REF
、ネストした表、VARRAY、BLOB
、CLOB
、BFILE
、Oracleが提供する型Any*
またはユーザー定義オブジェクト型であるクラスタ・キー列は指定できません。
ROWID
型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。SORT
キーワードは、ハッシュ・クラスタを作成する場合にのみ有効です。この句を指定すると、Oracle Databaseに対して、ハッシュ・ファンクションを適用する前にこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。ハッシュ・クラスタの作成については、「HASHKEYS句」を参照してください。
physical_attributes_clause
を使用すると、クラスタの記憶特性を指定できます。クラスタ内の各表もこれらの記憶特性を使用します。これらのパラメータの値を指定しない場合、次のデフォルトが使用されます。
同一クラスタ・キー値または同一ハッシュ値を持つすべての行を格納するために確保する領域を、バイト単位で指定します。次に、この領域によって、データ・ブロックごとに格納されるクラスタやハッシュ値の最大値が決まります。SIZE
の値がデータ・ブロック・サイズの約数でない場合、Oracle Databaseは、次に大きい約数を使用します。SIZE
がデータ・ブロック・サイズより大きい場合、データベースは、クラスタまたはハッシュ値ごとに、1つ以上のデータ・ブロックを確保し、オペレーティング・システムのブロック・サイズを採用します。
データベースは、クラスタ・キー値を持つ行に対して確保する必要がある領域を決定する際に、クラスタ・キーの長さを考慮します。クラスタ・キーが大きければ、それに必要なサイズも大きくなります。実際のサイズを参照するには、USER_CLUSTERS
データ・ディクショナリ・ビューのKEY_SIZE
列を問い合せます(ハッシュ値は実際にはクラスタ内に格納されていないため、この値はハッシュ・クラスタには適用されません)。
このパラメータを指定しない場合、各クラスタ・キー値またはハッシュ値ごとにデータ・ブロックが1つ確保されます。
クラスタを作成する表領域を指定します。
INDEX
を指定すると、索引クラスタを作成できます。索引クラスタには、同一のクラスタ・キー値が指定されている行がまとめて格納されます。それぞれのクラスタ・キー値は、そのキーを持つ表および行の数に関係なく、各データ・ブロックに1回のみ格納されます。INDEX
もHASHKEYS
も指定しない場合は、デフォルトで索引クラスタが作成されます。
索引クラスタの作成後、クラスタ内の表に対してデータ操作言語(DML)文を発行する前に、そのクラスタ・キーに索引を作成する必要があります。この索引をクラスタ索引と呼びます。
ハッシュ・クラスタに対してクラスタ索引は作成できないため、ハッシュ・クラスタ・キーで索引を作成する必要はありません。
HASHKEYS
を指定すると、ハッシュ・クラスタを作成し、ハッシュ・クラスタのハッシュ値の数を指定できます。ハッシュ・クラスタには、同一のハッシュ・キー値を持つ行がまとめて格納されます。それぞれの行のハッシュ値は、そのクラスタのハッシュ・ファンクションが戻す値です。
Oracle Databaseは、ハッシュ値の実際の数を決めるため、HASHKEYS
値を一番近い次の素数に切り上げます。このパラメータの最小値は2です。INDEX
句とHASHKEYS
パラメータの両方を指定しないとき、デフォルトで索引クラスタが作成されます。
ハッシュ・クラスタの作成時に、データベースは、SIZE
パラメータおよびHASHKEYS
パラメータの値に基づいて、クラスタに領域を割り当てます。
SINGLE
TABLE
を指定すると、表を1つのみ持つタイプのハッシュ・クラスタを作成できます。この句によって、表がクラスタの一部でない場合より行へのアクセスが高速になります。
同時にクラスタに存在できる表は1つのみです。ただし、表を削除して、同一のクラスタに別の表を作成することはできます。
ハッシュ・クラスタに対するハッシュ・ファンクションとして使用する式を指定します。式には、次の制限事項があります。
number_column
* LENGTH
(varchar2_column
)です。
LEVEL
またはROWNUM
を参照できません。
USERENV
、UID
およびUSER
)または日時ファンクション(CURRENT_DATE
、CURRENT_TIMESTAMP
、DBTIMEZONE
、EXTRACT
(日時)、FROM_TZ
、LOCALTIMESTAMP
、NUMTODSINTERVAL
、NUMTOYMINTERVAL
、SESSIONTIMEZONE
、SYSDATE
、SYSTIMESTAMP
、TO_DSINTERVAL
、TO_TIMESTAMP
、TO_DATE
、TO_TIMESTAMP_TZ
、TO_YMINTERVAL
およびTZ_OFFSET
)を参照できません。
HASH
IS
句を指定しない場合、Oracle Databaseはハッシュ・クラスタに対して内部ハッシュ・ファンクションを使用します。
既存のクラスタの詳細は、データ・ディクショナリ表USER_CLUSTER_HASH_EXPRESSIONS
、ALL_CLUSTER_HASH_EXPRESSIONS
およびDBA_CLUSTER_HASH_EXPRESSIONS
に問い合せます。
ハッシュ列のクラスタ・キーは、任意のデータ型で構成される1つ以上の列を持つことができます。複合クラスタ・キー、または整数以外の列で構成されるクラスタ・キーを持つハッシュ・クラスタに対しては、内部ハッシュ・ファンクションを使用する必要があります。
parallel_clause
を使用すると、クラスタの作成をパラレル化できます。
この句の詳細は、「CREATE
TABLE
」の「parallel_clause」を参照してください。
この句のクラスタに対する動作は、表に対する動作と同じです。詳細は、「CREATE TABLE」の「NOROWDEPENDENCIES | ROWDEPENDENCIES」を参照してください。
CACHE
を指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内の最高使用頻度(LRU)リストの最高使用頻度側に入れることができます。この句は、小規模な参照表で有効です。
NOCACHE
を指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内のLRUリストの最低使用頻度側に入れることができます。これはデフォルトの動作です。
NOCACHE
は、storage_clause
にKEEP
を指定したクラスタには影響しません。
次の文は、クラスタ・キー列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_code
とcountry_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
文を使用すると、次の操作を実行できます。
専用パッケージのDBMS_SESSION
.SET_CONTEXT
プロシージャを使用して、コンテキスト属性を設定または再設定できます。
コンテキスト・ネームスペースを作成する場合、CREATE
ANY
CONTEXT
システム権限が必要です。
OR
REPLACE
を指定すると、異なるパッケージを使用して既存のコンテキスト・ネームスペースを再定義できます。
作成または変更するコンテキスト・ネームスペース名を指定します。コンテキスト・ネームスペースは、常にスキーマSYS
に格納されます。
package
を所有するスキーマを指定します。schema
を指定しない場合、Oracle Databaseは現行のスキーマを使用します。
ユーザー・セッションのネームスペースに基づくコンテキスト属性を設定または再設定するPL/SQLパッケージを指定します。
柔軟に設計できるように、Oracle Databaseは、コンテキスト作成時のスキーマの存在またはパッケージの妥当性を検証しません。
INITIALIZED
句を使用すると、コンテキスト・ネームスペースを初期化するOracle Database以外のエンティティを指定できます。
EXTERNALLY
を使用すると、セッション確立時にOCIインタフェースを使用してネームスペースを初期化できます。
GLOBALLY
を指定すると、グローバル・ユーザーがデータベースへ接続するときに、LDAPディレクトリによってネームスペースを初期化できます。
セッション確立後、設定したPL/SQLパッケージのみがネームスペースのすべての属性に書込みを行うコマンドを発行することができます。
この句を使用すると、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');
CREATE
CONTROLFILE
文は、ごく限られた状況でのみ使用します。データベースによって使用されているすべての制御ファイルが失われ、かつバックアップ制御ファイルが存在しない場合に、この文を使用して制御ファイルを再作成します。 この文を使用して、REDOログ・ファイル・グループ、REDOログ・ファイル・メンバー、アーカイブREDOログ・ファイル、データ・ファイル、またはデータベースを同時にマウントおよびオープンするインスタンスの最大数を変更することもできます。
データベースの名前を変更するには、CREATE
CONTROLFILE
文ではなく、DBNEWID
ユーティリティを使用することをお薦めします。データベース名の変更後にOPEN
RESETLOGS
操作が必要ないため、DBNEWID
の方が適しています。
参照:
|
制御ファイルを作成する場合は、SYSDBA
システム権限が必要です。
データベースをマウントしているインスタンスがあってはいけません。制御ファイルが正常に作成された後、CLUSTER_DATABASE
パラメータで指定したモードでデータベースがマウントされます。続いて、DBAは、データベースをオープンする前にメディア・リカバリを行う必要があります。データベースをOracle Real Application Clusters(RAC)と併用している場合、次のインスタンスが起動する前に、データベースを停止してSHARED
モード(CLUSTER_DATABASE
初期化パラメータの値にTRUE
を設定)で再マウントする必要があります。
(storage_clause::=を参照)
CREATE
CONTROLFILE
文を発行すると、この文に指定した情報に基づいて、新しい制御ファイルが作成されます。制御ファイルは、CONTROL_FILES
初期化パラメータで指定した場所に格納されます。このパラメータに値を指定していない場合、Oracle Managed Filesの制御ファイルは、次のいずれか(優先度の高い順に示します)のとおり、制御ファイルのデフォルトの格納先に作成されます。
DB_CREATE_ONLINE_LOG_DEST_
n
初期化パラメータに指定されている場所に作成されます。最初のディレクトリのファイルは、プライマリ制御ファイルです。DB_CREATE_ONLINE_LOG_DEST_
n
を指定している場合、DB_CREATE_FILE_DEST
またはDB_RECOVERY_FILE_DEST
(フラッシュ・リカバリ領域)には制御ファイルが作成されません。
DB_CREATE_ONLINE_LOG_DEST_
n
に値を指定しておらず、DB_CREATE_FILE_DEST
およびDB_RECOVERY_FILE_DEST
の両方に値を指定している場合、それぞれの場所に1つの制御ファイルが作成されます。DB_CREATE_FILE_DEST
に指定している場所は、プライマリ制御ファイルです。
DB_CREATE_FILE_DEST
にのみ値を指定している場合、その場所に1つの制御ファイルが作成されます。
DB_RECOVERY_FILE_DEST
にのみ値を指定している場合、その場所に1つの制御ファイルが作成されます。
これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所に制御ファイルが作成されます。この制御ファイルはOracle Managed Filesではありません。
句を指定しない場合、Oracle Databaseは、以前の制御ファイルに対する値ではなく、デフォルト値を使用します。制御ファイルが正常に作成された後、Oracle Databaseは、初期化パラメータCLUSTER_DATABASE
で指定したモードでデータベースをマウントします。パラメータが設定されていないときのデフォルト値はFALSE
で、その場合はEXCLUSIVE
モードでデータベースがマウントされます。その後、インスタンスを停止し、データベースのすべてのファイルの全体バックアップを取ることをお薦めします。
REUSE
を指定すると、初期化パラメータCONTROL_FILES
によって特定される既存の制御ファイルを再利用可能にできます。このとき、この初期化パラメータに現在格納されている情報は上書きされます。この句を指定しないと、既存の制御ファイルがある場合に、エラーが戻ります。
データベース名を指定します。このパラメータの値は、事前にCREATE
DATABASE
文またはCREATE
CONTROLFILE
文で設定した既存のデータベース名である必要があります。
SET
DATABASE
を使用すると、データベース名を変更できます。データベース名には最大8バイトの名前を指定できます。
この句を指定する場合は、RESETLOGS
も指定する必要があります。データベースの名前を変更し、既存のログ・ファイルを保持する場合は、このCREATE
CONTROLFILE
文を発行した後、ALTER
DATABASE
RECOVER
USING
BACKUP
CONTROLFILE
文を使用して、全データベースのリカバリを完了する必要があります。
logfile_clause
を使用すると、データベースのREDOログ・ファイルを指定できます。すべてのREDOログ・ファイル・グループのすべてのメンバーを指定する必要があります。
オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、または自動ストレージ管理ディスク・グループのREDOログ・ファイルを指定するには、file_specification
のredo_log_file_spec書式(「file_specification」を参照)を使用します。ASM_filename
の書式を使用する場合、redo_log_file_spec
のautoextend_clause
は指定できません。
この句にRESETLOGS
を指定する場合、ASM_filename
のいずれかのファイル作成形式を使用する必要があります。NORESETLOGS
を指定する場合、ASM_filename
のいずれかの参照書式を指定する必要があります。
ログ・ファイル・グループ番号を指定します。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
パラメータで指定した格納先に作成されます。
RESETLOGS
を指定すると、Oracle DatabaseにLOGFILE
句にリストされたファイルの内容を無視させることができます。LOGFILE句に指定したファイルは、存在していなくてもかまいません。SET
DATABASE
句を指定した場合、この句を指定する必要があります。
LOGFILE
句の各redo_log_file_spec
で、SIZE
パラメータを指定する必要があります。データベースでは、スレッド1にすべてのオンラインREDOログ・ファイル・グループを割り当てることによって、このスレッドを任意のインスタンスで共通に使用できるようにします。この句を使用した後は、RESETLOGS
句を指定したALTER
DATABASE
文を使用してデータベースをオープンする必要があります。
NORESETLOGS
を指定すると、Oracle Databaseに、LOGFILE
句に指定したすべてのファイルを、前回データベースをオープンしたときの状態で使用させることができます。LOGFILE句に指定したファイルは、存在する必要があります。また、バックアップからのリストアではなく、現行のオンラインREDOログ・ファイルである必要があります。前回割り当てたスレッドに、REDOログ・ファイル・グループが再度割り当てられ、そのスレッドが前回と同じく再度使用可能になります。
SET
DATABASE
句を指定してデータベースの名前を変更した場合は、RESETLOGS
を指定することはできません。詳細は、「SET DATABASE句」を参照してください。
データベースのデータ・ファイルを指定します。すべてのデータ・ファイルを指定する必要があります。これらのファイルは既存のファイルである必要がありますが、メディア・リカバリを必要とするリストア・バックアップでもかまいません。
DATAFILE
句には、読取り専用の表領域のデータ・ファイルを含めないでください。これらのタイプのファイルは、後でデータベースに追加できます。また、この句には、一時データ・ファイル(一時ファイル)も含めないでください。
オペレーティング・システムのファイル・システム内の標準データ・ファイルと一時ファイル、または自動ストレージ管理ディスク・グループのファイルを指定するには、file_specification
のdatafile_tempfile_spec書式(「file_specification」を参照)を使用します。ASM_filename
の書式を使用する場合、ASM_filename
のいずれかの参照書式を使用する必要があります。構文の様々な書式は、「ASM_filename」を参照してください。
このDATAFILE
句では、file_specification
のautoextend_clause
は指定できません。
データベースに対して作成可能なオンラインREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値や最大値は、使用するオペレーティング・システムによって異なります。指定する値は、すべてのREDOログ・ファイル・グループのGROUP
の最大値以上である必要があります。
REDOログ・ファイル・グループのメンバー(同一コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。
このパラメータは、Oracle DatabaseをARCHIVELOG
モードで使用している場合にのみ有効です。データベースの自動メディア・リカバリに必要なアーカイブREDOログ・ファイル・グループの現在見積もられている最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。
最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES
値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。必要に応じてデータベースによって制御ファイルの該当セクションに引き続き領域が追加されるため、元の構成で十分でなくなった場合でも制御ファイルを再作成する必要はありません。その結果、このパラメータの実際の値は、指定した値を超える場合があります。
CREATE
DATABASE
またはCREATE
CONTROLFILE
実行時の、制御ファイルのデータ・ファイル・セクションの初期サイズを指定します。値がMAXDATAFILES
より大きく、DB_FILES
以下のファイルを追加した場合、データ・ファイル・セクションにさらに多くのファイルを格納できるように、Oracleの制御ファイルが自動的に拡張されます。
インスタンスでアクセスできるデータ・ファイルの数は、初期化パラメータDB_FILES
の制限を受けます。
データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCES
の値より優先されます。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。
ARCHIVELOG
を指定すると、REDOログ・ファイルを再利用する前に、ファイルの内容をアーカイブできます。この句を指定した場合、インスタンスまたはシステム障害リカバリのみでなく、メディア・リカバリも実行できるようになります。
ARCHIVELOG
句およびNOARCHIVELOG
句を指定しない場合、デフォルトでNOARCHIVELOG
モードが選択されます。制御ファイルの作成後に、ALTER
DATABASE
文を使用して、ARCHIVELOG
モードとNOARCHIVELOG
モードを切り替えることができます。
この句を使用すると、制御ファイルの作成後にデータベースをFORCE
LOGGING
モードにできます。データベースがこのモードで実行されている場合、一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGING
またはFORCE
LOGGING
設定、および各データベース・オブジェクトで指定するNOLOGGING
設定より優先され、これらの設定には影響されません。この句を指定しない場合、制御ファイルの作成後にデータベースはFORCE
LOGGING
モードになりません。
キャラクタ・セットを指定した場合、制御ファイルのキャラクタ・セット情報が再構成されます。データベースのメディア・リカバリが後で必要となる場合、データベースがオープンする前にこの情報が使用可能になり、リカバリ時に表領域名が正しく解析されます。この句は、デフォルト以外のキャラクタ・セットを使用している場合にのみ必要です。デフォルトはオペレーティング・システムによって異なります。現行のデータベース・キャラクタ・セットは、起動時に$ORACLE_HOME/log
のアラート・ログに出力されます。
表領域のリカバリにRecovery Managerを使用して制御ファイルを再作成する場合、およびデータ・ディクショナリに格納されているキャラクタ・セットとは異なるキャラクタ・セットを指定した場合、表領域のリカバリは失敗します。ただし、データベースのオープン時、制御ファイルのキャラクタ・セットは、データ・ディクショナリの正しいキャラクタ・セットに更新されます。
この句ではデータベース・キャラクタ・セットを変更できません。
この文は、制御ファイルを再作成します。この文のデータベース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
文を使用すると、汎用的なデータベースを作成できます。
この文を実行すると、データベースの初期使用に備えて、指定した既存のデータ・ファイル上のデータがすべて消去されます。したがって、既存のデータベースに対してこの文を実行した場合、データ・ファイル上のすべてのデータが失われます。
この文を指定した場合、データベースの作成後、データベースは排他モードまたはパラレル・モード(初期化パラメータCLUSTER_DATABASE
の値に依存する)でマウントおよびオープンされ、通常の用途に使用可能になります。その後、データベースの表領域を作成できます。
参照:
|
データベースを作成する場合は、SYSDBA
システム権限が必要です。作成するデータベースの名前を持つ初期化パラメータ・ファイルが使用可能である必要があります。また、STARTUP
NOMOUNT
モードになっている必要があります。
(database_logging_clauses::=、tablespace_clauses::=、set_time_zone_clause::=を参照)
(file_specification::=、default_tablespace::=、default_temp_tablespace::=、undo_tablespace::=を参照)
(size_clause::=を参照)
作成するデータベースの名前を指定します。名前は、DB_NAME
初期化パラメータの値と一致する必要があります。名前の長さは最大8バイトです。データベース名には、ASCII文字のみを指定できます。Oracle Databaseは、この名前を制御ファイルに書き込みます。後で、データベース名を明示的に指定するALTER
DATABASE
文を発行すると、制御ファイル内の名前に基づいて、そのデータベース名が検証されます。
データベース名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。
CREATE
DATABASE
文でデータベース名を指定しない場合、DB_NAME
初期化パラメータで指定した名前が採用されます。DB_NAME
初期化パラメータは、データベースの初期化パラメータ・ファイルに設定する必要があります。そのパラメータの値とは異なる名前を指定した場合、データベースはエラーを戻します。データベース名のその他の規則については、「スキーマ・オブジェクトのネーミングのガイドライン」を参照してください。
これらの句を使用すると、SYS
およびSYSTEM
ユーザーのパスワードを設定できます。これらの句は今回のリリースでは必須ではありません。ただし、いずれか一方の句を指定した場合は、もう一方の句も指定する必要があります。
これらの句を指定しない場合、Oracle Databaseは、デフォルト・パスワードとして、ユーザーSYS
にはchange_on_install
を、ユーザーSYSTEM
にはmanager
を作成します。これらのパスワードは、後でALTER
USER
文を使用して変更できます。また、データベース作成後に、ALTER
USER
を使用してパスワード管理属性を追加することもできます。
CONTROLFILE
REUSE
を指定すると、初期化パラメータCONTROL_FILES
で特定される既存の制御ファイルを再利用可能にできます。このとき、この初期化パラメータに現在格納されている情報は上書きされます。通常、この句は、初めてデータベースを作成する際ではなく、データベースを再作成する際に使用します。データベースを初めて作成する場合、制御ファイルはデフォルトの格納先に作成されます。この場所は、いくつかの初期化パラメータの値によって決まります (「CREATE
CONTROLFILE
」の「セマンティクス」を参照)。
制御ファイルを既存のファイルより大きくするためのパラメータ値もあわせて指定する場合、この句は使用できません。MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
、MAXDATAFILES
およびMAXINSTANCES
がこのようなパラメータです。
この句を指定しないと、CONTROL_FILES
で指定した制御ファイルのいずれかがすでに存在する場合、エラーが戻ります。
CREATE
DATABASE
またはCREATE
CONTROLFILE
実行時の、制御ファイルのデータ・ファイル・セクションの初期サイズを指定します。値がMAXDATAFILES
より大きく、DB_FILES
以下のファイルを追加した場合、データ・ファイル・セクションにさらに多くのファイルを格納できるように、Oracle Databaseの制御ファイルが自動的に拡張されます。
インスタンスでアクセスできるデータ・ファイルの数は、初期化パラメータDB_FILES
の制限を受けます。
データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCES
の値より優先されます。最小値は1です。最大値は1055です。デフォルトは、使用するオペレーティング・システムによって異なります。
データベースにデータを格納するときのキャラクタ・セットを指定します。サポートされているキャラクタ・セットおよびこのパラメータのデフォルト値は、使用するオペレーティング・システムによって異なります。
AL16UTF16
キャラクタ・セットは、データベース・キャラクタ・セットとして指定できません。
データ型がNCHAR
、NCLOB
またはNVARCHAR2
として定義された列にデータを格納する際に使用する各国語キャラクタ・セットを指定します。有効な値は、AL16UTF16
およびUTF8
です。デフォルトはAL16UTF16
です。
database_logging_clauses
を使用すると、データベースのREDOログ・ファイルの処理方法を指定できます。
REDOログ・ファイルとして使用する1つ以上のファイルを指定します。オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、または自動ストレージ管理ディスク・グループのREDOログ・ファイルを作成するには、file_specification
のredo_log_file_spec
書式を使用します。ASM_filename
の書式を使用する場合、redo_log_file_spec
のautoextend_clause
は指定できません。
redo_log_file_spec
句には、1つ以上のREDOログ・ファイルのメンバー(コピー)を含むREDOログ・ファイル・グループを指定します。CREATE
DATABASE
文に指定したすべてのREDOログ・ファイルは、REDOログのスレッド番号1に追加されます。
LOGFILE
句を指定しない場合、Oracle Managed Filesのログ・ファイル・メンバーは、次のいずれか(優先度の高い順に示します)のとおり、デフォルトの格納先に作成されます。
DB_CREATE_ONLINE_LOG_DEST_
n
を設定している場合、指定した各ディレクトリに、MAXLOGMEMBERS
初期化パラメータの値までログ・ファイル・メンバーが作成されます。
DB_CREATE_ONLINE_LOG_DEST_
n
パラメータを設定しておらず、DB_CREATE_FILE_DEST
およびDB_RECOVERY_FILE_DEST
初期化パラメータの両方を設定している場合、それぞれの場所に1つのOracle Managed Filesのログ・ファイル・メンバーが作成されます。DB_CREATE_FILE_DEST
に指定している場所のログ・ファイルが最初のメンバーです。
DB_CREATE_FILE_DEST
初期化パラメータのみを指定している場合、その場所にログ・ファイル・メンバーが作成されます。
DB_RECOVERY_FILE_DEST
初期化パラメータのみを指定している場合、その場所にログ・ファイル・メンバーが作成されます。
いずれの場合でも、パラメータ設定では、オペレーティング・システムのファイル名または作成書式自動ストレージ管理のファイル名を正確に指定する必要があります。
これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所にログ・ファイルが作成されます。このログ・ファイルはOracle Managed Filesではありません。
REDOログ・ファイル・グループの識別番号を指定します。integer
の値は1〜MAXLOGFILES
パラメータの値の範囲です。データベースには、2つ以上のREDOログ・ファイル・グループが必要です。同一のGROUP
値を持つREDOログ・ファイル・グループは複数指定できません。このパラメータを指定しない場合、値が自動的に生成されます。REDOログ・ファイル・グループのGROUP
値は、動的パフォーマンス・ビューV$LOG
で確認できます。
データベースに対して作成可能なREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値、最小値および最大値は、使用するオペレーティング・システムによって異なります。
REDOログ・ファイル・グループのメンバー(コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。
このパラメータが有用なのは、Oracle Real Application Clusters(RAC)でOracle DatabaseをARCHIVELOG
モードで使用している場合のみです。Oracle RACの自動メディア・リカバリに使用するアーカイブREDOログ・ファイルの最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES
値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。
ARCHIVELOG
を指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容をアーカイブできます。この句を指定すると、メディア・リカバリを実行できるようになります。
NOARCHIVELOG
を指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容がアーカイブされません。この句を指定した場合、メディア・リカバリは実行できません。
デフォルトはNOARCHIVELOG
モードです。データベースの作成後に、ALTER
DATABASE
文を使用して、ARCHIVELOG
モードとNOARCHIVELOG
モードを切り替えることができます。
この句を使用すると、データベースをFORCE
LOGGING
モードにできます。一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGING
またはFORCE
LOGGING
設定、および各データベース・オブジェクトで指定するNOLOGGING
設定より優先され、これらの設定には影響されません。
FORCE
LOGGING
モードは、データベースのインスタンスで永続的です。データベースを停止し、再起動しても、データベースはFORCE
LOGGING
モードのままです。ただし、制御ファイルを再作成した場合は、CREATE
CONTROLFILE
文でFORCE
LOGGING
を指定しないかぎり、データベースはFORCE
LOGGING
モードではなくなります。
tablespace_clausesを使用すると、SYSTEM
およびSYSAUX
表領域を構成したり、デフォルトの一時表領域とUNDO表領域を指定することができます。
この句を使用すると、ローカル管理SYSTEM
表領域を作成できます。この句を指定しない場合、SYSTEM
表領域はディクショナリ管理となります。
この句を指定した場合、ローカル管理のSYSTEM
表領域には一時セグメントを格納できないため、データベースにデフォルトの一時表領域が必要になります。
EXTENT
MANAGEMENT
LOCAL
を指定して、DATAFILE
句を指定しない場合は、default_temp_tablespace
句を省略できます。Oracle Databaseは、データ・ファイル・サイズが10MBで、自動拡張を使用禁止にした状態で、TEMP
という一時表領域を作成します。
EXTENT
MANAGEMENT
LOCAL
およびDATAFILE
の両方の句を指定する場合は、default_temp_tablespace
を指定し、その表領域のデータ・ファイルを明示的に指定する必要があります。
インスタンスを自動UNDOモードでオープンしている場合も、データベースUNDO表領域には同様の要件があります。
EXTENT
MANAGEMENT
LOCAL
を指定して、DATAFILE
句を指定しない場合は、undo_tablespace
句を省略できます。Oracle Databaseは、SYS_UNDOTBS
というUNDO表領域を作成します。
EXTENT
MANAGEMENT
LOCAL
およびDATAFILE
の両方の句を指定する場合は、undo_tablespace
を指定し、その表領域のデータ・ファイルを明示的に指定する必要があります。この句を使用すると、以降に作成される表領域、およびSYSTEM
とSYSAUX
表領域のデフォルトの型を指定できます。以降に作成される表領域のデフォルトの型をbigfileまたはsmallfileに設定するには、BIGFILE
またはSMALLFILE
を指定します。
この句を指定しない場合、デフォルトでsmallfile表領域が作成されます。
Oracle Databaseは、すべてのデータベースに、SYSTEM
とSYSAUX
の両方の表領域を作成します。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
文を使用して表領域の作成時にデータ・ファイルを指定する構文と同じです。
参照:
|
この句を指定すると、データベースのデフォルトの永続表領域を作成できます。Oracle Databaseは、smallfile表領域を作成し、その後、この表領域に対して、別の永続表領域を指定していない、SYSTEM
以外のユーザーを割り当てます。この句を指定しない場合、SYSTEM
表領域が、SYSTEM
以外のユーザーのデフォルトの永続表領域になります。
DATAFILE
句およびextent_management_clause
は、CREATE
TABLESPACE
文で同じセマンティクスを持ちます。これらの句の詳細は、「DATAFILE | TEMPFILE句」および「extent_management_clause」を参照してください。
この句を指定すると、データベースのデフォルトの一時表領域を作成できます。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
文を使用して一時表領域の作成時に一時ファイルを指定する構文と同じです。
デフォルトの一時表領域には、次の制限事項があります。
extent_management_clause
句のセマンティクスは、CREATE
DATABASE
およびCREATE
TABLESPACE
文で同じです。この句の詳細は、「CREATE
TABLESPACE
...」の「extent_management_clause」を参照してください。
インスタンスを自動UNDOモードでオープンした場合(UNDO_MANAGEMENT
初期化パラメータをデフォルトのAUTO
に設定した場合)、undo_tablespace
を指定して、UNDOデータで使用する表領域を作成できます。自動UNDOモードを使用することをお薦めします。ただし、UNDO領域管理をロールバック・セグメントによって処理する場合、この句は指定しないでください。UNDO_TABLESPACE
初期化パラメータの値を設定した場合も、この句を省略できます。パラメータが設定されており、この句を指定した場合、tablespace
はそのパラメータ値と同じである必要があります。
BIGFILE
を指定します。bigfile表領域には、1つのデータ・ファイルのみが含まれます。このファイルの最大サイズは8EB(8,000,000TB)です。
SMALLFILE
を指定します。smallfile表領域は、Oracle Databaseの従来の表領域です。この表領域には、最大で約400万(222)ブロックを含むことができます。
DB_CREATE_FILE_DEST
初期化パラメータを設定してOracle Managed Filesを使用可能にした場合、この句のDATAFILE
句の部分はオプションです。このパラメータの値を指定していない場合は、DATAFILE
句を指定する必要があります。BIGFILE
を指定した場合、この句で指定できるのは1つのデータ・ファイルのみです。
UNDO表領域のデータ・ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、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
操作全体が失敗します。
参照:
|
データ・ファイルとして使用する1つ以上のファイルを指定します。ファイルは、すべてSYSTEM
表領域の一部となります。オペレーティング・システムのファイル・システム内の標準データ・ファイルと一時ファイル、または自動ストレージ管理ディスク・グループのファイルを作成するには、file_specification
のdatafile_tempfile_spec書式を使用します。
SYSTEM
表領域のデータ・ファイルを指定する構文は、ファイルを自動ストレージ管理を使用して格納するか、ファイル・システムまたはRAWデバイスに格納するかにかかわらず、CREATE
TABLESPACE
文を使用して表領域の作成時にデータ・ファイルを指定する構文と同じです。
自動UNDOモードでデータベースを実行し、SYSTEM
表領域のデータ・ファイル名を指定した場合、すべての表領域に対してデータ・ファイルを生成するものとみなされます。Oracle Managed Filesを使用する場合(DB_CREATE_FILE_DEST
初期化パラメータに値を設定している場合)、データ・ファイルは自動的に生成されます。ただし、Oracle Managed Filesを使用しないでこの句を指定する場合は、undo_tablespace
句およびdefault_temp_tablespace
句も指定する必要があります。
この句を指定しない場合、次のようになります。
DB_CREATE_FILE_DEST
初期化パラメータを設定している場合、このパラメータで指定したデフォルトのファイル格納先に、サイズが100MBでシステムが生成する名前を持つ、Oracle Managed Filesのデータ・ファイルが作成されます。
DB_CREATE_FILE_DEST
初期化パラメータを設定していない場合、1つのデータ・ファイルが作成されます。そのファイル名およびサイズは、使用するオペレーティング・システムによって異なります。SET
TIME_ZONE
句を使用すると、データベースのタイムゾーンを設定できます。次の2つ方法でタイムゾーンを設定します。
hh:mm
の有効範囲は、-12:00〜+14:00です。
V$TIMEZONE_NAMES
動的パフォーマンス・ビューのTZNAME
列を問い合せます。すべての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
文を使用すると、データベース・リンクを作成できます。データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。
データベース・リンクを作成した後で、表名またはビュー名に@dblink
を追加してそのリンクをSQL文で利用して、他のデータベース上の表およびビューを参照できます。SELECT
文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT
文、UPDATE
文、DELETE
文またはLOCK
TABLE
文を使用してもリモート表およびビューにアクセスできます。
参照:
|
プライベート・データベース・リンクを作成する場合、CREATE
DATABASE
LINK
システム権限が必要です。パブリック・データベース・リンクを作成する場合、CREATE
PUBLIC
DATABASE
LINK
システム権限が必要です。また、リモートのOracle Databaseに対するCREATE
SESSION
権限が必要です。
なお、ローカルとリモートの両方のOracle Databaseに、Oracle Netをインストールしておく必要があります。
PUBLIC
を指定すると、すべてのユーザーが参照可能なパブリック・データベース・リンクを作成できます。この句を指定しない場合、データベース・リンクはプライベートとなり、作成したユーザー専用になります。
リモート・データベース上のアクセス可能なデータは、リモート・データベースへの接続時にデータベース・リンクで使用される識別によって異なります。
CONNECT
TO
user
IDENTIFIED
BY
password
を指定した場合、データベース・リンクは、指定されたユーザーとパスワードを使用して接続します。
CONNECT
TO
CURRENT_USER
を指定した場合、データベース・リンクは、そのリンクが使用される有効範囲に基づいて有効なユーザーを使用して接続します。
SHARED
を指定すると、ソース・データベースからターゲット・データベースへの1つのネットワーク接続を使用する複数のセッションで共有可能な1つのデータベース・リンクを作成できます。共有サーバー構成では、共有データベース・リンクによって、リモート・データベースへの接続数が多くなりすぎるのを防ぐことができます。通常、共有リンクはパブリック・データベース・リンクでもあります。ただし、多くのクライアントが同じローカル・スキーマにアクセスして同じプライベート・データベース・リンクを使用する場合は、共有プライベート・データベース・リンクが役立つ場合もあります。
共有データベース・リンクでは、ソース・データベースの複数のセッションでターゲット・データベースへの同じ接続が共有されます。ターゲット・データベースでセッションが確立されると、ソース・データベースの別のセッションで接続を使用できるように、そのセッションは接続から関連付けを解除されます。認可されていないセッションがデータベース・リンクを使用して接続できないように、SHARED
を指定するときは、データベース・リンクの使用を認可されたユーザーに対してdblink_authentication
句も指定する必要があります。
データベース・リンクの完全な名前または名前の一部を指定します。データベース名のみを指定した場合、ローカル・データベースのデータベース・ドメインが暗黙的に追加されます。
dblink
には、ASCII文字のみを使用してください。マルチバイト文字はサポートされていません。データベース・リンク名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。
GLOBAL_NAMES
初期化パラメータの値がTRUE
の場合、データベース・リンクは、接続先のデータベースと同じ名前を持つ必要があります。GLOBAL_NAMES
の値がFALSE
で、データベースのグローバル名を変更した場合、グローバル名を指定できます。
Oracle RAC構成の1つのセッションまたは1つのインスタンスでオープンできるデータベース・リンクの最大数は、OPEN_LINKS
およびOPEN_LINKS_PER_INSTANCE
初期化パラメータの値で指定します。
他のユーザーのスキーマ内にはデータベース・リンクを作成できません。また、dblink
はスキーマ名を付けて指定できません(データベース・リンク名にはピリオドを指定できるため、ralph.linktosales
のような名前を付けた場合、スキーマralph
のlinktosales
という名前のデータベース・リンクと解析されるのではなく、名前全体が自分のスキーマにあるデータベース・リンク名と解析されます)。
参照:
|
CONNECT
TO
句を使用すると、リモート・データベースへの接続に使用するユーザーおよび資格証明がある場合は、それらを指定できます。
CURRENT_USER
を指定すると、現行のユーザーのデータベース・リンクを作成できます。現行のユーザーは、リモート・データベースに有効なアカウントを持つグローバル・ユーザーである必要があります。
データベース・リンクがストアド・オブジェクト内からではなく直接使用される場合、現行のユーザーは接続ユーザーと同じです。
データベース・リンクを開始するストアド・オブジェクト(プロシージャ、ビュー、トリガーなど)を実行する場合、CURRENT_USER
は、ストアド・オブジェクトを所有するユーザーの名前であり、オブジェクトをコールしたユーザーの名前ではありません。たとえば、データベース・リンクが(scott
によって作成された)プロシージャscott.p
内にあり、ユーザーjane
がプロシージャscott.p
をコールした場合、現行のユーザーはscott
になります。
ただし、ストアド・オブジェクトが実行者権限ファンクション、プロシージャまたはパッケージである場合、実行者認可IDはリモート・ユーザーとしての接続に使用されます。たとえば、権限を持つデータベース・リンクがプロシージャscott.p
(scott
によって作成された実行者権限プロシージャ)内にあり、ユーザーJaneがプロシージャscott.p
をコールした場合、CURRENT_USER
はjane
であり、プロシージャは、Janeの権限で実行されます。
固定ユーザー・データべース・リンクを使用して、リモート・データベースに接続するためのユーザー名およびパスワードを指定できます。この句を指定しない場合、データベース・リンクでは、データベースに接続している各ユーザーのユーザー名およびパスワードが使用されます。これを接続ユーザー・データベース・リンクといいます。
共有データベース・リンクを作成する場合(SHARED
句を指定した場合)にのみ、この句を指定できます。ターゲット・インスタンスのユーザー名およびパスワードを指定します。この句は、リモート・サーバーに対してユーザーを認証するもので、セキュリティ上必要です。指定するユーザー名およびパスワードは、リモート・インスタンスで有効なユーザー名およびパスワードである必要があります。ユーザー名およびパスワードは、認証用としてのみ使用されます。このユーザーを対象とした認証以外の操作はありません。
リモート・データベースのサービス名を指定します。データベース名のみを指定した場合、接続文字列にデータベース・ドメインが暗黙的に追加され、完全なサービス名が作成されます。したがって、リモート・データベースのデータベース・ドメインが現行のデータベース・ドメインと異なる場合は、完全なサービス名を指定する必要があります。
次の例では、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は、同じデータベース上の他のユーザーが所有する表にもアクセスできます。この文は、ユーザーhr
がoe.customers
表に対するSELECT
権限を持っていることを想定しています。この文では、local
データベースのユーザーhr
に接続した後で、次のようにoe
.customers
表への問合せが行われます。
SELECT * FROM oe.customers@local;
次の文は、リンク名としてサービス名全体を使用して、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
文を使用すると、ディメンションを作成できます。ディメンションは、列集合の組の親子関係を定義します。列集合の列は、すべて同じ表から得られたものである必要があります。ただし、1つの列集合(レベル)の列は、別の集合の列とは異なる表から得ることができます。オプティマイザは、マテリアライズド・ビューとの関係を使用してクエリー・リライトを行います。SQLアクセス・アドバイザは、特定のマテリアライズド・ビューの作成の推奨にこの関係を使用します。
参照:
|
自分のスキーマ内にディメンションを作成する場合は、CREATE
DIMENSION
システム権限が必要です。他のユーザーのスキーマ内にディメンションを作成する場合は、CREATE
ANY
DIMENSION
システム権限が必要です。どちらの場合も、ディメンションで参照されるオブジェクトに対して、SELECT
オブジェクト権限が必要です。
ディメンションを作成するスキーマを指定します。schema
を指定しない場合、自分のスキーマ内にディメンションが作成されます。
ディメンション名を指定します。名前は、スキーマ内で一意である必要があります。
ディメンションのレベルを指定します。レベルは、ディメンション階層および属性を定義します。
レベル名を指定します。
レベル内の列を指定します。最大32列を指定できます。この句で指定する表は、すでに存在している必要があります。
この句を指定すると、指定したレベルがNULL
の場合、そのレベルはスキップされます。この句を使用すると、指定したレベルをスキップする代替パスによって、親子関係の階層のつながりを維持できます。「hierarchy_clause」を参照してください。
ディメンション・レベル列には、次の制限事項があります。
dimension_join_clause
を指定する必要があります。
SKIP
WHEN
NULL
で指定されていないかぎり、各level_column
は、NULL以外である必要があります。NULL以外の列にNOT
NULL
制約を指定する必要はありません。SKIP
WHEN
NULL
を指定する列に、NOT
NULL
制約を指定することはできません。
ディメンションのレベルの線形階層を定義します。各階層が、ディメンションのレベル間で親子関係の連鎖を形成します。ディメンションの階層は、互いに依存していません。階層は、共通の列を持つことができます。
ディメンションの各レベルは、句の中で最高1回指定され、level_clause
で名前を付けておく必要があります。
階層名を指定します。この名前は、ディメンションで一意である必要があります。
親レベルとn:1の関係を持つレベルの名前を指定します。child_level
のlevel_columns
はNULL以外である必要があります。各child_level
値は、parent_level
という名前の次の値を一意に定義します。
子level_table
が親level_table
と異なる場合、dimension_join_clause
でそれらの結合関係を指定する必要があります。
レベル名を指定します。
dimension_join_clause
を使用すると、複数の表に列が含まれるディメンションに内部等価結合関係を指定できます。この句は、階層で指定されたすべての列が同じ表にあるとはかぎらない場合にのみ指定する必要があり、このときのみ指定できます。
親レベルの列と結合互換性のある1つ以上の列を指定します。
スキーマおよび各child_column
の表を指定しない場合、hierarchy_clause
のCHILD
OF
関係からスキーマおよび表が判断されます。child_key_column
のスキーマおよび列を指定する場合は、hierarchy_clause
のparent_level
の子のスキーマおよび列の表と一致している必要があります。
レベル名を指定します。
ディメンションの結合には、次の制限事項があります。
dimension_join_clause
のみを指定できます。
child_key_columns
はNULL以外であり、親キーが一意でNULL以外である必要があります。条件を適用するために制約を定義する必要はありません。ただし、条件を満たさない場合、問合せが不適切な結果を戻すことがあります。
parent_level
表のキーと結合する必要があります。
child_key_columns
を、parent_level
と同じ表に置くことはできません。
parent_level
の列数と一致し、列は結合可能である必要があります。
attribute_clause
を使用すると、階層レベルによって一意に定義されている列を指定できます。level
の列は、dependent_columns
と同じ表からすべて得る必要があります。dependent_columns
は、level_clause
で指定されている必要はありません。
たとえば、階層レベルが市
、都道府県名、
および国
の場合、市
は市長
、都道府県名
は知事
、国
は首相
を決定します。
この句を使用すると、1つ以上のレベルと列の関係に属性名を指定できます。この句で作成する属性の種類は、attribute_clause
を使用して作成される属性の種類と同じです。唯一の違いは、属性にレベル名とは異なる名前を割り当てることができることです。
次の文は、サンプル・スキーマsh
にcustomers_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の場合に、階層のつながりを維持する際のディメンションの作成方法を示しています。この例では、簡単に説明するために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
文を使用すると、ディレクトリ・オブジェクトを作成できます。ディレクトリ・オブジェクトは、外部バイナリ・ファイルLOB(BFILE
)および外部表データが存在するサーバー・ファイル・システム上のディレクトリの別名を示します。PL/SQLコードおよびOCIコールでBFILE
を参照する際、管理の汎用性のために、オペレーティング・システムのパス名をハード・エンコードせずにディレクトリ名を使用できます。
すべてのディレクトリは1つのネームスペースに作成されるため、個々のユーザーのスキーマで所有されるわけではありません。ディレクトリに対するオブジェクト権限を特定ユーザーに付与することによって、そのディレクトリ構造内に格納されているBFILE
へのアクセスを制限できます。
参照:
|
ディレクトリを作成する場合は、CREATE
ANY
DIRECTORY
システム権限が必要です。
ディレクトリを作成する場合、そのディレクトリに対するREAD
オブジェクト権限およびWRITE
オブジェクト権限が自動的に付与され、他のユーザーおよびロールにこれらの権限を付与できます。DBAも、これらの権限を他のユーザーおよびロールに付与できます。
ディレクトリに対するWRITE
権限は、外部表との接続に便利です。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。
ファイルの記憶域用に、それに応じたオペレーティング・システムのディレクトリ、ASMディスク・グループ、またはASMディスク・グループ内のディレクトリを作成する必要もあります。システム管理者およびデータベース管理者は、このオペレーティング・システムのディレクトリに、Oracle Databaseプロセスに対する読取り権限および書込み権限が正しく設定されていることを確認する必要があります。
ディレクトリに対して付与される権限は、オペレーティング・システムのディレクトリ用に定義されたアクセス権限とは無関係に作成されるため、これらの権限は完全に対応しない場合があります。たとえば、サンプル・ユーザーhr
に、ディレクトリ・オブジェクトに対するREAD
権限が付与されていても、それに対応するオペレーティング・システムのディレクトリにOracle Databaseプロセスに対するREAD
権限が付与されていない場合は、エラーが発生します。
OR
REPLACE
を指定すると、既存のディレクトリ・データベース・オブジェクトを再作成できます。この句を指定した場合、既存のディレクトリに付与されているデータベース・オブジェクト権限を削除、再作成および再付与しなくても、そのディレクトリの定義を変更できます。
再定義したディレクトリに対する権限が付与されていたユーザーは、権限が再付与されなくてもそのディレクトリにアクセスできます。
作成するディレクトリ・オブジェクトの名前を指定します。directory
の最大長は30バイトです。ディレクトリ・オブジェクトは、スキーマ名で修飾できません。
指定したディレクトリが実際に存在するかどうかは検証されません。このため、オペレーティング・システムに存在するディレクトリを指定してください。また、オペレーティング・システムでパス名の大/小文字が区別される場合は、正しい形式でディレクトリ名を指定する必要があります。パス名の終わりにスラッシュを指定する必要はありません。
ディレクトリ名で親ディレクトリを参照しないでください。たとえば、次の構文は有効です。
CREATE DIRECTORY mydir AS '/scratch/file_data';
ただし、次の構文は無効です。
CREATE DIRECTORY mydir AS '/scratch/data/../file_data';
ファイルが格納されているサーバー上のオペレーティング・システムのディレクトリのフルパス名を指定します。指定するフルパス名は、一重引用符で囲む必要があります。また、パス名の大/小文字は区別されます。
次の文は、サーバーのディレクトリを示す、ディレクトリのデータベース・オブジェクトを作成します。
CREATE DIRECTORY admin AS 'oracle/admin';
次の文は、オペレーティング・システムのディレクトリ/usr/bin
に格納されているBFILE
にアクセスできるように、ディレクトリのデータベース・オブジェクトbfile_dir
を再定義します。
CREATE OR REPLACE DIRECTORY bfile_dir AS '/usr/bin/bfile_dir';
CREATE
DISKGROUP
句を使用すると、ディスクのグループに名前を付け、そのグループをOracle Databaseが管理するように指定できます。Oracle Databaseは、ディスク・グループを論理単位として管理し、I/Oの均衡を保つために各ファイルを均等に分散します。また、ディスク・グループで使用可能なすべてのディスクにデータベース・ファイルを自動的に分散し、記憶域構成が変更されるたびに、自動的にストレージの均衡を再調整します。
この文を使用すると、ディスク・グループが作成され、1つ以上のディスクがディスク・グループに割り当てられ、ディスク・グループの初めてのマウントが実行されます。後続のインスタンスで、自動ストレージ管理によって自動的にディスク・グループをマウントさせる場合は、初期化パラメータ・ファイルのASM_DISKGROUPS
初期化パラメータの値に、そのディスク・グループ名を追加する必要があります。SPFILE
を使用している場合、そのディスク・グループは自動的に初期化パラメータに追加されます。
参照:
|
この文を発行するには、SYSDBA
システム権限が必要です。
この文を発行する前に、オペレーティング・システムのフォーマット・ユーティリティを使用して、ディスクをフォーマットしておく必要があります。また、Oracle Databaseユーザーが読取り/書込み権限を持ち、ASM_DISKSTRING
を使用してディスクが検出可能であることを確認します。
ファイル・システムまたはRAWデバイスではなく、自動ストレージ管理ディスク・グループにデータベース・ファイルを格納している場合、自動ストレージ管理インスタンスを構成および起動してディスク・グループを管理しないと、データベース・インスタンスがディスク・グループのファイルにアクセスできません。
各データベース・インスタンスは、データベースと同じノード上にある1つの自動ストレージ管理インスタンスと通信します。同じノード上にある複数のデータベース・インスタンスが、1つの自動ストレージ管理インスタンスと通信できます。
(size_clause::=を参照)
ディスク・グループ名を指定します。ディスク・グループには、データベース・スキーマ・オブジェクトと同じネーミング規則および制限が適用されます。データベース・オブジェクト名の詳細は、「スキーマ・オブジェクトのネーミング規則」を参照してください。
REDUNDANCY
句を使用すると、ディスク・グループの冗長レベルを指定できます。
NORMAL
REDUNDANCY
の場合、2つ以上の障害グループが存在する必要があります(次の「FAILGROUP
句」を参照)。自動ストレージ管理では、ディスク・グループ・テンプレートで指定された属性に従って、ディスク・グループのすべてのファイルの冗長性が提供されます。NORMAL
REDUNDANCY
ディスク・グループでは、1つのグループが消失してもリカバリできます。ディスク・グループ・テンプレートの詳細は、「ALTER
DISKGROUP
...」の「diskgroup_template_clauses」を参照してください。
HIGH
REDUNDANCY
の場合、少なくとも3つの障害グループが存在する必要があります。自動ストレージ管理では、エクステントごとにミラー化された2つのコピーが存在する3方向ミラー化でミラーリングが行われます。HIGH
REDUNDANCY
ディスクグループでは、2つの障害グループが消失してもリカバリできます。
EXTERNAL
REDUNDANCY
は、自動ストレージ管理でディスク・グループの冗長性が提供されないことを示します。ディスク・グループ内のディスクは、(たとえばストレージ・アレイを使用して)冗長性を提供する必要があります。または、ディスク障害が発生した場合にディスク・グループが消失しても、(テスト環境などを使用することで)それを許容できる必要があります。EXTERNAL
REDUNDANCY
を指定する場合、FAILGROUP
句は指定できません。
この句を使用すると、1つ以上の障害グループの名前を指定できます。NORMAL
REDUNDANCY
またはHIGH
REDUNDANCY
を指定している場合にこの句を省略すると、Oracle Databaseは、自動的にディスク・グループの各ディスクを障害グループに追加します。障害グループの暗黙的な名前は、オペレーティング・システムに依存しないディスク名と同じです(「NAME句」を参照)。
EXTERNAL
REDUNDANCY
ディスク・グループを作成している場合、この句は指定できません。
DISK
qualified_disk_clause
を指定すると、ディスク・グループにディスクを追加できます。
ディスク・グループに追加するディスクごとに、オペレーティング・システム依存の検索文字列を指定します。自動ストレージ管理では、この文字列を使用してディスクが検索されます。search_string
は、ASM_DISKSTRING
初期化パラメータの文字列を使用した検索で戻される、ディスクのサブセットを指している必要があります。search_string
がOracle Databaseユーザーが読取り/書込み権限を持っているディスクを指していない場合、自動ストレージ管理はエラーを戻します。search_stringが異なるディスク・グループに割り当てられている1つ以上のディスクを指している場合、FORCE
を指定していなければ、エラーが戻されます。
自動ストレージ管理では、有効な追加候補のディスクごとにディスク・ヘッダーがフォーマットされ、このディスクが新規のディスク・グループのメンバーであることが示されます。
NAME
句は、search_string
が1つのディスクを指す場合にのみ有効です。この句を使用すると、オペレーティング・システムに依存しないディスクの名前を指定できます。名前は、最大30文字の英数字で指定できます。最初の文字は、英字にする必要があります。ASMLIBでディスクにラベルを割り当てている場合にこの句を省略すると、ディスク名としてそのラベルが使用されます。ASMLIBでラベルを割り当てていない場合にこの句を省略するすると、自動ストレージ管理は、「diskgroup_name
_####」(####はディスク番号)という書式のデフォルト名を作成します。この名前を使用して、後続の自動ストレージ管理操作でディスクを参照できます。
この句を使用すると、ディスクのサイズをバイト単位で指定できます。ディスク容量を超えるサイズを指定すると、自動ストレージ管理はエラーを戻します。ディスク容量よりも小さいサイズを指定した場合、自動ストレージ管理で使用されるディスク領域が制限されます。この句を指定しない場合、自動ストレージ管理はプログラム的にディスクのサイズを決定します。
FORCE
を指定すると、自動ストレージ管理で、別のディスク・グループのメンバーであるディスクをディスク・グループに追加できます。
この句を有効にするには、ディスクはディスク・グループのメンバーである必要があり、ディスクがマウントされたディスク・グループの一部であってはなりません。
NOFORCE
を指定すると、自動ストレージ管理で、ディスクが別のディスク・グループのメンバーである場合にエラーを戻すことができます。デフォルトはNOFORCE
です。
この句を使用すると、ディスク・グループの属性値を設定できます。V$ASM_ATTRIBUTE
ビューを問い合せることによって、現在の属性値を確認できます。表14-1に、この句で設定できる属性を示します。属性値はすべて文字列です。
属性 | 有効な値 | 説明 |
---|---|---|
|
サイズ(バイト単位)。有効な値は、1M〜64Mの2の累乗です。例: 4M、4194304 |
割当て単位サイズを指定します。この属性は、ディスク・グループの作成時にのみ設定でき、 |
|
有効なOracle Databaseバージョン番号(注意1) |
この設定は元に戻すことができません。自動ストレージ管理インスタンスとデータベース・インスタンスの間で交換されるメッセージの形式を指定します。このパラメータには、異なる互換性設定で実行されている異なるデータベース・クライアントに対して、異なる値を設定できます。ただし、すべてのディスク・グループの互換性設定は、ディスク・グループを使用するデータベースの |
|
有効なOracle Databaseバージョン番号(注意1) |
この設定は元に戻すことができません。ディスク上のASMメタデータのデータ構造の形式を制御します。 |
|
0〜136年 |
ディスクは、オフラインに切り替えられると、デフォルトの時間が経過した後にASMによって削除されます。
時間は分単位(M)または時間単位(H)で指定できます。指定した経過時間は、ディスク・グループがマウントされているときにのみ加算されます。単位を省略した場合、デフォルトはHになります。この属性を省略し、
注意:
参照: 詳細は、「 |
注意1: 有効なOracle Databaseリリース番号の最初の2桁以上を指定してください。有効なバージョン番号の指定の詳細は、『Oracle Database管理者ガイド』を参照してください。たとえば、 |
次の例では、ASM_DISKSTRING
パラメータは$ORACLE_HOME/disks/c*
のスーパーセットであり、$ORACLE_HOME/disks/c*
が自動ストレージ管理ディスクとして使用される1つ以上のデバイスを指し、Oracle Databaseユーザーはディスクに対する読取り/書込み権限を持っていることを想定しています。
次の文は、自動ストレージ管理ディスク・グループdgroup_01
を作成します。このディスク・グループには、自動ストレージ管理によって冗長性が提供されておらず、search_string
と一致するすべてのディスクが含まれています。
CREATE DISKGROUP dgroup_01 EXTERNAL REDUNDANCY DISK '$ORACLE_HOME/disks/c*';
CREATE
FLASHBACK
ARCHIVE
文を使用すると、フラッシュバック・データ・アーカイブを作成できます。フラッシュバック・データ・アーカイブによって、指定したデータベース・オブジェクトへのトランザクションでのデータ変更を自動的に追跡およびアーカイブできます。フラッシュバック・データ・アーカイブは複数の表領域で構成され、追跡対象の表に対するすべてのトランザクションの履歴データが格納されます。
フラッシュバック・データ・アーカイブには、RETENTION
パラメータで指定した期間の履歴データが格納されます。履歴データは、フラッシュバック問合せのAS
OF
句を使用して問い合せることができます。指定した保存期間を超えた古いアーカイブ済履歴データは、自動的に消去されます。
フラッシュバック・データ・アーカイブには、データベースに対するデータ定義言語(DDL)の変更があっても、DDLの変更が表の構造に影響しないかぎり、履歴データが保持されます。この規則の例外の1つとして、表に列が追加された場合にはフラッシュバック・データ・アーカイブに履歴データが保持されます。
参照:
|
フラッシュバック・データ・アーカイブを作成するには、FLASHBACK
ARCHIVE
ADMINISTER
システム権限が必要です。また、フラッシュバック・データ・アーカイブを作成するにはCREATE
TABLESPACE
システム権限が必要であり、履歴情報が格納される表領域に十分な割当て制限も必要です。フラッシュバック・データ・アーカイブをシステムのデフォルトのフラッシュバック・データ・アーカイブとして指定するには、SYSDBA
としてログインしている必要があります。
DEFAULT
を指定するには、SYSDBA
としてログインしている必要があります。この句を使用すると、このフラッシュバック・データ・アーカイブをデータベースのデフォルトのフラッシュバック・データ・アーカイブとして指定できます。CREATE
TABLE
文またはALTER
TABLE
文に、フラッシュバック・データ・アーカイブ名を指定しないでflashback_archive_clause
が指定されている場合は、データベースはデフォルトのフラッシュバック・データ・アーカイブを使用して、該当する表のデータを格納します。
デフォルトのフラッシュバック・データ・アーカイブがすでに存在する場合は、この句を指定することはできません。ただし、ALTER
FLASHBACK
ARCHIVE
... SET
DEFAULT
句を使用して、既存のデフォルトのフラッシュバック・データ・アーカイブを置き換えることはできます。
フラッシュバック・データ・アーカイブの名前を指定します。名前は、「スキーマ・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。
このフラッシュバック・データ・アーカイブのアーカイブ・データが格納される表領域を指定します。この句では表領域を1つのみ指定できます。ただし、ALTER
FLASHBACK
ARCHIVE
文を使用して、後で表領域をフラッシュバック・データ・アーカイブに追加できます。
アーカイブ・データ用に確保する初期表領域の領域を指定します。フラッシュバック・データ・アーカイブ内のアーカイブ用の領域が一杯になると、このフラッシュバック・データ・アーカイブを使用する追跡対象の表でのDML操作は失敗します。フラッシュバック・データ・アーカイブの内容が指定された割当て制限の90%になると、領域不足のアラートがデータベースから発行され、古いデータを消去するか、割当て制限を追加する時間が与えられます。この句を省略すると、指定された表領域でフラッシュバック・データ・アーカイブの割当て制限が無制限になります。
アーカイブされたデータがフラッシュバック・データ・アーカイブに保持される時間の長さを月、日または年単位で指定します。指定した時間でフラッシュバック・データ・アーカイブが一杯になると、データベースは「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;
ファンクションはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CREATE
FUNCTION
文を使用すると、スタンドアロン・ストアド・ファンクションまたはコール仕様を作成できます。
CALL
SQL文を使用して、そのようなメソッドまたはルーチンをコールすることもできます。コール仕様は、コールされたときに起動するJavaメソッドまたは共有ライブラリの名前付きファンクションをOracle Databaseに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。
参照:
自分のスキーマ内にファンクションを作成または再作成する場合は、CREATE
PROCEDURE
システム権限が必要です。他のユーザーのスキーマ内にファンクションを作成または再作成する場合は、CREATE
ANY
PROCEDURE
システム権限が必要です。
ファンクションはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
(plsql_source
については、『Oracle Database PL/SQL言語リファレンス』を参照してください。)
OR
REPLACE
を指定すると、既存のファンクションを再作成できます。この句を指定した場合、既存のファンクションに付与されているオブジェクト権限を削除、再作成および再付与しなくても、そのファンクションの定義を変更できます。ファンクションを再定義した場合、そのファンクションは再コンパイルされます。
再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。
ファンクション索引がファンクションに依存している場合、索引にDISABLED
のマークが付きます。
plsql_source
の構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CREATE
INDEX
文を使用すると、次のものに索引を作成できます。
索引は、スキーマ・オブジェクトの1つで、索引には、表またはクラスタの索引付き列の中に表示される各値のエントリが入ります。索引を使用した場合、行に直接、かつ高速にアクセスできます。Oracle Databaseは、次の索引をサポートしています。
indextype
索引タイプのインスタンスです。自分のスキーマ内に索引を作成する場合は、次のいずれかの条件が満たされている必要があります。
他のユーザーのスキーマ内に索引を作成する場合は、CREATE
ANY
INDEX
システム権限が必要です。また、索引が定義されているスキーマの所有者には、UNLIMITED
TABLESPACE
システム権限、あるいはその索引または索引パーティションを格納するための表領域の割当て制限のいずれかが必要です。
自分のスキーマにドメイン索引を作成する場合、従来索引の作成の前提条件の他に、索引タイプに対するEXECUTE
オブジェクト権限が必要です。他のユーザーのスキーマにドメイン索引を作成する場合、索引の所有者にも索引タイプおよびその基礎となる実装タイプに対するEXECUTE
オブジェクト権限が必要です。ドメイン索引を作成する前に、索引タイプを定義する必要があります。
ファンクション索引を作成する場合は、従来索引の作成の前提条件の他に、索引がユーザー定義ファンクションに基づいている場合は、ファンクションにDETERMINISTIC
のマークを付ける必要があります。また、これらのファンクションが他のユーザーに所有されている場合、ファンクション索引で使用されるユーザー定義ファンクションに対する、EXECUTE
オブジェクト権限を持っている必要があります。
(index_attributes::=を参照)
(index_properties::=を参照)
(local_partitioned_index::=、index_attributes::=を参照)
(global_partitioned_index::=、local_partitioned_index::=、index_attributes::=、domain_index_clause::=、XMLIndex_clause::=を参照)
(physical_attributes_clause::=、logging_clause::=、key_compression::=、parallel_clause::=を参照)
(storage_clause::=を参照)
(parallel_clause::=を参照)
(XMLIndex_parameters
については、『Oracle XML DB開発者ガイド』を参照してください。)
(index_partitioning_clause::=、individual_hash_partitions::=、hash_partitions_by_quantity::=を参照)
(partitioning_storage_clause::=を参照)
(segment_attributes_clause::=を参照)
(on_range_partitioned_table::=、on_list_partitioned_table::=、on_hash_partitioned_table::=、on_comp_partitioned_table::=を参照)
(segment_attributes_clause::=を参照)
(segment_attributes_clause::=を参照)
(physical_attributes_clause::=、logging_clause::=を参照)
(segment_attributes_clause::=、index_subpartition_clause::=を参照)
(storage_clause::=を参照)
UNIQUE
を指定すると、索引のベースとなっている列の値が一意である必要があることを指定できます。
一意索引には、次の制限事項があります。
BITMAP
を指定すると、index
が各行を分割した索引付けではなく、各個別キーのビットマップで作成されることを指定できます。ビットマップ索引では、キー値にビットマップとして関連付けられたROWIDが格納されます。ビットマップ内の各ビットは、使用可能なROWIDに対応しています。ビットが設定されていれば、それに対応するROWIDを持つ行に、キー値が設定されていることになります。ビットマップの内部表現は、データ・ウェアハウスなど、低レベルの同時実行トランザクションが実行されるアプリケーションに最適です。
ビットマップ索引には、次の制限事項があります。
BITMAP
を指定できません。
UNIQUE
およびBITMAP
は同時に指定できません。
BITMAP
を指定できません。
参照:
索引を作成するスキーマを指定します。schema
を指定しない場合、自分のスキーマ内に索引が作成されます。
作成する索引の名前を指定します。
cluster_index_clause
を使用すると、クラスタ索引を作成するクラスタを指定できます。clusterをschema
で修飾しない場合、そのクラスタは自分のスキーマ内にあるとみなされます。ハッシュ・クラスタにはクラスタ索引を作成できません。
索引を定義する表を指定します。table
をschema
で修飾しない場合、その表は自分のスキーマにあるとみなされます。
ネストした表の記憶表に索引を作成することによって、ネストした表の列に索引を作成します。記憶表のNESTED_TABLE_ID
疑似列を組み込んだ一意索引を作成することは、ネストした表の値を持つ行がそれぞれ確実に異なるようにする有効な手段です。
セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER
TABLE
、DROP
TABLE
、CREATE
INDEX
など)を実行できます。セッションを一時表にバインドするには、一時表でINSERT
操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE
文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMIT
またはROLLBACK
文を発行します。
この句には、次の制限事項があります。
table
をパーティション化する必要があります。
REVERSE
を指定できません。索引キーおよび論理ROWIDの結合サイズは、ブロック・サイズの半分未満にする必要があります。
table
が一時表の場合、索引もtable
と同様の有効範囲(セッションまたはトランザクション)を持つ一時的なものとなります。一時表の索引には、次の制限があります。
索引を作成する表に対して相関名(別名)を指定します。
注意:
|
索引のベースとなる列または列の式を指定します。
表内の1つ以上の列の名前を指定します。ビットマップ索引には最大30列を指定できます。他の索引には最大32列を指定できます。これらの列は主キーを定義します。
索引がローカル非同一キー索引(14-89ページの「local_partitioned_index」を参照)の場合、索引キーはパーティション・キーを含んでいる必要があります。
スカラー・オブジェクト属性列またはネストした表の記憶表のシステム定義のNESTED_TABLE_ID
列には索引を作成できます。オブジェクト属性列を指定する場合、列名を表名で修飾する必要があります。ネストした表の列属性を指定する場合は、この属性は、一番外側の表の名前、ネストした表が定義されている列の名前、およびそのネストした表の列属性となるすべての中間属性の名前で修飾する必要があります。
Oracle Databaseでサポートされている、SCOPE
句で定義したREF
型の列または属性の索引を除き、ユーザー定義型、LONG
、LONG
RAW
、LOBまたはREF
型の列または属性に索引を作成できません。
table
の列、定数、SQLファンクションおよびユーザー定義ファンクションから作成された式を指定します。column_expression
を指定した場合、ファンクション索引が作成されます。
ファンクションの名前解決は、索引作成者のスキーマに基づきます。column_expression
で使用されるユーザー定義ファンクションは、CREATE
INDEX
操作中に完全に名前解決されます。
ファンクション索引の作成後、DBMS_STATS
パッケージを使用して、索引と実表の両方に関する統計情報を収集します。これらの統計情報によって、Oracle Databaseは索引を使用するタイミングを正しく判断できます。
ファンクションの一意索引は、列または列の組合せに対して条件付きの一意制約を定義する場合に便利なことがあります。例については、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。
ファンクション索引には、次の注意事項があります。
WHERE
句に指定した列の順序が、ファンクション索引を定義したcolumn_expression
での順序と異なる場合でも、問合せにファンクション索引が使用されます。DISABLED
のマークが付けられます。オプティマイザが索引の使用を選択した場合、DISABLED
索引の問合せは失敗します。索引にUNUSABLE
のマークも付けて、パラメータSKIP_UNUSABLE_INDEXES
をtrue
に設定しないかぎり、DISABLED
索引のDML操作は失敗します。このパラメータの詳細は、「ALTER SESSION」を参照してください。
column_expression
で使用され、後で同じ名前の実際のオブジェクトが表の所有者のスキーマに作成された場合、ファンクション索引は使用禁止になります。その後、ALTER
INDEX
... ENABLE
またはALTER
INDEX
... REBUILD
を使用してファンクション索引を使用可能にした場合、column_expression
で使用されているファンクション、パッケージまたは型は、パブリック・シノニムが最初に指していたファンクション、パッケージまたは型に継続して変換されます。新しいファンクション、パッケージまたは型への変換は行われません。
NLS_SORT
およびNLS_COMP
)は例外です。これらがセッション・レベルで再設定された場合でも、Oracle Databaseは正常に変換を処理します。
TO_NUMBER
ファンクションを使用して文字列'105 lbs'
をVARCHAR2
からNUMBER
に変換しようとすると、エラーが発生して失敗します。したがって、column_expression
にTO_NUMBER
やTO_DATE
などのデータ変換ファンクションが含まれており、後続のINSERT
またはUPDATE
文に変換ファンクションで変換できないデータが含まれている場合、INSERT
またはUPDATE
文は索引が原因で失敗します。
ファンクション索引には、次の制限事項があります。
column_expression
で参照されるファンクションが戻す値には、Bツリー索引の索引列と同じ制限があります。詳細は、「索引列の制限事項:」を参照してください。
column_expression
で参照されるユーザー定義ファンクションは、DETERMINISTIC
として宣言されている必要があります。
column_expression
がパーティション・キーであってはいけません。
column_expression
には、「列式」で説明されているすべての形式の式を指定できます。
column_expression
で指定するファンクションは、リピータブル値を戻す必要があります。たとえば、SYSDATE
やUSER
ファンクションまたはROWNUM
疑似列は指定できません。ASC
またはDESC
を使用すると、索引を昇順で作成するか降順で作成するかを指定できます。文字データの索引は、データベース・キャラクタ・セットの文字値の昇順または降順で作成されます。
Oracle Databaseは、降順索引をファンクション索引として扱います。他のファンクション索引のように、最初に索引および索引が定義されている表を分析するまで、降順索引は使用しません。14-83ページの「column_expression」を参照してください。
昇順の一意索引は、複数のNULL
値を含むことができます。ただし、降順の一意索引の場合は、複数のNULL
値は重複した値として扱われるため、許可されていません。
これらの句は、ドメイン索引に対して指定できません。逆索引にはDESC
を指定できません。index
をビットマップ化したり、COMPATIBLE
初期化パラメータに8.1.0未満の値を設定すると、DESC
は無視されます。
オプションの索引属性を指定します。
physical_attributes_clause
を使用すると、索引の物理特性および記憶特性の値を設定できます。
この句を指定しない場合、PCTFREE
が10、INITRANS
が2に設定されます。
PCTUSED
パラメータは、索引に対して指定できません。
索引、索引パーティションまたは索引サブパーティションを格納する表領域の名前を指定します。この句を指定しない場合、その索引を定義しているスキーマの所有者のデフォルトの表領域内に索引が作成されます。
ローカル索引の場合、tablespace
のかわりにキーワードDEFAULT
を指定できます。ローカル索引に追加される新規パーティションまたはサブパーティションは、基礎となる表の対応するパーティションまたはサブパーティションと同じ表領域内に作成されます。
COMPRESS
を指定すると、キー圧縮を使用可能にできます。これによって、キー列値の繰返しがなくなり、記憶域を大幅に削減できます。integer
を使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。
Oracle Databaseでは、索引(一意でない索引または2列以上の一意索引)が圧縮されます。パーティション索引の圧縮を使用する場合は、索引レベルで圧縮を有効にして索引を作成する必要があります。そのようなパーティション索引の個々のパーティションの圧縮設定は、後で有効および無効にすることができます。個々のパーティションを再作成するときに圧縮を有効および無効にできます。索引の再作成時にのみ、既存の非パーティション索引を変更して圧縮を有効または無効にできます。
COMPRESS
は、ビットマップ索引に対して指定できません。
NOCOMPRESS
を指定すると、キー圧縮を使用禁止にできます。これはデフォルトです。
索引の作成時に、Oracle Databaseはデフォルトで索引を昇順ソートします。NOSORT
を指定すると、索引の作成時に、データベース内ですでに昇順で格納されている行のソートを行わないようにできます。索引列の行または列が昇順に格納されていない場合、データベースはエラーを戻します。ソート時間および領域を削減するため、列を表へ初期ロードした直後にこの句を使用します。これらのキーワードのいずれも指定しない場合、デフォルトでSORT
が使用されます。
このパラメータには、次の制限事項があります。
REVERSE
と同時には指定できません。
REVERSE
を指定すると、ROWID以外の索引ブロックのバイトを逆順に格納できます。
逆索引には、次の制限事項があります。
この句を使用すると、オプティマイザで索引を参照可能にするかどうかを指定できます。参照不可の索引はDML操作によってメンテナンスされますが、パラメータOPTIMIZER_USE_INVISIBLE_INDEXES
をセッションまたはシステム・レベルで明示的にTRUE
に設定しないと、問合せ時にオプティマイザによって使用されません。
既存の索引がオプティマイザによって参照可能か参照不可かを確認するには、USER_
、DBA_
、ALL_INDEXES
データ・ディクショナリ・ビューのVISIBILITY
列を問い合せます。
索引作成を、REDOログ・ファイル内に記録する(LOGGING
)か記録しない(NOLOGGING
)かを指定します。この設定によって、索引に対する後続のダイレクト・ローダー(SQL*Loader)およびダイレクト・パス・インサート操作を記録するか記録しないかも決定されます。デフォルトはLOGGING
です。
非パーティション索引の場合、この句は索引のロギング属性を指定します。
パーティション索引の場合、この句は次の値を決定します。
CREATE
文で指定されたすべてのパーティションのデフォルト値(PARTITION
記述句でlogging_clause
を指定している場合を除く)
ALTER
TABLE
... ADD
PARTITION
操作中に暗黙的に追加されたローカル索引パーティションまたはサブパーティションに対するデフォルト値
索引のロギング属性は、その実表の属性に依存しません。
この句を指定しない場合、ロギング属性は表が存在する表領域の属性になります。
参照:
|
ONLINE
を指定すると、索引作成中の表でのDML操作を許可できます。
オンライン索引の作成には、次の制限事項があります。
ONLINE
を指定し、パラレルDML文を発行すると、Oracle Databaseはエラーを戻します。
ONLINE
を指定できません。
UROWID
列の従来索引には、ONLINE
を指定できません。
parallel_clause
を指定すると、索引の作成をパラレル化できます。
この句の詳細は、「CREATE
TABLE
」の「parallel_clause」を参照してください。
global_partitioned_index
句およびlocal_partitioned_index
句を使用すると、index
をパーティション化できます。
ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
global_partitioned_index
を使用すると、索引のパーティション化がユーザー定義であり、基礎となる表と同一レベルでパーティション化されないことを指定できます。デフォルトでは、非パーティション索引はグローバル索引です。
グローバル索引には、レンジ・パーティション化またはハッシュ・パーティション化を実行できます。どちらの場合でも、パーティション・キー列に最大32列を指定できます。列リストをパーティション化する場合、索引の列リストの左の接頭辞を指定する必要があります。索引が列a
、b
およびc
に定義されている場合は、列に(a
, b
, c)
、(a
, b)
または(a
, c)
は指定できますが、(b
, c)
、(c)
または(b
, a)
は指定できません。パーティション名を指定しない場合、SYS_P
n
の形式でパーティション名が割り当てられます。
この句を使用すると、レンジ・パーティション・グローバル索引を作成できます。列リストに指定した表の列の値の範囲に基づいて、グローバル索引がパーティション化されます。
この句を使用すると、ハッシュ・パーティション・グローバル索引を作成できます。パーティション・キー列の値にハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。
参照:
ハッシュ・パーティションの2つの方法については、「 |
グローバル・パーティション索引には、次の制限事項があります。
ROWID
類似列またはROWID
型の列は指定できません。
individual_hash_partitions
のpartitioning_storage_clause
にLOBまたはVARRAYの記憶域句を指定できません。
hash_partitions_by_quantity
のOVERFLOW
句は、索引構成表のパーティションに対してのみ指定できます。
partitioning_storage_clause
では、table_compression
は指定できませんが、key_compression
は指定できます。この句を使用すると、個々の索引パーティションを記述できます。この句が繰り返される数によってパーティションの数が決まります。partition
を指定しない場合、名前はSYS_P
n
の形式で生成されます。
VALUES
LESS
THAN
(value_list
)には、グローバル索引の現在のパーティションの境界は含まない上限を指定します。値のリストは、global_partitioned_index
句の列リストに対応するリテラル値を含む、カンマで区切られた順序リストです。最後のパーティションの値としては、必ずMAXVALUE
を指定します。
local_partitioned_index
句を使用すると、table
と同じパーティション数および同じパーティション境界を使用し、同じ列で索引をパーティション化できます。基礎となる表が再パーティション化された場合、ローカル索引のパーティションは自動的に保持されます。
この句を使用すると、レンジ・パーティション表の索引パーティションの名前および属性を指定できます。この句を指定する場合、PARTITION
句は、表パーティションと同一の数と順序である必要があります。partition
を指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_P
n
の形式が使用されます。
索引にキー圧縮が指定されていない場合、索引パーティションにキー圧縮を指定することはできません。
on_list_partitioned_table
句は、「on_range_partitioned_table」と同一です。
この句を使用すると、ハッシュ・パーティション表の索引パーティションの名前および表領域の記憶域を指定できます。
PARTITION
句を指定する場合、これらの句の数は表パーティションの数と同一である必要があります。partition
を指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_P
n
の形式が使用されます。オプションで、1つ以上の個々のパーティションに表領域の記憶域を指定できます。この句またはSTORE
IN
句に表領域の記憶域を指定しない場合、各索引パーティションが、対応する表パーティションと同じ表領域に格納されます。
STORE
IN
句を使用して、すべての索引ハッシュ・パーティションを分散させる1つ以上の表領域を指定できます。表領域の数は、索引パーティションの数と等しくなる必要はありません。索引パーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。
この句を使用すると、コンポジット・パーティション表の索引パーティションの名前および属性を指定できます。
STORE
IN
句は、レンジ-ハッシュまたはリスト-ハッシュ・コンポジット・パーティション表に対してのみ有効です。この句を使用して、すべてのパーティションのすべての索引ハッシュ・サブパーティションを分散させる1つ以上のデフォルト表領域を指定できます。index_subpartition_clause
の第2 STORE
IN
句で個々のパーティションのサブパーティションに対して異なるデフォルトの表領域の記憶域を指定すると、この記憶域を上書きできます。
レンジ-レンジ、レンジ-リストおよびリスト-リスト・コンポジット・パーティション表に対しては、PARTITION
句に指定したレンジまたはリスト・サブパーティションのデフォルトの属性を指定できます。index_subpartition_clause
のSUBPARTITION
句の個々のパーティションのレンジまたはリスト・サブパーティションに異なる属性を指定すると、この記憶域を上書きできます。
索引にキー圧縮が指定されていない場合、索引パーティションにキー圧縮を指定することはできません。
この句を使用すると、コンポジット・パーティション表の索引サブパーティションに名前および表領域の記憶域を指定できます。
STORE
IN
句は、レンジ-ハッシュおよびリスト-ハッシュ・コンポジット・パーティション表のハッシュ・サブパーティションに対してのみ有効です。この句を使用して、すべての索引ハッシュ・サブパーティションを分散させる1つ以上の表領域を指定できます。SUBPARTITION
句は、すべてのサブパーティション・タイプに対して有効です。
SUBPARTITION
句を指定する場合、これらの句の数は表サブパーティションの数と同一である必要があります。subpartition
を指定しない場合、対応する表のサブパーティションと一貫した名前が生成されます。その名前が既存の索引サブパーティション名と競合する場合は、SYS_SUBP
n
の形式が使用されます。
表領域の数は、索引サブパーティションの数と等しくなる必要はありません。索引サブパーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。
on_comp_partitioned_table
句またはindex_subpartition_clause
にサブパーティションの表領域の記憶域を指定しない場合、index
に指定された表領域が使用されます。index
に表領域の記憶域を指定しない場合、サブパーティションが、対応する表サブパーティションと同じ表領域に格納されます。
index
が、アプリケーション固有のindextype
索引タイプのインスタンスであるドメイン索引であることを指定します。
ドメイン索引を作成する前に、複数の操作を行う必要があります。まず、索引タイプの実装タイプを作成します。また、ファンクション実装を作成し、そのファンクションを使用する演算子も作成します。次に、演算子と実装タイプを関連付ける索引タイプを作成します。最後にこの句を使用してドメイン索引を作成します。付録E「詳細な例」に、これらのすべての操作を含んだ単純なドメイン索引の作成例を記載しています。
index_expr
(table_index_clause
内)に、索引が定義されている表の列またはオブジェクトの属性を指定します。基礎となる索引タイプが異なり、その索引タイプがユーザー定義操作の分割セットをサポートする場合のみ、1つの列に複数のドメイン索引を定義できます。
ドメイン索引には、次の制限事項があります。
index_expr
(table_index_clause
内)には1つの列のみ指定でき、データ型がREF
、VARRAY、ネストした表、LONG
またはLONG
RAW
の列は指定できません。
索引タイプの名前を指定します。名前は、作成済の有効なスキーマ・オブジェクトである必要があります。
Oracle Textをインストールしている場合、様々な組込み索引タイプを使用して、Oracle Textドメイン索引を作成できます。Oracle TextおよびOracle Textが使用する索引の詳細は、『Oracle Textリファレンス』を参照してください。
この句を使用すると、パーティション表のローカル索引を索引にするように指定できます。
PARTITIONS
句を使用すると、索引パーティションの名前を指定できます。指定するパーティション数は、実表内のパーティション数と一致する必要があります。この句を省略すると、SYS_P
n
という形式のシステム生成の名前でパーティションが作成されます。
PARAMETERS
句を使用すると、個々のパーティション固有のパラメータ文字列を指定できます。この句を省略した場合、索引に関連付けられたパラメータ文字列はパーティションにも関連付けられます。
parallel_clause
を使用すると、ドメイン索引の作成をパラレル化できます。非パーティション・ドメイン索引の場合、Oracle Databaseは明示的またはデフォルトの並列度をODCIIndexCreate
カートリッジ・ルーチンに渡し、ODCIIndexCreateカートリッジ・ルーチンが索引の並列性を確立します。ローカル・ドメイン索引の場合、この句によって索引パーティションはパラレルに作成されます。
未解析のまま適切なODCI索引タイプ・ルーチンに渡されたパラメータ文字列を指定します。パラメータ文字列の最大長は1,000文字です。
構文の最上位でこの句を指定した場合、パラメータは索引パーティションのデフォルトのパラメータになります。local_domain_index_clause
の一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。
ドメイン索引が作成されると、適切なODCIルーチンがコールされます。ルーチンが正常に戻らない場合、ドメイン索引はFAILED
のマークが付けられます。失敗したドメイン索引でサポートされる操作は、DROP
INDEX
およびREBUILD
INDEX
(非ローカル索引用)のみです。
XMLIndex_clause
を使用すると、一般にはXMLデータが含まれる列に、XMLIndex
索引を定義できます。XMLIndex
索引は、特にXMLデータのドメイン用に設計されたドメイン索引の一種です。
PARAMETERS
句を使用すると、パス表に関する情報およびXMLIndexのコンポーネントに対応する2次索引に関する情報を指定できます。パラメータ文字列の最大長は1,000文字です。
構文の最上位でこの句を指定した場合、パラメータは索引のパラメータおよび索引パーティションのデフォルトのパラメータになります。local_xmlindex_clause
句の一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。
bitmap_join_index_clause
を使用すると、ビットマップ結合索引を定義できます。ビットマップ結合索引は、単一の表に定義します。ディメンション表の列で構成される索引キーには、そのキーに対応するファクト表のROWIDが格納されます。データ・ウェアハウス環境では、一般的に、索引を定義する表をファクト表といい、ファクト表と結合した表をディメンション表といいます。ただし、結合索引の作成にはスター・スキーマは必須ではありません。
ON
句には、まずファクト表を指定し、次に索引を定義するディメンション表の列をカッコ内に指定します。
FROM
句には、結合した表を指定します。
WHERE
句には、結合条件を指定します。
基礎となるファクト表がパーティション化されている場合、local_partitioned_index
句(「local_partitioned_index」を参照)のいずれかを指定する必要があります。
一般的なビットマップ索引の制限事項(「BITMAP」を参照)に加え、ビットマップ結合索引には次の制限事項があります。
FROM
句で表を2回指定できません。
local_index_clauses
を指定できません。UNUSABLE
を指定すると、UNUSABLE
状態で索引を作成できます。使用禁止の索引を使用可能にする場合、再構築するか、または削除して再作成する必要があります。
索引がパーティション化されている場合は、すべての索引パーティションにUNUSABLE
のマークが付けられます。後で一部の索引パーティションのみを再作成してUSABLE
にすることができます。これは、一部の索引パーティションのみで索引を保持する場合に有効です。たとえば、新しいパーティションでは索引アクセスを有効にするものの、古いパーティションでは有効にしない場合などに有効です。
索引または索引の一部のパーティションまたはサブパーティションにUNUSABLE
のマークが付けられている場合は、次の状況でのみ、索引はオプティマイザによってアクセス・パスとみなされます。オプティマイザはどのパーティションがアクセスされるかをコンパイル時に認識している必要があり、アクセスされるすべてのパーティションにUSABLE
のマークが付けられている必要があります。そのため、問合せにバインド変数を含めることはできません。
この句は、一時表の索引に対して指定できません。
次の文は、サンプル表oe.orders
のcustomer_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
列値の繰返し項目を圧縮します。
サンプル表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;
クラスタ・キーのすべての列にクラスタ索引が自動的に作成されるため、索引列は指定しません。クラスタ索引の場合は、すべての行に索引が付きます。
次の文は、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;
次の例では、ファンクション索引を作成および使用する方法を示します。
次の文は、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;
次の文は、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_id
とpromotion_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_2
、tbs_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
ファンクションの使用によって、置換可能な列を基礎とする型判別式の列に索引を作成できます。
次の文は、books表のauthor列の型IDにビットマップ索引を作成します。
CREATE BITMAP INDEX typeid_i ON books (SYS_TYPEID(author));
参照:
|
CREATE
INDEXTYPE
文を使用すると、(アプリケーション固有の)ドメイン索引を管理するルーチンを指定するオブジェクトである索引タイプを作成できます。索引タイプは、表、ビューおよび他のスキーマ・オブジェクトと同じネームスペースにあります。この文は、索引タイプ名を実装タイプに結合し、順番に索引タイプを実装するユーザー定義索引ファンクションおよびプロシージャを指定し、参照します。
自分のスキーマに索引タイプを作成する場合は、CREATE
INDEXTYPE
システム権限が必要です。他のユーザーのスキーマ内に索引タイプを作成する場合は、CREATE
ANY
INDEXTYPE
システム権限が必要です。どちらの場合も、実装タイプおよびサポートしている演算子に対するEXECUTE
オブジェクト権限が必要です。
索引タイプは、1つ以上の演算子をサポートしているため、索引タイプを作成する前に、サポートする演算子を設計し、これらの演算子に機能的な実装を提供する必要があります。
索引タイプが存在するスキーマ名を指定します。schema
を指定しない場合、自分のスキーマ内に索引タイプが作成されます。
作成する索引タイプの名前を指定します。
FOR
句を使用すると、索引タイプでサポートされる演算子のリストを指定できます。
schema
には、演算子が含まれているスキーマを指定します。schema
を指定しない場合、その演算子は自分のスキーマにあるとみなされます。
operator
には、索引タイプによってサポートされる演算子の名前を指定します。この句に指定するすべての演算子は有効な演算子である必要があります。
parameter_type
には、演算子へのパラメータ・タイプを指定します。
USING
句を使用すると、新しい索引タイプを実装するタイプを指定できます。
implementation_type
には、適切なOracle Data Cartridge Interface(ODCI)を実装するタイプ名を指定します。
この句を使用すると、その索引タイプを使用してレンジ・パーティション表にローカル・ドメイン索引を作成するように指定できます。この句を省略すると、後でこの索引タイプを使用してパーティション表にローカル・ドメイン索引を作成することはできません。
この句を使用すると、この索引タイプに基づいて作成された索引の記憶表およびパーティション・メンテナンス操作の管理方法を指定できます。
WITH
SYSTEM
MANAGED
STORAGE
TABLES
を指定すると、統計データの格納がシステムで管理されます。statistics_type
に指定するタイプによって、システムで保持される表に統計関連の情報が格納されます。また、指定する索引タイプはすでに登録済であるか、またはWITH
SYSTEM
MANAGED
STORAGE
TABLES
句をサポートするように変更されている必要があります。
WITH
USER
MANAGED
STORAGE
TABLES
を指定すると、ユーザー定義の統計情報を格納する表は、ユーザーによって管理されます。これはデフォルトの動作です。この句を使用すると、索引タイプでODCIIndexInsert
メソッドの配列インタフェースをサポートできるようになります。
索引付けする列のデータ型がユーザー定義のオブジェクト型である場合、この句を指定して、Oracleがtype
の列値を保持するために使用するVARRAYのvarray_type
を識別する必要があります。索引タイプで型のリストがサポートされている場合、対応するVARRAY型のリストを指定できます。type
またはvarray_type
でschema
を省略した場合、型が自分のスキーマ内に定義されているとみなされます。
索引付けする列のデータ型が組込みシステム型である場合、その索引タイプに指定されたVARRAY型は、システムで定義されたODCI型よりも優先されます。
次の文は、position_indextype
という名前の索引タイプを作成し、その索引タイプでサポートされているposition_between
演算子、および索引インタフェースを実装するposition_im
タイプを指定します。この索引タイプを使用する拡張索引作成機能の使用例については、「拡張索引作成機能の使用方法」を参照してください。
CREATE INDEXTYPE position_indextype FOR position_between(NUMBER, NUMBER, NUMBER) USING position_im;
CREATE
JAVA
を使用すると、Javaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成できます。
自分のスキーマにJavaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成または再作成する場合は、CREATE
PROCEDURE
システム権限が必要です。他のユーザーのスキーマ内にスキーマ・オブジェクトを作成または再作成する場合は、CREATE
ANY
PROCEDURE
システム権限が必要です。
OR
REPLACE
を指定すると、既存のJavaクラス、ソースまたはリソースを含むスキーマ・オブジェクトを再作成できます。この句を指定した場合、付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のオブジェクトの定義を変更できます。
Javaスキーマ・オブジェクトを再定義し、RESOLVE
またはCOMPILE
を指定した場合、そのオブジェクトが再コンパイルまたは変換されます。正常に変換またはコンパイルされたかどうかにかかわらず、Javaスキーマ・オブジェクトを参照するクラスは有効になります。
再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。
RESOLVE
およびCOMPILE
は、同義のキーワードです。この文が正常に実行された場合に作成されるJavaスキーマ・オブジェクトを変換することを指定します。
Javaリソースには、これらのキーワードを指定できません。
RESOLVE
またはCOMPILE
を指定しても、正常に変換またはコンパイルできない場合は、NOFORCE
を指定するとCREATE
コマンドの結果をロールバックできます。このオプションを指定しないと、正常に変換またはコンパイルできない場合でも何も処理が行われず、作成されたスキーマ・オブジェクトはそのままです。
JAVA
SOURCE
を指定すると、Javaソース・ファイルをロードできます。
JAVA
CLASS
を指定すると、Javaクラス・ファイルをロードできます。
JAVA
RESOURCE
を指定すると、Javaリソース・ファイルをロードできます。
NAMED
句は、Javaソースまたはリソースの場合に指定します。primary_name
は、二重引用符で囲む必要があります。
CREATE
JAVA
SOURCE
文は、ソースによって定義されたJavaクラスをそれぞれ保持するために、追加スキーマ・オブジェクトも作成します。
primary_name
の小文字、または大文字と小文字の組合せを保持するには、二重引用符を使用します。
schema
を指定しない場合、自分のスキーマ内にオブジェクトが作成されます。
NAMED
句には、次の制限事項があります。
SCHEMA
句は、Javaクラスにのみ適用されます。このオプションは、Javaファイルを含むオブジェクトが存在するスキーマを指定します。この句を指定しない場合、自分のスキーマ内にオブジェクトが作成されます。
invoker_rights_clause
を使用すると、クラスを所有するユーザーのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドが実行されるか、または、CURRENT_USER
のスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するかを指定できます。
また、この句は、問合せ、DML操作、およびその型のメンバー・ファンクションおよびプロシージャ内の動的SQL文の外部名の変換方法も定義します。
CURRENT_USER
を使用すると、クラスのメソッドがCURRENT_USER
権限で実行されることを指定できます。この句はデフォルトで、実行者権限クラスを作成します。
また、この句は、問合せ、DML操作、および動的SQL文の外部名をCURRENT_USER
のスキーマで変換することも指定します。他のすべての文における外部名は、メソッドを含むスキーマで変換します。
DEFINER
を使用すると、クラスが存在するスキーマの所有者権限でクラスのメソッドを実行すること、およびクラスが存在するスキーマで外部名を変換することを指定できます。この句によって定義者権限クラスが作成されます。
RESOLVER
句を使用すると、Javaスキーマ・オブジェクトに対する完全修飾Java名のマッピングを指定できます。ここでは次のとおりです。
match_string
は、完全修飾Java名、そのようなJava名と一致するワイルド・カードまたは任意の名前と一致するワイルド・カードを指定します。
schema_name
は、対応するJavaスキーマ・オブジェクトを検索するスキーマを指定します。
schema_name
の代替としてのダッシュ(‐)は、match_string
が有効なJava名と一致した場合、名前が変換されないことを示します。名前の変換は成功しますが、実行時にクラスがその名前を使用することはできません。
このマッピングは、後の変換で(暗黙的に、またはALTER
JAVA
... RESOLVE
文で明示的に)使用されるコマンドで作成されるスキーマ・オブジェクトの定義とともに格納されます。
USING
は、Javaクラスまたはリソースに対する文字データ(CLOB
またはBFILE
)またはバイナリ・データ(BLOB
またはBFILE
)の順序を決定します。文字の順序を使用して、1つのファイルがJavaクラスまたはリソースに、または1つのソース・ファイルおよび1つ以上の導出クラスがJavaソースに定義されます。
順序を含む、オペレーティング・システム(directory_object_name
)およびサーバー・ファイル(server_file_name
)であらかじめ作成されているファイルのディレクトリおよびファイル名を指定します。BFILE
は、通常、CREATE
JAVA
SOURCE
によって文字順序として、CREATE
JAVA
CLASS
またはCREATE
JAVA
RESOURCE
によってバイナリ順序として解析されます。
指定した型(CLOB
、BLOB
またはBFILE
)の行と列を選択する副問合せを指定します。列の値は文字列を構成します
key_for_BLOB
句は、次の暗黙的な問合せを提供します。
SELECT LOB FROM CREATE$JAVA$LOB$TABLE WHERE NAME = 'key_for_BLOB';
このパラメータを使用する場合、表CREATE$JAVA$LOB$TABLE
が現行のスキーマ内にあり、BLOB
型のLOB列およびVARCHAR2
型のNAME
列が存在する必要があります。
Javaソースの文字列を指定します。
次の文は、Javaバイナリ・ファイルにある名前を使用して、Javaクラスを含むスキーマ・オブジェクトを作成します。
CREATE JAVA CLASS USING BFILE (java_dir, 'Agent.class') /
この例では、JavaクラスAgent.class
を含むオペレーティング・システム・ディレクトリを指すディレクトリ・オブジェクトjava_dir
がすでに存在していると想定しています。この例では、クラス名がJavaクラス・スキーマ・オブジェクトの名前を決定します。
次の文は、Javaソース・スキーマ・オブジェクトを作成します。
CREATE JAVA SOURCE NAMED "Welcome" AS public class Welcome { public static String welcome() { return "Welcome World"; } } /
次の文は、bfile
からapptext
という名前のJavaリソース・スキーマ・オブジェクトを作成します。
CREATE JAVA RESOURCE NAMED "appText" USING BFILE (java_dir, 'textBundle.dat') /
|
![]() Copyright © 1996, 2008, Oracle Corporation. All Rights Reserved. |
|