Artikel ini membawa anda pengetahuan yang berkaitan tentang Oracle, yang terutamanya memperkenalkan isu yang berkaitan dengan rowid Setiap baris data dalam jadual pangkalan data Oracle mempunyai pengecam unik Atau dipanggil rowid, ia biasanya digunakan di dalam Oracle untuk mengakses data saya harap ia akan membantu semua orang.
Tutorial yang disyorkan: "Tutorial Pembelajaran Oracle"
oracle pangkalan data Setiap baris data dalam jadual mempunyai pengecam unik, atau rowid, yang biasanya digunakan untuk mengakses data dalam Oracle. rowid memerlukan 10 bait ruang storan dan menggunakan 18 aksara untuk dipaparkan. Nilai ini menunjukkan lokasi fizikal tertentu baris dalam pangkalan data Oracle. Rowid boleh digunakan dalam pertanyaan untuk menunjukkan bahawa nilai disertakan dalam hasil pertanyaan.
Simpan rowid memerlukan 10 bait atau 80 bit binari. Rowid lanjutan disimpan dalam 10 bait, dengan jumlah 80 bit, termasuk obj#32bit, rfile#10bit, block#22bit dan row#16bit. Oleh itu, nombor fail relatif tidak boleh melebihi 1023, iaitu bilangan fail data dalam ruang jadual tidak boleh melebihi 1023 (tiada fail dengan nombor fail 0 Fail data hanya boleh mempunyai 2^22=4M blok, dan tidak lebih daripada 1023 blok boleh dimasukkan dalam satu blok 2^16=64K baris data. Tidak boleh ada lebih daripada 2^32=4G objek dalam pangkalan data.
80 bit perduaan ini ialah:
1. Nombor objek data, menunjukkan nombor objek pangkalan data yang mana baris ini dimiliki Setiap objek data diberikan nombor secara unik apabila pangkalan data dicipta, dan nombor ini unik . Nombor objek data menduduki kira-kira 32 bit.
2. Nombor fail yang sepadan, menunjukkan nombor fail di mana baris terletak Setiap label fail dalam ruang jadual adalah unik. Nombor fail menduduki 10 digit.
3. Nombor blok, menunjukkan lokasi blok fail di mana baris dihalakan Nombor blok memerlukan 22 digit.
4. Nombor baris, menunjukkan kedudukan khusus baris dalam direktori baris Nombor baris memerlukan 16 digit.
Ini menambah sehingga 80 bit.
Nota: Sebelum Oracle versi 8, rowid terdiri daripada fail# blok# baris#, menduduki 6 bait ruang, 10 bit fail#, 22bit blok#, 16 bit baris# . Oracle8 dan versi yang lebih baru menukar ruang kepada 10 bait.
ROWID lanjutan fizikal Oracle mempunyai 18 bit, setiap bit dikodkan dalam 64 bit, menggunakan A~Z, a~z, 0~9, , / A sejumlah 64 aksara diwakili. A mewakili 0, B mewakili 1, ...Z mewakili 25, a mewakili 26, ...z mewakili 51, 0 mewakili 52, ..., 9 mewakili 61, mewakili 62, / mewakili 63.
SELECT T.ROWID, T.* FROM DEPT T
Untuk mengesahkan bahawa ruang storan rowid ialah 10 bait, termasuk objek 32bit#, 10bit rfile#, 22bit block# dan 16bit row#. Kita perlu menggunakan fungsi dump.
select rowid,dump(rowid,16) from DEPT
1 Gunakan fungsi dalam pakej dbms_rowid untuk melihat
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;
Hasilnya adalah seperti berikut: <.>
2. Pertanyaan maklumat data daripada jadual1) Nombor objek pertanyaan: 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';
Penjelasan: Perbezaan antara DATA_OBJECT_ID dan OBJECT_IDObject_id dan data_object_id kedua-duanya adalah pengecam unik objek. object_id ialah pengenalan logik objekdata_object_id ialah pengenalan fizikal objekHanya jadual, indeks dan buat asal objek dengan lokasi storan fizikal sebenar mempunyai data_object_id. Untuk objek tanpa storan fizikal, data_object_id kosong. Contohnya: (prosedur, fungsi, pakej, jenis data, pautan db, definisi mv, definisi paparan, jadual sementara, definisi jadual partition, dll.) Dalam kebanyakan kes, kedua-duanya adalah sama. Walau bagaimanapun, selepas memotong, memindahkan, membina semula dan operasi lain dilakukan pada objek, data_object_id akan berubah, tetapi object_id tidak akan berubah.Lakukan operasi potong pada DEPT sasaran, kod: TRUNCATE TABLE DEPT;Soal keputusan sekali lagi: Letakkan truncate sebelum Masukkan semula data ke dalam jadual dan semak bahawa rowid yang mewakili nombor objek telah berubah daripada AAAUOO kepada AAAUOP, meningkat sebanyak 1. 2) Nombor fail pertanyaan:
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');Salin selepas log masuk
推荐教程:《Oracle教程》
Atas ialah kandungan terperinci Penjelasan terperinci tentang rowid dalam Panduan Kajian Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!