您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

在采用不同端格式的系统之间移动数据

您可以将 big-endian 格式的数据库中的数据移至 little-endian 格式的数据库中。

先决条件

注意 开始之前,确保您具有用于捕获数据库和表模式的进程。

以下示例装载名为lineitem 的表,并在 UFS(文件系统)上标识一个名为 lineitem_binary.inp 的提取文件。

查看操作系统文档,了解系统的最大文件大小。例如,Sun Solaris x64 上的提取文件的最大大小为 512 GB。

背景信息

此过程移动表定义,但不包含对数据库对象的迁移,例如,必须重新创建的存储过程或事件。

例如,在 Sun64 SPARC 系统上建立的 SAP IQ 数据库以 big-endian(最重要字节在前)格式存储二进制数据。因为 Sun Solaris x64 是 little-endian 系统,所以在 Sun64 SPARC 上构建的 SAP IQ 数据库无法通过 ALTER DATABASE UPGRADE 升级以在 Sun Solaris x64 系统上运行。

要在采用不同字节序结构的硬件平台之间移动各数据库的数据,必须执行下列操作:

  • 从源平台复制数据库模式(表、索引等)。

  • 在目标平台上创建新的数据库。

  • 从源数据库执行二进制数据转储。

  • 将数据装载到新的目标数据库。

    注意 装载 Multiplex 数据库时,请在所有文件名中使用绝对(完全限定)路径。请不要使用相对路径名。

    过程

  1. 激活提取实用程序:SET TEMPORARY OPTION Temp_Extract_Name1 ='lineitem_binary.inp'SET TEMPORARY OPTION Temp_Extract_Name2 = ''

  1. 对 lineitem 表设置二进制提取:SET TEMPORARY OPTION Temp_Extract_Binary = 'on'SET TEMPORARY OPTION Temp_Extract_Swap = 'off'

  1. 将输出放置到文件 lineitem_binary.inp 中:SELECT * FROM lineitem

  1. 关闭提取实用程序:SET TEMPORARY OPTION Temp_Extract_Name1 = ''

  1. 在目标系统上创建数据库副本。

  1. 假定表 lineitem 的定义方式如下,并按如下方式装载 lineitem 表:LOAD TABLE lineitem( l_orderkey BINARY WITH NULL BYTE, l_partkey BINARY WITH NULL BYTE, l_suppkey BINARY WITH NULL BYTE, l_linenumber BINARY WITH NULL BYTE,l_quantity BINARY WITH NULL BYTE,l_extendedprice BINARY WITH NULL BYTE,l_discount BINARY WITH NULL BYTE,l_tax BINARY WITH NULL BYTE,l_returnflag BINARY WITH NULL BYTE,l_linestatus BINARY WITH NULL BYTE,l_shipdate BINARY WITH NULL BYTE,l_commitdate BINARY WITH NULL BYTE,l_receiptdate BINARY WITH NULL BYTE,l_shipinstruct BINARY WITH NULL BYTE,l_shipmode BINARY WITH NULL BYTE,l_comment BINARY WITH NULL BYTE )FROM 'C:\\mydata\\lineitem_binary.inp' FORMAT BINARYSTRIP OFFQUOTES OFFESCAPES OFFPREVIEW ONBYTE ORDER HIGH;COMMIT请特别注意下列两个子句: 当装载二进制文件时,需要 BINARY WITH NULL BYTE。BYTE ORDER HIGH 从生成数据的系统指定字节顺序。本示例中的源数据库为 big-endian 平台;因此,此数据需要 HIGH 字节顺序。(little-endian 数据库需要 LOW 字节顺序。)

  1. 当装载二进制文件时,需要 BINARY WITH NULL BYTE。

  1. BYTE ORDER HIGH 从生成数据的系统指定字节顺序。本示例中的源数据库为 big-endian 平台;因此,此数据需要 HIGH 字节顺序。(little-endian 数据库需要 LOW 字节顺序。)