博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle dump数据库
阅读量:6292 次
发布时间:2019-06-22

本文共 2041 字,大约阅读时间需要 6 分钟。

最近正在看老白的《DBA的思想天空》,了解数据块结构,想通过dump data block验证oracle对于行尾的NULL,是不占用存储空间的。

我们先来看一下怎样dump数据块:

1.在数据库级别dump数据库,oracle提供了命令支持

ALTER SYSETM DUMP DATAFILE absolute_file_numberBLOCK block_number;
ALTER SYSETM DUMP DATAFILE absolute_file_numberBLOCK MIN minimum_block_numberBLOCK MAX maximum_block_number; ALTER SYSETM DUMP DATAFILE 'file_name'BLOCK block_number;

如果需要强制dump出来的数据以十六进制显示,需要设置event 10289

ALTER SESSION SET EVENTS'10289 trace name context forever, level 1';

然后再dump数据块,使用下列命令关闭10289

ALTER SESSION SET EVENTS'10289 trace name context off';

需要注意的是:

  • dump是,如果忽略block参数,将dump整个数据文件
  • 使用文件号(absolute_file_number)是,数据库必须处于OPEN状态,并且数据文件也要求ONLINE;
  • 使用文件号,dump信息来自Buffer Cache,而不是磁盘
  • 使用文件名,dump信息来自磁盘,因此实例在NOMOUNT状态也可以dump

2.通过操作系统工具dump

dd if=/s01/app/oracle/oradata/MYAPP/users01.dbf of=b527.dmp bs=8192 skip=527 count=1

OK,补充了dump的知识,让我们来跟随老白的实验,验证null是不占用存储空间的。

CREATE TABLE TEST1 (A INTEGER,B VARCHAR2(100),C VARCHAR2(100);INSERT INTO TEST1 VALUES (1,null,'aaaa');INSERT INTO TEST1 VALUES (2,null,'bbbb');INSERT INTO TEST1 VALUES (1,'11111',null);

然后查找这个extent所在的位置:

SELECT extent_id,file_id,block_id from dba_extents where segment_name='TEST1' and owner='SCOTT';

EXTENT_ID FILE_ID BLOCK_ID

---------- ---------- ----------
0               4             520

然后我们查询TEST1表的ROWID

SQL> select dbms_rowid.rowid_block_number('AAASwvAAEAAAAIPAAA') block# from dual;

BLOCK#

---------------------------------------------------
527

通过dd命令可以看到这三条数据。

选中部分2C 01 02:02代表长度。这里也可以验证数据块里的数据是从下往上分布的。

或者alter system dump datafile:

block_row_dump:tab 0, row 0, @0x1f8ctl: 12 fb: --H-FL-- lb: 0x1  cc: 3col  0: [ 2]  c1 02col  1: *NULL*col  2: [ 4]  61 61 61 61tab 0, row 1, @0x1f80tl: 12 fb: --H-FL-- lb: 0x1  cc: 3col  0: [ 2]  c1 03col  1: *NULL*col  2: [ 4]  62 62 62 62tab 0, row 2, @0x1f74tl: 12 fb: --H-FL-- lb: 0x1  cc: 2col  0: [ 2]  c1 02col  1: [ 5]  31 31 31 31 31end_of_block_dumpEnd dump data blocks tsn: 4 file#: 4 minblk 527 maxblk 527

可以看到 INSERT INTO TEST1 VALUES (1,'11111',null); dump出来只有两列数据,NULL是不占用空间的。

转载于:https://www.cnblogs.com/iImax/p/howto-dump-oracle-block.html

你可能感兴趣的文章
poj-1159 Palindrome **
查看>>
VS2010/VS 2013 删除空行
查看>>
解决linux ssh登陆缓慢问题
查看>>
将二叉查找树转化为链表的代码实现
查看>>
[转]宽字符的介绍
查看>>
UIScrollView用法
查看>>
SQL 判断两个时间段是否有交叉
查看>>
python打包_cx_freeze
查看>>
web.config/app.config敏感数据加/解密的二种方法
查看>>
PHP监控linux服务器负载
查看>>
delphi 入门教程
查看>>
技术人员,你拿什么拯救你的生活----温水煮青蛙
查看>>
最小排列数
查看>>
[C] zintrin.h: 智能引入intrinsic函数 V1.01版。改进对Mac OS X的支持,增加INTRIN_WORDSIZE宏...
查看>>
uva 101 The Blocks Problem
查看>>
Linux终端中设置vi编辑命令
查看>>
setup vaio winxp
查看>>
EBS FORM(10g)开发步骤
查看>>
Java 旋转数组查找旋转点和任意元素(元素可重复)
查看>>
悲观锁和乐观锁详解
查看>>