本篇文章為大家帶來了關於Oracle的相關知識,其中主要介紹了關於rowid的相關問題,oracle資料庫的表中的每一行資料都有一個唯一的標識符,或稱為rowid,在oracle內部通常就是使用它來存取資料的,希望對大家有幫助。
推薦教學:《Oracle學習教學》
一、rowid中儲存資訊概述
oracle資料庫的表中的每一行資料都有一個唯一的標識符,或稱為rowid,在oracle內部通常就是使用它來存取資料的。 rowid需要 10個位元組的儲存空間,並用18個字元來顯示。該值顯示了該行在oracle資料庫中的物理具體位置。可以在一個查詢中使用rowid來表示查詢結果中包含該值。
儲存rowid需要10個位元組或80個位元二進位位元。一個擴充rowid採用10個byte來存儲,共80bit,其中obj#32bit,rfile#10bit,block#22bit,row#16bit。所以相對文件號不能超過1023,也就是一個表空間的資料檔不能超過1023個(不存在文件號為0的文件),一個datafile只能有2^22=4M個block,,一個block不能超過2^16=64K行資料。而一個資料庫內不能有超過2^32=4G個object。
這80個二進位位元分別是:
1. 資料物件編號,表示此行所屬的資料庫物件的編號,每個資料物件在資料庫建立的時候都被唯一分配編號,而此編號唯一。資料物件編號佔用約32位元。
2. 對應檔案編號,表示該行所在檔案的編號,表空間的每一個檔案標號都是唯一的。文件編號所佔用的位置是10位。
3. 區塊編號,表示改行所在檔案的區塊的位置區塊編號需要22位元。
4. 行編號,表示該行在行目錄中的特定位置行編號需要16位。
這樣加起來就是80位。
備註:在oracle 8版本以前,rowid由file# block# row#組成,佔用6個bytes的空間,10 bit 的file# ,22bit 的block# ,16 bit 的row# 。 oracle8以後版本改為10個bytes的空間。
Oracle的物理擴展ROWID有18位,每位採用64位編碼,分別以A~Z、a~z、0~9、 、/共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位元組,其中32bit的object#,10bit的rfile#,22bit的block#,16bit的row#。我們需要使用dump函數。
select rowid,dump(rowid,16) from DEPT
二、驗證查看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';
結果如下:
大多數情況下兩者是相等的。但對object 進行truncate,move, rebuild 等操作後,data_object_id就會改變,而object_id不會改變。# #說明:DATA_OBJECT_ID與OBJECT_ID的差異
object_id和data_object_id 都是物件的唯一識別。
object_id是物件的邏輯標識
data_object_id是物件的物理標識
只有表,索引,undo這些有實際物理儲存位置的物件才有data_object_id。而對於沒有實體儲存的對象,data_object_id就是空。例如:(procedure,function,package,data type,db link,mv定義,view定義,臨時表,分區表定義等等)
對標DEPT執行truncate操作,代碼:TRUNCATE TABLE DEPT;
再次查詢結果:
將truncate前資料重新插入表中,查看rowid代表物件號碼的部分已發生變化由AAAUOO變為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學習指南之rowid詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL和Oracle在性能、擴展性和安全性方面各有優勢。 1)性能:MySQL適合讀操作和高並發,Oracle擅長複雜查詢和大數據處理。 2)擴展性:MySQL通過主從復制和分片擴展,Oracle使用RAC提供高可用性和負載均衡。 3)安全性:MySQL提供細粒度權限控制,Oracle則有更全面的安全功能和自動化工具。

Oracle被稱為數據庫管理的“Powerhouse”是因為其高性能、可靠性和安全性。 1.Oracle是一個關係數據庫管理系統,支持多種操作系統。 2.它提供強大的數據管理平台,具有可擴展性、安全性和高可用性。 3.Oracle的工作原理包括數據存儲、查詢處理和事務管理,支持性能優化技術如索引、分區和緩存。 4.使用示例包括創建表、插入數據和編寫存儲過程。 5.性能優化策略包括索引優化、分區表、緩存管理和查詢優化。

OracleOfferSacomprehensUIteOfproductSandServicesservicesCludingDatabasemangemention,CloudComputing,Enterprisesoftware,AndhardWaresolutions.1)oracledatabaseuppasesuppassuppassuppersupportsvariousdatamodelswithefffiteFticsFeatures.2)

Oracle軟件的發展歷程從數據庫到雲計算,具體包括:1.起源於1977年,最初專注於關係數據庫管理系統(RDBMS),迅速成為企業級應用的首選;2.擴展到中間件、開發工具和ERP系統,形成全套企業解決方案;3.Oracle數據庫支持SQL,提供高性能和可擴展性,適用於從小型到大型企業系統;4.雲計算服務的崛起,進一步拓展了Oracle的產品線,滿足企業IT需求的方方面面。

MySQL和Oracle的選擇應基於成本、性能、複雜性和功能需求:1.MySQL適合預算有限的項目,安裝簡單,適用於小型到中型應用。 2.Oracle適用於大型企業,處理大規模數據和高並發請求表現出色,但成本高且配置複雜。

Oracle通過其產品和服務幫助企業實現數字化轉型和數據管理。 1)Oracle提供全面的產品組合,包括數據庫管理系統、ERP和CRM系統,幫助企業自動化和優化業務流程。 2)Oracle的ERP系統如E-BusinessSuite和FusionApplications,實現端到端業務流程自動化,提高效率並降低成本,但實施和維護成本較高。 3)OracleDatabase提供高並發和高可用性數據處理,但許可成本較高。 4)性能優化和最佳實踐包括合理使用索引和分區技術、定期數據庫維護及遵循編碼規範。

Oracle建庫失敗後刪除失敗數據庫的步驟:使用sys用戶名連接目標實例使用DROP DATABASE刪除失敗數據庫查詢v$database確認數據庫已刪除

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具