下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle10g 的数据迁移方案2009-03-27 08:18Lora 是 Acme银行的数据库管理员, 她现在在该银行高层管理团队高级会议上成了大家最关注的核心人物。 这次会议的目的是确定一些方法, 来使最终用户能够详细分析公司主数据仓库中的数据。 会上提出的一种想法是创建几个小型数据集市 - 每个集市根据一个特定的职能范围存储数据 - 这样每个数据集市就可以由专门的团队来使用。为了有效地实现数据集市的方法, 数据专家必须能将数据快速、 有效地放入数据集市中。该团队面临的挑战就是解决如何用数据仓库中的数据快速刷新数据集市中的数据,而这些数据集市又运行在各个结构不同的平台上。这就是 Lor
2、a 为什么出席会议的原因。她会为移动数据提出哪些可供选择的方法呢?作为一名经验丰富、知识渊博的数据库管理员, Lora 向与会者提供了三种可能的方法,分别是:使用可移动表空间使用数据泵(导入和导出)拖出表空间本文介绍 Lora 对这三种可选方法的解释,包括它们的实施细节和优缺点。可移动表空间Lora 从可移动表空方法开始介绍。把整个表空间移动到目标系统的最快速方法是用 FTP(文件传输协议)或 rcp (远程复制)来简单地转移表空间的基本文件。但是,仅仅复制 Oracle 数据文件还不够,目标数据库必须识别出并导入文件以及相应的表空间, 最终用户才能使用表空间数据。 使用可移动表空间包括复制表
3、空间文件和使它们中的数据在目标数据库中可用。在考虑该方法之前必须进行一些审查。首先,对于要转移到目标系统的表空间TS1,它必须是自含式的( self-contained )。也就是说,在该表空间中表的所有索引、分区及其他从属于该表的各数据段都必须在该表空间内部。 Lora 解释说,如果一个表空间集合包含所有从属的数据段, 那么就认为这个集合是自含式的。例如,如果表空间 TS1和 TS2要作为一个集合进行转移, TS1 中的一个表在TS2中有一个索引,则这个表空间集合就是自含式的。但是,如果 TS1中的一个表另一个索引在表空间 TS3中,则该表空间集合 (TS1, TS2) 就不是自含式的。要移
4、动表空间, Lora 提议使用 Oracle 数据库 10g 中的数据泵导出( Data Pump Export )工具。数据泵是 Oracle 的新一代数据转移工具, 它替换了早期的 Oracle Export (EXP) 和 Import (IMP) 工具。这些老的工具使用正则 SQL来提取和插入数据,而数据泵则与它们不同,它使用能绕过 SQL缓冲区的专用 API,从而使操作过程速度变得极快。 此外,数据泵可以提取特定的对象, 如特定的存储过程或特定表空间的表集合。 数据泵的导出和导入可以由作业控制,数据库管理员可以随时暂停、重启或终止这些作业。开会前 Lora运行了一项测试,看看数据泵能
5、否解决Acme的要求。 Lora进行的测试是转移TS1 和 TS2表空间,步骤如下:1. 检查 TS1和 TS2 这个表空间集合是否是自含式的。执行下面的命令:BEGINEND;2. 确定所有不可移动的集合。如果没有选择任何行,则该表空间是自含式的:SELECT * FROM TRANSPORT_SET_VIOLATIONS;no rows selected3. 确保该表空间是只读的:SELECT STATUSFROM DBA_TABLESPACESWHERE TABLESPACE_NAME IN (TS1,TS2);STATUS-READ ONLYREAD ONLY4. 使用传输机制,如 F
6、TP或 rcp ,将每个表空间中的数据文件移到远程系统,放到 /u01/oradata 目录下。5. 在目标数据库中, 创建一个到源数据库的数据库链接 (在下面的命令行中命名为 srcdb )。CREATE DATABASE LINK srcdbUSING srcdb;6. 在目标数据库中,使用数据泵导入工具将该表空间导入到该数据库中。impdp lora/lora123TRANSPORT_DATAFILES=/u01/oradata/ts1_1.dbf,/u01/oradata/ts2_1.dbfNETWORK_LINK=srcdbTRANSPORT_TABLESPACES=(TS1,TS2
7、)NOLOGFILE=Y这一步就使 TS1 和 TS2表空间以及它们的数据可以在目标数据库中可用。请注意, Lora 并没有从源数据库导出元数据。她只是在上面的 impdp 命令中指定参数 NETWORK_LINK的值为 srcdb ,即到源数据库的数据库链接。数据泵导入工具通过数据库链接从源数据库中获得所需的元数据, 并在目标数据库中重新创建它们。7. 最后,使源数据库中的 TS1和 TS2表空间成为可读写。ALTER TABLESPACE TS1 READ WRITE;ALTER TABLESPACE TS2 READ WRITE;这一步使 TS1和 TS2表空间在源数据库中对用户立即可用
8、。请注意,在前面讲的所有步骤中, 最费时的是第 4 步,在这一步中要跨各系统移动数据文件。跨不同平台的挑战Lora 知道,数据复制过程中的复杂因素之一就是源平台和目标平台经常不一致。例如,在 Acme的环境中,当前数据仓库位于运行 Tru64 UNIX 的 HP服务器上,而建议的数据集市将部署在运行 Linux 和 Windows的 Intel 硬件上。在 Oracle 数据库 10g 出现之前,在 Acme使用可移动表空间不是一个切实可行的方法。你不能移动表空间,除非源数据库和目标数据库运行在同一个平台上。有了 Oracle 数据库 10g,这一限制得到了极大的缓解。在移动表空间时,数据文件
9、可以跨各操作系统任意复制。 在前面的例子中, 数据文件可以从 Tru64 UNIX 复制到 Linux 或 Windows,而目标数据库仍能识别它们。但是,管理团队必须考虑另一种限制。 默认情况下, 只有两个操作系统具有相同的字节顺序(也被称为 endian-ness )时才可能进行跨操作系统复制。在 Acme 的情况下, Tru64 UNIX、基于 Intel 的 Linux 和 Windows都使用 little-endian字节顺序(低位在前),因此在它们之间进行文件复制是可能的。但是,有的团队成员提出了在有关数据仓库 / 数据集市的提案中使用 Solaris 操作系统的想法。 Sola
10、ris 使用 big-endian 字节顺序(高位在前),这使得在数据库之间进行简单的文件复制成为不可能。Lora 解释说, Oracle 提供了使用 Oracle Recovery Manager (RMAN) 进行字节顺序转换的解决方案。她描述了针对 RMAN解决方案的一个测试,该测试根据前面讲到的移动表空间解决方案的 7 个步骤,并稍作修改来适应 Solaris 到 Intel/Linux 的环境。除了在第 5 步之前或之后额外增加一步以外,所有操作步骤都一样。在源 (Solaris) 数据库服务器上执行的额外这一步如代码清单 1 中所示。用这些代码,可以从SolarisLinux 格式
11、的文件 /u01/tts/格式的 /u01/oradata/ts1_01.dbf 文件创建 Intel TS1_34。注意最初的文件并没有被破坏;只是创建了一个可以被导入和传输到Linux上的目标数据库中的新文件。然后 Lora 讨论了对 RMAN解决方案的一些修改。 第一,为了提高性能, 她可以指定 PARALLELISM=子句来提高执行线程的数目。第二,她可以指定在不同的目录下以相同的文件名创建数据文件。这些修改如下:RMAN CONVERT TABLESPACE TS12 TO PLATFORM Linux IA (32-bit)3 DB_FILE_NAME_CONVERT4 /u01/
12、oradata,/u01/tts5 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.dbf3 TO PLATFOR
13、M=Linux IA (32-bit)4 FROM PLATFORM=Solaristm OE(64-bit)5 DB_FILE_NAME_CONVERT=ts,tslinux6 ;这条命令通过用 tslinux 文件格式,新文件名为代替 ts (换句话说,将ts1_1.dbf转换到 Linux 上的tslinux1_1.dbf)来创建文件。在数据库内,文件将用这个文件名。Lora 怎么知道哪个平台用哪种字节顺序呢?在数据字典视图上执行以下查询就会给出答案:SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;数据泵导出与导入工
14、具选择可移动表空间的限制之一是在转移文件时源表空间必须是只读模式。 在现实世界中,并不总是能满足这一要求。例如,在 OLTP数据库中,可能对表要经常进行读写操作。Lora 提出的另一种方法是使用 Oracle 数据库 10g 中的数据泵实用工具来转移表空间。她对这种方法进行的测试包括移动 TS1 和 TS2表空间内容的以下步骤:1. 创建一个目录对象来存放转储的文件。CREATE DIRECTORY dump_dir AS /u01/dumps;2. 用数据泵导出工具导出数据。expdp lora/lora123 TABLESPACES=(ts1,ts2) DUMPFILE=ts1_ts2.d
15、mp DIRECTORY=dump_dir这一步创建一个包含TS1 和 TS2 表空间内容的文件 /u01/dumps/ ts1_ts2.dmp。3. 将文件 ts1_ts2.dmp 转移到远程系统中,放在目录 /u01/dumps 下(用文件传输的方法如 FTP或 rcp )。4. 在目标数据库中创建一个目录对象。CREATE DIRECTORY dump_dirAS /u01/dumps;5. 使用数据泵导入工具将该文件导入到该数据库中。impdp lora/lora123 DIRECTORY=dump_dir DUMPFILE=ts1_ts2.dmp如果表空间内的数据量相对较小,则 Lo
16、ra 可以只用一条命令执行上面的所有步骤:impdp lora/lora123 DIRECTORY=dump_dir NETWORK_LINK=srcdb TABLESPACES=(ts1,ts2)这条命令使用数据泵导入工具将通过数据库链接 srcdb (在以前的章节中已讨论过)检索到的数据加载到表中。但是,由于网络带宽通常是受到限制的,因此这种方法可能比使用导出 / 传输 / 导入周期方法要慢一些。如果只需将特定的表或表集合进行转移,那么 Lora 可以在 expdp 命令中使用 TABLES= 子句来只下载特定的表或表集合。拖出表空间作为第三种选择, Lora 建议使用 Oracle 数据
17、库 10g 中的新工具,它简化了可移动表空间的移动方法, 因此只涉及执行一个打包过程。 在这种方法中, 用户利用所提供的 DBMS_STREAMS_TABLESPACE包_从ADM源系统中 拖 ?quot; 表空间。这个包使用数据泵转移表空间并将数据文件转换成目标系统的格式。 它还自动执行任何所需的字节顺序变换。下面给出在最简单的情况下使用这种方法的过程 - 涉及单个简单表空间(更复杂的情况在下一节介绍)。 如果一个表空间只有一个数据文件,则这个表空间称为简单表空间。 Lora 演示了 DBMS_STREAMS_TABLESPACE包_中ADM PULL_SIMPLE_TABLESPACE过程
18、的使用方法: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
19、/u01/oradata/mart;5. 从远程数据库中拖出表空间。BEGINDBMS_STREAMS_TABLESPACE_ADM.PULL_SIMPLE_TABLESPACE (tablespace_name= TS1,database_link= dwdb,directory_object = DBF_DIR,conversion_extension = linux);END;该操作在后台完成了许多步骤: 设置源表空间为只读; 用数据泵导出工具进行一次表空间的元数据转储; 用 DBMS_FILE_TRANSFER包移动数据文件和转储的文件;把源表空间恢复到其最初的读写状态; 使用数据泵导
20、入工具将表空间插入到本地数据库中。由于源数据库运行在 Linux 上,而目标数据库运行在 Solaris 上,因此这一操作首先复制原始数据文件( Linux 的文件格式),然后将它转换到目标平台上( Solaris )的文件格式。复制过程保持最初被转移的文件,而创建一个新文件用于转换。新文件与最初的文件同名,但具有 CONVERSION_EXTENSION参数指定的 linux 扩展名。在目标数据库中创建的表空间为只读表空间。该操作还在与数据文件相同的目录下创建一个名为 ts1_01.plg 的日志文件。如果执行该过程返回错误信息,则检查该文件的内容可能有助于找到错误的原因。拖出多个表空间上面
21、的例子针对的是单个简单表空间的情况。但如果 Lora 想移动一组表空间,或者一些表空间的数据文件多于一个, 该怎么办呢?在这种情况下, 她可以使用同一个包中的另一个过程 PULL_TABLESPACES。代码清单 2 给出的例子说明 Lora 如何转移两个表空间 TS7 和 TS8,而不管它们有多少个数据文件。该过程要求以 VARCHAR2数据类型给出表空间名和目录名。代码清单 2 中第 2 行到第 5 行展示出了这些变量的声明, 第 10 行到第 13 行展示出这些变量被赋值给相应的表空间名和目录名。 由于定义了两个目录,因此第一个文件在第一个目录中创建,下一个文件在第二个目录中创建, 第三个文件再次在第一个目录中创建,如此等等。这些操作通过数据泵作业来执行,作业名在第 17 行指定。如果需要的话,源系统字节顺序的数据文件会自动转换为目标系统的字节顺序。 在目标数据库中创建的新文件获得 linux 扩展名,如第 21 行代码所示。处理过程记录在由目录对象 LOG_DIR指定的目录中的 ts7_ts8.log 日志
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45147-2024道路车辆总质量大于3.5 t的车辆气制动系统试验使用滚筒制动试验台获取和使用参考值
- 教科版八年级物理上册《2.3物体运动的速度》同步测试题及答案
- 新人教版八年级数学上册导学案
- 安全生产目标责任书考核记录
- 2024.11.15推文-Mouse IL-4、IFN-γ诱导巨噬细胞M1M2极化文献解读
- 2024高中地理第六章人类与地理环境的协调发展第2节中国的可持续发展实践练习含解析新人教版必修2
- 2024高中生物第2章动物和人体生命活动的调节第1节通过神经系统调节课堂演练含解析新人教版必修3
- 2024高中语文第三课神奇的汉字第2节规矩方圆-汉字的简化和规范训练含解析新人教版选修语言文字应用
- 2024高考地理一轮复习第八章第2讲世界主要农业地域类型教案含解析新人教版
- 2024高考化学一轮复习第4章非金属及其化合物专题讲座二常见气体的实验室制备净化和收集精练含解析
- Unity3D游戏开发PPT完整全套教学课件
- 玻璃安装应急预案
- 道德与法治中考一轮总复习课件 课时8 走向未来的少年 (九下第三单元)
- 五十音图+あ行+课件【高效备课精研+知识精讲提升】 初中日语人教版第一册
- 工程影像记录表
- 责任成本分析模板
- 医疗安全隐患排查登记表
- 现场制氮作业方案及技术措施
- JJG(建材) 107-1999 透气法比表面积仪检定规程-(高清现行)
- 员工入职登记表(标准模版)
- 柴油发电机施工方案33709
评论
0/150
提交评论