当前位置:文档之家› Oracle10g的数据迁移方案(好文章要转)

Oracle10g的数据迁移方案(好文章要转)

Oracle10g的数据迁移方案(好文章要转)2008-07-07 11:31网上看到一个不错的文章,转帖给大家,包括传输表空间解决跨平台及endian-ness问题的处理方法找到将数据从仓库迁移到集市的最快方法。

Lora 是Acme银行的数据库管理员,她现在在该银行高层管理团队高级会议上成了大家最关注的核心人物。

这次会议的目的是确定一些方法,来使最终用户能够详细分析公司主数据仓库中的数据。

会上提出的一种想法是创建几个小型数据集市--每个集市根据一个特定的职能范围存储数据--这样每个数据集市就可以由专门的团队来使用。

为了有效地实现数据集市的方法,数据专家必须能将数据快速、有效地放入数据集市中。

该团队面临的挑战就是解决如何用数据仓库中的数据快速刷新数据集市中的数据,而这些数据集市又运行在各个结构不同的平台上。

这就是Lora为什么出席会议的原因。

她会为移动数据提出哪些可供选择的方法呢?作为一名经验丰富、知识渊博的数据库管理员,Lora向与会者提供了三种可能的方法,分别是:使用可移动表空间使用数据泵(导入和导出)拖出表空间本文介绍Lora对这三种可选方法的解释,包括它们的实施细节和优缺点。

可移动表空间Lora 从可移动表空方法开始介绍。

把整个表空间移动到目标系统的最快速方法是用FTP(文件传输协议)或rcp(远程复制)来简单地转移表空间的基本文件。

但是,仅仅复制Oracle数据文件还不够,目标数据库必须识别出并导入文件以及相应的表空间,最终用户才能使用表空间数据。

使用可移动表空间包括复制表空间文件和使它们中的数据在目标数据库中可用。

在考虑该方法之前必须进行一些审查。

首先,对于要转移到目标系统的表空间TS1,它必须是自含式的(self-contained)。

也就是说,在该表空间中表的所有索引、分区及其他从属于该表的各数据段都必须在该表空间内部。

Lora解释说,如果一个表空间集合包含所有从属的数据段,那么就认为这个集合是自含式的。

例如,如果表空间TS1和TS2要作为一个集合进行转移,TS1中的一个表在TS2中有一个索引,则这个表空间集合就是自含式的。

但是,如果TS1中的一个表另一个索引在表空间TS3中,则该表空间集合(TS1, TS2)就不是自含式的。

要移动表空间,Lora提议使用Oracle数据库10g中的数据泵导出(Data Pump Export)工具。

数据泵是Oracle的新一代数据转移工具,它替换了早期的Oracle Export (EXP)和Import (IMP)工具。

这些老的工具使用正则SQL来提取和插入数据,而数据泵则与它们不同,它使用能绕过SQL缓冲区的专用API,从而使操作过程速度变得极快。

此外,数据泵可以提取特定的对象,如特定的存储过程或特定表空间的表集合。

数据泵的导出和导入可以由作业控制,数据库管理员可以随时暂停、重启或终止这些作业。

开会前Lora运行了一项测试,看看数据泵能否解决Acme的要求。

Lora进行的测试是转移TS1和TS2表空间,步骤如下:1.检查TS1和TS2这个表空间集合是否是自含式的。

执行下面的命令:BEGINSYS.DBMS_TTS.TRANSPORT_SET_CHECK ('TS1','TS2');END;2.确定所有不可移动的集合。

如果没有选择任何行,则该表空间是自含式的:SELECT * FROM TRANSPORT_SET_VIOLATIONS;no rows selected3.确保该表空间是只读的:SELECT STATUSFROM DBA_TABLESPACESWHERE TABLESPACE_NAME IN ('TS1','TS2');STATUS---------READ ONLYREAD ONLY4.使用传输机制,如FTP或rcp,将每个表空间中的数据文件移到远程系统,放到/u01/oradata目录下。

5.在目标数据库中,创建一个到源数据库的数据库链接(在下面的命令行中命名为srcdb)。

CREATE DATABASE LINK srcdbUSING 'srcdb';6.在目标数据库中,使用数据泵导入工具将该表空间导入到该数据库中。

impdp lora/lora123TRANSPORT_DATAFILES="'/u01/oradata/ts1_1.dbf','/u01/oradata/ts2_1.dbf'"NETWORK_LINK='srcdb'TRANSPORT_TABLESPACES=\(TS1,TS2\)NOLOGFILE=Y这一步就使TS1和TS2表空间以及它们的数据可以在目标数据库中可用。

请注意,Lora并没有从源数据库导出元数据。

她只是在上面的impdp命令中指定参数NETWORK_LINK 的值为srcdb,即到源数据库的数据库链接。

数据泵导入工具通过数据库链接从源数据库中获得所需的元数据,并在目标数据库中重新创建它们。

7. 最后,使源数据库中的TS1和TS2表空间成为可读写。

ALTER TABLESPACE TS1 READ WRITE;ALTER TABLESPACE TS2 READ WRITE;这一步使TS1和TS2表空间在源数据库中对用户立即可用。

请注意,在前面讲的所有步骤中,最费时的是第4步,在这一步中要跨各系统移动数据文件。

跨不同平台的挑战Lora知道,数据复制过程中的复杂因素之一就是源平台和目标平台经常不一致。

例如,在Acme的环境中,当前数据仓库位于运行Tru64 UNIX的HP服务器上,而建议的数据集市将部署在运行Linux和Windows的Intel硬件上。

在Oracle数据库10g出现之前,在Acme使用可移动表空间不是一个切实可行的方法。

你不能移动表空间,除非源数据库和目标数据库运行在同一个平台上。

有了Oracle数据库10g,这一限制得到了极大的缓解。

在移动表空间时,数据文件可以跨各操作系统任意复制。

在前面的例子中,数据文件可以从Tru64 UNIX复制到Linux或Windows,而目标数据库仍能识别它们。

但是,管理团队必须考虑另一种限制。

默认情况下,只有两个操作系统具有相同的字节顺序(也被称为"endian-ness")时才可能进行跨操作系统复制。

在Acme的情况下,Tru64 UNIX、基于Intel的Linux 和Windows都使用little-endian字节顺序(低位在前),因此在它们之间进行文件复制是可能的。

但是,有的团队成员提出了在有关数据仓库/数据集市的提案中使用Solaris操作系统的想法。

Solaris使用big-endian字节顺序(高位在前),这使得在数据库之间进行简单的文件复制成为不可能。

Lora解释说,Oracle提供了使用Oracle Recovery Manager (RMAN)进行字节顺序转换的解决方案。

她描述了针对RMAN解决方案的一个测试,该测试根据前面讲到的移动表空间解决方案的7个步骤,并稍作修改来适应Solaris到Intel/Linux的环境。

除了在第5步之前或之后额外增加一步以外,所有操作步骤都一样。

在源(Solaris)数据库服务器上执行的额外这一步如代码清单1中所示。

用这些代码,可以从Solaris格式的/u01/oradata/ts1_01.dbf文件创建Intel Linux格式的文件/u01/tts/ TS1_34。

注意最初的文件并没有被破坏;只是创建了一个可以被导入和传输到Linux上的目标数据库中的新文件。

然后Lora讨论了对RMAN解决方案的一些修改。

第一,为了提高性能,她可以指定PARALLELISM=子句来提高执行线程的数目。

第二,她可以指定在不同的目录下以相同的文件名创建数据文件。

这些修改如下:RMAN> CONVERT TABLESPACE TS12> TO PLATFORM 'Linux IA (32-bit)'3> DB_FILE_NAME_CONVERT4> '/u01/oradata','/u01/tts'5> PARALLELISM=46> ;这条命令用相同的文件名ts1_01.dbf但在/u01/tts目录下根据原始文件/u01/oradata/ts1_01.dbf创建一个转换后的数据文件。

这种方法将所有转换后的文件放到一个位置,这样确定转移哪个文件就更简单了。

Lora还可以在目标(Linux)数据库服务器而不是在源服务器上执行变换。

在这种情况下,将在Linux服务器上执行转换,如下所示:RMAN> CONVERT DATAFILE2> '/u01/oradata/ts1_1.dbf','/u01/oradata/ts2_1.dbf'3> TO PLATFORM='Linux IA (32-bit)'4> FROM PLATFORM='Solaris[tm] OE(64-bit)'5> DB_FILE_NAME_CONVERT="ts","tslinux"6> ;这条命令通过用tslinux代替ts(换句话说,将ts1_1.dbf转换到Linux上的文件格式,新文件名为tslinux1_1.dbf)来创建文件。

在数据库内,文件将用这个文件名。

Lora怎么知道哪个平台用哪种字节顺序呢?在数据字典视图上执行以下查询就会给出答案:SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;数据泵导出与导入工具选择可移动表空间的限制之一是在转移文件时源表空间必须是只读模式。

在现实世界中,并不总是能满足这一要求。

例如,在OLTP数据库中,可能对表要经常进行读写操作。

Lora提出的另一种方法是使用Oracle数据库10g中的数据泵实用工具来转移表空间。

她对这种方法进行的测试包括移动TS1和TS2表空间内容的以下步骤:1.创建一个目录对象来存放转储的文件。

CREATE DIRECTORY dump_dir AS '/u01/dumps';2.用数据泵导出工具导出数据。

expdp lora/lora123 TABLESPACES=\(ts1,ts2\) DUMPFILE=ts1_ts2.dmpDIRECTORY=dump_dir这一步创建一个包含TS1和TS2表空间内容的文件/u01/dumps/ ts1_ts2.dmp。

相关主题