orace block与table记录 dump及buffer cache小纪
上一篇 / 下一篇 2013-01-31 20:50:35 / 个人分类:block
--插入一条记录,仅一个列
SQL> create table t_dump(a int);
Table created
SQL> insert into t_dump values(9);
1 row inserted
SQL> commit;
Commit complete
SQL> create table t_dump(a int);
Table created
SQL> insert into t_dump values(9);
1 row inserted
SQL> commit;
Commit complete
---用dump查看记录存储在块中的内容
SQL> select dump(9,10) from dual;--10进制显示
DUMP(9,10)
-------------------
Typ=2 Len=2: 193,10
SQL> select dump(9,16) from dual; --16进制显示
DUMP(9,16)
-----------------
Typ=2 Len=2: c1,a
SQL> select dump(9,10) from dual;--10进制显示
DUMP(9,10)
-------------------
Typ=2 Len=2: 193,10
SQL> select dump(9,16) from dual; --16进制显示
DUMP(9,16)
-----------------
Typ=2 Len=2: c1,a
-------获取表记录所在的文件号及块号
SQL> select dbms_rowid.rowid_to_absolute_fno(rowid,'SCOTT','T_DUMP'),dbms_rowid.rowid_block_number(rowid) from t_dump where rownum=1;
DBMS_ROWID.ROWID_TO_ABSOLUTE_F DBMS_ROWID.ROWID_BLOCK_NUMBER(
------------------------------ ------------------------------
10 231251
---转储块号内容(为表添加新列b,类型为varchar2,且其列为10)
SQL> alter system dump datafile 10 block 231251;
System altered
SQL> select dbms_rowid.rowid_to_absolute_fno(rowid,'SCOTT','T_DUMP'),dbms_rowid.rowid_block_number(rowid) from t_dump where rownum=1;
DBMS_ROWID.ROWID_TO_ABSOLUTE_F DBMS_ROWID.ROWID_BLOCK_NUMBER(
------------------------------ ------------------------------
10 231251
---转储块号内容(为表添加新列b,类型为varchar2,且其列为10)
SQL> alter system dump datafile 10 block 231251;
System altered
SQL> select dump('10',16) from dual;--查看16进制内容
DUMP('10',16)
-------------------
Typ=96 Len=2: 31,30
---多次dump文件,未发现新添加的b列
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
end_of_block_dump
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
end_of_block_dump
---添加一列但此列未插入数据
SQL> alter table t_dump add b varchar2(10);
Table altered
SQL> alter system dump datafile 10 block 231251;
System altered
---如下可知新添加的列未显示在block,说明oracle仅会在block记录有数据的列
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
end_of_block_dump
SQL> alter table t_dump add b varchar2(10);
Table altered
SQL> alter system dump datafile 10 block 231251;
System altered
---如下可知新添加的列未显示在block,说明oracle仅会在block记录有数据的列
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
end_of_block_dump
--后分析,此时添加的b列内容未写到block中,仍在buffer cache中,强制检查,即写到数据文件中
-- alter system flush buffer_cache也可起到同样作用
SQL> alter system checkpoint;
System altered.
-- alter system flush buffer_cache也可起到同样作用
SQL> alter system checkpoint;
System altered.
----查看dump新添加的内容已体现出来
block_row_dump:
tab 0, row 0, @0x1f89
tl: 9 fb: --H-FL-- lb: 0x2 cc: 2
col 0: [ 2] c1 0a
col 1: [ 2] 31 30
tab 0, row 1, @0x1f7c
tl: 13 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 5] c4 0a 64 64 64
col 1: [ 3] 7a 78 79
end_of_block_dump ---查看块号内容,如下在dump文件存储的内容c1 0a即是上述dump查询的结果,二者一致
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
block_row_dump:
tab 0, row 0, @0x1f89
tl: 9 fb: --H-FL-- lb: 0x2 cc: 2
col 0: [ 2] c1 0a
col 1: [ 2] 31 30
tab 0, row 1, @0x1f7c
tl: 13 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 5] c4 0a 64 64 64
col 1: [ 3] 7a 78 79
end_of_block_dump ---查看块号内容,如下在dump文件存储的内容c1 0a即是上述dump查询的结果,二者一致
block_row_dump:
tab 0, row 0, @0x1f92
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col 0: [ 2] c1 0a
相关阅读:
- [alter system dump学习1]alter system dump logfile (尛样儿, 2012-11-11)
- Oracle rowid 初探 (genweihua, 2012-11-21)
- oracle dump函数解析_字符集 (wisdomone1, 2012-12-20)
- zt_checkpoint检查点解密(转) (wisdomone1, 2012-12-21)
- 初识oracle block系列(一) (wisdomone1, 2012-12-31)
- zt_Oracle Dump Redo Log File 说明 (wisdomone1, 2013-1-02)
- 用oracle procedure存储过程实现自表(列存在null)查询不等于输入参数的记录 (wisdomone1, 2013-1-29)
- zt_不完全详解os block header (wisdomone1, 2013-1-30)
- corrupt block(logical corruption) (zhuanshijin, 2013-1-30)