Oracle Database 2日でデータベース管理者 11g リリース1(11.1) E05759-03 |
|
この章では、スキーマ・オブジェクトの作成および管理について説明します。内容は次のとおりです。
スキーマはデータベース・オブジェクトの集合です。スキーマはデータベース・ユーザーによって所有され、ユーザー名と同じ名前を共有します。スキーマ・オブジェクトはユーザーによって作成された論理構造です。表や索引などのいくつかのオブジェクトはデータを保持します。ビューやシノニムなどのその他のオブジェクトは定義のみで構成されます。
データベースのすべてのオブジェクトは1つのスキーマに属し、スキーマ内に一意の名前を持っています。異なるスキーマにある場合、複数のデータベース・オブジェクトは同じ名前を共有できます。スキーマ名を使用して、確実にオブジェクトを参照できます。たとえば、hr.employees
はhr
スキーマでemployees
と名付けられた表を参照します(employees
表はhr
に所有されます)。データベース・オブジェクトとスキーマ・オブジェクトという言葉は同義です。
データベース・オブジェクトを作成するときには、必ず任意のスキーマ内に作成する必要があります。その1つとして、スキーマを所有するユーザーとしてデータベースにログインし、それからオブジェクトを作成するという方法があります。通常、1つのアプリケーションに属するすべてのオブジェクトは、同一スキーマ内に配置できます。
スキーマ・オブジェクト名は特定のルールに従っている必要があります。スキーマ内で一意であるのみでなく、スキーマ・オブジェクト名が30バイト以下で先頭が文字で始まる必要があります。これらのルールのいずれかに違反する名前のオブジェクトの作成を試みると、データベースでエラーが発生します。
スキーマ・オブジェクトは、SQLまたはOracle Enterprise Manager Database Control(Database Control)を使用して作成および操作できます。
Database Controlを使用してスキーマ・オブジェクトを作成する際、「SQL表示」ボタンをクリックすると、指定したスキーマ・オブジェクトのプロパティに相当するSQL文が、グラフィカル・インタフェースによって表示されます。Database Controlは、このSQL文を送信して、スキーマ・オブジェクトを作成します。このオプションを選択すると不完全な文も表示されるので、スキーマ・オブジェクトのすべての仕様を入力して、Database Controlが送信する完全なSQL文を確認する必要があります。
所有するスキーマおよびその他のスキーマでスキーマ・オブジェクトを作成、変更および削除できるデータベース管理者(DBA)について説明します。この目的のために、データベース管理者はDBA
ロールを付与されているユーザーとして定義されます。これにはSYS
およびSYSTEM
ユーザーがデフォルトで含まれます。
他のユーザーに、DBA権限を付与することなくスキーマ・オブジェクトを管理させることができます。たとえば、通常は、アプリケーション開発者がスキーマ・オブジェクトを作成、変更、削除できます。そのため、RESOURCE
ロールをアプリケーション開発者に付与します。
「非管理ユーザーのDatabase Controlへのアクセス権の付与」の説明に従って、スキーマ・オブジェクトを管理するためにDatabase Controlにログインする前に、Database Controlへの開発者アクセス権を付与する必要があります。Database Controlへのアクセス権を付与していない場合、開発者はSQL*PlusまたはSQL開発者でスキーマ・オブジェクトを管理する必要があります。
次の項ではデータベース表およびデータベース表の作成、変更方法を説明します。
表は、Oracle Databaseのデータ記憶域の基本的な単位です。すべてのユーザーがアクセスできるデータが含まれます。各表は列と行で構成されています。たとえば、employees
表には、last_name
およびemployee_id
と呼ばれる列があります。表の各行は異なる従業員を表し、last_name
およびemployee_id
の値を含みます。
表を作成するときには、表のタイプを指定し、列と制約を定義します。制約とは、データの整合性確保を補助するルールです。
この項の内容は次のとおりです。
Oracle Databaseで最も一般的な表の種類はemployees表のような単純な列で構成されているリレーショナル
表です。オブジェクト表およびXMLType
表をサポートしています。3つの表はどれも永続または一時として定義可能です。一時表はトランザクションまたはセッション中にのみ存在するセッションのプライベート・データを保持します。結果セットは複数の操作により構築されるため、結果セットを一時的にメモリーに保持する必要があるアプリケーションで役立ちます。
ヒープ構造または索引構成構造のいずれかでリレーショナル表を構築できます。ヒープ構造では、行を格納する順序は特に決まっていません。索引構成表では行の順序は選択されたいずれかの列の値によって決定されます。一部のアプリケーションでは、索引構成表を使用してパフォーマンスおよびディスク領域の使用効率を向上させることができます。
この項では永続のヒープ構成表について説明します。その他の表のタイプおよび使用する場合の詳細は、『Oracle Database管理者ガイド』、『Oracle Database概要』および『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。SQLによる表の作成および変更に必要な構文は、『Oracle Database SQL言語リファレンス』を参照してください。
データを保持するために表の列を定義します。列を作成するときに、次の属性を指定します。
データ型の属性は列に保存されているデータの種類を定義します。表を作成する場合、各列のデータ型を指定する必要があります。
データ型は各列に含むことができる値のドメインを定義します。たとえば、DATE
列では値February 29
(うるう年を除く)、値2
またはSHOE
は使用できません。その後、列に挿入した各値はその列をデータ型と想定します。たとえば、17-JAN-2004
を日付列に挿入する場合、有効な日付に変換したことを確認した後にOracle Databaseは文字列を日付値として処理します。
表8-1に、一般的なOracle Database組込みデータ型の一部を示します。
制約により列の有効な値が決定します。Oracle Enterprise Manager Database Control(Database Control)では、表の作成ページの列レベルで定義できる制約は、行が挿入または更新されるたびに列に値があることを要求するNOT NULL
制約のみです。「表レベルの制約について」で説明されている、列定義の一部または表定義の一部として定義できるその他の制約とは異なり、NOT NULL
制約は列定義の一部として定義する必要があります。
データベースの整合性のため列にデータを指定する必要がある場合は、NOT NULL
制約を使用します。たとえば、すべての従業員が特定の部門に所属する必要がある場合、部門の識別子を含む列はNOT NULL
制約を付けて定義される必要があります。一方、行が追加または変更される際にデータが不明であるまたは存在しない場合があるときは、NOT NULL
として列を定義しないでください。NOT
NULL
制約を使用しない列の例は、メールアドレス内の2番目、オプションの行です。
データベースは列または表の主キーを含む列にNOT NULL
制限を自動的に追加します。
列に値が入力されないまま新しい行が挿入されると、この値が列に自動的に格納されます。デフォルト値はリテラルに、または式として指定できます。ただし、式を作成する方法には制限があります。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
列データの自動暗号化が可能です。詳細は、『Oracle Database 2日でセキュリティ・ガイド』の透過的データ暗号化の説明を参照してください。
Oracle Databaseでは、データの整合性を確保するためのルールを適用できます。たとえば、従業員のデータを含む表では、従業員名列の値としてNULL
は受け入れられません。同様に、この表では同一のIDを持つ従業員が2人存在することはできません。
Oracle Databaseでは、表レベルおよび列レベルの両方で制約というデータの整合性規則を適用できます。制約に違反する行を挿入または更新を試行するSQL文はエラーになり、ロールバックされます。同様に、データが入力されている表に新しく制約を適用すると、既存の行が新しい制約に違反する場合、エラーになります。
表レベルで適用できる制約のタイプは次のとおりです。
NULL
値は指定できません。
SALARY > 0
です。
制約が作成され、ほとんどの場合、異なるステータスで変更できます。オプションで有効または無効を選択すると、行が追加または変更されるときに制約をチェックするかどうかを決定できます。また、オプションで遅延、または即時を選択すると、制約の検証をトランザクションの最後に行うか、文の最後に行うかを決定できます。
表の記憶域の属性の数値を指定できます。たとえば、ディスク上の表の初期サイズを指定できます。表の記憶域属性設定の詳細は、『Oracle Database管理者ガイド』および『Oracle Database SQL言語リファレンス』を参照してください。
この項では、表作成に関する追加情報を示します。内容は次のとおりです。
新規の表には、ユーザー定義型で定義された1つ以上の列が含まれます。ユーザー定義型を使用すると、単一行の単一列内に複数の値を含めることができます。この複数の値は配列、ネストされた表またはオブジェクトとして表すことができます。オブジェクト型は、注文書のような実在するエンティティを表します(注文書型の列の値を取得すると、注文書番号、顧客番号、数量などを含むレコードが戻されます)。ユーザー定義型はCREATE TYPE
文を使用して作成します。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
ラージ・オブジェクト(LOB)列は、テキストやストリーミング・ビデオなどの非構造化データの格納に使用され、情報をTB単位まで保持できます。Oracle Database 11g では、SecureFileという次世代のLOBデータ型を使用できます。SecureFileは、高パフォーマンスで管理しやすいだけでなく、既存のLOBインタフェースとの完全な下位互換性を実現します。また、インテリジェント・データ圧縮、重複除外および透過的暗号化などの高度な機能もサポートしています。下位互換性を確保するため、Oracle Database 10g リリース2以前のリリースのLOB実装(SecureFileに対してBasicFileと呼ぶ)もサポート対象となります。表にLOB列を追加する場合は、SecureFileとして作成するのかBasicFileとして作成するのかを指定できます。記憶域タイプを指定しない場合は、LOBは下位互換性を確保するためBasicFileとして作成されます。
1つ以上のLOB列がある表を作成する場合は、そのLOB列を選択し、表の作成ページの一般サブページで「拡張属性」をクリックして、記憶域タイプ(BasicFileまたはSecureFile)と記憶域オプションを指定します。表中のすべてのLOB列に同じ記憶域タイプおよび記憶域オプションを指定する場合は、「デフォルトのLOB属性の設定」をクリックします。
表および索引をパーティション化できます。大規模な表と索引をサポートするため、アドレス・キーをパーティション化して、表と索引をパーティションと呼ばれる小規模で管理しやすいピースに分割できます。パーティション化された表と索引にアクセスする際にも、SQL問合せおよびDML文を変更する必要はありません。パーティション化はアプリケーションに対して透過的です。
パーティションが定義された後、特定の操作の効率が非常に向上されます。たとえば、一部の問合せではデータベースが表のすべてではなくパーティションのサブセットのみにアクセスして問合せ結果が生成されます。この技術(パーティション・プルーニングと呼ばれます)により向上したパフォーマンスを概算できます。また、データ管理操作はすべての表ではなくパーティション・レベルで発生します。これによりデータ・ロード、索引作成および再ビルド、バックアップおよびリカバリなどの操作の時間が大幅に削減されます。
各パーティションはその他のパーティションから独立した固有の表領域に格納されます。異なる表領域は異なるディスクに配置できるため、可用性およびパフォーマンスのためにより適切にチューニングできる表構造が提供されます。頻繁にアクセスされるデータはパフォーマンスの高いディスクに配置され、取得される頻度の低いデータはより低コストの記憶域に配置されるため、異なる表領域のパーティションを別々のディスクに保存することにより、使用可能な記憶域使用量を最適化できます。
パーティション化は、様々なタイプの大量のデータを管理するアプリケーションで役立ちます。オンライン・トランザクション処理(OLTP)システムでは、多くの場合、管理性および可用性が向上し、データ・ウェアハウス・システムではパフォーマンスと管理性が向上します。
表の圧縮機能は、OLTPアプリケーションとデータ・ウェアハウス・アプリケーションのどちらにも適しています。表を圧縮すると、必要なディスク記憶域を節約できます。また、入出力やバッファ・キャッシュの要件が低くなるため、問合せのパフォーマンスがよくなります。圧縮はアプリケーションに対して透過的に行われるため、INSERT、UPDATEまたはDELETEなどの標準DML操作や一括ロードの実行にかかるオーバーヘッドは最小限で済みます。表の圧縮機能の構成は、表の作成ページの記憶域サブページで実行できます。
参照:
|
Database Controlを使用して、指定したスキーマ内にすべての表をリストでき、各表の定義を表示できます。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
SYS
およびhr
を含むスキーマ名の例が表示されます。
「オブジェクト名」フィールドに検索文字列を入力した場合、名前の先頭とその検索文字列が一致するすべての表が表示されます。検索文字列の先頭にアスタリスク(*)を入力した場合、表名の一部に検索文字列を含むすべての表が表示されます。
指定したスキーマの表が表示されます。
表の表示ページが表示されます。
表名および表定義の表示以外にも、表に格納されたデータおよびデータを表示するために使用されるSQL文を表示できます。また、SQL文を変更し、結果セットを変更できます。
hr
スキーマの表を検索します。
たとえば、employees
を選択します。
表のデータの表示ページが表示されます。
「問合せ」フィールドは表のデータ表示を実行するSQL問合せを表示します。「結果」セクションは表のデータを表示します。すべての列を表示するにはページの下にある横スクロール・バーを使用する必要がある可能性があります。
表の再問合せページが表示されます。このページでは表示する列を選択できます。また、結果を制限するSQL SELECT
文のWHERE
句を指定できます。
表のコンテンツを参照するために、独自のSQL SELECT
文を記述して送信することもできます。データベース・ホームページの「関連リンク」セクションの「SQLワークシート」をクリックして、Database ControlのSQLワークシート・セッションを開始し、SQL文を実行します。
SELECT
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
Database Controlを使用して、表を作成できます。表を作成しデータを入力する前に、サイズを見積もり、十分にデータを保持できる領域があることを確認します。
次の例では、第7章「ユーザー・アカウントおよびセキュリティの管理」で作成したnick
スキーマでpurchase_orders
という名前の表を作成します。この表には次の列が含まれます。
列名 | データ型 | サイズ | Not NULL |
---|---|---|---|
|
|
|
あり |
|
|
200 |
なし |
|
|
|
あり |
|
|
|
あり |
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
表を作成: 表編成ページが表示されます。
表の作成ページが表示されます。
purchase_orders
と入力し、「スキーマ」フィールドにnick
と入力します。デフォルトの表領域は、「例: ユーザー・アカウントの作成」で、ユーザーnick
を作成したときに指定しました。この表では、デフォルトの表領域の設定を使用します。
purchase_orders
表の列情報をこのトピック上部の表で指定されたとおりに入力します。たとえば、purchase_orders
表の最初の列では、名前をPO_NUMBER
、データ型をNUMBER
と入力し、「NOT NULL」チェック・ボックスを選択します。すべてのpurchase_orders
列では、「スケール」および「デフォルト値」を空白のままにします。
表サイズの見積りページが表示されます。
400000
を入力し、「表サイズの見積り」をクリックします。見積り結果は計算され表示されます。
表のサイズの見積りは、表の記憶域パラメータに指定する値を判断する際に役立ちます。
PRIMARY
」を選択し、「追加」をクリックします。PRIMARY制約の追加ページが表示されます。
「PO_NUMBER」
を選択し、「移動」をクリックします。po_number
列は選択済列リストへ移動します。
表ページに戻り、確認メッセージが表示され、「表」リスト内の新規の表が表示されます。purchase_orders
表は現在、主キーとしてpo_number
とともに作成されます。
Database Controlを使用して、表の列を追加および削除し、表制約を管理できます。この項の内容は次のとおりです。
この例では、「例: 表の作成」で作成したpurchase_orders
表に列を追加します。新しい2つの列はpo_date_received
およびpo_requestor_name
という名前です。
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
NICK
と入力し、「実行」をクリックします。ユーザーnick
が所有するすべての表が表示されます。
PURCHASE_ORDERS
表を選択し、「編集」をクリックします。表の編集ページが表示されます。
po_date_received
列について次の情報を入力します。フィールド名 | 値 |
---|---|
|
|
|
|
「サイズ」、「スケール」、「NOT NULL」および「デフォルト値」を空白のままにします。
po_requestor_name
列に関する情報を入力します。フィールド名 | 値 |
---|---|
|
|
|
|
|
|
「スケール」、「NOT NULL」および「デフォルト値」を空白のままにします。
表が正常に変更されたことを表す更新メッセージが表示されます。
この例では、「例: 表に列を追加」でpurchase_orders
表に追加したpo_requestor_name
列を削除します。
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
nick
と入力し、「実行」をクリックします。ユーザーnick
が所有するすべての表が表示されます。
PURCHASE_ORDERS
表を選択し、「編集」をクリックします。表の編集ページが表示されます。
PO_REQUESTOR_NAME
列を選択し、「削除」をクリックします。削除された行の情報を含む列は、空白のままにします。
表が正常に変更されたことを表す更新メッセージが表示されます。
この例では、「例: 表の作成」で作成した表制約をpurchase_orders
表に追加します。po_date_received
値がpo_date
の値と同じ日付か、それ以降であるというルールを実施すると想定すると、チェック制約を追加する必要があります。
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
nick
と入力し、「実行」をクリックします。ユーザーnick
が所有するすべての表が表示されます。
PURCHASE_ORDERS
表を選択し、「編集」をクリックします。表の編集ページが表示されます。
CHECK
を選択し、「追加」をクリックします。CHECK制約の追加ページが表示されます。
po_check_rcvd_date
と入力し、システムに割り当てたデフォルト名を上書きします。
po_date_received >= po_date
この式は、po_date_received
がpo_date
より大きいかまたは等しいということを示しています。日付列では、po_date_received
がpo_date
と同じ日付に、または遅い日付に開始されたのと同じことです。
接続タイプ・サブページに新しい制約が表示されます。
確認メッセージが表示されます。
表の制約を変更する方法はいくつかあります。たとえば、既存の表の制約を有効な状態から無効な状態に変更できます。この例では、「例: 新しい表制約の追加」のpurchase_orders
表に対して作成したチェック制約を無効にします。
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
nick
と入力し、「実行」をクリックします。ユーザーnick
が所有するすべての表が表示されます。
purchase_orders
表を選択し、「編集」をクリックします。表の編集ページが表示されます。
PO_CHECK_RCVD_DATE
という名前の制約を選択し、「編集」をクリックします。CHECK制約の編集ページが表示されます。
確認メッセージが表示されます。無効化された列はチェック制約が無効化されたことを示します。
Database Controlを使用して表から制約を削除できます。表制約を削除すると他の制約を削除してしまう可能性があります。たとえば、他の表(子表)の外部キー制約の参照元の表(親表)から主キー制約を削除した場合、カスケード削除メカニズムにより子表の外部キー制約も削除されます。
この例では、「例: 新しい表制約の追加」のpurchase_orders
表で作成したチェック制約を削除します。
nick
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
表ページが表示されます。
NICK
と入力し、「実行」をクリックします。ユーザーNICK
が所有するすべての表が表示されます。
PURCHASE_ORDERS
表を選択し、「編集」をクリックします。表の編集ページが表示されます。
PO_CHECK_RCVD_DATE
という名前の制約を選択し、「削除」をクリックします。チェック制約がリストから削除されます。
確認メッセージが表示されます。
Database Controlを使用して、データを表にロードできます。ブラウザが実行中のローカル・コンピュータにあるソース・ファイルから、またはOracleインスタンスが実行中のデータベース・ホスト・コンピュータにあるソース・ファイルからデータをロードできます。Database ControlではOracle SQL*Loaderユーティリティを起動してデータをロードするため、ソース・ファイル内のデータ形式は、SQL*Loaderでサポートされている任意の形式を使用できます。この例ではソース・ファイルとして、カンマ区切りテキスト・ファイルを使用します。SQL*Loader述語では、ソース・ファイルをデータファイルと呼びます。
SQL*Loaderはデータファイルからのデータのロードを制御するための制御ファイルにも使用されます。制御ファイルはSQL*Loaderコマンド言語で記述された文を含むテキスト・ファイルです。これらの文により、検索するデータの場所、データの記述および解析の方法、データの挿入の場所などを指定されます。Database Controlは、SQL*Loaderを使用したデータ・ロード・ジョブの準備および実行の手順で順を追って説明するデータのロード・ウィザードを含みます(ウィザードはオンラインの指示が提供されるワークフローです)。データのロード・ウィザードはSQL*Loader制御ファイルを自動的に作成します。
この例では、「例: 表の作成」で作成したPURCHASE_ORDERS
表にデータをロードします。簡略化のために、この例では3行のみロードします。
この例のために、データベースのホスト・コンピュータまたはローカル・コンピュータのファイル・システム上にload.dat
という名前のテキスト・ファイルを作成する必要があります。ファイルの内容は次のとおりです。
1, Office Equipment, 25-MAY-2006, 1201, 13-JUN-2006 2, Computer System, 18-JUN-2006, 1201, 27-JUN-2006 3, Travel Expense, 26-JUN-2006, 1340, 11-JUL-2006
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
データ移動サブページが表示されます。
データのロード: 制御ファイルの生成または既存の制御ファイルの使用ページが表示されます。
データのロード・ウィザードの最初のページが表示されます。タイトルは「データのロード: データファイル」です。
ウィザード・ページの使用の詳細は、各ウィザード・ページにある「ヘルプ」をクリックします。ウィザードの最後に、SQL*Loaderを実行したジョブを送信します。その後ジョブ・ステータス・ページが表示されます。必要に応じて、正常な終了(または失敗)のステータスが表示されるまでステータス・ページをリフレッシュします。
詳細は、「表データの表示」を参照してください。
表が不要になった場合、Database Controlを使用して削除できます。表を削除すると、表のデータおよび依存オブジェクト(索引など)がデータベースにより削除されます。また、データ・ディクショナリから表が削除されます。
SYSTEM
表領域ではないローカル管理表領域から表を削除すると、データベースは表に関連付ける領域をすぐに要求しません。かわりに、表とごみ箱内の依存オブジェクトを配置します。それにより、必要な場合は、表とそのデータ、およびごみ箱から取り出した依存オブジェクトを回復できます。表ページの「ごみ箱」をクリックすると、ごみ箱の中身を表示できます。ごみ箱内に表示されるのは、ユーザーが所有する表のみです。表示方法、消去方法、所有者ではない場合のリカバリの方法などのごみ箱の詳細は、『Oracle Database管理者ガイド』を参照してください。
オプションを指定して削除ページが表示されます。
表ページに戻り、確認メッセージが表示されます。
次の項では索引の作成および管理方法を説明します。
索引は、表に関連付けられたオプションのスキーマ・オブジェクトです。索引または表を作成して問合せのパフォーマンスを向上させることができます。ユーザーが特定の情報をすばやく見つけるのにこのドキュメントの索引が役立つのと同様、Oracle Databaseの索引でも表データへのアクセスがすばやくなります。
必要な数の索引を表に作成できます。表の1つ以上の列にそれぞれ索引を作成します。たとえば、発注表では、ベンダー番号列に索引を作成する場合は、ソートを実行することなくベンダー番号の順で表の行に連続でアクセスできます。さらに、表全体をスキャンすることなく特定のベンダー宛てに発行されたすべての発注に直接アクセスできます。
索引が作成されると、自動的にデータベースによって保守および使用されます。行の新規追加、更新、削除など、表のデータや構造の変更は、ユーザーに対して透過的に、関連するすべての索引に自動的に組み込まれます。
一部の索引は表の制約を反映して暗黙的に作成されます。たとえば、データベースにより主キー制約列または一意キー制約列に索引が自動的に作成されます。
次の各項では、索引のバックグラウンド情報について説明します。
通常、索引は単一または少数の既存の行で操作する問合せおよびDML文のパフォーマンスを向上させます。ただし、索引が多すぎると、行を追加、変更、または削除する文の処理のオーバーヘッドが増加します。
索引を追加するとアプリケーションのパフォーマンスが向上するかどうかを判断するには、Oracle Enterprise Manager Database Control(Database Control)でSQLアクセス・アドバイザを実行します。「SQLアクセス・アドバイザの実行」を参照してください。
付加的な索引を追加する前に、データベースの問合せおよびDMLのパフォーマンスを確認する必要があります。新しい索引が追加された後にパフォーマンスを比較できます。
参照:
|
索引は、様々な索引属性の組合せを使用していくつかの方法で作成できます。1次索引属性は次のとおりです。
標準、Bツリー索引には、値が格納されている行のディスク・アドレスとともに索引キーの各値のエントリが含まれます。Bツリー索引はデフォルトであり、Oracle Databaseのほとんどの索引で一般的なタイプです。
ビットマップ索引では値および潜在的な行アドレスをカプセル化するビット文字列が使用されます。これはBツリー索引よりも簡潔で、より効率のよい検索のタイプを実行できます。ただし、通常の使用ではビットマップ索引には表における行操作時により多くのオーバーヘッドが必要であり、『Oracle Databaseデータ・ウェアハウス・ガイド』の説明に従って、データ・ウェアハウス環境で主に使用します。
索引のデフォルト検索は最低値から最高値の順で行われます。文字データはASCII値によってソートされています。数値データは最小値から最大値、日付は最も古い値から最新の値の順になっています。このデフォルトの検索メソッドは昇順索引として作成されたインデックスで実行されます。索引検索は降順オプションを使用した関連インデックスの作成により検索の順番を逆順にできます。
通常、索引エントリは表の単一または複数の列の、単一または複数の値に基づいています。これは列の索引です。または、表データから索引付けされた値が導出されるファンクション・ベースの索引を作成することもできます。たとえば、大/小文字混合の文字データを検索するには、UPPER()
ファンクションに基づいたファンクション・ベースの索引を使用してすべてが大文字であるかのように値を検索できます。
単一の列に索引を作成する場合は単一列索引、複数列に作成する場合は、連結索引と呼びます。連結索引は、SQL文を頻繁に実行するWHERE
句にほとんどすべての索引列が含まれている場合に役立ちます。
連結索引の場合、索引で使用されている列を注意して定義する必要があります。重複が最も少ない値の列を最初に指定し、次に重複が少ない値の列を2番目に、以降同様に指定します。重複の多い値の列またはNULL
値の多い行は含めないか、または索引定義の最後の列に指定します。
表同様、索引をパーティションで区切ることができます。ほとんどの場合、関連する表をパーティション化するときに索引をパーティション化し、表と同じパーティショニング・スキームを使用して索引をパーティション化すると便利です(たとえば、表が売上日によってレンジ・パーティション化されている場合は、索引を売上日に作成して、表のパーティションと同じ範囲を使用して索引をパーティション化します)。これはローカルのパーティション索引として知られるものです。ただし、この表と同じパーティション化スキームを使用して索引をパーティション化する必要はありません。またパーティション化されない、またはグローバルの索引をパーティション化された表に作成することもできます。
Database Controlの索引ページを使用してデータベース内の索引を表示します。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
索引ページが表示されます。
「オブジェクト名」フィールドに検索文字列を入力した場合、名前の先頭とその検索文字列が一致するすべての索引が表示されます。検索文字列の先頭にアスタリスク(*)を入力した場合、表名の一部に検索文字列を含むすべての索引が表示されます。
検索文字列として一部の表名を入力した場合は、検索文字列で始まる名前を持つすべての表に索引が表示されます。検索文字列の先頭にアスタリスク(*)を入力した場合、表名の一部に検索文字列を含むすべての表が表示されます。
特定スキーマでの索引が表示されます。
索引の表示ページが表示されます。このページには、索引のステータス、索引が構築される表および列、索引により消費される領域、定義に使用されるオプション、および索引の統計情報などの索引に関する基本情報が含まれます。
索引を作成するときは、索引付けする1つ以上の表の列および作成する索引のタイプを指定します。
この例では、SUPPLIER_ID
表のSH.PRODUCTS
列に標準のBツリー索引を作成します(SH
スキーマはサンプル・スキーマの一部です)。
SH
スキーマ内の表を表示します。
PRODUCTS
表を選択します。
索引の作成ページが表示されます。
索引ページに戻り、確認メッセージが表示されます。新規の索引が索引の表にリストされます。
索引が不要になった場合、Database Controlを使用して削除できます。
この例では、「例: 索引の作成」でSH.PRODUCTS
表に作成したPRODUCTS_SUPPLIER_IDX
索引を削除します。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
索引ページが表示されます。
SH
と入力します。
PROD
と入力します。表名の最初の数文字のみが入力できます。
PRODUCTS
表のすべての索引が表示されます。
PRODUCTS_SUPPLIER_IDX
索引を選択して、次に「削除」をクリックします。確認ページが表示されます。
索引ページに戻り、確認メッセージが表示されます。
次の項ではビューの作成および管理方法を説明します。
ビューは、1つ以上の表または他のビュー内のデータをカスタマイズして表示したもので、ストアド・クエリーと考えることができます。ビューは実際にはデータを格納しませんが、かわりに表に基づいてデータを導出します。これらの表はビューの実表と呼ばれます。
表同様、ビューも、いくつかの制限を付けて、問合せ、更新、挿入および削除できます。ビューに対して実行するすべての操作は、ビューの実表に実際に影響します。ビューは、事前決定されている表の行および列のセットへのアクセスを制限することで、セキュリティ・レベルを追加し、データの複雑さを非表示にして、複雑な問合せを格納できます。
SYS
スキーマには多くの重要なビューがあります。静的データ・ディクショナリ・ビューおよび動的パフォーマンス・ビューという2つのタイプがあります。SYS
スキーマ内のビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
データ・ディクショナリ・ビューは、データ・ディクショナリが変更される場合のみ変更され、変更の頻度が低いため静的ビューと呼ばれます。データ・ディクショナリが変更される例には、新規の表を作成する場合またはユーザーに権限を付与する場合が含まれます。
多くのデータ・ディクショナリの実表は、次の3つのビューに対応しています。
DBA_
ビューにはデータベース全体のすべての関連情報が表示されます。DBA_
ビューは管理者のみを対象としています。DBA_
ビューの例はDBA_TABLESPACES
で、データベースの各表領域に1行ずつ含まれます。
ALL_
ビューには、現在のユーザーが権限またはロールを介してオブジェクトへのアクセス権を持っている場合、現在のユーザーのスキーマからの情報およびその他のスキーマにおけるオブジェクトからの情報を含む、現在のユーザーに対するアクセス可能なすべての情報が表示されます。ALL_
ビューの例は、ALL_TABLES
で、ユーザーがオブジェクト権限を持つすべての表に1行ずつ含まれます。
USER_
ビューには現在のユーザーのすべての情報が表示されます。これらのビューに問い合せる場合、特別な権限は必要ありません。USER_
ビューの例は、USER_TABLES
で、ユーザーが所有するすべての表に1行ずつ含まれます。
DBA_
ビュー、ALL_
ビューおよびUSER_
ビューの列は通常ほぼ同一です。
動的パフォーマンス・ビューでは、実行中のデータベース・アクティビティを監視します。管理者のみ使用可能です。動的パフォーマンス・ビューの名前はV$
で始まります。そのため、これらのビューは多くの場合V$
ビューとして参照されます。
V$
ビューの例は、V$SGA
で、システム・グローバル領域(SGA)のメモリー・コンポーネントの現行のサイズを戻します。
Oracle Enterprise Manager Database Control(Database Control)を使用して、指定したスキーマにビューおよびビュー定義が表示できます。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
ビュー・ページが表示されます。
SYS
およびhr
を含むスキーマ名の例が表示されます。
「オブジェクト名」フィールドに検索文字列を入力した場合、名前の先頭とその検索文字列が一致するすべての表が表示されます。検索文字列の先頭にアスタリスク(*)を入力した場合、表名の一部に検索文字列を含むすべての表が表示されます。
特定スキーマでのビューが表示されます。
表示ページが表示されます。
この例では、hr.employees
表を実表とし、king_view
というビューを作成します(hr
スキーマはサンプル・スキーマの一部です)。このビューによって表データがフィルタ処理され、従業員IDが100であるKingマネージャに直接レポートする従業員のみが問合せで戻されます。アプリケーション・シナリオでは、このビューによってhr.employees
表のセキュリティ・レベルが追加され、Kingマネージャ関連情報の適切なプレゼンテーションが提供されます。
hr
またはSYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
ビュー・ページが表示されます。
ビューの作成ページが表示されます。
ビュー・ページに戻り、確認メッセージが表示されます。ビュー・リスト内に新しいビューが表示されます。
king_view
を選択し、「アクション」リストから「データの表示」を選択します。
表示ページの「データの表示」が表示されます。ビューによって選択されたデータが「結果」セクションに表示されます。
SELECT * FROM king_view
ビューが不要になった場合、Database Controlを使用して削除できます。
この例では、以前に「例: ビューの作成」で作成したhr.king_view
ビューを削除します。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
ビュー・ページが表示されます。
hr
と入力します。
king
と入力します。ビュー名の最初の数文字のみを入力できます。
ビューのリストにKING_VIEW
が表示されます。
KING_VIEW
を選択して、次に「削除」をクリックします。確認ページが表示されます。
ビュー・ページに戻り、確認メッセージが表示されます。
この項では、データベースに格納されているプログラム・コードに関するデータベース管理者としての機能を説明します。この項の内容は次のとおりです。
Oracle Databaseでは、データベースにプログラム・コードを格納する機能があります。開発者はPL/SQLまたはJavaでプログラム・コードを書き込み、そのコードをスキーマ・オブジェクトに格納します。DBAとして、Oracle Enterprise Manager Database Control(Database Control)を使用して、次のようなプログラム・コード・オブジェクトを管理できます。
実行できるアクションには、これらのコード・オブジェクトの作成、コンパイル、シノニムの作成、権限の付与および依存性の表示が含まれます。スキーマ・サブページの「プログラム」セクションにあるリンクをクリックして、これらのオブジェクトの管理ページにアクセスします。
プログラム・コード・オブジェクトの作成および管理は主にアプリケーション開発者に責任があることに注意してください。ただし、DBAとしてこれらのオブジェクトの管理のサポートを要求される可能性もあります。プログラム・コード・オブジェクトが依存するスキーマ・オブジェクトが変更または削除される場合はプログラム・コード・オブジェクトが無効化されるため、プログラム・コード・オブジェクトに関する最も頻度の高いタスクは、プログラム・コード・オブジェクトの再検証ということになります。
データベース管理者(DBA)について、無効になったスキーマ・オブジェクトの再検証が要求される場合があります。依存しているオブジェクトが変更されると、スキーマ・オブジェクト(トリガー、プロシージャ、ビューなど)は無効になります。たとえば、PL/SQLプロシージャが表の問合せに含まれている場合に、表の構造が変更されると、PL/SQLプロシージャは無効になります。コンパイルしてスキーマ・オブジェクトを再検証します。
Database Controlでは、データベースのホームページの「アラート」セクションにアラートが表示されて、スキーマ・オブジェクトが無効になったことを通知します。
検証が必要なスキーマ・オブジェクトを表示するには2つの方法があり、データベースのホームページのアラートに従うか、または適切なオブジェクト・ページ(ビュー・ページ、プロシージャ・ページなど)を表示してオブジェクトを検索します。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
n object(s) are invalid in the schema_name schema.
前述のようなメッセージの例は次のとおりです。
4 object(s) are invalid in the HR schema.
無効なオブジェクトを含む各スキーマに対する個別のメッセージがあります。
所有者の無効オブジェクト数ページが表示されます。
無効オブジェクトの詳細ページが表示され、無効なオブジェクトのリストが表示されます。
確認メッセージが表示されたら、新しく検証されたオブジェクトをリストから削除します。
SYSTEM
ユーザーとしてログインします。詳細は、「データベースのホームページのアクセス」を参照してください。
たとえば、ビューを検証する場合、「ビュー」をクリックします。
スキーマ・オブジェクトが表示されます。
確認メッセージが表示されます。
次に示すような他のスキーマ・オブジェクトは、Oracle Enterprise Manager Database Control(Database Control)を使用して管理できます。
順序は、一意の整数を生成するデータベース・オブジェクトです。順序に問い合せるたびに、現在の値は増加し、結果の整数が返されます。問合せは複数ユーザーが同時に行うことができ、各ユーザーは常に一意の値を受け取ります。そのため、順序を使用した表内の主キーの値の指定は、表にデータを挿入するユーザーの数に関係なく、確実にキー値を一意にする簡単な方法です。
シノニムは、表やビューなどのスキーマ・オブジェクトの別名です。シノニムによって、基礎となるデータベース構造をアプリケーションやユーザーに対して簡単に非表示にできます。シノニムはプライベートまたはパブリックにできます。プライベート・シノニムを参照するユーザーがシノニム所有者ではない場合、パブリック・シノニムはスキーマ名で修飾される必要はなく、プライベート・シノニムは修飾される必要があります。たとえば、SELECT
オブジェクト権限をhr.employees
表に付与されたユーザーが発行した次の問合せについて考慮します。
SELECT employee_id, salary FROM hr.employees ORDER BY salary
hr.employees
表の別名として、personnel
という名前のパブリック・シノニムを作成し、hr.employees
表でPUBLIC
(すべてのデータベース・ユーザー)に対してSELECT
権限を付与すると想定します。指定されたパブリック・シノニムを使用して、すべてのユーザーがより簡単な次の問合せを発行できます。
SELECT employee_id, salary FROM personnel ORDER BY salary
この問合せを作成したユーザーは個人データを含むスキーマ名を確認する必要はありません。
シノニムには、スキーマ名が異なる場合でも本番データベースと同じシノニムを開発データベースで使用できるという付加的なメリットがあります。この方法により、どちらの環境でもアプリケーション・コードを未修正の状態で実行できます。たとえば、dev1
スキーマを示す開発データベースでpersonnel
シノニムが定義されている場合、dev1
スキーマにemployees
表があるデータベース開発では問合せをエラーなしに実行できます。
シノニムは単なる別名であるため、データ・ディクショナリ内に定義以外の記憶域は必要ありません。問合せのシノニムを参照するには、示されているオブジェクトの権限が必要です。シノニム自体は保護できません。シノニムに対するオブジェクト権限をユーザーに付与する場合、シノニムが指し示すオブジェクトに対して権限を付与します。
データベース・リンクは、他のOracle Databaseを示すスキーマ・オブジェクトです。データベース・リンクを使用すると、リモート・データベースで簡単にオブジェクトの問合せまたは更新ができます。『Oracle Database管理者ガイド』で説明しているように、データベース・リンクは分散データベース環境で使用されます。
Oracle by Example(OBE)には、このマニュアルに関するシリーズが含まれています。このOBEでは、この章のタスクを段階的に説明し、注釈付きのスクリーンショットを使用します。
スキーマに関するOBEを参照するには、ご使用のブラウザで次のURLを指定します。
http://www.oracle.com/technology/obe/11gr1_2day_dba/schema/schema.htm
|
![]() Copyright © 2004, 2008, Oracle Corporation. All Rights Reserved. |
|