https://blog.csdn.net/killvoon/article/details/46968125
在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,还是比较慢的。如果能够实现表空间传输,很大程度上就等于操作系统层面的文件拷贝。
---------------------
作者:killvoon
来源:CSDN
原文:https://blog.csdn.net/killvoon/article/details/46968125
版权声明:本文为博主原创文章,转载请附上博文链接!