8 スキーマ・オブジェクトの管理
8.1 スキーマ・オブジェクトについて
注意:
単一の表領域と単一のスキーマ間には関係性がまったくありません。同じスキーマ内のオブジェクトは異なる表領域の記憶域を使用でき、表領域は異なるスキーマからのデータを格納できます。
スキーマ・オブジェクトの命名
データベースのすべてのオブジェクトは1つのスキーマに属し、スキーマ内に一意の名前を持っています。異なるスキーマにある場合、複数のデータベース・オブジェクトは同じ名前を共有できます。スキーマ名を使用して、確実にオブジェクトを参照できます。たとえば、hr.employees
は、hr
スキーマでemployees
という名前の表を参照します。(employees
表はhr
によって所有されます。)データベース・オブジェクトおよびスキーマ・オブジェクトという用語は同じ意味で使用されます。
データベース・オブジェクトを作成するときには、必ず任意のスキーマ内に作成する必要があります。その1つの方法として、スキーマを所有するユーザーとしてデータベースにログインしてからオブジェクトを作成します。通常、1つのアプリケーションに属するすべてのオブジェクトは、同一スキーマ内に配置できます。
スキーマ・オブジェクト名は特定のルールに従っている必要があります。スキーマ内で一意であるのみでなく、スキーマ・オブジェクト名が30バイト以下で先頭が文字で始まる必要があります。これらのルールのいずれかに違反する名前のオブジェクトの作成を試みると、データベースでエラーが発生します。
「DDL」タブ
SQLまたはSQL Developerを使用して、スキーマ・オブジェクトを作成および操作できます。
SQL Developerを使用してスキーマ・オブジェクトを作成する際、「DDL」タブをクリックすると、指定したスキーマ・オブジェクトのプロパティに相当するSQL文が、グラフィカル・ユーザー・インタフェースによって表示されます。SQL Developerは、このSQL文を送信して、スキーマ・オブジェクトを作成します。このオプションを選択すると不完全な文も表示されるので、スキーマ・オブジェクトのすべての仕様を入力して、SQL Developerが送信する完全なSQL文を確認する必要があります。
関連項目:
スキーマ・オブジェクトの詳細は、『Oracle Database概要』を参照してください
8.2 スキーマ・オブジェクト管理権限について
DBA
ロールを付与されているユーザーとして定義されます。これにはSYS
およびSYSTEM
ユーザーがデフォルトで含まれます。DBA
ロールは、管理タイプ・アクセスを必要とするユーザーのみに付与することをお薦めします。
他のユーザーに、DBA権限を付与することなくスキーマ・オブジェクトを管理させることができます。たとえば、通常は、アプリケーション開発者がスキーマ・オブジェクトを作成、変更、削除できます。そのため、RESOURCE
ロールをアプリケーション開発者に付与します。
8.3 SQL Developerについて
標準のOracle Database認証を使用して、任意のターゲットOracle Databaseスキーマに接続できます。接続後、スキーマ・オブジェクトに対して操作を実行できます。
次のトピックでは、SQL Developerの効果的な使用を開始するのに必要な基本情報を提供します。
関連項目:
また、SQL Developerを使用して、ユニット・テスト、移行およびデータ・モデリングなどの他のデータベースのテストを実行することもできます。
SQL Developerのその他の機能の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
8.3.1 SQL Developerのインストールおよび起動
SQL Developerをインストールして起動するには、ZIPファイルをダウンロードして任意の親ディレクトリまたは親フォルダに解凍し、コマンドを入力するか、またはファイル名をダブルクリックします。
関連項目:
SQL Developerのインストールおよび起動の手順の詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
8.3.2 SQL Developerユーザー・インタフェースの理解
SQL Developerを起動すると、SQL Developerウィンドウが表示されます。
SQL Developerウィンドウでは、基本的に、左側はオブジェクトを検索して選択するためのナビゲーション、右側は選択したオブジェクトに関する情報の表示に使用されます。
ページの上部のメニューには、標準的なエントリの他に、SQL Developer固有の機能のエントリも含まれています。
SQL Developerウィンドウの左側には、「接続」ナビゲータと「レポート」ナビゲータのタブとペイン、アクションを実行するためのアイコン、および選択中のナビゲータの階層ツリーが表示されます。
図では、「接続」ナビゲータにHRデータベース接続が表示され、メタデータ・ツリーにHRスキーマのスキーマ・オブジェクトが表示されています。
「接続」ナビゲータのメタデータ・ツリーには、定義済の接続でアクセス可能なすべてのオブジェクトが(オブジェクトのタイプごとに分類されて)表示されます。オブジェクトを選択するには、適切なツリー・ノードを開いてオブジェクトをクリックします。
SQL Developerウィンドウの右側には、選択したオブジェクトまたは開いたオブジェクト用のタブとペインが表示されます。たとえば、この図のオブジェクト・ペインには、EMPLOYEESという表に関する情報が表示されています。(マウス・ポインタをタブのラベル(この図では「EMPLOYEES」)の上に置くと、ツールチップに、オブジェクトの所有者とデータベース接続が表示されます。)
関連項目:
SQL Developerのユーザー・インタフェースの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
8.3.3 SQL Developerを使用したデータベース接続の作成
データベース接続は、特定のデータベースの特定のユーザーとしてそのデータベースに接続するために必要な情報を指定するSQL Developerオブジェクトです。SQL Developerを使用するには、1つ以上の(既存の、作成済の、またはインポート済の)データベース接続が必要です。
データベース接続を作成する手順は、次のとおりです。
関連項目:
-
データベース接続の作成、編集、エクスポートおよびインポートの詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。
-
Oracle Database 12cで導入されたマルチテナント・アーキテクチャ(これを使用すると、ユーザーが作成したゼロ(0)個以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)としてOracleデータベースを機能させることが可能)の概要は、『Oracle Database概要』を参照してください。非CDBは、PDBを含めることができない従来のOracleデータベースです。Oracle Database 12cより前のOracle Databaseはすべて非CDBでした。
-
CDBの作成と構成の詳細は、『Oracle Database管理者ガイド』を参照してください。
8.4 表の管理
この項では、データベース表を紹介し、SQL Developerを使用した様々な表の操作の実行方法を説明します。
この項の内容は次のとおりです。
8.4.1 表について
employees
表には、last_name
およびemployee_id
と呼ばれる列があります。この表の各行は異なる従業員を表し、last_name
およびemployee_id
の値が収められています。
表を作成するときには、表のタイプを指定し、列と制約を定義します。制約とは、データの整合性を保持するためのルールです。
この項では、次の項目について説明します。
8.4.1.1 表タイプについて
employees
表のような単純な列で構成されているリレーショナル表です。他の2つの表のタイプとして、オブジェクト表およびXMLType
表がサポートされています。この3つのタイプの表は、どれも永続または一時として定義できます。一時表はトランザクションまたはセッション中にのみ存在するセッションのプライベート・データを保持します。結果セットは複数の操作により構築されるため、結果セットを一時的にメモリーに保持する必要があるアプリケーションで役立ちます。
ヒープ構造または索引構成構造のいずれかでリレーショナル表を構築できます。ヒープ構造では、行を格納する順序は特に決まっていません。索引構成表では行の順序は選択されたいずれかの列の値によって決定されます。一部のアプリケーションでは、索引構成表を使用してパフォーマンスおよびディスク領域の使用効率を向上させることができます。
この項では永続のヒープ構成表について説明します。その他の表のタイプおよび使用する場合の詳細は、『Oracle Database管理者ガイド』および『Oracle Database概要』を参照してください。SQLによる表の作成に必要な構文は、『Oracle Database SQL言語リファレンス』を参照してください。
8.4.1.2 表の列の属性について
8.4.1.2.1 データ型
データ型の属性は、列に格納されるデータの種類を定義します。表を作成する場合、各列のデータ型を指定する必要があります。
データ型は各列に含むことができる値のドメインを定義します。たとえば、DATE
列では値February 29
(うるう年を除く)、値2
またはSHOE
は使用できません。その後、列に挿入した各値はその列をデータ型と想定します。たとえば、17-JAN-2004
を日付列に挿入する場合、有効な日付に変換したことを確認した後にOracle Databaseは文字列を日付値として処理します。
表8-1に、一般的なOracle Database組込みデータ型の一部を示します。
表8-1 一般的なデータ型
データ型 | 説明 |
---|---|
|
詳細は、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。 |
|
精度 |
|
日付と時刻の両方含むコンポジット値です。各 |
シングルバイト・キャラクタまたはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト(CLOB)。固定幅および可変幅のキャラクタ・セットがサポートされ、両方ともデータベース・キャラクタ・セットで使用されます。最大サイズは(4GB - 1)*(データベース・ブロック・サイズ)です。たとえば、32Kのブロック・サイズの場合、最大CLOBサイズは128TBです。 |
8.4.1.2.2 NOT NULL列制約
NOT NULL
制約のみです。「表レベルの制約について」で説明されている、列定義の一部または表定義の一部として定義できるその他の制約とは異なり、NOT NULL
制約は列定義の一部として定義する必要があります。
データベースの整合性のため列にデータを指定する必要がある場合は、NOT NULL
制約を使用します。たとえば、すべての従業員が特定の部門に所属する必要がある場合、部門の識別子を含む列はNOT NULL
制約を付けて定義される必要があります。ただし、行が追加または変更される際にデータが不明または存在しない可能性があるときは、NOT NULL
として列を定義しないでください。NOT
NULL
制約を使用しない列の例として、メール・アドレス内の2番目のオプション行があります。
データベースは列または表の主キーを含む列にNOT NULL
制限を自動的に追加します。
8.4.1.2.3 デフォルト値
8.4.1.3 表レベルの制約について
NULL
は受け入れられません。同様に、この表では同一のIDを持つ従業員が2人存在することはできません。
Oracle Databaseでは、表レベルおよび列レベルの両方で制約と呼ばれるデータの整合性規則を適用できます。制約に違反する行を挿入または更新を試行するSQL文はエラーになり、ロールバックされます。同様に、データが入力されている表に新しく制約を適用すると、既存の行が新しい制約に違反する場合、エラーになります。
-
主キー: 列(列の組合せ)は行の一意の識別子である必要があります。主キー列に
NULL
値は指定できません。 -
一意キー: 2つの行が指定された列または列の組合せにおいて重複値を持たない場合必要になります。列のセットは一意キーになります。
-
チェック: 1つの列(または複数の列の組合せ)が表のすべての行の条件を満たすことを要求します。チェック制約はブール式である必要があります。行が挿入または更新されるたびに評価されます。チェック制約の例は
SALARY > 0
です。 -
外部キー: 特定の列(または列の組合せ)では、子表にあるすべての列の値が親表に存在する必要があります。外部キーを含む表は依存表または子表と呼ばれます。外部キーを参照する表は親表と呼ばれます。外部キー制約の例として、従業員表の部門列には、親の部門表に存在する部門IDが含まれる必要があります。
制約が作成され、通常、異なるステータスで変更できます。オプションで有効または無効を選択すると、行が追加または変更されるときに制約をチェックするかどうかを決定できます。また、オプションで遅延、または即時を選択すると、制約の検証をトランザクションの最後に行うか、文の最後に行うかを決定できます。
関連項目:
-
制約の詳細は、Oracle Database概要を参照
8.4.1.4 その他の表作成の必要事項
8.4.1.4.1 ユーザー定義型およびラージ・オブジェクト(LOB)
CREATE TYPE
文を使用して作成します。詳細は、Oracle Database SQL言語リファレンスを参照してください。
ラージ・オブジェクト(LOB)列は、テキストやストリーミング・ビデオなどの非構造化データの格納に使用され、情報をTB単位まで保持できます。
SQL Developerを使用してLOB列を作成するには、表の作成時に「拡張」チェック・ボックスをクリックします。次に、「LOBパラメータ」をクリックすると、LOB列の作成時に使用可能なオプションが表示されます。LOB列の作成の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
8.4.1.4.2 パーティション表とパーティション索引
パーティションが定義された後、特定の操作の効率が非常に向上されます。たとえば、一部の問合せではデータベースが表のすべてではなくパーティションのサブセットのみにアクセスして問合せ結果が生成されます。この技術(パーティション・プルーニングと呼ばれます)により向上したパフォーマンスを概算できます。また、データ管理操作はすべての表ではなくパーティション・レベルで発生します。これによりデータ・ロード、索引作成および再ビルド、バックアップおよびリカバリなどの操作の時間が大幅に削減されます。
各パーティションはその他のパーティションから独立した固有の表領域に格納されます。異なる表領域は異なるディスクに配置できるため、可用性およびパフォーマンスのためにより適切にチューニングできる表構造が提供されます。頻繁にアクセスされるデータはパフォーマンスの高いディスクに配置され、取得される頻度の低いデータはより低コストの記憶域に配置されるため、異なる表領域のパーティションを別々のディスクに保存することにより、使用可能な記憶域使用量を最適化できます。
パーティション化は、様々なタイプの大量のデータを管理するアプリケーションで役立ちます。オンライン・トランザクション処理(OLTP)システムでは、多くの場合、管理性および可用性が向上し、データ・ウェアハウス・システムではパフォーマンスと管理性が向上します。
SQL Developerを使用してパーティション化オプションを指定するには、表の作成時に「拡張」チェック・ボックスをクリックします。次に、「パーティション化」をクリックすると、使用可能なパーティション化オプションが表示されます。パーティション化の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
8.4.1.4.3 物理記憶域属性
SQL Developerを使用して表の記憶域属性を指定するには、表の作成時に「拡張」チェック・ボックスをクリックし、「表のプロパティ」をクリックしてから「記憶域オプション」をクリックします。
8.4.1.4.4 圧縮表
SQL Developerを使用して表圧縮を構成するには、表の作成時に「拡張」チェック・ボックスをクリックします。次に、「表のプロパティ」をクリックし、「圧縮」オプションを有効にします。
関連項目:
-
異なる表タイプの設計および管理の詳細は、Oracle Database管理者ガイドを参照
-
表と索引のパーティション化の詳細は、『Oracle Database概要』および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
-
SecureFiles LOBおよびBasicFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください
-
「例: 表の作成」
8.4.2 表の表示
8.4.3 表データの表示
表データを表示するには、次の手順を実行します。
表のコンテンツを参照するために、独自のSQL SELECT
文を記述して送信することもできます。SQL DeveloperでSQLワークシート・セッションを開始して、SQL文を実行できます。これを行うには、「ツール」メニューから「SQLワークシート」を選択します。
SELECT
文の詳細な説明はOracle Database SQL言語リファレンスにあります。
関連項目:
「表について」
8.4.4 例: 表の作成
SQL Developerを使用して、表を作成できます。
次の例では、HR
スキーマでpurchase_orders
という名前の表を作成します。この表には次の列が含まれます。
列名 | データ型 | サイズ | Null以外 | 主キー |
---|---|---|---|---|
|
|
|
あり |
あり |
|
|
200 |
いいえ |
|
|
|
|
あり |
|
|
|
|
あり |
|
HRスキーマにPURCHASE_ORDERS表を作成するには、次の手順を実行します。
関連項目:
「表について」
8.4.5 表の属性の変更
関連項目:
「表について」
8.4.5.3 例: 新しい表制約の追加
8.4.5.4 例: 既存の表制約の変更
purchase_orders
表に対して作成したチェック制約を無効にします。
PURCHASE_ORDERS表の制約を無効にするには、次の手順を実行します。
関連項目:
-
「表について」
8.4.5.5 例: 表制約の削除
この例では、「例: 新しい表制約の追加」のpurchase_orders
表で作成したチェック制約を削除します。
PURCHASE_ORDERS表から制約を削除するには、次の手順を実行します。
関連項目:
-
カスケード削除メカニズムの詳細は、『Oracle Database概要』を参照してください
-
「表について」
8.4.6 例: 表へのデータのロード
SQL Developerを使用して、データを表にロードできます。データは.xlsファイルまたは.csvファイルから表にロードできます。
この例では、「例: 表の作成」で作成したPURCHASE_ORDERS
表にデータをロードします。簡略化のために、この例では3行のみロードします。
この例のために、データベースのホスト・コンピュータまたはローカル・コンピュータのファイル・システム上にload.csv
という名前のテキスト・ファイルを作成する必要があります。ファイルの内容は次のとおりです。
1,Office Equipment,25-MAY-2012,1201,13-JUN-2012 2,Computer System,18-JUN-2012,1201,27-JUN-2012 3,Travel Expense,26-JUN-2012,1340,11-JUL-2012
注意:
この例では、PURCHASE_ORDERS
表内の列が次のとおりであると想定します。PO_NUMBER
、PO_DESCRIPTION
、PO_DATE
、PO_VENDOR
およびPO_DATE_RECEIVED
。PURCHASE_ORDERS
表にこれらの列のすべてが含まれていない(または追加の列が含まれている)場合、テキスト・ファイルのデータを適宜変更してください。
PURCHASE_ORDERS表にデータをロードするには、次のステップを実行します。
関連項目:
「表について」
8.4.7 表の削除
表が不要になった場合、SQL Developerを使用して削除できます。表を削除すると、表のデータおよび依存オブジェクト(索引など)がデータベースにより削除されます。また、データ・ディクショナリから表が削除されます。
SYSTEM
表領域ではないローカル管理表領域から表を削除すると、データベースは表に関連付ける領域をすぐに要求しません。かわりに、表と依存オブジェクトをごみ箱に配置します。それにより、必要な場合は、表とそのデータ、およびごみ箱から取り出した依存オブジェクトを回復できます。表ページの「ごみ箱」をクリックすると、ごみ箱の中身を表示できます。ごみ箱内に表示されるのは、ユーザーが所有する表のみです。表示方法、消去方法、所有者ではない場合のリカバリの方法などのごみ箱の詳細は、Oracle Database管理者ガイドを参照してください。
表を削除するには、次の手順を実行します。
関連項目:
「表について」
8.5 索引の管理
8.5.1 索引について
索引は、表に関連付けられたオプションのスキーマ・オブジェクトです。索引または表を作成して問合せのパフォーマンスを向上させることができます。ユーザーが特定の情報をすばやく見つけるのにこのドキュメントの索引が役立つのと同様、Oracle Databaseの索引でも表データへのアクセスがすばやくなります。
必要な数の索引を表に作成できます。表の1つ以上の列にそれぞれ索引を作成します。たとえば、発注表では、ベンダー番号列に索引を作成すると、実際に行をソートせずにベンダー番号の順で表の行に順次アクセスできます。さらに、表全体をスキャンすることなく特定のベンダー宛てに発行されたすべての発注に直接アクセスできます。
索引が作成されると、自動的にデータベースによって保守および使用されます。行の新規追加、更新、削除など、表のデータまたは構造の変更は、関連するすべての索引に自動的に組み込まれます。この再選択は、ユーザーに対して透過的に実行されます。
一部の索引は表の制約を反映して暗黙的に作成されます。たとえば、データベースにより主キー制約列または一意キー制約列に索引が自動的に作成されます。
次の各項では、索引のバックグラウンド情報について説明します。
関連項目:
8.5.1.1 索引およびパフォーマンス
付加的な索引を追加する前に、データベースの問合せおよびDMLのパフォーマンスを確認する必要があります。新しい索引が追加された後にパフォーマンスを比較できます。
関連項目:
あらゆる種類のスキーマまたはシステム変更のSQLパフォーマンスの影響を分析するためのSQLパフォーマンス・アナライザの使用方法の詳細は、『Oracle Database Testingガイド』を参照してください
8.5.1.2 索引属性
標準(Bツリー)およびビットマップ
標準、Bツリー索引には、値が格納されている行のディスク・アドレスとともに索引キーの各値のエントリが含まれます。Bツリー索引はデフォルトであり、Oracle Databaseのほとんどの索引で一般的なタイプです。
ビットマップ索引では値および潜在的な行アドレスをカプセル化するビット文字列が使用されます。これはBツリー索引よりも簡潔で、より効率のよい検索のタイプを実行できます。ただし、通常の使用ではビットマップ索引には表における行操作時により多くのオーバーヘッドが必要であり、Oracle Databaseデータ・ウェアハウス・ガイドの説明に従って、データ・ウェアハウス環境で主に使用します。
昇順および降順
索引のデフォルト検索は最低値から最高値の順で行われます。文字データはASCII値によってソートされています。数値データは最小値から最大値、日付は最も古い値から最新の値の順になっています。このデフォルトの検索メソッドは昇順索引として作成された索引で実行されます。索引検索は降順オプションを使用した関連索引の作成により検索の順番を逆順にできます。
列およびファンクション
通常、索引エントリは表の単一または複数の列の、単一または複数の値に基づいています。これは列の索引です。または、表データから索引付けされた値が導出されるファンクション・ベースの索引を作成することもできます。たとえば、大/小文字が混在している可能性がある文字データを検索するには、UPPER()
ファンクションに基づいたファンクションベースの索引を使用して、すべてが大文字であるかのように値を検索できます。
単一列および連結
単一の列に索引を作成する場合は単一列索引、複数列に作成する場合は、連結索引と呼びます。連結索引は、SQL文を頻繁に実行するWHERE
句にほとんどすべての索引列が含まれている場合に役立ちます。
非パーティションおよびパーティション
表同様、索引をパーティションで区切ることができます。ほとんどの場合は、関連する表をパーティション化するときに索引をパーティション化し、表と同じパーティション化スキームを使用して索引をパーティション化すると便利です。(たとえば、表が売上日によってレンジ・パーティション化されている場合は、索引を売上日に作成して、表のパーティションと同じ範囲で索引をパーティション化します。)これはローカルのパーティション索引として知られるものです。ただし、索引は、その表と同じパーティション化スキームを使用してパーティション化する必要はありません。また、パーティション化されていない(グローバルな)索引を、パーティション化された表に作成することもできます。
関連項目:
-
異なる索引タイプの設計および管理の詳細は、Oracle Database概要を参照
-
索引を作成する構文の詳細は、Oracle Database SQL言語リファレンスを参照
-
パーティション化された表および索引の詳細は、Oracle Database VLDBおよびパーティショニング・ガイドを参照
8.5.3 例: 索引の作成
SQL Developerを使用して索引を作成するときは、索引付けする1つ以上の表の列および作成する索引のタイプを指定します。
この例では、SH.PRODUCTS
表のPROD_DESC
列に索引を作成します。(SH
スキーマはサンプル・スキーマの一部です。)
SH.PRODUCTS表で説明索引を作成するには、次の手順を実行します。
関連項目:
「索引について」
8.6 ビューの管理
8.6.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_
ビューの列は通常ほぼ同一です。通常、USER_
ビューにはOWNER
列がありません。
動的パフォーマンス・ビュー
動的パフォーマンス・ビューでは、実行中のデータベース・アクティビティを監視します。管理者のみ使用可能です。動的パフォーマンス・ビューの名前はV$
で始まります。そのため、これらのビューは多くの場合V$
ビューとして参照されます。
V$
ビューの例は、V$SGA
で、システム・グローバル領域(SGA)のメモリー・コンポーネントの現行のサイズを戻します。
関連項目:
8.6.3 例: ビューの作成
HR.EMPLOYEES
表を実表として使用するking_view
という名前のビューを作成します。(HR
スキーマはサンプル・スキーマの一部です)。このビューによって表データがフィルタ処理され、従業員IDが100であるKingマネージャに直接レポートする従業員のみが問合せで戻されます。アプリケーション・シナリオでは、このビューによってHR.EMPLOYEES
表のセキュリティ・レベルが追加され、Kingマネージャ関連情報の適切なプレゼンテーションが提供されます。
HR.EMPLOYEES表にKING_VIEWビューを作成するには、次の手順を実行します。
-
「表の表示」の説明に従って、SQL Developerの「接続」ナビゲータで、HRスキーマの「ビュー」ノードに移動します。
-
「ビュー」ノードを右クリックして「新規ビュー」を選択します。
「SQL問合せ」タブを含む「ビューの作成」ダイアログ・ボックスが表示されます。
-
次の情報を入力します。
-
「スキーマ」フィールドで
HR
を選択します。 -
「名前」フィールドに
KING_VIEW
と入力します。 -
「SQL問合せ」フィールドに、
KING_VIEW
の作成で使用する次のSQL文を入力します。SELECT * FROM hr.employees WHERE manager_id = 100
-
-
「OK」をクリックします。
KING_VIEW
が作成され、HRスキーマのビューのリストに表示されます。
KING_VIEWビューをテストするには、次の手順を実行します。
関連項目:
「ビューについて」
8.7 データベースに格納されたプログラム・コードの管理
8.7.1 データベースに格納されたプログラム・コードについて
-
PL/SQLパッケージ、プロシージャ、ファンクションおよびトリガー
-
Javaソース・コード(Javaソース)およびコンパイルされたJavaクラス
実行できるアクションには、これらのコード・オブジェクトの作成、コンパイル、シノニムの作成、権限の付与および依存性の表示が含まれます。また、SQL Developerを使用して、PL/SQLコード・オブジェクトを編集およびデバッグすることもできます。スキーマ・サブページの「プログラム」セクションにあるリンクをクリックして、これらのオブジェクトの管理ページにアクセスします。
プログラム・コード・オブジェクトの作成および管理は主にアプリケーション開発者に責任があることに注意してください。ただし、DBAとしてこれらのオブジェクトの管理のサポートを要求される可能性もあります。プログラム・コード・オブジェクトが依存するスキーマ・オブジェクトが変更または削除されるとプログラム・コード・オブジェクトが無効になる可能性があるため、プログラム・コード・オブジェクトに関する最も頻度の高いタスクは、プログラム・コード・オブジェクトを再検証(コンパイル)することになります。
注意:
プログラム・コード・オブジェクト以外のタイプのスキーマ・オブジェクトは無効になります。たとえば、表を削除すると、その表を参照するビューが無効になります。
関連項目:
-
サーバー側でのプログラミングでPL/SQLおよびJavaを使用する方法の概要は、Oracle Database概要を参照
-
JavaソースおよびJavaクラスの詳細は、Oracle Database 2日でJava開発者ガイドを参照してください。
-
PL/SQLコードの詳細は、Oracle Database PL/SQL言語リファレンスを参照
-
オブジェクトの無効化の詳細は、Oracle Database管理者ガイドを参照してください。
8.7.2 無効なスキーマ・オブジェクトの検証(コンパイル)
注意:
プログラム・コードを格納しているスキーマ・オブジェクトをコンパイルするのみで必ず再検証できるとはかぎりません。改善処置がまず必要である場合があります。たとえば、参照している表が削除されてビューが無効になった場合に、ビューをコンパイルすると、表が存在していないことを示すエラー・メッセージが生成されます。表を再作成するまで、ビューは検証できません。
SQL Developerを使用して、無効なスキーマ・オブジェクトを検索するレポートを実行できます。
無効なスキーマ・オブジェクトを検索するには、次の手順を実行します。
関連項目:
-
スキーマ・オブジェクトの依存関係の詳細は、Oracle Database概要を参照
-
オブジェクトの依存関係の管理の詳細は、Oracle Database管理者ガイドを参照
8.8 その他のスキーマ・オブジェクトの使用
-
順序は、一意の整数を生成するデータベース・オブジェクトです。順序に問い合せるたびに、現在の値は増加し、結果の整数が返されます。問合せは複数ユーザーが同時に行うことができ、各ユーザーは常に一意の値を受け取ります。そのため、順序を使用した表内の主キーの値の指定は、表にデータを挿入するユーザーの数に関係なく、確実にキー値を一意にする簡単な方法です。
-
シノニムは、表やビューなどのスキーマ・オブジェクトの別名です。シノニムによって、基礎となるデータベース構造をアプリケーションやユーザーに対して簡単に非表示にできます。シノニムはプライベートまたはパブリックにできます。プライベート・シノニムを参照するユーザーがシノニム所有者ではない場合、パブリック・シノニムはスキーマ名で修飾する必要はありませんが、プライベート・シノニムは修飾する必要があります。たとえば、
READ
オブジェクト権限をHR.EMPLOYEES
表に付与されたユーザーが発行した次の問合せについて考慮します。SELECT employee_id, salary FROM hr.employees ORDER BY salary
HR.EMPLOYEES
表の別名として、PERSONNEL
という名前のパブリック・シノニムを作成し、HR.EMPLOYEES
表でPUBLIC
(すべてのデータベース・ユーザー)に対してREAD
権限を付与すると想定します。指定されたパブリック・シノニムを使用して、すべてのユーザーがより簡単な次の問合せを発行できます。SELECT employee_id, salary FROM personnel ORDER BY salary
この問合せを作成したユーザーは個人データを含むスキーマ名を確認する必要はありません。
注意:
ユーザーが
personnel
という名前の表を所有している場合は、その表が問合せに使用されます。そのような表が存在しない場合は、データベースでパブリック・シノニムを解決し、HR.EMPLOYEES
表を使用します。シノニムには、スキーマ名が異なる場合でも本番データベースと同じシノニムを開発データベースで使用できるという付加的なメリットがあります。この方法により、どちらの環境でもアプリケーション・コードを未修正の状態で実行できます。たとえば、
DEV1
スキーマを示す開発データベースでPERSONNEL
シノニムが定義されている場合、DEV1
スキーマにEMPLOYEES
表があるデータベース開発では問合せをエラーなしに実行できます。シノニムは単なる別名であるため、データ・ディクショナリ内に定義以外の記憶域は必要ありません。問合せのシノニムを参照するには、示されているオブジェクトの権限が必要です。シノニム自体は保護できません。シノニムに対するオブジェクト権限をユーザーに付与すると、シノニムが指し示すオブジェクトに対する権限を付与することになります。
-
データベース・リンクは、他のOracle Databaseを示すスキーマ・オブジェクトです。データベース・リンクを使用すると、リモート・データベースのオブジェクトを問合せまたは更新できます。Oracle Database管理者ガイドで説明しているように、データベース・リンクは分散データベース環境で使用されます。
8.9 スキーマ・オブジェクトの管理: Oracle by Example Series
Oracle by Example(OBE)には、『Oracle Database 2日でデータベース管理者』に関するシリーズが含まれています。このOBEでは、この章のタスクを段階的に説明し、注釈付きのスクリーンショットを使用します。
スキーマ・オブジェクトの管理に関するOBEを参照するには、ご使用のWebブラウザで次のURLを入力します。
https://apexapps.oracle.com/pls/apex/f?p=44785:24:::NO:24:P24_CONTENT_ID:16831