Oracle数据迁移方案(二)

2014-11-24 12:04:12 · 作者: · 浏览: 1
6) 提供导出文件大小估计功能
7) 提供导入、导出进度查看功能
8) 自动在导出文件目录下生成导入、导出日志文件。
但impdp/expdp也有比较明显的限制。
1) 与imp/exp工具生成的数据包不兼容
2) 能远程调用,但导入导出文件必须放到服务器上
总体来说,impdp/expdp优势还是很明显的,所以能使用impdp/expdp时,尽量不使用imp/exp。
2.2.2.1 实施方案
Impdp/expdp的使用,主要分为三步:
1) 创建目录映射
数据库上,创建到操作 系统目录的映射:
Create directory DMPDIR as‘c:\oracle\dump\’;
授予用户USER01对该目录的读写权限:
Grant read ,write on directoryDMPDIR toUSER01;
2) 执行导出脚本
导出:
参数解释:
Directory:数据文件导出到哪个路径下,这里是指定第一步创建的directory。
Dumpfile:导出文件名
Logfile:日志文件名
Parallel:设置导出job的并行度,如果对导出速度有较高要求,可设置CPU数 - 1
Job_name:为导出job命名
SCHEMAS:指定导出哪个用户的数据。
3) 执行数据导入脚本
首先仿照第一步,在目标库上创建操作系统目录映射。然后将第二步的导出文件拷贝到目标数据库对应目录下。然后执行以下脚本:
参数解释:
Directory:导入文件所在的路径
Dumpfile:导入文件名
Logfile:指定生成日志文件的存放位置
Parallel:指定操作并行度
job_name:指定导入job名称
SCHEMAS:指定要导入的用户名
REMAP_SCHEMA =TESTI:TESTB:指定将TESTI用户的数据,导入到TESTB用户下
TABLE_EXISTS_ACTION=REPLACE:如果要导入的表已经存在,直接替换。
2.2.2.3 界面介绍
1) 导出界面
可看到整个导出文件,约需要749.5M的存储空间。当然,expdp也支持只评估空间,不导出数据。
2) 状态查看界面
如果想要查看数据导入进度,新开一个窗口,执行以下脚本:
>expdp test@target ATTACH=TESTIMP
> status
2.2.3 表空间迁移
2.2.3.1 基本介绍
表空间迁移,相当于将一个数据库的文件,直接用U盘拷贝到另一个数据库使用。虽然这个原理简单,但操作复杂。
这个操作限制比较多:
1) 原数据库与目标数据库数据库字符集相同、国家字符集必须相同。可查看视图v$nls_parameters确认;
2) 源库与目标数据库最好是同一Oracle版本;
3) 不能搬移SYS和SYSTEM用户对象所在表空间。
2.2.3.2 实施方案
表空间的迁移,可以用imp/exp或impdp/expdp来完成,主要分3步:
1) 完成表空间集的自包含检查
SQL> exec dbms_tts.transport_set_check(‘TBS1’,true);
执行完成后,查询:select * from v$transport_set_violations;
如果没查出数据,表明可以执行表空间迁移。否则根据查询结果采取其他方法。
2) 执行表空间导出
SQL>alter tablespace users read only;
CMD>expdp test@orcl directory=DMPDIR dumpfile=tbs_dmp.dmp
transport_tablespace= USERS
3) 执行表空间导入
将第二步生成的tbs_dmp.dmp文件、表空间USERS对应的数据文件USER01.DBF通过U盘,拷贝到目标库,在目标库上执行导入:
CMD> impdp test@orcl directory=DMPDIR dumpfile=tbs_dmp.dmp
transport_tablespace=y tablespaces=USERS transport_datafiles=’c:\...\USER01.DBF’
SQL> alter tablespace users read write;
2.2.3.3 界面介绍
表空间传输,只是导出表空间的元数据,插入到新库中,因此速度很快。
三、整库迁移
整库迁移,一般用于环境的第一次搭建过程中。就是将整个数据库原封不动的挪到别的机器上。比较适合搭建独立的测试环境时使用。
整库迁移也可以使用前面介绍的imp/exp、impdp/expdp工具,但是速度奇慢,且经常报错。不如下面的方法好用。
3.1 冷备迁移
冷备迁移,就是将源数据库关闭,然后将数据文件拷贝到新机器的相同位置,直接打开新库就可以了。这个迁移过程,操作相对来说简单一些,也比较好控制,但有其局限性:不能跨操作系统硬件平台及数据库大版本。
Windows下的迁移步骤大致如下:
1) 关闭源数据库
2) 根据源库数据文件地址,在新机器上建立相应的操作系统目录
3) 将源库的数据文件、控制文件、参数文件、密码文件等拷贝到新库所在机器
4) 启动源数据库
5) 创建控制文件中记录的其他目录
6) 使用oradim创建实例
7) 启动目标数据库
8) 执行utlrp.sql脚本,编译所有无效对象。
3.2 RMAN迁移
用RMAN做整库迁移,比较方便,主要优点是可以跨操作系统硬件平台。
下面是一个将linux系统迁移到wimdows系统的具体实施步骤(当然在32位linux和32位 windows之间,可以直接复制数据文件,无需这么麻烦,此处为举例演示):
1) 以read only模式打开数据库
SQL>startup open read only;
2) 转换数据文件
CMD> RMAN target /
RMAN> run{
convert database transport script '/home/Oracle/temp/transcript.sql'
on target platform convert script '/home/oracle/temp/convert.sql'
to platform 'Microsoft Windows IA (32-bit)'
db_file_name_convert('/oracle/oradata/orcl','/home/oracle/temp');
};
3) 将参数文件、数据文件、转换脚本,拷贝到windows平台上
4) 在windows平台上建立数据库实例,然后依次执行脚本convert.sql、transcript.sql
5) 打开数据库,执行utlrp.sql,编译无效数据库对象。
四、总结
4.1 如何选择迁移方案
不同的迁移