您的位置:首页 > 数据库 > Oracle

关于oracle endian_format的相关解释

2015-07-20 14:59 666 查看
在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,还是比较慢的。如果能够实现表空间传输,很大程度上就等于操作系统层面的文件拷贝。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: