【11g體繫結構,5】rowid,11g體繫結構rowid
一.rowid
擴充的rowid 使用以64為基數的編碼方案來顯示。rowid簡單理解為資料的社會安全號碼,總共18位,6位對象號,3為檔案號,6位塊號,3位行號。rowid前15位表示塊地址,前15位相同的資料在同一個塊中。
#查詢EMProwidSQL> select rowid from scott.emp;
ROWID------------------AAACgBAAEAAAAAdAAAAAACgBAAEAAAAAdAABAAACgBAAEAAAAAdAACAAACgBAAEAAAAAdAADAAACgBAAEAAAAAdAAEAAACgBAAEAAAAAdAAFAAACgBAAEAAAAAdAAGAAACgBAAEAAAAAdAAHAAACgBAAEAAAAAdAAIAAACgBAAEAAAAAdAAJAAACgBAAEAAAAAdAAK
ROWID------------------AAACgBAAEAAAAAdAALAAACgBAAEAAAAAdAAMAAACgBAAEAAAAAdAAN
14 rows selected.
#查詢對象idSQL> select object_id,object_name,object_type from dba_objects where owner='SCOTT';
OBJECT_ID OBJECT_NAM OBJECT_TYP---------- ---------- ---------- 10239 DEPT TABLE 10240 PK_DEPT INDEX 10241 EMP TABLE 10242 PK_EMP INDEX 10243 BONUS TABLE 10244 SALGRADE TABLE
6 rows selected.
#擷取對象號SQL> select dbms_rowid.rowid_object('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_OBJECT('AAACGBAAEAAAAADAAG')--------------------------------------------- 10241
#檔案號SQL> select dbms_rowid.rowid_relative_fno('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_RELATIVE_FNO('AAACGBAAEAAAAADAAG')--------------------------------------------------- 4#塊號SQL> select dbms_rowid.rowid_block_number('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_BLOCK_NUMBER('AAACGBAAEAAAAADAAG')--------------------------------------------------- 29#行號,第7條記錄SQL> select dbms_rowid.rowid_row_number('AAACgBAAEAAAAAdAAG') from dual;
DBMS_ROWID.ROWID_ROW_NUMBER('AAACGBAAEAAAAADAAG')------------------------------------------------- 6#查詢區的資訊, emp表現在擁有8個塊,block_id 是25~32.SQL> col segment_name for a10SQL> select extent_id,segment_name,bytes/1024 k,blocks,file_id,block_id from dba_extents where owner='SCOTT';
EXTENT_ID SEGMENT_NA K BLOCKS FILE_ID BLOCK_ID---------- ---------- ---------- ---------- ---------- ---------- 0 DEPT 64 8 4 9 0 EMP 64 8 4 25 0 BONUS 64 8 4 41 0 SALGRADE 64 8 4 49 0 PK_DEPT 64 8 4 17 0 PK_EMP 64 8 4 33
6 rows selected.
二.一個資料區塊能存放多少條資料和1g空間能存放多少條資料:
三.OFA:最優靈活體系架構ofa:是指oracle軟體和資料庫檔案集檔案夾的命名規範和儲存位置規則。
$ORACLE_BASE 為:/u01/app/oracle$oracle_home為:/u01/app/oracle/11.2.0/db_home_1$ORACLE_BASE/ /oradata 資料檔案 /product 軟體地址 /admin 放置dump 檔案
$oracle_home /dbs 初始設定檔案(參數檔案,密碼檔案) /network/admin 配置監聽
四:instance_name,sid ,db_name,global_name的關係1.sid是作業系統用來表示執行個體的編號,可以理解為instance的作業系統編號,所以sid和instance_name一一對應。select instance_name from v$instance 中儲存的就是sid2.但是instance_name 和db_name是有區別的:rac環境下db_name為racdb,但執行個體名可能是racdb1和dacdb23.global_name 就是db_name.db_domain,global_name是為了在由多個資料庫組成的分散式資料庫中標識資料庫名稱而設立的。
SQL> select * from global_name;GLOBAL_NAME--------------LOSCSMAN
SQL> select instance_name from v$instance;
INSTANCE_NAME--------------------------------loscsmanager
SQL> show parameter db_name;
NAME TYPE VALUE------------------------------------ ---------------------- ------------------------------db_name string loscsman
網上很多人說oracle 11g在處理大資料分頁時用rowid比rownum效率快很多,rowid與rownum分頁效率原理
rownum和rowid是兩種不同的東西,不知道你如何利用rowid來分頁?
rownum是返回的記錄編號。rowid可理解為返回記錄的實際地址。
當根據rowid訪問時相當於不經查詢直接取數,用rownum必須經過查詢(即資料庫裡有查詢動作)。如果已經知道了rowid再去擷取資料和通過rownum計數去擷取資料,肯定用rowid快。
實際上,由於oracle不支援的真正的分頁查詢,所謂分頁,是先把資料從資料庫中查詢出來,然後再把對應頁的資料返回給調用者,剩餘的資料扔掉了。所以,這種情況下,註定用rowid不如用rownum快。