ホームページ php教程 php手册 ORACLEロールバックセグメントの概念、使い方、計画、問題解決

ORACLEロールバックセグメントの概念、使い方、計画、問題解決

Jun 21, 2016 am 09:08 AM
integer oracle

オラクル|コンセプト|計画|解決策|問題

ロールバック セグメントの管理は、ORACLE データベース管理において常に困難な問題であり、この記事では、ORACLE ロールバック セグメントの概念、使用法、計画、および例を通じて問題の解決方法を紹介します。

ロールバックセグメントの概要
ロールバックセグメントは、データ変更前の値(データ変更前の位置と値を含む)を格納するために使用されます。ロールバック セグメントのヘッダーには、ロールバック セグメントで使用されているトランザクションに関する情報が含まれています。トランザクションはロールバック情報を格納するために 1 つのロールバック セグメントのみを使用でき、1 つのロールバック セグメントは複数のトランザクションのロールバック情報を格納できます。

ロールバックセグメントの役割
トランザクションのロールバック: トランザクションがテーブル内のデータを変更すると、ユーザーがトランザクションをロールバックすると、データ変更前の値 (つまり、前のイメージ) がロールバック セグメントに格納されます。 ROLLBACK)、ORACLE は、ロールバック セグメント内のプレデータ イメージを使用して、変更されたデータを元の値に復元します。

トランザクションリカバリ: トランザクションの処理中にルーチンが失敗すると、ロールバックセグメント情報がREDOログファイルに保存され、次回データベースが開かれたときに、ORACLEはロールバックを使用してコミットされていないデータをリカバリします。

読み取り一貫性: セッションがデータを変更しているとき、他のセッションはセッションのコミットされていない変更を認識しません。また、ステートメントの実行中は、ステートメントの実行開始以降にコミットされていない変更はステートメントには表示されません (ステートメント レベルの読み取り一貫性)。 ORACLE が SELECT 文を実行するとき、ORACLE は現在のシステム変更番号 (SYSTEM CHANGE NUMBER-SCN) を使用して、現在の SCN より前のコミットされていない変更が文によって処理されないようにします。長いクエリの実行中に、他のセッションがクエリでクエリされる特定のデータ ブロックを変更すると、ORACLE はロールバック セグメントの前のデータを使用して読み取り整合性ビューを構築することが考えられます。

トランザクション レベルの読み取り一貫性
​​ORACLE は通常、SQL ステートメント レベル (SQL STATEMENT LEVEL) の読み取り一貫性を提供します。次のステートメントを使用して、トランザクション レベルの読み取り一貫性を実現できます。

SET TRANSACTION READ ONLY;

または:

SET TANNSACTION SERIALIZABLE;

上記の 2 つのステートメントは両方とも、トランザクション開始後の読み取り一貫性を提供します。 2 番目のステートメントを使用すると、データベースの同時実行性とパフォーマンスに影響を与えることに注意してください。

ロールバック セグメントの種類
システム ロールバック セグメント: データベースの作成時に、システム ロールバック セグメントが自動的に作成されます。このロールバック セグメントは、オブジェクトの以前のイメージをシステム テーブル スペースに保存するためにのみ使用されます。

非システム ロールバック セグメント: 複数の表スペースを持つデータベースには、非システム テーブル スペースにオブジェクトの事前データ イメージを格納するために使用される非システム ロールバック セグメントが少なくとも 1 つ必要です。非システム ロールバック セグメントは、プライベート ロールバック セグメントとパブリック ロールバック セグメントに分割され、ルーチンの開始時に自動的にオンライン (ONLINE) にできるように、パラメーター ファイルの ROLLBACK SEGMENTS パラメーターにリストされる必要があります。パブリック ロールバック セグメントは通常、OPS (ORACLE Parallel Server) に表示され、ルーチンが開始されると自動的にオンラインになります。

DEFERED ロールバック セグメント: このロールバック セグメントは、表スペースがオフライン (OFFLINE) のときにシステムによって自動的に作成され、表スペースが再びオンライン (ONLINE) になったときにシステムによって自動的に削除されます。ロールバック情報を格納するために使用されます。表スペースがオフラインのときに生成されます。

ロールバックセグメントの使用
ロールバックセグメントの割り当て:トランザクションが開始されると、ORACLEはトランザクションにロールバックセグメントを割り当て、トランザクションが最も少ないロールバックセグメントをトランザクションに割り当てます。トランザクションは、次のステートメントを使用して、指定されたロールバック セグメントを適用できます: SET TRANSTRACTION USE ROLLBACK SEGMENT rollback_segment

トランザクションは、現在の領域がいっぱいになると、ロールバック セグメント領域 (EXTENTS) を順次かつ循環的に使用します。次の地区に移動します。ロールバック セグメントの同じ領域に複数のトランザクションを書き込むことができますが、各ロールバック セグメント ブロックには 1 つのトランザクションからの情報しか含めることができません。

例 (2 つのトランザクションが同じロールバック セグメントを使用し、ロールバック セグメントには 4 つの領域がある):

1. トランザクションが進行中であり、ロールバック セグメントの 3 番目の領域を使用しています。 2 つのトランザクションはさらにロールバック情報を生成し、引き続き 3 番目の領域を使用します

3. 3 番目の領域がいっぱいになると、トランザクションは 4 番目の領域に書き込み、トランザクションが新しい領域への書き込みを開始すると、 、それはロールオーバー (WRAP) と呼ばれます。

4. 4 番目の領域がいっぱいのとき、最初の領域がアイドル状態または非アクティブである場合 (この領域を使用するすべてのトランザクションはアクティブなトランザクションなしで完了します)、トランザクションは最初のゾーンを使用します。

ロールバックセグメントの拡張(EXTEND)
現在のロールバックセグメント領域のブロックがすべて使い果たされ、トランザクションがより多くのロールバック領域を必要とする場合、ロールバックセグメントのポインタは次の領域に移動されます。最後のエリアがなくなると、ポインタは最初のエリアの先頭に移動します。ロールバック セグメント ポインタを次の領域に移動するための前提条件は、次の領域にアクティブなトランザクションがなく、ポインタが領域を越えることができないことです。次のエクステントが使用中の場合、トランザクションはロールバック セグメントに新しいエクステントを割り当てます。この割り当てはロールバック セグメントの拡張と呼ばれます。ロールバック セグメントは、ロールバック セグメント領域の数がロールバック セグメント パラメータ MAXEXTENTS の値に達するまで拡張されます。

ロールバックセグメントとOPTIMALパラメータのリサイクル
OPTIMAL パラメータは、ロールバック セグメントがアイドル状態のときに縮小する位置を指定します。ロールバック セグメントを指定すると、ロールバック セグメント領域の無駄を削減できます。
ロールバックセグメントの作成
構文:

CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment

[TABLESPACE テーブルスペース]

[STORAGE (][INITIAL integer][K|M]] [NEXT integer][K|M]]

[MINEXTENTS integer]

credtrap ローリングセグメントは PRIVATE または PUBLIC を指定して作成でき、一度作成すると変更できません。

MINEXTENTSは2以上でなければなりません

PCTINCREASEは0でなければなりません

OPTIMALが指定されている場合は、ロールバックセグメントの初期サイズ(MINEXTENTSで指定されます)以上でなければなりません

推奨事項:

通常の状況では、初期=次の

設定スペースを節約する最適パラメーター

マックステントを無制限に設定しないでくださいロールバックセグメントを特定のロールバックセグメントテーブルスペースに作成する必要があります

例: rbs

STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 10

MAXEXTENTS 500 OPTIMAL 1000K);

ロールバックセグメントをオンラインにする
ロールバックセグメントが作成されると、ロールバックセグメントはオフラインになり、データベースで使用できなくなります。トランザクションで使用されるロールバック セグメントの場合は、ロールバック セグメントをオンラインにする必要があります。次のコマンドを使用してロールバック セグメントをオンラインにできます: ALTER ROLLBACK SEGMENT rollback_segment ONLINE; 例: ALTER ROLLBACK SEGMENT rbs01 ONLINE; にロールバック セグメント名がリストされています。たとえば、パラメータ ファイルに次の行を追加します。

ROLLBACK_SEGMENT=(rbs01,rbs02)

ロールバック セグメントのストレージ パラメータを変更する
ALTER ROLLBACK SEGMENT コマンドを使用して、ロールバック セグメントのストレージ パラメータを変更できます ( OPTIMAL、MAXEXTENTS を含む)。

構文:

ALTER ROLLBACK SEGMENT rollback_segment

[STORAGE (][NEXT integer][K|M]]

[MINEXTENTS integer]

[MAXEXTENTS {integer|UNLIMITED}]

[OPTIMAL {整数][ K|M]|NULL}]) ]

例:

ALTER ROLLBACK SEGMENT rbs01 STORAGE (MAXEXTENTS 1000);

ロールバックセグメントの領域を再利用する
ロールバックセグメントのOPTIMALパラメータが指定されている場合、ORACLEは自動的にそれを再利用します。 OPTIMAL で指定された位置にセグメントをロールします。ユーザーは、ロールバック セグメントのスペースを手動で再利用することもできます。

構文:

ALTER ROLLBACK SEGMENT rollback_segment SHRINK [TO integer ][K|M]];

説明:

TO integer の値が指定されていない場合、ORACLE は OPTIMAL 位置へのリサイクルを試みます。

例:

ALTER ROLLBACK SEGMENT rbs01 SHRINK TO 2M;

ロールバックセグメントをオフラインにする
ロールバックセグメントは次の 2 つの目的を達成するためにオフラインになります:

1. 新しいトランザクションがロールバックセグメントを使用しないようにします。
2. ロールバックセグメントを削除する必要があります。

構文:

ALTER ROLLBACK SEGMENT rollback_segment OFFLINE;

例:

ALTER ROLLBACK SEGMENT rbs01 OFFLINE;

説明:

トランザクションがこのコマンドを実行した後の、ローリング セグメントの状態オフライン保留になります。トランザクションが終了すると、ステータスは OFFLINE に変わり、V$ROLLSTAT を介してロールバック セグメントのステータスを問い合せることができます。

ロールバックセグメントの削除
ロールバックセグメントが不要になった場合、またはINITIAL、NEXT、MINNEXTENTSパラメータを変更するために再構築する必要がある場合は、削除できます。ロールバック セグメントを削除するには、ロールバック セグメントをオフラインにしてはいけません。

構文:

DROP ROLLBACK SEGMENT rollback_segment;

例:

DROP ROLLBACK SEGMENT rbs01;

使用するデータディクショナリ:DBA_ROLLBACK_SEGS

問い合わせ可能な情報: ロールバックセグメント識別 (SEGMENT_ID )、名前(SEGMENT_NAME)、表スペース (TABLESPACE_NAME)、タイプ (OWNER)、ステータス (STATUS)。

例:

SQL>SELECT セグメント名,テーブルスペース名,owner,status FROM dba_rollback_segs;

ロールバックセグメントの統計情報
データディクショナリ: V$ROLLNAME,V$ROLLSTAT

例:

SQL>名前、 s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status

FROM v$rollname n,v$rollstat s

WHERE n.usn=s.usn;ローリング セグメントの現在アクティブなトランザクション
データ ディクショナリ: V$SESSION、V$TRANSACTION

例:

SQL>SELECT s.username,t.xidusn,t.ubafil,t.ubablk,t.used_ublk

FROM v $ session s,v$transaction t

WHERE s.saddr=t.ses_addr;USERNAME XIDUSN UBAFIL UBABLK USED_UBLK

------- -------- ----------- ----------- ------ ----- SYSTEM 7 OLTP システムの場合、多数の小規模なトランザクション処理、一般的な推奨事項:

多数の小規模なロールバック セグメント、各ロールバック セグメントごとに 10 トランザクション以下。 。

バッチ処理の場合は、一般的に次のことが推奨されます:

トランザクションごとに大きなロールバック セグメントをいくつか。

ロールバックセグメントの問題と解決策
問題 1: トランザクションに必要なロールバックセグメント領域が十分ではありません。これは、表領域がいっぱいで (ORA-01560 エラー)、ロールバックセグメント拡張がパラメータ MAXEXTENTS (ORA-01628) 。

解決策: ロールバック セグメントのテーブル スペースにファイルを追加するか、既存のファイルの MAXEXTENTS の値を大きくします。

問題 2: 読み取り整合性エラー (ORA-01555 SNAPSHOT TOO OLD)

解決策: MINEXTENTS の値を増やし、領域のサイズを増やし、高い OPTIMAL 値を設定します。










このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracleの表空間サイズを確認する方法 Oracleの表空間サイズを確認する方法 Apr 11, 2025 pm 08:15 PM

Oracle Tablespaceサイズを照会するには、次の手順に従ってください。クエリを実行して、TableSpace名を決定します。DBA_TABLESPACesからTableSpace_Nameを選択します。クエリを実行してテーブルスペースのサイズをクエリします:sum(bytes)をtotal_size、sum(bytes_free)asavail_space、sum(bytes) - sum(bytes_free)as sum(bytes_free)as dba_data_files from tablespace_

Oracleデータベースをインポートする方法 Oracleデータベースをインポートする方法 Apr 11, 2025 pm 08:06 PM

データインポート方法:1。SQLLOADERユーティリティを使用します。データファイルを準備し、制御ファイルを作成し、SQLLoaderを実行します。 2。IMP/EXPツールを使用します。データをエクスポートし、データをインポートします。ヒント:1。ビッグデータセットに推奨されるSQL*ローダー。 2。ターゲットテーブルが存在する必要があり、列定義が一致します。 3。インポート後、データの整合性を検証する必要があります。

Oracleのインストールをアンインストールする方法は失敗しました Oracleのインストールをアンインストールする方法は失敗しました Apr 11, 2025 pm 08:24 PM

Oracleインストール障害のためのアンインストールメソッド:Oracleサービスを閉じ、Oracleプログラムファイルとレジストリキーを削除し、Oracle環境変数をアンインストールし、コンピューターを再起動します。アンインストールが失敗した場合、Oracle Universal Uninstallツールを使用して手動でアンインストールできます。

Oracleを再び追求する方法 Oracleを再び追求する方法 Apr 11, 2025 pm 07:33 PM

Oracleは複数の重複排除クエリメソッドを提供します。個別のキーワードは、各列の一意の値を返します。 Group by Clauseは、結果をグループ化し、各グループの非繰り返し値を返します。一意のキーワードは、一意の行のみを含むインデックスを作成するために使用され、インデックスをクエリすると自動的に重複排除が行われます。 row_number()関数は、一意の数値を割り当て、行1のみを含む結果をフィルタリングします。min()またはmax()関数は、数値列の非繰り返し値を返します。交差する演算子は、2つの結果セットの共通値を返します(複製なし)。

Oracleビューを暗号化する方法 Oracleビューを暗号化する方法 Apr 11, 2025 pm 08:30 PM

Oracle View暗号化により、ビュー内のデータを暗号化でき、それにより機密情報のセキュリティが強化されます。手順には以下が含まれます。1)マスター暗号化キー(MEK)の作成。 2)暗号化されたビューを作成し、暗号化されるビューとMEKを指定します。 3)暗号化されたビューにアクセスすることをユーザーに許可します。暗号化されたビューがどのように機能するか:ユーザーが暗号化されたビューを求めてクエリをするとき、OracleはMEKを使用してデータを復号化し、認定ユーザーのみが読み取り可能なデータにアクセスできるようにします。

テーブルフィールドをOracleに追加する方法 テーブルフィールドをOracleに追加する方法 Apr 11, 2025 pm 07:30 PM

ALTER TABLEステートメントを使用して、特定の構文は次のとおりです。ALTERTABLE TABLE_NAME add column_name data_type [constraint-clause]。 WHERE:table_nameはテーブル名、column_nameはフィールド名、data_typeはデータ型、制約条項はオプションの制約です。例:テーブルの従業員を変更すると、電子メールvarchar2(100)は、従業員テーブルに電子メールフィールドを追加します。

Oracleのインスタンス名を表示する方法 Oracleのインスタンス名を表示する方法 Apr 11, 2025 pm 08:18 PM

Oracleでインスタンス名を表示するには3つの方法があります。「sqlplus」と「v $ instanceからselect instance_name;」を使用します。」コマンドラインのコマンド。 「show instance_name;」を使用しますSQL*Plusのコマンド。オペレーティングシステムのタスクマネージャー、Oracle Enterprise Manager、またはオペレーティングシステムを介して、環境変数(LinuxのOracle_Sid)を確認してください。

Oracleでテーブルを作成する方法 Oracleでテーブルを作成する方法 Apr 11, 2025 pm 08:00 PM

Oracleテーブルの作成には、次の手順が含まれます。作成テーブルの構文を使用して、テーブル名、列名、データ型、制約、およびデフォルト値を指定します。テーブル名は簡潔で説明的である必要があり、30文字を超えてはなりません。列名は説明的でなければならず、データ型は列に保存されているデータ型を指定します。 NOT NULL制約により、列でnull値が許可されていないことが保証され、デフォルト句は列のデフォルト値を指定します。テーブルの一意の記録を識別する主要なキーの制約。外部キーの制約は、表の列が別のテーブルの主キーを指していることを指定します。主要なキー、一意の制約、デフォルト値を含むサンプルテーブル学生の作成を参照してください。

See all articles