Welcome 微信登录

首页 / 数据库 / MySQL / 使用可传输表空间的特性复制数据

可传输表空间的限制:传输表空间技术不能应用于system表空间或sys用户拥有的对象。在传输表空间中,要求表空间为自包含的,自包含表示用于传输的内部表空间集没有引用指向外部表空间集。  
可传输表空间实验环境
 OSIPSID存储方式表空间用户
源数据库RedHat5.410.10.10.8orcl文件系统tb1,tb2u1,u2t1,t2
目标数据库redhat5.410.10.10.7orclASM——u1,u2——
说明:在源数据库上用户u1使用的是tb1表空间,里面有一张t1表。使用exp/imp来传输;在源数据库上用户u2使用的是tb2表空间,里面有一张t2表。使用expdp/impdp来传输。下面给出创建测试环境的脚本(源数据库上面执行的操作)
  1. USER 为 "SYS"  
  2. SQL> create tablespace tb1 datafile "/u01/app/Oracle/oradata/orcl/tb1.dbf" size 10m;  
  3.   
  4. 表空间已创建。  
  5.   
  6. SQL> create tablespace tb2 datafile "/u01/app/oracle/oradata/orcl/tb2.dbf" size 10m;  
  7.   
  8. 表空间已创建。  
  9.   
  10. SQL> create user u1 identified by u1 default tablespace tb1;  
  11.   
  12. 用户已创建。  
  13.   
  14. SQL> create user u2 identified by u2 default tablespace tb2;  
  15.   
  16. 用户已创建。  
  17.   
  18. SQL> grant connect,resource to u1,u2;  
  19.   
  20. 授权成功。  
  21.   
  22. SQL> create table u1.t1 as select * from dba_objects where rownum < 100;  
  23.   
  24. 表已创建。  
  25.   
  26. SQL> create table u2.t2 as select * from dba_objects where rownum < 200;  
  27.   
  28. 表已创建。  
  29.   
  30. SQL> select count(*) from u1.t1;  
  31.   
  32.   COUNT(*)  
  33. ----------   
  34.         99  
  35.   
  36. SQL> select count(*) from u2.t2;  
  37.   
  38.   COUNT(*)  
  39. ----------   
  40.        199  
可传输表空间实战1.确认要传输表空间的平台是否兼容(源数据库和目标数据库上面都一样,因为都是redhat5.4的OS)
  1. SQL> select tp.* from v$transportable_platform tp,v$database d where tp.PLATFORM_NAME = d.PLATFORM_NAME;  
  2.   
  3. PLATFORM_ID PLATFORM_NAME                       ENDIAN_FORMAT  
  4. ----------- ----------------------------------- --------------   
  5.          10 Linux IA (32-bit)                   Little  
2.确认传输的表空间是否自包含(源数据库上面执行的操作)
  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> exec dbms_tts.transport_set_check("tb1",true);     --只检查约束   
  4.   
  5. PL/SQL 过程已成功完成。  
  6.   
  7. SQL> exec dbms_tts.transport_set_check("tb2",true);     --只检查约束   
  8.   
  9. PL/SQL 过程已成功完成。  
  10.   
  11. SQL> exec dbms_tts.transport_set_check("tb1",true,true);   --严格检查   
  12.   
  13. PL/SQL 过程已成功完成。  
  14.   
  15. SQL> exec dbms_tts.transport_set_check("tb2",true,true);   --严格检查   
  16.   
  17. PL/SQL 过程已成功完成。  
  18.   
  19. SQL> select * from transport_set_violations;           --有记录则不符合要求   
  20.   
  21. 未选定行  
说明:严格方式不只检查表空间集引用的对象(比如表)是否自包含,同时会检查被其它表空间引用的对象(比如索引等),引用者是否在表空间集中。如果待传输表空间是非自包含,可以将多个表空间一起传输。3.将待传输表空间设置为只读(源数据库上面执行的操作)
  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> alter tablespace tb1 read only;  
  4.   
  5. 表空间已更改。  
  6.   
  7. SQL> alter tablespace tb2 read only;  
  8.   
  9. 表空间已更改。  
4.导出表空间集元数据(源数据库上面执行的操作)
  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> select * from dba_directories where DIRECTORY_NAME = "EXP";  
  4.   
  5. OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH  
  6. ------------------------------ ------------------------------ --------------------------------------------------   
  7. SYS                            EXP                            /u01/exp  
  8.   
  9. SQL> !  
  10. [oracle@linux ~]$ cd /u01/exp/  
  11. [oracle@linux exp]$ ll  
  12. 总计 0  
  13. [oracle@linux exp]$ exp "sys/oracle@orcl as sysdba" tablespaces=tb1 transport_tablespace=y file=tb1.dmp  
  14. [oracle@linux exp]$ expdp system/oracle@orcl directory=exp dumpfile=tb2.dmp transport_tablespaces=tb2 nologfile=y  
  15. [oracle@linux exp]$ ll  
  16. 总计 96  
  17. -rw-r--r-- 1 oracle oinstall 16384 10-06 12:27 tb1.dmp   
  18. -rw-r----- 1 oracle oinstall 77824 10-06 12:29 tb2.dmp  
5.转换字节顺序,如果两个平台的字节顺序不一样,中间需要一个转换过程,可以使用rman。(可选操作,这里并没有执行。)
  1. RMAN> convert tablespace books to platform "Microsoft Windows IA (32-bit)" format "/tmp/%N_%F";  
  2. RMAN> convert datafile "/tmp/BOOKS_5" db_file_name_convert "/tmp/BOOKS_5","/tmp/books01.dbf";  
说明:这就是第一步检查的目的,虽然这里并不需要转换。这里给出的只是转换的方法。
6.复制元数据和数据文件到目标数据库(目标数据库上面执行的操作)
  1. [root@linux u01]# chown -R oracle:oinstall tb/  
  2. [root@linux u01]# cd tb/  
  3. [root@linux tb]# ll  
  4. 总计 20624  
  5. -rw-r--r-- 1 oracle oinstall 10493952 10-07 12:40 tb1.dbf   
  6. -rw-r--r-- 1 oracle oinstall    16384 10-07 12:40 tb1.dmp   
  7. -rw-r--r-- 1 oracle oinstall 10493952 10-07 12:40 tb2.dbf   
  8. -rw-r--r-- 1 oracle oinstall    77824 10-07 12:40 tb2.dmp   
  9. [root@linux tb]# pwd  
  10. /u01/tb  
7.修改源数据库的表空间为读写(源数据库上面执行的操作)
  1. SQL> show user  
  2. USER 为 "SYS"  
  3. SQL> alter tablespace tb1 read write;  
  4.   
  5. 表空间已更改。  
  6.   
  7. SQL> alter tablespace tb2 read write;  
  8.   
  9. 表空间已更改。  
8.检查源表空间和目标数据库的块大小是否一样源数据库
  1. SQL> select block_size from dba_tablespaces where tablespace_name = "TB1";  
  2.   
  3. BLOCK_SIZE  
  4. ----------   
  5.       8192  
  6.   
  7. SQL> select block_size from dba_tablespaces where tablespace_name = "TB2";  
  8.   
  9. BLOCK_SIZE  
  10. ----------   
  11.       8192  
  12.   
  13. SQL> show parameter db_block_size  
  14.   
  15. NAME                                 TYPE        VALUE  
  16. ------------------------------------ ----------- ------------------------------   
  17. db_block_size                        integer     8192  
目标数据库
  1. SQL> show parameter db_block_size  
  2.   
  3. NAME                                 TYPE        VALUE  
  4. ------------------------------------ ----------- ------------------------------   
  5. db_block_size                        integer     8192  
  • 1
  • 2
  • 下一页
利用数据泵导出远程数据到本??数据库使用RMAN传输表空间相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数