如何dump一个数据块
若以下回答无法解决问题,邀请你更新回答
1个回答
2015-12-09 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517165
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
如果数据块有错误,鉴于诊断需要,可能需要通过dump的方式来查看数据块的内容。简单介绍常用的两种dump数据块方式:
通过数据库来格式化dump输出
这是最经常使用的,可以通过在数据库中运行alter systemdump命令来dump一个或者一组数据块。使用这种方式dump,数据块内大部分的信息都经过转换。DBA只需明白每个dump文件内每个标示说明即可。
语法格式:
ALTER SYSTEM DUMP DATAFILE {'filename'}|{filenumber}
|---BLOCK MIN{blockno} BLOCK MAX {blockno}|-->
|----BLOCK{blockno}-----------------------|
例如:
SQL>ALTER SYSTEM DUMP DATAFILE 1 BLOCK 62120;
SQL>ALTER SYSTEM DUMP DATAFILE '/u01/oradata/ORCL/dtafile/system01.dbf' BLOCK 62120;
SQL>ALTER SYSTEM DUMP DATAFILE 1 BLOCK MIN62119MAX62122;
如果需要强制dump出来的数据以十六进制显示,在执行dump之前,请先通过设置 10289事件强制转换。
注意要点:
· 即使dump出现错误,但该命令依旧会成功执行,oracle会将错误的信息写入trace文件中;
如:dump一个不正确的块号而返回“Statementprocessed”
· dump时,如果忽略block参数,那么将dump出整个文件;
· 使用{filenumber},数据库必须处于open状态;同时,数据文件必须处于online状态;另外,{filenumber}将是绝对文件号而不是相对文件号;
· 使用{filenumber}时,数据块信息将从BufferCache中dump,而不是磁盘中;
· 使用{filename}时,数据块信息将从磁盘中dump出来,而不是从buffercache中;
· 另外,可以通过{filename}dump出其它至少处于nomount状态的实例的数据库文件,前提是数据块相同;
trace文件:
产生的trace文件,由初始化参数USER_DUMP_DEST指定;11g中可以通过v$diag_info查询
通过操作系统工具dd(unix/Linux)来dump
有的情况下,通过操作系统的dd工具来dump数据块,也是一个非常不错的方法。遗憾的是,通过操作系统dump出来的文件,将完全是以十六进制形式展现。可读性糟糕。
语法:
dd if=dbfile.dbf bs=4k skip={block} count=1 | od -x > dump.out
^^block size
skip=n blocks to skip
其中,skip应用比较灵活,可以通过skip来dump一个范围内的数据块。如:
dd if=dbfile.dbf bs=4k skip={block}-1 count=3 | od -x > dump.out
注意
对于十六进制显示的数据块数据,需要注意操作系统的大小字节序问题。
通过数据库来格式化dump输出
这是最经常使用的,可以通过在数据库中运行alter systemdump命令来dump一个或者一组数据块。使用这种方式dump,数据块内大部分的信息都经过转换。DBA只需明白每个dump文件内每个标示说明即可。
语法格式:
ALTER SYSTEM DUMP DATAFILE {'filename'}|{filenumber}
|---BLOCK MIN{blockno} BLOCK MAX {blockno}|-->
|----BLOCK{blockno}-----------------------|
例如:
SQL>ALTER SYSTEM DUMP DATAFILE 1 BLOCK 62120;
SQL>ALTER SYSTEM DUMP DATAFILE '/u01/oradata/ORCL/dtafile/system01.dbf' BLOCK 62120;
SQL>ALTER SYSTEM DUMP DATAFILE 1 BLOCK MIN62119MAX62122;
如果需要强制dump出来的数据以十六进制显示,在执行dump之前,请先通过设置 10289事件强制转换。
注意要点:
· 即使dump出现错误,但该命令依旧会成功执行,oracle会将错误的信息写入trace文件中;
如:dump一个不正确的块号而返回“Statementprocessed”
· dump时,如果忽略block参数,那么将dump出整个文件;
· 使用{filenumber},数据库必须处于open状态;同时,数据文件必须处于online状态;另外,{filenumber}将是绝对文件号而不是相对文件号;
· 使用{filenumber}时,数据块信息将从BufferCache中dump,而不是磁盘中;
· 使用{filename}时,数据块信息将从磁盘中dump出来,而不是从buffercache中;
· 另外,可以通过{filename}dump出其它至少处于nomount状态的实例的数据库文件,前提是数据块相同;
trace文件:
产生的trace文件,由初始化参数USER_DUMP_DEST指定;11g中可以通过v$diag_info查询
通过操作系统工具dd(unix/Linux)来dump
有的情况下,通过操作系统的dd工具来dump数据块,也是一个非常不错的方法。遗憾的是,通过操作系统dump出来的文件,将完全是以十六进制形式展现。可读性糟糕。
语法:
dd if=dbfile.dbf bs=4k skip={block} count=1 | od -x > dump.out
^^block size
skip=n blocks to skip
其中,skip应用比较灵活,可以通过skip来dump一个范围内的数据块。如:
dd if=dbfile.dbf bs=4k skip={block}-1 count=3 | od -x > dump.out
注意
对于十六进制显示的数据块数据,需要注意操作系统的大小字节序问题。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询