Oracle数据泵移植数据库的设计与实现

时间:2022-08-16 05:36:34

Oracle数据泵移植数据库的设计与实现

摘 要:将两个数据库以最快的方式移植到较高的Linux平台。数据采用可传输性表空间的方法进行移植,其它对象采用数据泵不同功能选项进行移植。

关键字:数据泵;顺序;细节处理

中图分类号:TP311.1

近年来,由于服务器平台更新换代较快,原来在设备型号较陈旧的一些数据库平台需要移植到性能较高的其它平台,数据库移植也就有了较多需求。关于数据库移植,现已有很多方法和经验介绍,有针对全库的rman移植,也有针对个别对象的数据泵移植。笔者由于工作需要,将两个数据库以最快的方式移植到较高的Linux平台,其中数据采用可传输性表空间的方法进行移植,其它对象采用数据泵不同功能选项进行移植。

1 两个数据库平台介绍

源库:windows2003 oracle;版本:10.2.0.5.0;字节顺序:little(字节顺序一致很重要,省了转换的麻烦)。

目标库:windows2003 oracle;版本:10.2.0.5.7;字节顺序:little(Select * from V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;)。

确认字节顺序一致很重要,省了转换的麻烦,不在此赘述。

数据库移植思路:根据源和目的两个表空间的特点,采用传输性表空间移植的方式,先对表空间DB01_A和DB01_B进行移植,存储过程、函数、视图、db-link连接使用数据泵分类按序移植。

2 移植步骤

2.1 移植前的准备检查

(1)首先对源表空间的自包含集进行检查、清理。即需要移植的表空间不得包含依赖性的非本表空间的对象建立的关系。

Exec dbms_tts.transport_set_check(‘DB01_A’,TRUE,TRUE);

Select * from TRANSPORT_SET_VIOLATIONS;

Exec dbms_tts.transport_set_check(‘DB01_B’,TRUE,TRUE);

Select * from TRANSPORT_SET_VIOLATIONS;

对DB01_A和DB01_B不符合检查标准的索引等对象删除、清理。

(2)源、目的库的用户要创建一致。参考源数据库在目标库建立了所有的普通用户。移植后的用户属性、权限及默认表空间待移植后重新赋权。执行expdp的用户要赋予exp_full_database的角色。

(3)目的库的移植元文件使用目录确认。

元文件放到目标库DATA_PUMP_DIR参数指定的地方,具体确定方法为:

Select * from dba_directories;DATA_PUMP_DIR一般是默认的目录,路径过长。笔者新建一个目录,并指定其为导入/出目录。在系统跟即/目录下创建yizhi,在sqlplus里制定/yizhi为导入导出目录。

create or replace directory directory_name as ‘/yizhi’;

grant read,write on directory directory_name to system

如果使用其它普通用户导入,还需赋予创建对话的权限;

Grant create session to username;

2.2 正式移植

(1)源库关闭所有应用、连接、计划任务,关闭监听程序。在关闭监听的情况下,在sqlplus里修改数据库的属性,read only。必须将数据库的属性修改为read only,数据库元数据才能导出。上述举措为了保持移植数据一致性。

alter tablespace DB01_A read only;

alter tablespace DB01_B read only;

(2)导出元数据,指定可传输表空间参数TRANSPORT_TABLESPACES

expdp ‘sys/xxx@db01 as sysdba’ dumpfile= DB01_A.DMP directory=DATA_PUMP_DIR TRANSPORT_TABLESPACES=DB01_A;

expdp ‘sys/xxx@db01 as sysdba’ dumpfile= DB01_B.DMP directory=DATA_PUMP_DIR TRANSPORT_TABLESPACES=DB01_B;

经实战移植验证,550G的表空间DB01_A 导出成80M的元文件需4分钟,80G的表空间DB01_B导出 70M的元文件需3分钟。

(3)分类导出其它。

expdp system/super dumpfile=view.dmp directory=DATA_PUMP_DIR logfile=job.log full=Y include= VIEW(要注意加full=Y)

然后将参数VIEW分别改为FUCTION,DB_LINK,PROCEDURE

(4)传输元文件及物理数据文件。通过FTP或工具传输元文件及数据文件。这一步骤提前要安排好物理文件的存放及目的存放规划。

(5)按顺序导入表空间、视图、db_link、存储过程、JOB。这一步分类和顺序很重要,因为对象之间有相互的依赖关系。比如有的存储过程里用到db_link链接,db_link如果未先建好,就会导致存储过程导入的失败。

Impdp system/oracle01 dumpfile=DB01_A.DMP directory=DIRECTORY_NAME

TRANSPORT_DATAFILES= /Ora_da1/DB01_A.ORA,……. /Ora_da1/DB01_A32.ORA

impdp system/oracle dumpfile=DB01_B.DMP directory=DIRECTORY_NAME

TRANSPORT_DATAFILES= /Ora_da1/DB01_B.ORA,……/Ora_da1/DB01_B7.ORA

表空间导入完成,打开表空间的可读写属性(因为后续导入的对象要用到数据表的读写)

alter tablespace DB01_A read write;alter tablespace DB01_B read write;

修改数据文件的文件属主。chown oracle:oinstall 数据文件列表。然后检查导入表空间的物理文件及逻辑文件状态及可用性。

(6)分类按序移植具体主要为存储过程,函数、视图。此步骤并不是针对用户来移植的,而是针对全部对象进行的移植。

impdp system/super dumpfile=all.dmp directory=DIRECTORY_NAME include= VIEW

然后同上,将db_link, Function,PROCEDURE,JOB等指定为include参数值进行导入。至此,数据库所有应用对象移植完毕,可以在新创建的数据库环境空间里继续分享源数据库空间的数据及用户方案。

3 采用传输性表空间的方法移植数据库的特点及总结

通常采用传输性表空间的数据方法移植数据表空间的。本次采用expdp分别将数据库各数据对象移至目标平台。关键点在参数、顺序、细节的处理。数据库同步的几个关键点:

(1)修改用户权限。在表空间移植前,将原数据库所有用户在新目标库创建。待表空间、VIEW、function等移植后,就参照原数据库用户创建脚本将新库数据库用户权限全部更新一遍。笔者采用利用源DDL脚本的方法赋权。(2)分类按序。当导入发现有错误提示时,不要担心,看一下提示便可了解逻辑关系,调整一下导入顺序,问题便迎刃而解。(3)移植点和时间的把握。最初采用此方法,是因源库没有基于rman的数据库备份。待笔者执行起来发现,对象及表空间的导出时间是非常短的,当了解了整个操作步骤及过程后,整个数据库移植占时最长的就是物理数据文件传输过程,我们可以通过多种方式提高网络传输速度以缩短数据库移植用时。特别是针对只有数据表空间变化较多的数据库而言,在进行过一次测试移植后,完全可以快速顺利进行数据移植和同步。

上述实现过程相对于基于rman备份的数据库移植,移植的步骤并不是简洁的,但经实际操作发现,确实比较灵活、方便和快捷的。

参考文献:

[1] 吴秀君.浅谈Oracle数据库SQL性能优化[J].数字技术与应用.2013(09).

[2]Oracle数据库移植方案[J].中南民族大学学报(自然科学版),2005(03).

作者简介:张昆,女(1979.2-),德州人,研究生,工程师,研究方向:网络通信、数据库管理;张倩,女(1975.1―),汉族,德州人,研究生,副教授,研究方向:网络搭建、数据库管理。

作者单位:联通德州市分公司 信息化服务中心,山东德州 253000;德州职业技术学院 教务处,山东德州 253034

上一篇:试论PLC的发展及其在港口电气自动化中的应用 下一篇:远程智能防盗报警系统设计