使用Datapump方式传输表空间事先得将表空间置于只读,在很多情况下对于生产库而言是不允许的,通过RMAN就能实现不影响生产库的情况下实现表空间的迁移.

源数据库:win2008_R2 oracle11gR2

目标数据库:win2003_32位 oracle11gR2

1,准备待测试表空间tbs1,tbs2,创建测试表test1,test2及用户test

SQL> grant connect,resource to test identified by test;
Grant succeeded.
SQL> create tablespace tbs1 datafile 'E:\newtbs\tbs1.dbf' size 100m;
Tablespace created.
SQL> create tablespace tbs2 datafile 'E:\newtbs\tbs2.dbf' size 100m;
Tablespace created.
SQL> conn test/test
Connected.
SQL> create table test1 (id int ,name varchar2(100)) tablespace tbs1;
Table created.
SQL> create table test2 (id int ,name varchar2(100)) tablespace tbs2;
Table created.
SQL> insert into test1 values(1,'this is no.1');
1 row created.
SQL> insert into test2 values(2,'this is no.2');
1 row created.
SQL> commit;
Commit complete.

2,由于本次测试表空间都是自包含的,所以不用做自包含检查.在rman操作之前先确保有有效的rman备份(数据库,归档日志)这里我全部备份一遍.

传输表空间--使用Rman方式_数据库

传输表空间--使用Rman方式_数据库_02

3,真正的操作来了,这是rman传输表空间的精髓所在,话说oracle为用户考虑的真多,执行这条语句后oracle会自动的创建一个临时数据库,使用备份还原数据库,然后再将我们需要的表空间修改为只读,通过datapump工具导出表空间元数据,最后会删除临时数据库,只留下我们需要的元数据,表空间文件和脚本文件

tablespace destination 为导出的表空间元数据及数据文件存放路径

auxiliary destination 为临时数据库数据路径

rman的日志信息很好,从中能了解到具体做了哪些事情,非常详细!

传输表空间--使用Rman方式_identified_03

4,运行成功后,将所需数据(F:\OracleAPP\td)复制到目标数据库中,复制到目标服务器的F:\OracleAPP\td下面

传输表空间--使用Rman方式_空间_04

传输表空间--使用Rman方式_identified_05

5,剩下的工作就全部在目标服务器上面了,这里有2种方式将数据导入,运行生成的脚本和使用IMPDP

---方法1,使用生成的脚本导入----

准备工作:

①确保目标数据库中有test用户(名称必须一致),如果没有这个用户,在运行脚本过程中会报错;

grant connect,resource to test identified by test;

②修改脚本文件中的路径信息

传输表空间--使用Rman方式_影响_06

③进入system,运行该脚本

--以下是在没有创建test用户的情况下,运行脚本报的错误信息

传输表空间--使用Rman方式_测试表_07

创建用户后就成功了,之前上网查了下说什么的都有,其实就是不存在所需用户

SQL> grant connect,resource to test identified by test;

Grant succeeded.

传输表空间--使用Rman方式_identified_08

④测试是否导入成功,可以看到成功导入.

传输表空间--使用Rman方式_测试表_09

---方法2,通过IMPDP导入----

①创建一个目录

SQL> CREATE DIRECTORY DIR_TD AS  'F:\OracleAPP\td';

Directory created.

②创建一个测试用户test2,这个就是IMPDP的好处,可以通过REMAP_SCHEMA指定用户

SQL> grant connect,resource to test2 identified by test2;

Grant succeeded.

③IMPDP导入(其实脚本最前面的注释部分也有IMPDP导入的代码)

impdp "'system/abc123 as sysdba'" directory=DIR_TD dumpfile= 'dmpfile.dmp' transport_datafiles= F:\OracleAPP\td\TBS1.DBF
,F:\OracleAPP\td\TBS2.DBF remap_schema=test:test2

传输表空间--使用Rman方式_影响_10

④验证是否导入成功

传输表空间--使用Rman方式_测试表_11

传输表空间--使用Rman方式_identified_12

总结:尽管说明文档里提到rman传输表空间的复杂过程,但是实际操作却非常的简单,oracle考虑到的很前面,连脚本都自动生成了,继续努力~.

欢迎光临我的博客:http://www.fanmeng.net.cn/