关于oracle endian_format的相关解释

来源:互联网 发布:积分兑换源码 编辑:程序博客网 时间:2024/05/16 12:14

在itpub上闲逛,看到一个关于数据迁移的帖子,涉及到了操作系统字节顺序这方面的知识,不甚了解,便查找一番记录一下。


在库上执行如下语句:

SQL> select * from v$transportable_platform;


PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- --------------
          1 Solaris[tm] OE (32-bit)                  Big
          2 Solaris[tm] OE (64-bit)                  Big
          7 Microsoft Windows IA (32-bit)            Little
         10 Linux IA (32-bit)                        Little
          6 AIX-Based Systems (64-bit)               Big
          3 HP-UX (64-bit)                           Big
          5 HP Tru64 UNIX                            Little
          4 HP-UX IA (64-bit)                        Big
         11 Linux IA (64-bit)                        Little
         15 HP Open VMS                              Little
          8 Microsoft Windows IA (64-bit)            Little


PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- --------------
          9 IBM zSeries Based Linux                  Big
         13 Linux x86 64-bit                         Little
         16 Apple Mac OS                             Big
         12 Microsoft Windows x86 64-bit             Little
         17 Solaris Operating System (x86)           Little
         18 IBM Power Based Linux                    Big
         19 HP IA Open VMS                           Little
         20 Solaris Operating System (x86-64)        Little

已选择19行。
SQL>

可以看到一些系统平台对应着endian_format,有big和little两个值,在网上找了些相关资料,解释如下:

在计算机中最小的单位是一个字节,不过一个字节能表示的范围太小了,我们可以将一个字节理解成一个0-9间的任何一个数字, 因此我们要表示一个千位数时就需要四位来表示, 给定一个四位数8765, 这个值是不会变的, 但我们记录这个数字时可以写成8765也可以记录成5678, 只要我们自已记住是如何存贮就可以了. 在三十二位的系统中, 一个整数由四个字节来组成, 所以在不同的硬件系统中放在内存中时, 就有两种顺序, Big Edian指将千位写在前面, Little Edian指将个位写在前面. 有些人理解成一个Byte中各个bit的顺序是不对的.

在Oracle的数据文件中, 记录了各种信息, 有一些信息是用多于一个字节来表示的, 如相对数据块地址(RDBA)由四个字节组成, 而Row index则只需要两个字节组成, 不同硬件平台下的Oracle在将这些信息写入文件时, 就出现了不同的写入顺序, 因此不同硬件的Oraclce数据文件并不能在相互拷贝使用. 由于字节对齐方式只有2种, 而实际上我们有很多的不同的硬件平台, 所以有的不同硬件平台他们的字节对齐方式是相同的, 在相同的平台上, Oracle数据库文件其实是相同的, 理论上应当是可以互通的, 只是Oracle可以记录了一些OS的信息, 导致数据文件不能通过.


oracle 10g以后可以实现跨平台的表空间传输,但对于endian_format不同的情况下,需要使用rman convert 进行转换。

关于表空间传输这一块的相关知识,我这两天会整理下,尤其是xtts相关知识,对于大数据迁移方面非常实用,不然对于T级数据库的迁移,单纯靠expdp/impdp和rman,还是比较慢的。如果能够实现表空间传输,很大程度上就等于操作系统层面的文件拷贝。


0 0
原创粉丝点击