Oracle Database 2日でデータベース管理者 10g リリース2(10.2) B19197-03 |
|
この章では、スキーマ・オブジェクトの管理について説明します。この章の内容は次のとおりです。
スキーマは、データベース・オブジェクトの集合です。スキーマは、データベース・ユーザーが所有し、そのユーザーと同じ名前です。スキーマ・オブジェクトは、ユーザーが作成する論理構造です。表、索引などのオブジェクトには、データを格納したり、またはビュー、シノニムなどの定義のみで構成することができます。
スキーマ・オブジェクトは、SQLまたはOracle Enterprise Managerを使用して作成および操作できます。基礎となるSQLは、Oracle Enterprise Managerによって作成されます。
この項の内容は次のとおりです。
データベースのスキーマ・オブジェクトを検索し、管理するには、「データベース」の「管理」プロパティ・ページ(図5-2「「データベース」の「管理」ページ」を参照)を開き、「データベース・オブジェクト」セクションのいずれかのリンクをクリックします。図8-1にこれらのリンクを示します。
データベースのオブジェクトを表示するには、「データベース・オブジェクト」ヘッダーでリンクをクリックします。いずれかのデータベース・オブジェクトのホームページにある「検索」セクションから、任意のスキーマ・オブジェクトにアクセスすることもできます。
スキーマ・リンクを選択すると、標準のObject_Nameのページが表示されます。図8-2に示すとおり、「スキーマ」および「オブジェクト名」ボックスに値を入力してオブジェクトを検索できます。
他のスキーマ・オブジェクト(「データベース・オブジェクト」ヘッダーの下に直接のリンクが表示されないスキーマ・オブジェクトを含む)にアクセスすることもできます。特定のデータベース・オブジェクトを選択するには、「オブジェクト・タイプ」リストからオプションを選択します。
データベース内のどのオブジェクトも、1つのスキーマのみに属し、そのスキーマ内で一意の名前を持ちます。オブジェクトを作成する場合は、そのオブジェクトを格納するスキーマに作成する必要があります。通常、単一のアプリケーションに属するすべてのオブジェクトは、同じスキーマに配置します。
データベース・オブジェクト名は、スキーマ内で一意にするなどの特定のルールに従う必要があります。また、オブジェクト名は30バイト以下で、文字から始める必要があります。これらのルールに違反する名前を使用してオブジェクトを作成しようとすると、エラーが発生します。
次の項では、データベースの表と、それを作成および編集する方法について説明します。
表は、Oracleデータベースにおける、データ記憶域の基本的な単位です。表には、ユーザーがアクセスできるすべてのデータを格納します。各表には、列と行があります。たとえば、employees
表には、last_name
およびemployee_id
と呼ばれる列があります。表の各行には、従業員名および従業員番号の値が格納されます。
Oracleデータベースの表で最も一般的なタイプは、リレーショナル表です。これは、employees
表のような構造です。この他に、オブジェクト表およびXMLType
表の2つのタイプがサポートされます。3つのタイプの表のいずれも、永続または一時として定義できます。一時表は、複数のユーザーが使用できるようにしたり、その表を作成したユーザーのみが使用できるようにすることが可能です。
リレーショナル表は、ヒープ構成または索引構成構造で作成できます。前者では、行は特定の順序では格納されません。索引構成表では、行の順序は選択した1つ以上の列の値によって決定されます。
この項では、永続的なヒープ構成表を主に説明します。他の表タイプについては、『Oracle Database管理者ガイド』、『Oracle Database概要』および『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。これらの表を作成および変更するために必要な構文については、『Oracle Database SQLリファレンス』を参照してください。
次に示す1つ以上の特性を使用して、表の各列を定義します。
この必須属性は、列に格納されるデータの種類を定義します。また、列に格納できる最大長の値を示すことができます。
このオプション属性は、その列における有効な値を定義します。列レベルまたは表レベルで定義できる制約もあります。Enterprise Managerでは、「表の作成」プロパティ・ページの列レベルで定義される制約は、NOT NULL
制約です。この制約では、表内の対象となる列のすべての行に値が含まれている必要があります。
この値は、新しい行が挿入され、その列に値が指定されていない場合に、その列に自動的に格納されます。
次の項では、これらの列について説明します。
表を作成する場合、各列に対してデータ型を指定する必要があります。プロシージャまたはストアド・ファンクションを作成する場合、各引数に対してデータ型を指定する必要があります。
これらのデータ型は、各列または引数に保持できる値の領域を定義します。たとえば、DATE
列に、February 29
(うるう年を除く)、2
またはSHOE
という値を含めることはできません。列に入る値は、その列のデータ型を受け継ぎます。たとえば、DATE列に17-JAN-2004
を挿入すると、Oracleはそれが有効な日付に変換されることを検証してから、その文字列を日付値として処理します。
表8-1に、一部の一般的なOracle組込みデータ型を示します。
ほとんどの表では、NUMBER
、VARCHAR2
およびDATE
のデータ型の列のみが必要です。
数値データを定義する場合、精度オプションを使用して桁の最大数を数字で設定し、スケール・オプションを使用して小数点より右にある数字の桁数を定義できます。たとえば、通貨の値を格納するフィールドで、通貨の主要単位(ドル、ポンド、マルクなど)を10桁に、補助単位(セント、ペニー、ペニッヒ)を2桁にするには、NUMBER(12,2)
と定義します。
文字データのVARCHAR2
フィールドを定義するには、サイズ値を含める必要があります。サイズに列で格納する最大バイト数または最大文字数を設定します。たとえば、様々な国の郵便番号を格納する列では、VARCHAR2(12)
のように定義して、12バイトに制限できます。
DATE
列は、日付および時刻の要素を含めるように、自動的に書式化されます。
列に対するNOT NULL
制約では、行が挿入または更新されると常に、列に値が含まれている必要があります。「表レベル制約」で説明する他の制約(列定義または表定義の一部として定義可能)とは異なり、NOT NULL
制約は、列定義の一部として定義する必要があります。
そのデータがデータベースの整合性に必要な場合は、NOT NULL
制約を使用します。たとえば、すべての従業員が特定の部門に所属している場合、部門識別子を含む列には、NOT NULL
制約を定義する必要があります。一方、行が追加または変更されたときに、データが未定または存在しない場合(たとえば、住所の補助的なオプション行)は、列をNOT NULL
で定義しません。
主キー制約は、主キーを含む1つ以上の列に対し、自動的にNOT NULL
制約を追加します。
デフォルト値を使用して列を定義すると、行にその列の代替値が指定されていない場合には、表に挿入される新しい行にデフォルト値が格納されます。
Oracleデータベースでは、ルールを適用してデータの整合性を維持できます。たとえば、従業員データを含む表では、従業員名列に値としてNULL
は指定できません。同様に、このような表では、同じIDを持つ2人の従業員は認められません。
Oracleデータベースでは、制約と呼ばれるデータの整合性ルールを列レベルまたは表レベルで表に適用できます。ただし、NOT NULL
制約では表レベルの制約は適用できません。制約に違反する行の挿入または更新をしようとすると、エラーが発生し、その文はロールバックされます。同様に、移入した表に新しい制約を適用する場合も、既存の行が新しい制約に違反していると、エラーが発生します。
表レベルで適用できる制約タイプは、次のとおりです。
制約は作成可能で、ほぼすべての場合、様々な状態を指定して変更できます。オプションには、使用可能または使用不可(行が追加または変更された場合、制約を確認するかどうか)および遅延または即時(制約のチェックをトランザクションの終了時にするか、文の終了時にするか)をそれぞれ指定します。
ローカル管理表領域に表を作成し、自動セグメント領域管理を使用する場合は、Oracle固有の記憶域アルゴリズムを使用して表を作成する必要があります。ディクショナリ管理表領域に表を格納する必要がある場合は、その表に対し記憶域特性を設定できます。
インストールした事前構成済データベースには、ディクショナリ管理表領域は含まれません。したがって、これらのオプションについてここでは説明しませんが、使用する必要がある場合は、『Oracle Database管理者ガイド』および『Oracle Database概要』を参照してください。
「表の作成」ページを使用して表を作成する場合は、「SQL表示」ボタンをクリックして、構成済のSQL文を表示できます。このオプションを使用すると不完全なSQL文も表示されるため、このオプションを使用してSQL文を表示する場合は、入力を完了しておく必要があります。
また、既存の表と同じ構造および内容を使用して新しい表も作成できます。この方法は、本番の表と類似するテスト表の作成に役立ちます。このような表を作成するには、「次を使用して定義」リストで「SQL」を選択して、CREATE TABLE ASボックスで始まるSQL文を完成させます。問合せには、元の表のすべての列および行を含めるか、SQL SELECT
文を使用して、必要な行を特定したり、列名を列の別名に変更したり、特定の列を除外することができます。
新しい表には、ユーザー定義型で定義した列を含めることができます。ユーザー定義型は、CREATE TYPE
文を使用して作成します。詳細は、『Oracle Database SQLリファレンス』を参照してください。
1つ以上のLOB列を含む表を作成する場合、表のLOBコンポーネントに対して異なる記憶域オプションを定義できます。ほとんどの場合、デフォルトの設定を使用する必要があります。それらを変更する場合は、「デフォルトのLOB属性の設定」をクリックして、「デフォルトのLOB属性の設定」ページでエントリを指定します。また、列名を選択し、「拡張属性」をクリックして、1つの列に対するLOB属性も設定できます。
複数のパーティションを持つ表も作成できます。各パーティションは、1つの表で多数の特性を持つ別々のデータベース・オブジェクトですが、各パーティションには、その親表として同じ列定義が含まれます。非常に大きな表をパーティション化すると、各パーティションを単独で構成できるため、表の管理を簡単にできます。また、パーティション化した表に対する一部の操作では、パーティション化しない表に対する操作と比較すると、より効率が向上する場合があります。これは、パーティション化しない表と比較すると、パーティションがより多くのディスク・ドライブに分散されるためであり、また、特定のSQL文を処理する場合、オプティマイザによって、すべてのパーティションの内容を処理する必要がないためです。
問合せは頻繁に実行されるが、更新はあまりされない大きな表を持つアプリケーション(特にデータ・ウェアハウス)に対して、圧縮された表を作成できます。圧縮された表は、圧縮されない表(デフォルト)より必要なディスク記憶域が小さくなります。圧縮された表を作成するには、独自のCREATE TABLE
文を記述する必要があります。これは、このオプションがEnterprise Managerで使用できないためです。
Enterprise Managerを使用して、指定したスキーマ内のすべての表を表示できます。表定義も表示できます。
表を表示するには、次の手順を実行します。
「表」プロパティ・ページが表示されます。
SYS
と入力します。または、「スキーマ」ボックスの横にある懐中電灯アイコンをクリックしてスキーマを検索します。
指定したスキーマ内の表が表示されます。図8-3に、SYS
スキーマ内の表の一部を示します。
「表の表示: table_name」ページが表示されます。
表名および表定義を表示するのみでなく、表に格納されたデータおよびそのデータの表示に使用するSQL文も表示できます。また、SQL文を変更して結果セットを変更することもできます。
表データを表示するには、次の手順を実行します。
hr
スキーマ内の表を検索します。
EMPLOYEES
を選択します。
「表のデータの表示: table_name」ページが表示されます。図8-4に、hr.employees
のページの一部を示します。「問合せ」ボックスには、表のデータを表示するために実行したSQL問合せが表示されています。「結果」セクションには、表のデータが表示されています。
「表の再問合せ: table_name」ページが表示されます。このページで、表示する列を選択できます。また、SQL文の結果を限定するWHERE
句を指定することもできます。
また、SELECT
文を使用した独自のSQL問合せを記述して、表の内容を表示することもできます。いずれかの「データベース」プロパティ・ページの「関連リンク」セクションで「i SQL*Plus」をクリックしてi SQL*Plusセッションを開始すると、SQL文を実行できます。SELECT
文とそのオプションの詳細は、『Oracle Database SQLリファレンス』を参照してください。
Enterprise Managerを使用して、表を作成できます。これは、データベース管理者またはCONNECT
ロールを持つユーザーとして行います。
Enterprise Managerを使用した表の作成中に、表のサイズを見積もることができます。この操作によって、表を格納するデータベースまたは使用可能なディスクに十分な容量があるかどうかを判断できます。容量が不十分であっても表は作成できますが、必要な記憶域を確保するまで、表は移入できません。
表のサイズを見積もるには、次の手順を実行します。
「表」ページが表示されます。
「表を作成: 表編成」ページが表示されます。
「表の作成」ページが表示されます。
「表サイズの見積り」ページが表示されます。
Enterprise Managerによって、見積り値(MB)が戻されます。
次の例では、第7章「ユーザーおよびセキュリティの管理」で作成したMYUSER
スキーマに、purchase_orders
という表を作成します。この表には、po_number
、po_description
、po_date
およびpo_item
列を含めます。
MYUSER
スキーマに表を作成するには、手順を実行します。
「表」ページが表示されます。
「表を作成: 表編成」ページが表示されます。
「表の作成」ページが表示されます。詳細は、図8-5「「表の作成」ページ」を参照してください。
purchase_orders
を入力します。「スキーマ」ボックスに、MYUSER
と入力します。「表領域」ボックスで、デフォルトをそのまま使用します。
「スケール」、「NOT NULL」および「デフォルト値」は空白のままにできます。
表が正常に作成されたことを示す更新メッセージが表示されます。
Enterprise Managerを使用して、列を追加および削除したり、制約を追加することができます。次の項では、列を追加する方法と、表制約を追加および削除する方法について説明します。
この例では、po_item2
という新しい列を追加して、purchase_orders
表を変更します。
po_item2
列を追加するには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、以前作成したPURCHASE_ORDERS
表が表示されます。
PURCHASE_ORDERS
表を選択して、「編集」をクリックします。「表の編集: MYUSER.PURCHASE_ORDERS」ページが表示されます。
po_item2
と入力します。「データ型」リストから、「VARCHAR2」を選択します。「サイズ」ボックスに、100
と入力します。「スケール」、「NOT NULL」および「デフォルト値」は空白のままにできます。
表が正常に変更されたことを示す更新メッセージが表示されます。
この例では、列を削除する方法について説明します。ここでは、「列の追加」でPURCHASE_ORDERS
表に追加されたpo_item2
列を削除します。
po_item2
列を削除するには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、以前作成したPURCHASE_ORDERS
表が表示されます。
PURCHASE_ORDERS
表を選択して、「編集」をクリックします。「表の編集: MYUSER.PURCHASE_ORDERS」ページが表示されます。
po_item2
を選択します。
削除した列(po_item2
)に関する情報が含まれていた行は空白になり、表が正常に変更されたことが示されます。
Enterprise Managerを使用して、表に制約を追加できます。この例では、発注書が常にIDとともに入力され、発注書ID(po_id
)が表の主キーになるルールを適用するとします。この列に、NOT NULL
制約および主キー制約を追加します。
purchase_orders
表にこれらの制約を追加するには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、以前作成したPURCHASE_ORDERS
表が表示されます。
PURCHASE_ORDERS
表を選択して、「編集」をクリックします。「表の編集: MYUSER.PURCHASE_ORDERS」ページが表示されます。
po_id
列を選択し、「NOT NULL」を選択してこの列にNOT NULL
制約を適用します。
確認メッセージが表示されます。
「制約」プロパティ・ページが表示されます。
主キー制約を追加するページが表示されます。
「制約」ページに新しい制約が表示されます。
確認メッセージが表示されます。「表の表示」ページに移動して、新しい制約を表示できます。
たとえば、使用可能から使用不可へと、既存の制約の状態を変更できます。この例では、前述の項「新しい表制約の作成」で作成した主キー制約を使用します。
制約を無効にするには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、以前作成したPURCHASE_ORDERS
表が表示されます。
PURCHASE_ORDERS
表を選択して、「編集」をクリックします。「表の編集: MYUSER.PURCHASE_ORDERS」ページが表示されます。
「制約」プロパティ・ページが表示されます。
「PRIMARY制約の編集」ページが表示されます。
確認メッセージが表示されます。主キー制約が無効になっていることが「無効」列に示されます。
Enterprise Managerを使用して、表から制約を削除できます。制約を削除する前に、使用不可にする必要はありませんが、最初に制約を使用不可にして、その制約を削除できるかどうかを判断できます。親表の制約によって子表の外部キー制約が実行される場合、および子表に依存行が含まれている場合は、この制約を無効にしたり、削除することができないことがあります。
この例では、「新しい表制約の作成」で作成した主キー制約を削除します。
制約を削除にするには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、以前作成したPURCHASE_ORDERS
表が表示されます。
PURCHASE_ORDERS
表を選択して、「編集」をクリックします。「表の編集: MYUSER.PURCHASE_ORDERS」ページが表示されます。
「制約」プロパティ・ページが表示されます。
確認メッセージが表示されます。
Enterprise Managerを使用すると、バッチで表にデータをロードできます。バッチによるロードは、データが多い場合に役立ちます。ファイル・システムからデータをロードできます。また、ファイルにデータをエクスポートすることもできます。
Enterprise Managerでデータをロードする場合は、カンマで区切られたデータファイルを使用できます。また、Enterprise Managerでは制御ファイルを自動的に作成できます。SQL*Loader制御ファイルによって、Oracleでのデータのロード方法が指定されます。これは、データベースの制御ファイルとは異なります。
次の例では、「表の作成: 例」でMYUSER
を使用して作成したpurchase_orders
表にデータをロードします。簡略化するために、この例では3つの行のみをロードします。制御ファイルおよびデータファイルは別のものですが、このロード方法では、ファイルの概念は同じです。
この例では、データベースのファイル・システムまたはクライアント・ホストにload4.dat
というデータ・ファイルを作成する必要があります。ファイルの内容は次のとおりです。
1, 25-MAY-2005, Office Equipment, Optical Mouse 2, 18-JUN-2005, Computer System, Dell Laptop 3, 26-JUN-2005, Travel Expense, Car Rental
myuser.purchase_orders
表にデータファイルをロードするには、次の手順を実行します。
「データのロード: 制御ファイルの生成または既存の制御ファイルの使用」ページが表示されます。
「データのロード: データファイル」ページが表示されます。
「データのロード: 表およびファイル形式」ページが表示されます。このページには、データファイルの内容が表示されます。
myuser.purchase_orders
と入力し、「次へ」をクリックします。「データのロード: ファイル形式属性」ページが表示されます。
「データのロード: ロード・メソッド」ページが表示されます。
「データのロード: オプション」ページが表示されます。
「データのロード: スケジュール」ページが表示されます。
「データのロード: レビュー」ページが表示されます。このページを使用すると、ファイル名およびロード方法を確認できます。ロード中の制御ファイルも表示できます。変更がある場合は、「戻る」ボタンをクリックします。
ジョブが正常に作成されたことを確認する「ジョブ・アクティビティ」ページが表示されます。
「ジョブ・アクティビティ」ページには、ジョブ情報およびジョブが正常に実行されたことが表示されます。詳細は、「ステータス」の下のリンクをクリックしてください。
myuser.purchase_orders
表を検索し、実行する操作として「データの表示」を選択すると、ロードしたデータを確認できます。詳細は、図8-6「表のデータの表示: MYUSER.PURCHASE_ORDERS」を参照してください。表やその内容が不要になった場合、Enterprise Managerを使用して表を削除できます。表のデータは、本当に不要であることを確認した後で削除してください。削除文を実行した後でレコードを取得することはできますが、困難であり時間がかかります。
この手順をテストするには、「表の作成」の手順に従ってMYUSER
スキーマにtest
という表を作成します。VARCHAR2(1)
型のcol
という列が1つ含まれているtest
表を作成します。
表を削除にするには、次の手順を実行します。
MYUSER
と入力して、「実行」をクリックします。結果リストに、作成したtest
表が表示されます。
TEST
表を選択し、「オプションを指定して削除」をクリックします。「オプションを指定して削除」ページが表示されます。
表が正常に削除されると、「表の編集」ページに確認メッセージが表示されます。
次の項では、索引を作成および管理する方法について説明します。
索引は、表に関連付けられたオプションの構造です。これらを作成すると、問合せのパフォーマンスを向上できます。このマニュアルでも、索引を使用すると特定の情報をすばやく見つけることができます。それと同様に、Oracleの索引を使用すると表データにすばやくアクセスできます。
索引は、表の1つ以上の列に対して作成できます。作成された索引は、Oracleにより自動的にメンテナンスされ、使用されます。表データに対する変更(新しい行の追加、行の更新または削除など)は、関連するすべての索引にも自動的に取り込まれます。その操作は、ユーザーに対して透過的です。
一部の索引は、表に定義する制約を使用して暗黙的に作成することもできます。たとえば、値が一意である必要があるという制約を持つ列は、Oracleによって一意キー索引が作成されることになります。
「管理」ページの「データベース・オブジェクト」セクションの「索引」リンクをクリックすると、「索引」ページが表示されます。このページは、図8-3に示した「表」ページと内容および機能が類似しています。
他の索引を追加する前に、データベースのパフォーマンスを検証しておく必要があります。これによって、新しい索引を追加した後、パフォーマンスを比較できます。
通常、索引は、単一の既存行または少数の既存行の操作に必要な問合せやSQL文のための値です。ただし、索引が多すぎると、行を追加、変更または削除する文のオーバーヘッドの処理が増加する可能性があります。
索引を増やすとアプリケーションのパフォーマンスが向上するかどうかを確認するために、Enterprise ManagerでSQLアクセス・アドバイザを実行できます。詳細は、第10章「データベースの監視およびチューニング」のSQLアクセス・アドバイザの使用を参照してください。
索引は、様々な方法で分類できます。次の項に、主要なオプションを示します。
標準の索引(Bツリー索引)には、索引キーの各値に対するエントリと、その値が格納されている行へのアドレスが含まれます。Bツリー索引はデフォルトで、Oracleデータベースでは、最も一般的な索引です。
ビットマップ索引は、値とその値が格納される可能性がある行のアドレスを簡潔に示すためにビットで構成される文字列を使用します。ビットマップ索引は、Bツリー索引より簡潔で、一部の検索をより効率的に実行できます。ただし、一般的な使用では、ビットマップ索引は表の行操作に、より多くのオーバーヘッドが必要なため、主にデータ・ウェアハウス環境で使用されます。データ・ウェアハウス環境の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。
索引を使用したデフォルトの検索では、文字データはASCII値でソートされ、低い値から高い値へと検索され、数値データは小さい数から大きな数へと、日付は古い値から新しい値へと検索されます。このデフォルトの動作は、昇順索引で作成された索引で実行されます。降順オプションで前述の索引を作成すると、索引の検索順序を逆にして実行できます。
通常、索引エントリは表の列に格納されている値に基づいて作成されます。このような索引を列索引と呼びます。また、索引付けされる値が表のデータに基づくファンクション索引を作成できます。たとえば、大文字/小文字が混在している文字データを検索する場合、ファンクション索引を使用すると、文字データをすべて大文字と仮定して値が検索されます。
1つの列のみ(単一列索引)または複数の列(連結索引)で索引を作成できます。連結索引は、すべての列が頻繁に実行されるSQL文のWHERE
句に含まれる可能性がある場合に有効です。
連結索引では、索引で使用される列を慎重に定義する必要があります。重複が最も少ない値をfirst、次に重複が少ない値をsecondなどのように定義します。重複する値が多く含まれている列またはNULL
値を持つ行が多く含まれている列は、索引定義に含めないか、または索引定義で最後に定義する列にする必要があります。
表の場合と同様に、パーティションを持つ索引またはパーティションを持たない索引を作成できます。関連する表もパーティション化されていて、索引が表と同じパーティション・スキームを使用している場合(ローカル索引)は、ほぼすべての状況で索引のパーティション化が役立ちます。索引は、基礎となる表のようにパーティション化する必要はありません。パーティション化した表でパーティション化しない(グローバル)索引も作成できます。
データベースに存在する索引を検索するには、「索引」ページの検索オプションを使用します。
索引を表示するには、次の手順を実行します。
「索引」ページが表示されます。
また、「表名」を選択して、索引が構築されている表の名前を検索できます。
SYS
と入力します。または、「スキーマ」ボックスの横にある懐中電灯アイコンをクリックしてスキーマを検索します。
指定したスキーマ内の索引が表示されます。
「索引の表示: index_name」ページが表示されます。「一般」領域に、索引が作成された状態、列など、索引に関する基本的な情報が表示されます。別の領域には、索引によって使用される領域の情報および索引の定義に使用されたオプションの情報が表示されます。
Enterprise Managerを使用して索引を作成できます。索引を作成するには、索引付けする1つ以上の列および作成する索引タイプを指定します。
次の例では、SH.PRODUCTS
表のSUPPLIER_ID
列に標準のBツリー索引を作成します。この表は、サンプル・スキーマに含まれています。
索引を作成するには、次の手順を実行します。
「表」ページが表示されます。
sh
と入力し、「実行」をクリックします。結果リストに、sh
スキーマ内の表が表示されます。
PRODUCTS
表を選択し、「アクション」リストから「索引の作成」を選択します。「実行」をクリックします。「索引の作成」ページが表示されます。
「索引」ページに確認メッセージが表示されます。新しい索引は「結果」にリストされます。
索引が不要になった場合は、Enterprise Managerを使用して削除できます。
この例では、以前作成した索引PRODUCTS_SUPPLIER_IDX
を削除します。
索引を削除するには、次の手順を実行します。
「索引」ページが表示されます。
sh
と入力します。「オブジェクト名」に、PRODUCTS_SUPPLIER_IDX
と入力します。
結果ページに、索引PRODUCTS_SUPPLIER_IDX
が表示されます。
PRODUCTS_SUPPLIER_IDX
を選択し、「削除」をクリックします。確認ページが表示されます。
「表の編集」ページに、索引が正常に削除できたかどうかを示す確認メッセージが表示されます。
次の項では、ビューについて説明します。
ビューは、1つ以上の表または他のビューに含まれているデータの表現がカスタマイズされたものです。ストアド・クエリーと考えることもできます。ビューに実際のデータは格納されていません。かわりに、ビューの基礎となる表からデータを導出します。これらの表をビューの実表と呼びます。
表の場合と同様に、ビューに対しても、いくつかの制限付きで、問合せ、更新、挿入および削除を実行できます。ビューに対して実行する操作は、すべてビューの実表にも影響します。ビューは事前に定義された行と列の集合のみにアクセスを限定して、表のセキュリティ・レベルを強化します。また、データの複雑さを隠し、複雑な問合せを格納します。
SYS
スキーマには多くの重要なビューがあります。データ・ディクショナリ・ビューは、データ・ディクショナリが変更された場合(たとえば、新しく表が作成されたり、ユーザーに新しい権限が付与された場合など)のみ変更されるため、静的と呼ばれます。
多くのデータ・ディクショナリ表には、3つの対応するビューがあります。
DBA_
ビューは、データベース全体に関連する情報をすべて表示します。DBA_
ビューは、管理者のみが使用します。
ALL_
ビューは、現行のユーザーがアクセスできるすべての情報を表示します。それらの情報には、現行のユーザーのスキーマの情報および他のスキーマのオブジェクトの情報(現行のユーザーが、権限またはロールによってそれらのスキーマのオブジェクトへのアクセス権を持つ場合)が含まれます。
USER_
ビューは、現行のユーザーのスキーマの情報をすべて表示します。これらのビューに問い合せるには、特別な権限は必要ありません。
単一のデータ・ディクショナリ表に対応するALL_
、DBA_
およびUSER_
ビューの列は、通常はほとんど同じです。
実行中のデータベース・アクティビティを監視するビューは、動的パフォーマンス・ビューと呼ばれます。管理者のみが使用できる動的パフォーマンス・ビューは、名前がV$
から始まり、V$
ビューと呼ばれることがあります。
SYS
スキーマのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
Enterprise Managerを使用して、指定したスキーマ内のビューを表示できます。ビュー定義も表示できます。
ビューを表示するには、次の手順を実行します。
「ビュー」プロパティ・ページが表示されます。
SYS
と入力します。または、「スキーマ」ボックスの横にある懐中電灯アイコンをクリックしてスキーマを検索します。
SYS
スキーマ内のビューが表示されます。これらのビューを使用すると、データ・ディクショナリの情報や実行中のデータベース・アクティビティを参照できます。SYS
スキーマのビューは、多数のOracle Enterprise Managerのページの情報のソースでもあります。
「ビュー: view_name」ページが表示されます。
次の例では、hr.employees
表を基にビューを作成します。この表は、サンプル・スキーマに含まれています。このビューは、employee_id
が100のマネージャKingのすべての直属の部下をフィルタ処理します。この目的は、このビューによって、マネージャKingに関する情報を適切に表示する一方で、hr.employees
表に対するセキュリティ・レベルも強化することです。
ビューを作成するには、次の手順を実行します。
「ビュー」プロパティ・ページが表示されます。
「ビューの作成」ページが表示されます。
「ビュー」ページに確認メッセージが表示されます。新しいビューが結果セクションに表示されます。
KING_VIEW
を選択した後、「アクション」リストから「データの表示」を選択します。
「ビューのデータの表示: HR.KING_VIEW」ページが表示されます。「結果」セクションに、ビューで選択されたデータが表示されます。
ビューが不要になった場合は、Enterprise Managerを使用して削除できます。
この例では、以前作成したビューHR.SKING_VIEW
を削除します。
ビューを削除にするには、次の手順を実行します。
「ビュー」ページが表示されます。
hr
と入力します。「オブジェクト名」に、SKING_VIEW
と入力します。
結果ページに、ビューSKING_VIEW
が表示されます。
SKING_VIEW
を選択し、「削除」をクリックします。確認ページが表示されます。
「ビュー」ページに、ビューが正常に削除できたかどうかを示す確認メッセージが表示されます。
Oracleには、データベースにプログラムを格納する機能があります。この機能を使用すると、頻繁に必要になるコードを1度だけ書き込んでテストした後は、そのコードが必要なすべてのアプリケーションからアクセスが可能になります。また、データベース常駐型プログラム・ユニットでは、コードが呼び出されると同じ処理がデータに適用されるため、アプリケーションの開発を容易にし、開発者間に一貫性を提供します。
データベース常駐型プログラムは、PL/SQLまたはJavaで記述できます。Enterprise Managerを使用して、PL/SQLパッケージ、プロシージャ、トリガー、ファンクション、Javaのソース、Javaのクラスなどのソース・タイプを管理できます。管理の内容には、これらのソース・タイプに対する作成、コンパイル、シノニムの作成、権限の付与、依存性の表示などが含まれます。これらの操作は、図8-7に示す、「管理」ページの「プログラム」セクションのリンクをクリックして実行できます。
このマニュアルでは、PL/SQLプログラム・ユニットの主要なタイプについて説明します。次の項では、次に示す内容を説明します。
プログラム・ユニットの作成および管理は、アプリケーション開発者の主要タスクです。ただし、これらのオブジェクトを管理する場合にDBAの支援が必要になる場合があります。スキーマに変更を行ったことによってオブジェクトが無効になる可能性があるためです。
パッケージとは、単一のユニットに定義またはPL/SQLコードのブロック(あるいはその両方)が含まれる構造体です。パッケージの内容を起動するには、パッケージおよびその中の要素をドット表記法を使用して指定します。たとえば、ユーザーCTXSYS
が所有するCTX_QUERY
パッケージにあるSTORE_SQE
というプロシージャを実行するには、CTXSYS.CTX_QUERY.STORE_SQE(
arg1,arg2
)
のように指定します。arg1
およびarg2
は、プロシージャの2つの引数に対する値です。パッケージ化された要素名を簡単にするには、シノニムを使用します。詳細は、「他のスキーマ・オブジェクトの使用」を参照してください。
データベースに存在するパッケージを表示するには、「パッケージ」ページの検索オプションを使用します。
パッケージを表示するには、次の手順を実行します。
「パッケージ」ページが表示されます。
SYS
と入力します。または、「スキーマ」ボックスの横にある懐中電灯アイコンをクリックしてスキーマを検索します。
指定したスキーマ内のパッケージが表示されます。
DBMS_ALERT
のリンクをクリックします。「パッケージの表示: package_name」ページが表示されます。このページには、パッケージ名、スキーマ、状態、メソッドおよびソースが表示されます。ソースには、パッケージのコードが含まれ、場合によって、次の要素が含まれます。
他のデータベース・オブジェクトの場合と同様に、Enterprise Managerを使用してパッケージを作成できます。この項では、パッケージ定義の作成方法について説明します。
パッケージ定義を作成するには、次の手順を実行します。
「パッケージ」ページが表示されます。
「パッケージの作成」ページが表示されます。
更新メッセージによってパッケージ定義の作成が確認されます。
他のデータベース・オブジェクトの場合と同様に、Enterprise Managerを使用してパッケージを編集できます。この例では、前述の項で作成したtest_package
パッケージを編集します。
パッケージを編集するには、次の手順を実行します。
「パッケージ」ページが表示されます。
hr
スキーマ内のパッケージを検索します。指定したスキーマ内のパッケージが表示されます。
TEST_PACKAGE
を選択します。「パッケージの編集: package_name」ページが表示されます。次の操作を実行できます。
オラクル社カスタマ・サポート・センターまたはアプリケーション開発者から指示された場合など、パッケージを削除する必要がある場合があります。他のデータベース・オブジェクトの場合と同様に、Enterprise Managerを使用して実行できます。この例では、test_package
パッケージを削除します。
パッケージを削除するには、次の手順を実行します。
「パッケージ」ページが表示されます。
hr
スキーマ内のパッケージを検索します。指定したスキーマ内のパッケージが表示されます。
TEST_PACKAGE
を選択します。確認ページが表示されます。
更新メッセージによって削除が確認されます。
パッケージ本体には、そのパッケージに定義されたプロシージャおよびファンクションのPL/SQLコードが含まれます。Enterprise Managerでは、パッケージについても、前述の項で説明した同じ移動パスやオプションを使用して、パッケージ本体の追加(作成)、編集(変更)、コンパイルおよび削除ができます。これらのパスによって、前述の項で説明した「パッケージ本体の編集」プロパティ・ページと「パッケージの編集」プロパティ・ページ間を直接移動できます。
パッケージの開発者が、1つ以上のプロシージャまたはファンクションをラップしている場合があります。ラップすることによって、コードが読取り不能な文字列に変換されるため、他の開発者によるアプリケーションの誤使用、または競合相手によるアルゴリズムの表示が困難になります。ラップされたコードは編集できません。「パッケージ本体の編集」ページの「ソース」ボックスに、「ソース・コードはラップされているため、表示できませんでした。
」というメッセージが表示され、変更には使用できません。
データベースに存在するパッケージ本体を検索するには、「パッケージ本体」ページの検索オプションを使用します。
パッケージ本体を表示するには、次の手順を実行します。
「パッケージ」ページが表示されます。
SYS
と入力します。または、「スキーマ」ボックスの横にある懐中電灯アイコンをクリックしてスキーマを検索します。
それ以外の場合は、オブジェクト名を入力するか、または懐中電灯アイコンをクリックして検索します。
指定したスキーマ内のパッケージが表示されます。
CONNECTIONINTERFACE
のリンクをクリックします。「パッケージ本体の表示: package_name」ページが表示されます。このページには、パッケージ名、スキーマ、状態およびソースが表示されます。ソースには、パッケージのコードが含まれています。CONNECTIONINTERFACE
パッケージの「ソース」ボックスに、パッケージがラップされていることが示されていることに注意してください。
パッケージの外部で作成されるプロシージャおよびファンクションは、スタンドアロン・サブプログラムと呼ばれます。スタンドアロン・サブプログラムの実行に必要なことは、スキーマ名およびオブジェクト名を指定することだけです。パッケージ名は必要ありません。また、パッケージ名がなくても、定期的に使用するサブプログラムにシノニムを作成することもできます。
PL/SQLプロシージャは、特定の操作を実行するサブプログラムです。プロシージャの名前、パラメータ、ローカル変数、およびそのコードが含まれ、例外を処理するBEGIN-END
ブロックを指定します。ファンクションは、値を計算するサブプログラムです。ファンクションとプロシージャは、ファンクションでは値が戻されるという点を除いて、構造的に類似しています。
Enterprise Managerを使用して、パッケージ化されたサブプログラムと同様に、スタンドアロン・サブプログラムを作成、変更、コンパイルおよび削除できます。ただし、親パッケージを持たない(つまり、Enterprise Managerにパッケージ・プロパティ・ページに対する移動パスが存在しない)場合を除きます。「管理」ページの「プログラム」セクションで、「プロシージャ」および「ファンクション」のリンクをクリックして関連プロパティ・ページに移動します。
データベース・トリガーは、データベースの表、ビューまたはイベントに関連付けられたストアド・サブプログラムです。たとえば、表に影響するINSERT
、UPDATE
またはDELETE
文の実行前後に、Oracleで自動的にトリガーを起動できます。
トリガーは、Enterprise Managerを使用して管理できます。トリガーには、「管理」ページの「プログラム」セクションの「トリガー」をクリックして開くことができる独自のプロパティ・ページがあります。「トリガー」プロパティ・ページで、新しいトリガーの作成や既存のトリガーの表示、編集および削除を行うことができます。
「トリガーの作成」および「トリガーの編集」プロパティ・ページは、パッケージ、パッケージ本体およびスタンドアロン・サブプログラムの対応するページに類似しています。次の違いに注意してください。
トリガーの作成、編集およびコンパイルは、データベースPL/SQLユニットと同様です。トリガーは、表のトリガーDMLによって自動的に実行されるため、直接実行する方法はありません。
次に示すような他のスキーマ・オブジェクトは、Enterprise Managerを使用して管理できます。
シノニムは、表、ビューなどの、すべてのスキーマ・オブジェクトの別名です。シノニムを使用すると、アプリケーションまたはユーザーから基礎的なデータベース構造を簡単に隠すことができます。たとえば、hr
スキーマのemployees
表の別名として、personnel
というシノニムを作成できます。たとえば、次の問合せを作成するとします。
SELECT employee_id, salary FROM hr.employees ORDER BY salary
シノニムを適切に使用すると、次のようにより簡単に問合せをリライトできます。
SELECT employee_id, salary FROM personnel ORDER BY salary
シノニムの他のメリットは、スキーマ名が異なっていても、本番データベースと同じシノニムを開発データベースで使用できる点です。この方法によって、両方の環境でアプリケーション・コードを変更せずに実行できます。たとえば、personnel
シノニムが定義されている場合、employees
表がdev1
スキーマに存在する開発中のデータベースで、以前に作成した問合せの改良型が動作します。
シノニムは単なる別名であるため、データ・ディクショナリ内の定義以外に記憶域は必要ありません。
順序とは、複数のユーザーが一意の整数を生成するために使用できるデータベース・オブジェクトです。表の主キーの値を指定するためにシーケンス・ジェネレータを使用すると、キーの値を簡単に一意にすることができます。
データベース・リンクはスキーマ・オブジェクトであり、これによってOracleがリモート・データベースに接続され、そこにあるオブジェクトにアクセスします。データベース・リンクは、分散データベース環境で使用されます。詳細は、『Oracle Database管理者ガイド』を参照してください。
Oracle by Example(OBE)には、このマニュアルに関するシリーズが含まれています。このOBEでは、この章のタスクを段階的に説明し、注釈付きのスクリーン・ショットを使用します。
スキーマのOBEを参照するには、ご使用のブラウザで次の場所を指定します。
http://www.oracle.com/technology/obe/10gr2_2day_dba/schema/schema.htm
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|