q1: 插入了一行之後,持續插入一行,是在原來的塊還是新的塊? 數據塊DUMP


 
q1:  插入了一行之後,持續插入一行,是在原來的塊還是新的塊? 如果判斷這個塊有沒有剩餘空間
  在選擇在哪個塊進行插入時,會根據進程算一個hash值。堆表是隨機插入的,在插入的時候,隨機找到高水位以下的空閒塊進行插入,一個區是由8個塊組成,
前三個塊是不可用的塊。
drop table t10;
create table t10(id int);
insert into t10 values(1);
 
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;
DBMS_ROWID.ROWID_RELATIVE_FNO(     BLOCK#
------------------------------ ----------
                             4      12167


SQL>  insert into t10 values(2);
1 row inserted


SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;
DBMS_ROWID.ROWID_RELATIVE_FNO(     BLOCK#
------------------------------ ----------
                             4      12167
                             4      12167
commit;
新開一個會話。
insert into t10 values(3); 
 
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;


DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)     BLOCK#
------------------------------------ ----------
                                   4      12165
                                   4      12167
                                   4      12167
 
 




如果我有100000 個0 和1個1,hash函數是無法均分的
因爲0算出的hash值是一樣的,會落在一個分區表裏
t1                    t2--T1,T2分別有是個分區。
10                   10
--如果連接列是t1.tid = t2.tid,那麼tid一定是在一個分區,兩個分區就可以進行連接。


兩個很大的分區表進行運算
這個時候我們希望分區之間可以單獨做運算
分區跟分區之間數據進行匹配就可以了




pctused:一個塊的使用水位的百分比,這個水位將使該塊返回到可用列表中去等待更多的插入操作。
pctfree:用來爲一個
塊保留的空間百分比,以防止在今後的更新操作中增加一列或多列值的長度。




FILE_ID    RELATIVE_FNO




相對文件號儘量同絕對文件號保持一致,直到表空間中的文件數超出1023




select file_id,relative_fno from dba_data_files where tablespace_name='USERS';


FILE_ID    RELATIVE_FNO
---------- ------------
3          3
9          9
10         10
11         11
12         12
13         13
14         14
15         15
..         ..
..         ..
..         ..
1020       1020
1021       1021
1022       1022
1023       1023
1024       1


 
create table testblock( 
id number, 
name varchar(4) 
) 
 
插入3條數據然後提交: 
  insert into testblock values(1,'a'); 
  insert into testblock values(2,'b'); 
  insert into testblock values(3,'c'); 
  commit; 


查詢相對文件號和塊號
 
select rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid) blockno from testblock; 
ROWID                                                                               REL_FNO    BLOCKNO
-------------------------------------------------------------------------------- ---------- ----------
AAASYaAAEAAAC+PAAA                                                                        4      12175
AAASYaAAEAAAC+PAAB                                                                        4      12175
AAASYaAAEAAAC+PAAC                                                                        4      12175


 
alter system dump datafile 4 block 2140; 




創建表空間
create tablespace tbs02
datafile 'E:/TBS022.DBF' size 10M autoextend on next 2M maxsize 50m;
SQL> select * from dba_data_files where tablespace_name='drop tablespace tbs02 including contents and datafiles;
';
FILE_NAME                                                                           FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUTOEXTENSIBLE   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
-------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- -------------
E:\TBS022.DBF                                                                             6 TBS02                            10485760       1280 AVAILABLE            6 YES              52428800       6400          256    9437184        1152 ONLINE


刪除表空間並刪除數據文件
SQL>drop tablespace tbs02 including contents and datafiles;
    Tablespace dropped
SQL> select * from dba_data_files where tablespace_name='TBS02';
FILE_NAME                                                                           FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS    RELATIVE_FNO AUTOEXTENSIBLE   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
-------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- -------------


SQL> alter system dump datafile 4 block 2140; --DUMP數據文件
存放的位置:11g:
SQL> show parameter dump


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_core_dump                 string      partial
background_dump_dest                 string      e:\app\administrator\diag\rdbm
                                                 s\hhn\hhs\trace
core_dump_dest                       string      e:\app\administrator\diag\rdbm
                                                 s\hhn\hhs\cdump
max_dump_file_size                   string      unlimited
shadow_core_dump                     string      none
user_dump_dest                       string      e:\app\administrator\diag\rdbm
                                                 s\hhn\hhs\trace
SQL>
E:\app\Administrator\diag\rdbms\hhn\hhs\trace
hhs_ora_1296.trc


1296是進程號,查找進程號的腳本:
select spid
  from v$process
 where addr = (select paddr
                  from v$session
                 where sid = (select distinct sid from v$mystat));


SQL> select spid
  2    from v$process
  3   where addr = (select paddr
  4                    from v$session
  5                   where sid = (select distinct sid from v$mystat));
SPID
------------------------
1296


buffer tsn: 4   (--該塊對應的表空間號)
(數據塊地址計算方法:   用4個字節32位來表示,前10位爲相對數據文件號,後22位爲塊號) 


dba: 0x0100085c (4/2140)
 0000 0001 0000 0000 1000 0101 1100


IBM Oracle EMC 


MySQL  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章