跨平台表空间传输(linux 10g表空间跨平台迁移到window 11g)

简介:

 最近公司的一个项目里的linux 系统中的oracle 10g数据库,需要把某个表空间里的所有数据都迁移到window 2003的11g里,经过我与dba的交流、测试,决定使用跨平台的表空间传输技术,目前此项任务已经完成,经过测试,没有问题,下面是我为此项任务做的测试,此次是做linux(oracle 10g)对window (oracle 11g)做跨平台表空间传输(同字节顺序)需要注意:

         对于导出文件dmp来说,Oracle实现了跨平台的处理,即在任何一个可运行的平台上,都能使用imp将其导入,但是对于表空间所包含的数据文件而言,各个平台上是不一样的,包含不能通过简单的复制来处理。数据文件不是独立于OS的。

传输表空间移动数据速度非常快。
 
使用前提:
 
1.源和目标数据库使用相同的字符集(也就是说little endian与big engian);
 
2.目标数据库不能有和源表空间相同的表空间;
 
3.源和目标数据库拥有相同的块大小;
 
4.必须传输自包含的对象集;
 
5.源和目标数据库运行的硬件平台必须相同;

下图是我的环境

一、环境检查

1、检查linux平台的环境


 
 
  1. [root@master ~]# su - oracle  
  2. [oracle@master ~]$ sqlplus sys/dl528888@10.1.88.188:1521/bgtp as sysdba  
  3.  
  4. SQL*Plus: Release 10.2.0.1.0 - Production on Wed May 16 09:33:01 2012  
  5.  
  6. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  7.  
  8.  
  9. Connected to:  
  10. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production  
  11. With the Partitioning, OLAP and Data Mining options  
  12. SQL> select instance_name,host_name,version from v$instance where rownum < 2;  
  13.  
  14. INSTANCE_NAME    HOST_NAME                            VERSION  
  15. ---------------- ---------------------------------------------------------------- -----------------  
  16. BGTP         master                               10.2.0.1.0  

2、检查windows平台的环境


 
 
  1. [oracle@master dbs]$ sqlplus sys/dl528888@10.1.88.191:1521/bgtp as sysdba  
  2.  
  3. SQL*Plus: Release 10.2.0.1.0 - Production on Wed May 16 09:22:58 2012  
  4.  
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  6.  
  7.  
  8. Connected to:  
  9. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production  
  10. With the Partitioning, OLAP, Data Mining and Real Application Testing options  
  11.  
  12. SQL> select instance_name,host_name,version from v$instance where rownum < 2;  
  13.  
  14. INSTANCE_NAME    HOST_NAME                            VERSION  
  15. ---------------- ---------------------------------------------------------------- -----------------  
  16. bgtp         ADMIN-F99B9A60C                          11.2.0.1.0  

二、字节顺序检查

1、linux平台的

通过v$transportable_platfrom与v$database来查看本地平台的字节顺序

 
 
  1. SQL> select d.platform_name,endian_format from v$transportable_platform tp, v$database d where tp.platform_name = d.platform_name;   
  2.  
  3. PLATFORM_NAME                ENDIAN_FORMAT  
  4. ---------------------------------------- --------------  
  5. Linux 64-bit for AMD             Little  

2、windows平台的


 
 
  1. SQL> select d.platform_name,endian_format from v$transportable_platform tp, v$database d where tp.platform_name = d.platform_name;  
  2.  
  3. PLATFORM_NAME                                                 ENDIAN_FORMAT  
  4. ----------------------------------------------------------------------------------------------------- --------------  
  5. Microsoft Windows IA (32-bit)                                         Little  

三、进行准备工作

1、在linux平台里先建立dl表空间


 
 
  1. SQL> create tablespace dl logging datafile '/home/oracle/oradata/BGTP/dl_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;  
  2.  
  3. Tablespace created.  

2、创建dl用户默认dl表空间


 
 
  1. SQL> create user dl identified by dl default tablespace dl;
  2. User created.

3、查看dl用户所属的表空间


 
 
  1. SQL> select username,default_tablespace,temporary_tablespace from dba_users where username='DL';  
  2.  
  3. USERNAME         DEFAULT_TABLESPACE         TEMPORARY_TABLESPACE  
  4. -------------------- ------------------------------ ------------------------------  
  5. DL           DL                 TEMP  

4、连接用户


 
 
  1. SQL> conn dl/dl  
  2. Connected.  
  3. SQL> show user  
  4. USER is "DL"  

5、创建测试表dl_test


 
 
  1. SQL> create table dl_test as select * from dict;  
  2.  
  3. Table created.  
  4. SQL> select count(*) from dl_test;  
  5.  
  6.   COUNT(*)  
  7. ----------  
  8.       1870  

四、进行传输

1、查看数据文件的位置


 
 
  1. SQL> select file_name from dba_data_files where tablespace_name='DL';  
  2.  
  3. FILE_NAME  
  4. ------------------------------------------------------------------------------------------------------------------------------------------------------  
  5. /home/oracle/oradata/BGTP/dl_data.dbf  

2、然后进行压缩数据文件


 
 
  1. SQL> !  
  2. [oracle@master ~]$ cd /home/oracle/oradata/BGTP/  
  3. [oracle@master BGTP]$ ll  
  4. total 1056712  
  5. -rw-r----- 1 oracle oinstall   7061504 May 16 10:07 control01.ctl  
  6. -rw-r----- 1 oracle oinstall   7061504 May 16 10:07 control02.ctl  
  7. -rw-r----- 1 oracle oinstall   7061504 May 16 10:07 control03.ctl  
  8. -rw-r----- 1 oracle oinstall  52436992 May 16 10:05 dl_data.dbf  
  9. -rw-r----- 1 oracle oinstall  52429312 May 15 22:00 redo01.log  
  10. -rw-r----- 1 oracle oinstall  52429312 May 16 07:01 redo02.log  
  11. -rw-r----- 1 oracle oinstall  52429312 May 16 10:07 redo03.log  
  12. -rw-r----- 1 oracle oinstall 314580992 May 16 10:07 sysaux01.dbf  
  13. -rw-r----- 1 oracle oinstall 503324672 May 16 10:07 system01.dbf  
  14. -rw-r----- 1 oracle oinstall  20979712 May 15 22:00 temp01.dbf  
  15. -rw-r----- 1 oracle oinstall  26222592 May 16 10:07 undotbs01.dbf  
  16. -rw-r----- 1 oracle oinstall   5251072 May 16 07:06 users01.dbf  
  17. [oracle@master BGTP]$ tar zcf dl_data.tar.gz  dl_data.dbf  
  18. [oracle@master BGTP]$ du -sh dl_data.dbf   
  19. 51M dl_data.dbf  
  20. [oracle@master BGTP]$ du -sh dl_data.tar.gz   
  21. 180K    dl_data.tar.gz  

3、使用exp导出dl表空间

导出之前,先查看表空间dl是否有self-contained(自包含),通过系统包dbms_tts来检查表空间是否自包含,如果有的话,就不能进行传输
先进行非严格方式(full_check=false)

 
 
  1. SQL> exec sys.dbms_tts.transport_set_check('DL',TRUE);  
  2.  
  3. PL/SQL procedure successfully completed.  
  4.  
  5. SQL> select * from sys.transport_set_violations;  
  6.  
  7. no rows selected  
进行严格方式

 
 
  1. SQL> exec sys.dbms_tts.transport_set_check('DL',TRUE,true);  
  2.  
  3. PL/SQL procedure successfully completed.  
  4.  
  5. SQL> select * from sys.transport_set_violations;  
  6.  
  7. no rows selected  
这表示该表空里的对象集是自包含的(对象及其索引都在此表空间中)
下面可以进行exp了
4、在进行exp导出之前,先把dl表空间设为只读

 
 
  1. SQL> conn / as sysdba  
  2. Connected.  
  3. SQL> show user  
  4. USER is "SYS"  
  5. SQL> alter tablespace dl read only;  
  6.  
  7. Tablespace altered.  
  8.  
  9. [oracle@master tmp]$ exp userid=\'sys/dl528888 as sysdba\' tablespaces=DL transport_tablespace=y file=/tmp/dl.dmp  
  10.  
  11. Export: Release 10.2.0.1.0 - Production on Wed May 16 10:29:47 2012  
  12.  
  13. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  14.  
  15.  
  16. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production  
  17. With the Partitioning, OLAP and Data Mining options  
  18. Export done in US7ASCII character set and AL16UTF16 NCHAR character set  
  19. server uses ZHS16GBK character set (possible charset conversion)  
  20. Note: table data (rows) will not be exported  
  21. About to export transportable tablespace metadata...  
  22. For tablespace DL ...  
  23. . exporting cluster definitions  
  24. . exporting table definitions  
  25. . . exporting table                        DL_TEST  
  26. . exporting referential integrity constraints  
  27. . exporting triggers  
  28. . end transportable tablespace metadata export  
  29. Export terminated successfully without warnings.  
  30. [oracle@master tmp]$ ll dl.dmp   
  31. -rw-r--r-- 1 oracle oinstall 16384 May 16 10:29 dl.dmp  
  32. [oracle@master tmp]$ du -sh dl.dmp   
  33. 20K dl.dmp  
导出成功
5、然后把dl_data.tar.gz与dl.dmp都传输到window的平台上

 
 
  1. [oracle@master tmp]$ ll dl*  
  2. -rw-r--r-- 1 oracle oinstall 174677 May 16 10:08 dl_data.tar.gz  
  3. -rw-r--r-- 1 oracle oinstall  16384 May 16 10:29 dl.dmp  
6、然后把这2个文件传输到window平台的e:\soft目录下对dl_data.tar.gz进行解压

7、然后在window平台上建立用户dl

8、然后进行imp导入

9、然后查看dl_test表数据是否正确

10、在查看linux里的dl_test表里的数据

可以看得2者的数据都一致,所以此次跨平台表空间传输成功

11、最后再将dl表空间设置为读写模式,然后就可以进行正常的数据操作了

这样就完成了跨平台传输表空间,这种方法很方便、而且快速,以后将作为我公司oracle的数据迁移的方案之一!



 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/865850,如需转载请自行联系原作者





相关文章
|
Linux 数据安全/隐私保护 Windows
命令方式:window向linux传文件
【10月更文挑战第6天】本文介绍了如何在Linux系统中通过命令`ip a`获取IP地址,并在Windows系统下使用CMD命令行工具和SCP命令实现文件传输。示例展示了如何将D盘中的`mm.jar`文件上传至IP地址为192.168.163.122的Linux系统的/up/目录下,最后在Linux系统中确认文件传输结果。
626 65
|
Shell Linux
Linux使用Shell脚本SCP批量传输脚本
Linux使用Shell脚本SCP批量传输脚本
906 0
|
关系型数据库 MySQL Java
Window环境linux环境安装skywalking
Window环境linux环境安装skywalking
325 0
|
Linux Shell Windows
通过Linux挂载Windows端NFS服务实现板端Linux传输文件到PC
通过Linux挂载Windows端NFS服务实现板端Linux传输文件到PC
924 0
|
5月前
|
Oracle 关系型数据库 Linux
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
332 0
VirtualBox 7.1.10 (macOS, Linux, Windows) - 开源跨平台虚拟化软件
|
6月前
|
Linux 网络安全 iOS开发
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
1485 4
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
327 28
|
运维 安全 Linux
Linux中传输文件文件夹的10个scp命令
【10月更文挑战第18天】本文详细介绍了10种利用scp命令在Linux系统中进行文件传输的方法,涵盖基础文件传输、使用密钥认证、复制整个目录、从远程主机复制文件、同时传输多个文件和目录、保持文件权限、跨多台远程主机传输、指定端口及显示传输进度等场景,旨在帮助用户在不同情况下高效安全地完成文件传输任务。
1355 5
|
Ubuntu Linux vr&ar
IM跨平台技术学习(十二):万字长文详解QQ Linux端实时音视频背后的跨平台实践
本文详细记录了新版QQ音视频通话在 Linux 平台适配开发过程中的技术方案与实现细节,希望能帮助大家理解在 Linux 平台从 0 到 1 实现音视频通话能力的过程。
565 2