目次
1. rowid への情報の保存の概要
2. rowid の内容を確認して表示します
ホームページ データベース Oracle Oracle Study GuideのROWIDの詳細な説明

Oracle Study GuideのROWIDの詳細な説明

Mar 15, 2022 pm 06:03 PM
oracle

この記事では、Oracle に関する関連知識を提供します。主に rowid に関する関連問題を紹介します。Oracle データベース テーブル内のデータの各行には一意の識別子があります。または rowid と呼ばれ、通常は Oracle 内で使用されます。データにアクセスするための情報です。皆様のお役に立てれば幸いです。

Oracle Study GuideのROWIDの詳細な説明

推奨チュートリアル: 「Oracle 学習チュートリアル

1. rowid への情報の保存の概要

oracleデータベース テーブル内のデータの各行には一意の識別子 (ROWID) があり、通常は Oracle 内のデータにアクセスするために使用されます。 rowid は 10 バイトの記憶領域を必要とし、表示に 18 文字を使用します。この値は、Oracle データベース内の行の特定の物理的な場所を示します。 ROWID をクエリで使用すると、値がクエリ結果に含まれることを示すことができます。

ROWID の保存には 10 バイトまたは 80 バイナリ ビットが必要です。拡張 ROWID は、obj#32bit、rfile#10bit、block#22bit、row#16bit を含む合計 80 ビットの 10 バイトに格納されます。したがって、相対ファイル番号は 1023 を超えることはできません。つまり、表スペース内のデータ ファイルの数は 1023 を超えることはできません (ファイル番号 0 のファイルはありません)。データファイルには 2^22=4M ブロックしか含めることができません。 1 つのブロックには 1023 を超えるブロックを含めることができ、2^16=64K 行のデータになります。データベースには 2^32=4G を超えるオブジェクトを含めることはできません。
これらの 80 バイナリ ビットは次のとおりです:
1. データ オブジェクト番号。この行が属するデータベース オブジェクトの番号を示します。データベースの作成時に各データ オブジェクトには一意に番号が割り当てられ、この番号は一意です。データ オブジェクト番号は約 32 ビットを占めます。
2. 対応するファイル番号。行が配置されているファイルの番号を示します。表スペース内の各ファイル ラベルは一意です。ファイル番号は 10 桁です。
3. ブロック番号。行がリダイレクトされるファイルのブロックの位置を示します。ブロック番号には 22 桁が必要です。
4. 行番号。行ディレクトリ内の行の特定の位置を示します。行番号には 16 桁が必要です。
これは合計 80 ビットになります。

注: Oracle 8 バージョンより前では、ROWID は file# block# row# で構成され、6 バイトの領域を占有し、10 ビット file#、22 ビット block#、16 ビット row# で構成されていました。 Oracle8 以降のバージョンでは、スペースが 10 バイトに変更されます。

Oracle の物理拡張 ROWID は 18 ビットで、各ビットは A ~ Z、a ~ z、0 ~ 9、、、/ A を使用して 64 ビットでエンコードされます。合計 64 文字が表現されます。 Aは0を表し、Bは1を表し、...Zは25を表し、aは26を表し、...zは51を表し、0は52を表し、...、9は61を表し、62を表し、/は63を表します。

SELECT T.ROWID, T.* FROM DEPT T
ログイン後にコピー

ROWID の記憶領域が 10 バイト (32 ビットのオブジェクト番号、10 ビットの rfile#、22 ビットのブロック番号、および 16 ビットの行番号を含む) であることを確認します。ダンプ機能を使用する必要があります。

select rowid,dump(rowid,16) from DEPT
ログイン後にコピー

2. rowid の内容を確認して表示します

1. dbms_rowid パッケージの関数を使用して

SELECT ROWID,
       DBMS_ROWID.ROWID_OBJECT(ROWID) AS OBJECT,
       DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) AS FILENUM,
       DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) AS BLOCK,
       DBMS_ROWID.ROWID_ROW_NUMBER(ROWID) AS ROWN
  FROM DEPT;
ログイン後にコピー

を表示します。結果は次のとおりです。

2. テーブルからのデータ情報のクエリ

1) クエリ オブジェクト番号: DATA_OBJECT_ID

SELECT OBJECT_NAME, OBJECT_TYPE, SUBOBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID
  FROM DBA_OBJECTS T
 WHERE T.OBJECT_NAME ='DEPT'
 AND T.OWNER = 'CHF';
ログイン後にコピー

結果は次のとおりです:

#説明: DATA_OBJECT_ID と OBJECT_ID の違い

Object_id と data_object_id はどちらもオブジェクトの一意の識別子です。

object_id はオブジェクトの論理識別です

data_object_id はオブジェクトの物理識別です

実際の物理的な格納場所を持つテーブル、インデックス、および UNDO オブジェクトのみが data_object_id を持ちます。物理ストレージのないオブジェクトの場合、data_object_id は空です。例: (プロシージャ、関数、パッケージ、データ型、DB リンク、MV 定義、ビュー定義、一時テーブル、パーティション テーブル定義など)

ほとんどの場合、この 2 つは等しいです。ただし、オブジェクトに対して切り捨て、移動、再構築などの操作を実行すると、data_object_id は変更されますが、object_id は変更されません。

ターゲット DEPT で切り捨て操作を実行します。コード: TRUNCATE TABLE DEPT;

結果を再度クエリします:

truncate 操作を置き換えます。 データを表に再挿入し、オブジェクト番号を表す ROWID が AAUOO から AAAUOP に変更され、1 ずつ増加していることを確認します。

2) クエリ ファイル番号:

SELECT T.SEGMENT_NAME, T.HEADER_BLOCK, T.BLOCKS, T.EXTENTS, T.RELATIVE_FNO
  FROM DBA_SEGMENTS T
 WHERE T.SEGMENT_NAME = 'DEPT'
   AND T.OWNER = 'CHF';
ログイン後にコピー
HEADER_BLOCK: このテーブルの最初のデータ ブロック番号

BLOCKS: テーブルの最初のデータ ブロック番号このテーブルの最初のデータ ブロック データ ブロックの数

RELATIVE_FNO: 相対ファイル番号

結果は次のとおりです:

说明:

从Oracle8开始,Oracle开始使用“相对文件号”,使原来一个数据库最多只能有1023个文件,扩展为一个表空间最多可以有1023个文件,每个库最多可以有65534个文件

验证文件号

SELECT T.TABLE_NAME,
       T.TABLESPACE_NAME,
       G.FILE_NAME,
       G.FILE_ID,
       G.RELATIVE_FNO
  FROM DBA_TABLES T
 INNER JOIN DBA_DATA_FILES G
    ON G.TABLESPACE_NAME = T.TABLESPACE_NAME
 WHERE T.TABLE_NAME = 'DEPT'
 AND T.OWNER = 'CHF';
ログイン後にコピー

执行结果:

因为创建用户时没用指定默认表空间,建表时也没用指定表空间,所以此处使用的USERS表空间(大家不必在意这些细节...),可以看到文件号和相对文件号都是 4 ,这是因为我的数据库中每个表空间只有一个数据文件,如果一个表空间有多个数据文件,这两个值有可能不一样。

知识扩展:

我们可以使用跟踪文件查看数据文件信息,命令:alter session set events 'immediate trace name FILE_HDRS level 10';

执行完此代码后,将在数据库服务器生成一个跟踪文件,查看文件路径代码:

select
  u_dump.value || '/' ||
  db_name.value || '_ora_' ||
  v$process.spid ||
  nvl2(v$process.traceid, '_' || v$process.traceid, null )
  || '.trc' "Trace File"
from
v$parameter u_dump
cross join v$parameter db_name
cross join v$process
join v$session
on v$process.addr = v$session.paddr
where
  u_dump.name = 'user_dump_dest' and
  db_name.name = 'db_name' and
  v$session.audsid=sys_context('userenv','sessionid');
ログイン後にコピー

推荐教程:《Oracle教程

以上がOracle Study GuideのROWIDの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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_

オラクルで時間を取得する方法 オラクルで時間を取得する方法 Apr 11, 2025 pm 08:09 PM

Oracleで時間を取得するには、次の方法があります。Current_Timestamp:現在のシステム時間を秒に正確に返します。 systimestamp:current_timestampよりも正確で、ナノ秒。 sysdate:時間部分を除く現在のシステム日付を返します。 to_char(sysdate、 'yyy-mm-dd hh24:mi:ss'):現在のシステムの日付と時刻を特定の形式に変換します。抽出:1年、月、時間など、時間の値から特定の部分を抽出します。

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

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

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:24 PM

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

無効な数のOracleを確認する方法 無効な数のOracleを確認する方法 Apr 11, 2025 pm 08:27 PM

Oracle無効な数値誤差は、データ型の不一致、数値オーバーフロー、データ変換エラー、またはデータの破損によって引き起こされる場合があります。トラブルシューティング手順には、データ型のチェック、デジタルオーバーフローの検出、データ変換のチェック、データの破損のチェック、nls_numeric_charactersパラメーターの構成、データ検証ロギングの有効化など、他の可能なソリューションの調査が含まれます。

Oracleのユーザーをセットアップする方法 Oracleのユーザーをセットアップする方法 Apr 11, 2025 pm 08:21 PM

Oracleでユーザーを作成するには、次の手順に従ってください。Createユーザーステートメントを使用して新しいユーザーを作成します。助成金ステートメントを使用して必要な権限を付与します。オプション:リソースステートメントを使用してクォータを設定します。デフォルトの役割や一時テーブルスペースなど、他のオプションを構成します。

Oracle Cursorを閉じる問題を解決する方法 Oracle Cursorを閉じる問題を解決する方法 Apr 11, 2025 pm 10:18 PM

Oracle Cursorの閉鎖問題を解決する方法には、次のものが含まれます。 Scopeが終了した後に自動的に閉じるように、for update句のカーソルを宣言します。使用句のカーソルを宣言して、関連するPL/SQL変数が閉じられたときに自動的に閉じるようにします。例外処理を使用して、例外の状況でカーソルが閉じていることを確認します。接続プールを使用して、カーソルを自動的に閉じます。自動送信を無効にし、カーソルの閉鎖を遅延させます。

See all articles