查看oracle各种文件格式,如何在小端服务器以正常格式查看Oracle数据文件

本文介绍了计算机中数据存储的大端模式和小端模式,阐述了两种模式的区别,并通过实例展示了在Linux环境下如何通过dd命令和od命令观察数据文件中的字节序。在Linux系统上,数据文件的内容并不直接反映出字节序,但通过添加conv=swab参数可以转换字节序以便正确查看。文章还提供了两种查看转换后字节序的方法,帮助读者理解不同平台上的数据存储差异。
摘要由CSDN通过智能技术生成

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

我们知道Linux,Windows(Intel的80x86系列芯片)平台属于小端,AIX、HPUX、

Solaris(Sparc)属于大端。大家可能会有这样的疑问,Oracle数据文件在不同平台上存放的字节序一样吗?会不会是小端服务器以小端的格式存放,大端服务

器以大端的格式存放?其实数据文件中的内容如何存放这取决于应用程序,所以Oracle数据库在不同平台上的数据文件中存放的格式是一样的(假如不一样,跨平台的传输表空间,岂不是很麻烦,传输表空间更改的主要是数据文件的头部,再把对象的数据字典信息导入)。假如用od命令查看,你会发现在小端服务器上,你看到的字节序是反的。在小端上用od查看加上参数conv=swab就可以正常查看块的内容,这个符合我们的阅读习惯,对于在小端服务器上研究的同学可以这样做。请看下面的的测试

[oracle@ora10 ~]$ bbed parfile=10gpar

Password:

BBED: Release 2.0.0.0.0 - Limited Production on Wed Jun 15 00:06:04 2016

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED> help

HELP [ | ALL ]

BBED> show all;

FILE# 1

BLOCK# 1

OFFSET 0

DBA 0x00400001 (4194305 1,1)

FILENAME /oradata/ora10/system01.dbf

BIFILE bifile.bbd

LISTFILE files.txt

BLOCKSIZE 8192

MODE Browse

EDIT Unrecoverable

IBASE Dec

OBASE Dec

WIDTH 80

COUNT 512

LOGFILE log.bbd

SPOOL No

用bbed查看数据文件的第一个块(其实是第二个块,前面还有OS文件头)

BBED> dump /v offset 0 count 64

File: /oradata/ora10/system01.dbf (1)

Block: 1       Offsets:    0 to   63  Dba:0x00400001

-------------------------------------------------------

0ba20000 01004000 0000000000000104 l .?....@.........

9c730000 00000000 0001200a 91cf2635 l .s........ ..?&5

4f524131 30000000 99010000 00f00000 l ORA10........?..

00200000 01000300 00000000 00000000 l . ..............

<16 bytes per line>

BBED> exit

在Linux上,通过dd查看块内容,可以看到,字节序和用bbed dump出来的结果不一样

[oracle@ora10 ~]$ dd if=/oradata/ora10/system01.dbf bs=8k skip=1|od -x -N 64

0000000 a20b 0000 0001 0040 0000 0000 0000 0401

0000020 739c 0000 0000 0000 0100 0a20 cf91 3526

0000040 524f 3141 0030 0000 0199 0000 f000 0000

0000060 2000 0000 0001 0003 0000 0000 0000 0000

0000100

通过下面的方法A或方法B都可以实现

A.在Linux上,加上参数conv=swab,把整个文件复制到新的文件,然后通过dd查看块内容,这样再看块内容是不是很完美

[oracle@ora10 ~]$ dd if=/oradata/ora10/system01.dbf of=/oradata/ora10/system01_swab.dbf conv=swab

983056+0 records in

983056+0 records out

503324672 bytes (503 MB) copied, 4.27371 seconds, 118 MB/s

[oracle@ora10 ~]$ dd if=/oradata/ora10/system01_swab.dbf bs=8k skip=1|od -x -N 64

0000000 0ba2 0000 0100 4000 0000 0000 0000 0104

0000020 9c73 0000 0000 0000 0001 200a 91cf 2635

0000040 4f52 4131 3000 0000 9901 0000 00f0 0000

0000060 0020 0000 0100 0300 0000 0000 0000 0000

0000100

[oracle@ora10 ~]$

B.在Linux上,我们还可以使用参数conv=swab,然后通过管道用dd和od结合看更好,这样可以不用输出文件,也不会破坏原文件

[oracle@ora10 ~]$ dd if=/oradata/ora10/system01.dbf conv=swab bs=8k skip=1|od -x -N 64

0000000 0ba2 0000 0100 4000 0000 0000 0000 0104

0000020 9c73 0000 0000 0000 0001 200a 91cf 2635

0000040 4f52 4131 3000 0000 9901 0000 00f0 0000

0000060 0020 0000 0100 0300 0000 0000 0000 0000

0000100

[oracle@ora10 ~]$

Reference

http://baike.baidu.com/view/1922338.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值