Oracle Study GuideのROWIDの詳細な説明
この記事では、Oracle に関する関連知識を提供します。主に rowid に関する関連問題を紹介します。Oracle データベース テーブル内のデータの各行には一意の識別子があります。または rowid と呼ばれ、通常は Oracle 内で使用されます。データにアクセスするための情報です。皆様のお役に立てれば幸いです。
推奨チュートリアル: 「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; 結果を再度クエリします:
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';
说明:
从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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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