使用导出/导入方法执行快速应用程序数据库迁移的步骤顺序
在本例中,我们不过分注重导出/导入或数据库连接的详细步骤,也不过分注重并行处理,我们把注意力集中在以下方法上:首先在系统运行期间仅把数据结 构迁移到新系统上,然后在系统停机时间仅迁移数据。导出/导入的其他参数(比如direct、buffers和log等)对于调节所用工具性能和行为是必 需的。根据数据量和允许的停机时间长度,这个数据迁移过程可能需要经历更多阶段。
1. 将源数据库的逻辑结构迁移到目标数据库上(可在迁移之前完成,不需要停机)
* 仅从源数据库导出数据库结构(表、索引、约束限制定义、PL/SQL存储过程等);
命令如下:exp sys/password file=structure.dmp rows=n indexes=y constraints=y full=y
* 导入数据库结构至目标数据库,不包含约束限制和索引;
命令如下:imp sys/password file=structure.dmp constraints=n indexes=n full=y
这些操作不需要太多的调节,因为它们都能在系统运行期间来执行。
2. 仅将数据从源数据库导入至目标数据库(当源数据库准备好升级后执行该步骤,需要系统停机)
* 为了保留数据一致性,我们必须确保没有任何人可以再改变数据库,这通常意味着关闭应用程序服务器和任何接口并把数据库设置成限制模式。
* 从源数据库中仅导出数据库表的行;
命令如下:exp sys/password file=data.dmp rows=y constraints=n indexes=n full=y
* 从导出文件仅导入数据库表的行;
命令如下:imp sys/password file=data.dmp constraints=n indexes=n full=y ignore=y
不导入约束限制和索引是为了在数据载入期间避免临时数据的不一致性和索引维护性能问题。在所有数据成功迁移后,再建立索引和约束限制。
以下是一些其他导出/导入参数,它们能提高数据迁移的性能:
参数 注释
direct 如果设置成Y,使得导出/导入绕过常规的SQL机制并从数据文件中直接导入数据,因此速度非常快。
限制条件:在Oracle 8.1.5以前,含有大对象或对象字段的行不被导出,必须使用常规方法。客户端字符集(通过NLS_LANG参数来设置)必须和数据库的字符集匹配。
Recordlength 单位是字节,指定一次请求可以写入“导出文件”或者从“导出文件”读的数据的量。最大值是65536(64kB),默认值是特定于操作系统的,通常是1kB。正常情况下,64kB是最优的。
Buffer 仅使用于传统的路径导出和导入(direct=n)。指定“取缓冲区”的大小,单位是字节。它决定了导出时一次可取的数组的最大行数,和导入时的最大插入数组的大小。
Commit 默认值是N,意指仅在每个表(或者表的中间部分)的结尾处进行提交。当导入很大的表并且没有足够的回滚空间时,应该把该参数设置成Y,但是,缓冲区的大小应该被设置的足够大从而避免“过度提交”带来的性能问题。
作为替代方法,在数据库连接上使用“并行直接载入插入法”来迁移非常大的表。
因为将几十GB的数据库表导出到磁盘上并从磁盘上再导回到新数据库中可能不可行,可以使用“并行直接载入插入法”。在数据库连接上使用“并行直接载入插入法”可能比导出/导入法快很多,由于数据不需要被过渡存储,而是通过网络直接转移的。
命令如下:
alter session enable parallel dml;
alter table table_name nologging;
insert /*+ APPEND PARALLEL(table_name,4) */
into table_name select * from table_name@dblink;
alter table table_name logging;
不要忘记将表或表空间重新设置回“日志模式”。从Oracle 9i开始,你可以再插入命令中使用NOLOGGING暗示参数,那样的话你根本就无需手动更改表或表空间至“关闭日志”状态。
命令如下:
insert /*+ APPEND NOLOGGING PARALLEL(table_name,4) */
into table_name select * from table_name@dblink;
上面的PARALLEL暗示参数仅指出插入本身将被并行执行。为了使用并行查询从源数据库从析取出数据,我们可以给select语句也增加一个PARALLEL暗示参数,但是通常情况下这并没有任何帮助,由于全表扫描的最简单本质-即,磁盘输入输出和网络往往是瓶颈所在。
命令如下:
insert /*+ APPEND NOLOGGING PARALLEL(table_name,4) */
into table_name
select /*+ PARALLEL(table_name,4) */ from table_name@dblink;
参见附录C中的对相关联表创建插入和更新命令的简单脚本。
* 在存储局域网环境中,可以使用分离镜像技术或者类似EMC系统上的“业务连续卷”在一个临时服务器上打开数据库的一个精确拷贝,从而拥有多个源环境可以载 入数据。当从旧的速的慢的系统迁移数据到新的快速系统时,这种技术可以加速数据迁移。该技术需要在产品升级期间临时使用一个具有相同操作系统和平台的服务 器。需要对表或模式名作出区分,以便可以从一个服务器上导入一部分数据,同时从其他的服务器上导入其他数据。
你可以组合上述方法来迁移模式对象,比如对小表和模式使用导出/导入方法,而对大表使用在数据库连接上使用“并行直接载入插入法”。
3.创建索引并激活约束限制(需要系统停机)
* 第一种方法:使用前面所述的导出结构文件来顺序创建索引和约束限制
命令如下:
imp sys/password file=structure.dmp constraints=y indexes=y full=y ignore=y
这种方法有问题-使用导入方式,我们实际上不能指定并发的自定义级别来创建索引,也不能指定NOLOGGING属性。即使我们使用不在正式文件中记 录的特殊参数来关闭对磁盘的重做写操作,NOLOGGING属性仍然能提高性能,通过设置更少的检测点和使用更少的CPU。幸运地,存在一个可以绕过这个 问题的导入特性,它运行我们从导出文件中析取出索引创建脚本。
* 第二种方法:使用导入操作的indexfile选项单独创建索引,然后按照通常方式使用导入创建约束限制。
很长的索引创建时间可以被极大地缩短,当使用并行执行方式和属性nologging时。由于导入的语法本身不允许我们指定创建索引的方式,我们不得不先得到索引创建脚本,然后根据我们的实际需要修改它们。导入的indexfile选项使用起来非常便利,如下所示:
命令如下:
imp sys/password file=structure.dmp constraints=y indexes=y full=y ignore=y \
show=y indexfile=indexes.sql
上面的例子对单独的和约束索引创建都产生了SQL 数据定义语言(DDL)命令(对于关键约束限制和唯一约束限制,一些索引也暗含被创建)。请注意参数show=y,它指定了不能对数据库做改变,导出文件 仅仅是从头至尾扫描一遍,其间发生的任何索引创建都被存储到使用indexfile选项指定的indexes.sql脚本中。
接下来,我们可以使用一个文本编辑器打开这个SQL脚本,然后用NOLOGGING代替LOGGING并对每个大索引创建命令添加PARALLEL 子句。我们也可以在脚本开始处使用更改会话命令来修改某些参数,比如sort_area_size 和 db_file_multiblock_read_count,这两个参数能极大地增加创建索引的速度(更多信息请参见数据库性能调优部分)。修改好以 后,使用sqlplus来运行该脚本。
命令如下:
sqlplus sys/password @indexes.sql
索引文件(indexfile)包含独立索引和外键约束或唯一性约束所需的索引,但是不包含约束限制定义本身。为了创建并激活这些约束限制,我们必须再次对structure.dmp运行导入过程,命令如下:
命令如下:
imp sys/password file=structure.dmp constraints=y indexes=n full=y ignore=y
在上面的命令中我们设置了indexes=n,因为它们在前面的步骤中已经被创建了。同时,因为所有所需的索引都已经存在,创建索引约束应该完成的非常快,由于无需对唯一键/主键创建索引
4.验证自从数据库结构导出后源数据库中没有对象定义被改变(于步骤2或步骤3同时进行)
* 查询上面所述的dba_segments并将任何新对象迁移到新数据库中去,如果合适的话(例如使用企业管理器或者Toad来析取单个对象的“数据定义语 言”)。不应该有很多新对象或者根本就不应该有新对象,因为数据库结构导出后由于程序服务器的配置就应该被冻结而不能改变。这个任务通常可以和数据迁移或 索引创建同时进行。
注意:假如你使用“直接载入”并且在相关联表上关闭所有索引的话,不应该产生任何巨大的回滚和重做。这也是为什么在数据载入过程中应关闭主键/惟一键约束限制的原因之一,因为它们都需要索引支持。
相关推荐
在 XTTS 技术中,增量备份是指在数据库迁移过程中,对于已经迁移的数据进行增量备份,以减少停机的时间。XTTS 技术支持增量备份,可以实现 Oracle 数据库快捷、高效、平稳、安全地跨平台迁移。 XTTS 技术的应用...
【双机镜像环境下Oracle数据库向Linux系统迁移】 在医疗信息化领域,医院信息系统(HIS)的稳定性和安全性至关重要。随着技术的发展,许多医疗机构选择将数据库从传统的Windows环境迁移到更稳定、开源的Linux操作...
在数据库迁移的上下文中,单线程操作意味着在迁移过程中,所有操作都按照预定顺序逐个执行,而不是并行执行。单线程操作通常比多线程简单,但在资源利用和执行速度上可能不如多线程高效。 ### 数据库迁移 数据库...
### XTTS-Oracle数据库迁移详解 #### 一、XTTS概念与优势 ##### 1.1 定义 - **Transportable Tablespaces (TTS)**:指能够在不同Oracle数据库之间移动表空间的能力。 - **Cross Platform Transportable ...
实验结果显示,基于组件技术的Oracle数据库持续迁移方法能够在10秒内完成迁移,大大缩短了迁移时间,为大数据的稳定传输提供了保障。这种方法对于需要高可用性和低停机时间的业务场景特别有利。 总的来说,基于组件...
1.Oracle RAC 数据库迁移的重要性:随着 business 的发展,数据库的存储需求也在不断增长,如何将数据库迁移到新的存储设备上成为一个重要的课题。 2.ASM 存储迁移的优势:使用 ASM DISKGROUP 的方式可以实现在线...
在当前数字化转型的大背景下,从传统的Oracle数据库迁移到国产数据库成为许多企业和组织关注的重点。特别是在金融领域,由于业务连续性和数据安全性的极高要求,如何高效、低风险地完成数据库迁移变得尤为重要。本文...
Oracle数据库迁移过程中可能会遇到多种错误,以下是一些典型的错误示例及其解决思路: **数据库迁移过程中出现OIP-00005错误** - OIP-00005 错误通常与Oracle安装或配置中的问题有关。 - 解决该问题可能需要重新...
在高可用性方面,Oracle 10g大幅缩短了应用和数据库升级的停机时间,利用备用数据库实现版本间的无缝切换。Flashback技术得到了扩展,允许回闪数据库到任何错误发生前的状态,无需恢复操作。新引入的日志文件记录了...
该技术允许用户在不同平台或不同版本的Oracle数据库之间迁移数据,而无需进行完整的数据库转换,大大减少了停机时间和复杂性。 1. **传输表空间技术原理** 传输表空间技术的核心在于,它允许用户导出源数据库中...
3) **快速且低停机时间**:通过使用DSG RealSync,300GB的医院Oracle数据库升级的停机时间被缩短至15分钟,显著减少了业务中断的影响。 【数据库升级的优势】:采用DSG RealSync技术进行数据库升级,不仅实现了快速...
而在众多应用软件中,Oracle数据库因其稳定性、可靠性和高性能一直深受企业青睐。将Oracle数据库部署在VMware vSphere之上,不仅可以充分利用虚拟化的优点,还可以通过最佳实践确保数据库的性能和可靠性。 首先,...
恢复管理器是Oracle数据库的一个内置实用程序,专为管理和自动化备份、恢复以及存储过程设计。它能够理解和处理数据库文件格式,创建和维护备份策略,并对所有相关活动进行编目。RMAN支持在线操作和并行处理,从而...
为了缩短停机时间,还需对原数据库进行一次数据转储。 升级过程中的每一步骤都至关重要,以确保数据的完整迁移和系统的平稳过渡。通过这样的升级,医院的信息系统性能得到了显著提升,系统运行速度大幅增加,进一步...
在IT领域,尤其是在数据库管理与升级的过程中,“最小停机时间Oracle 11g升级”是一个关键议题,尤其对于那些依赖于Oracle数据库进行日常运营的企业来说。以下是对这一主题的深入探讨,涵盖其背景、方法论以及实施...
4. **云迁移**:支持将本地Oracle数据库迁移到IBM Cloud上的DB2服务。 三、技术细节 1. **兼容性**:IBM Data Movement Tool支持多个Oracle和DB2的版本,以适应不同环境的需求。 2. **接口**:通过SQL接口与源...
综上所述,Oracle的导入导出工具在数据库迁移过程中扮演着至关重要的角色,通过合理使用参数和策略,可以有效地缩短停机时间,确保数据迁移的顺利进行。在实际操作中,应根据具体环境和数据量选择最佳的方法,并考虑...