Oracle 10G 的数据迁移方案

发表于:2008-8-21 16:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

分享:
  3.将文件ts1_ts2.dmp转移到远程系统中,放在目录/u01/dumps下(用文件传输的方法如FTP或rcp)。 

  4.在目标数据库中创建一个目录对象。

CREATE DIRECTORY dump_dir 

AS '/u01/dumps';

  5.使用数据泵导入工具将该文件导入到该数据库中。

impdp lora/lora123 DIRECTORY=dump_dir DUMPFILE=ts1_ts2.dmp

  如果表空间内的数据量相对较小,则Lora可以只用一条命令执行上面的所有步骤:

impdp lora/lora123 DIRECTORY=dump_dir NETWORK_LINK='srcdb' TABLESPACES=(ts1,ts2) 

  这条命令使用数据泵导入工具将通过数据库链接srcdb(在以前的章节中已讨论过)检索到的数据加载到表中。但是,由于网络带宽通常是受到限制的,因此这种方法可能比使用导出/传输/导入周期方法要慢一些。

  如果只需将特定的表或表集合进行转移,那么Lora可以在expdp命令中使用TABLES=子句来只下载特定的表或表集合。

  拖出表空间

  作为第三种选择,Lora建议使用Oracle数据库10g中的新工具,它简化了可移动表空间的移动方法,因此只涉及执行一个打包过程。在这种方法中,用户利用所提供的DBMS_STREAMS_TABLESPACE_ADM包从源系统中"拖?quot;表空间。这个包使用数据泵转移表空间并将数据文件转换成目标系统的格式。它还自动执行任何所需的字节顺序变换。

  下面给出在最简单的情况下使用这种方法的过程--涉及单个简单表空间(更复杂的情况在下一节介绍)。如果一个表空间只有一个数据文件,则这个表空间称为简单表空间。Lora演示了DBMS_STREAMS_TABLESPACE_ADM包中 PULL_SIMPLE_TABLESPACE过程的使用方法:

  1.在存放数据文件的目录所在的(远程)数据仓库数据库中创建一个目录对象。

CREATE DIRECTORY dbf_dir AS '/u01/oradata/dw';

  2.设置远程数据库中的表空间TS1为只读。

ALTER TABLESPACE TS1 READ ONLY;

  剩下的一些步骤在本地(数据集市)数据库中完成。

  3.创建一个连接到远程(数据仓库)数据库(在Lora的例子中是dwdb)的数据库链接。

CREATE DATABASE LINK dwdb USING 'dwdb';

  4.创建一个数据文件将被转移到其中的目录对象。

CREATE DIRECTORY dbf_dir AS '/u01/oradata/mart';

  5.从远程数据库中拖出表空间。

BEGIN

DBMS_STREAMS_TABLESPACE_ADM

.PULL_SIMPLE_TABLESPACE (

tablespace_name => 'TS1',

database_link => 'dwdb',

directory_object => 'DBF_DIR',

conversion_extension => 'linux'

);

END;

  该操作在后台完成了许多步骤:设置源表空间为只读;用数据泵导出工具进行一次表空间的元数据转储;用DBMS_FILE_TRANSFER包移动数据文件和转储的文件;把源表空间恢复到其最初的读写状态;使用数据泵导入工具将表空间插入到本地数据库中。由于源数据库运行在Linux上,而目标数据库运行在Solaris上,因此这一操作首先复制原始数据文件(Linux的文件格式),然后将它转换到目标平台上(Solaris)的文件格式。复制过程保持最初被转移的文件,而创建一个新文件用于转换。新文件与最初的文件同名,但具有CONVERSION_EXTENSION参数指定的linux扩展名。在目标数据库中创建的表空间为只读表空间。

  该操作还在与数据文件相同的目录下创建一个名为ts1_01.plg的日志文件。如果执行该过程返回错误信息,则检查该文件的内容可能有助于找到错误的原因。

  拖出多个表空间

  上面的例子针对的是单个简单表空间的情况。但如果Lora想移动一组表空间,或者一些表空间的数据文件多于一个,该怎么办呢?在这种情况下,她可以使用同一个包中的另一个过程PULL_TABLESPACES。代码清单2给出的例子说明Lora如何转移两个表空间TS7和TS8,而不管它们有多少个数据文件。

  该过程要求以VARCHAR2数据类型给出表空间名和目录名。代码清单2中第2行到第5行展示出了这些变量的声明,第10行到第13行展示出这些变量被赋值给相应的表空间名和目录名。由于定义了两个目录,因此第一个文件在第一个目录中创建,下一个文件在第二个目录中创建,第三个文件再次在第一个目录中创建,如此等等。这些操作通过数据泵作业来执行,作业名在第17行指定。如果需要的话,源系统字节顺序的数据文件会自动转换为目标系统的字节顺序。在目标数据库中创建的新文件获得linux扩展名,如第21行代码所示。处理过程记录在由目录对象LOG_DIR指定的目录中的ts7_ts8.log日志文件中(第14行)。

  这种方法的优点显而易见。从一个系统把一个表空间转移到另一个系统所需的所有操作任务都封装在一个程序单元中,并且细节对用户完全透明。甚至把文件从源系统转移到目标系统的工作也在这个过程中通过所提供的DBMS_FILE_TRANSFER包来完成。用户简单地用表空间名调用该过程,表空间就会在本地数据库中被刷新。他们不必操心底层的细节(如操作系统),因为文件转移过程自动转换文件。这种方法有什么不好的地方吗?会上Lora讲到,它的主要缺点就是将各个功能封装在一个单一的过程内,这可能会掩盖某一步产生的错误,使问题的诊断变得很复杂。手工转移一个表空间的方法要求各条命令都是透明的,因而其好处是用户能够看到每一步操作的结果。

  会议结束

  针对Acme的数据仓库/数据集市体系结构,Lora提出了几种移动数据的可选方法。

  第一种可选方法是使用可移动表空间,它能移动完整的表空间集合(不仅包括表,还包括索引、物化视图和其他对象)。通常它还是这三种方法中最快的一种。但是,它的一个主要缺点是对指定的表空间必须在复制文件时设置为只读。

  第二种方法是使用数据泵,它对表空间是否为只读没有要求。当只需要移动指定的表而不是整个表空间时,这种方法很有用。

  最后一种方法是拖出表空间,该方法把可移动表空间方法的所有步骤组合成一步操作。用这种方法复制数据非常简单,但要想调整每个具体步骤以便进行性能优化时,它为数据库管理员提供的灵活性太少。

  在会议结束时,高级管理层对Lora表示感谢,而Lora也感谢高级管理层对Acme银行迁移到Oracle数据库10g的支持,因为这使得不同的数据移动方法都成为可行的。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号