目次:
ビデオ: OracleDBに新規で表領域/スキーマを作成する方法/IT0018 2024
表示されるすべての論理構造は、データベースのデータファイルにあります。 Oracle 12cの論理構造を使用すると、データを管理しやすく、論理的にまとめることができます。
論理オブジェクトと物理オブジェクトの関係を調べてみましょう。矢印は、1対多の関係の方向を指します。
<! - Oracle 9gの表領域表領域
は、物理ストレージの論理編成の第1レベルです。 SYSTEM:
データベース自体の実行に使用されるコア・データベース・オブジェクトを格納します。
-
SYSAUX: 補助的であり、データベースの中核機能に特に関連していないオブジェクトの場合。
-
<! - 2 - > UNDO:
トランザクション・リカバリに使用されるロールバック・セグメントまたはUNDOセグメントを格納します。 -
TEMP: 一時的な保管用です。
-
各表スペースは、1つ以上のデータ・ファイルを編成します。通常、各表領域は1つのデータファイルにアタッチされますが、データベースが拡大してファイルが大きくなると、複数のデータファイルの形式でストレージを追加することになります。 <! - 3 - >
データベースを稼働させるための次のステップは何ですか?データを格納する領域をいくつか作成します。データベースに販売、人事、会計データ、履歴データがあるとします。次の表領域があります。
SALES_DATA SALES_INDEX
-
HR_DATA
-
HR_INDEX
-
ACCOUNTING_DATA
-
ACCOUNTING_INDEX
-
HISTORY_DATA
-
HISTORY_INDEX
-
Oracle 12c
-
セグメントのセグメント表スペースの後の次の論理ストレージ構造です。
セグメント
物理的な記憶域を必要とするオブジェクトであり、 プロシージャ シノニム
-
シーケンス
-
後者のオブジェクトのリストはセグメントを持つ表領域には存在しません。これらは、SYSTEM表領域にあるコードの一部です。
-
セグメントを作成するたびに、そのセグメントに含める表領域を指定します。これはパフォーマンスに役立ちます。
-
Oracle 12cのエクステント
エクステント は、ツリーの成長リングのようなものです。セグメントが成長するたびに、新しいセグメントが得られます。最初にアイテムを格納するテーブルを作成すると、最初のエクステントが取得されます。その表にデータを挿入すると、そのエクステントがいっぱいになります。エクステントがいっぱいになると、エクステントは表領域から別のエクステントを取得します。 最初に表領域を作成すると、すべての空き領域です。オブジェクトの作成を開始すると、その空き領域がエクステントの形式でセグメントに割り当てられます。平均的な表スペースは、使用されているエクステントと空きスペースで構成されています。
-
すべての空き領域がいっぱいになると、そのデータファイルの領域が不足しています。それはあなたのDBAのスキルが入ってきて、セグメントが拡張し続けるための空き容量を増やす方法を決めるときです。
-
範囲は必ずしも連続している必要はありません。たとえば、アイテムテーブルを作成して最初の1,000個のアイテムを挿入すると、そのアイテムは数回にわたって拡張され、拡張されます。これでセグメントが5つのエクステントで構成されるようになりました。ただし、新しいテーブルも作成します。
-
各表は新しい表領域に作成されるため、データファイルの先頭から開始されます。 2番目のテーブルを作成した後、最初のテーブルを再度拡張する必要があります。次のエクステントは2番目のエクステントの後にあります。結局、表スペースを共有するすべてのオブジェクトは、エクステントが混在しています。
これは悪いことではありません。過去数年間で、オラクルがより優れたストレージ・アルゴリズムを提供する前に、DBAはこれらのエクステントを統合しようと多くの時間と努力を費やしました。それは
断片化と呼ばれました。
これは過去のことです。吸い込まれないで!それだけにする。 Oracle 12cは、このような状況を完全に管理できます。
テーブルスペースに複数のデータファイルがある状況があります。表領域に複数のデータ・ファイルがある場合、表領域はすべてのデータ・ファイルにわたってラウンドロビン方式でエクステントを自動的に作成します。これはOracleの別のパフォーマンス機能です。 大部分のアプリケーションをサポートする1つの大きなテーブルがあるとします。 4つのデータファイルで構成される表領域に存在します。表が拡張されると、Oracleは次のように各データファイルにエクステントを割り当てます。
1,2,3,4,1,2,3,4,1,2,3,4 …など
Oracleは、ユーザーがデータにアクセスするときに、多くの物理デバイスに分散されたデータを利用できます。これは、多くのアクティビティを持つセグメントの競合を減らします。
Oracle 12cでのOracleブロック
Oracleブロック は、任意の時点でOracleが読み書きする最小単位です。 Oracleは通常、一度に複数のブロックを読み書きしますが、これは最近のOracleまでです。以前は、Oracleがブロックの読み書きをどのように管理していたかをより直接的に制御していましたが、機能は自動的に調整されています。手動である程度調整することはできますが、ほとんどのインストールはOracleに委ねるのが最善です。
<! - 1 - >
それにかかわらず、ブロックはストレージの最終論理単位です。テーブルとインデックスのデータはブロック単位で保存されます。新しい行を表に挿入すると、次のことが起こります。
Oracleはセグメントを検出します。
オラクルは、もし余裕があればセグメントを要求します。
セグメントはフルではないブロックを返します。
行または索引項目がそのブロックに追加されます。 <! - 2 - > 挿入のための空きブロックがない場合、セグメントはテーブルスペースから別の空きエクステントを取得します。ちなみに、これはあなたが接続されているサーバープロセスによって行われます。
Oracleブロックには、データファイルと同じように物理的な対応もあります。 OracleブロックはOSブロックで構成されています。これは、デバイス上のストレージの最小単位のフォーマットされたサイズです。