| 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_Pnの形式でパーティション名が割り当てられます。
この句を使用すると、レンジ・パーティション・グローバル索引を作成できます。列リストに指定した表の列の値の範囲に基づいて、グローバル索引がパーティション化されます。
この句を使用すると、ハッシュ・パーティション・グローバル索引を作成できます。パーティション・キー列の値にハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。
|
参照:
ハッシュ・パーティションの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_Pnの形式で生成されます。
VALUES LESS THAN(value_list)には、グローバル索引の現在のパーティションの境界は含まない上限を指定します。値のリストは、global_partitioned_index句の列リストに対応するリテラル値を含む、カンマで区切られた順序リストです。最後のパーティションの値としては、必ずMAXVALUEを指定します。
local_partitioned_index句を使用すると、tableと同じパーティション数および同じパーティション境界を使用し、同じ列で索引をパーティション化できます。基礎となる表が再パーティション化された場合、ローカル索引のパーティションは自動的に保持されます。
この句を使用すると、レンジ・パーティション表の索引パーティションの名前および属性を指定できます。この句を指定する場合、PARTITION句は、表パーティションと同一の数と順序である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。
索引にキー圧縮が指定されていない場合、索引パーティションにキー圧縮を指定することはできません。
on_list_partitioned_table句は、「on_range_partitioned_table」と同一です。
この句を使用すると、ハッシュ・パーティション表の索引パーティションの名前および表領域の記憶域を指定できます。
PARTITION句を指定する場合、これらの句の数は表パーティションの数と同一である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。オプションで、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_SUBPnの形式が使用されます。
表領域の数は、索引サブパーティションの数と等しくなる必要はありません。索引サブパーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。
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_Pnという形式のシステム生成の名前でパーティションが作成されます。
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. |
|