首页 > 技术文章 > OracleDBA职责—备份与恢复技术—传输表空间

plutozzl 2020-07-17 16:41 原文

数据迁移——传输表空间

toc

1.什么是传输表空间

传输表空间技术始于Oracle9i,它的原理是将元数据和数据文件从一个数据库迁移到另一个数据库,而且不需要原库和目标库具有相同的块大小,相比较导入导出工具,传输表空间只会复制包含实际数据的数据库文件到目标数据库的指定位置,所以会节省很多时间,传输表空间也是数据库之间传输大数据的一种方法。

2.怎样实现传输表空间

  • 使用sqlplus,rman,数据泵等手动进行表空间传输。(我们实验用这种方式)
  • 使用EM工具中的传输表空间向导实现传输表空间。

3.传输表空间的要求

  • 支持传输表空间技术的操作系统平台(传输表空间可以跨平台,但需要符合要求)
SYS@proe>select * from v$transportable_platform order by 1;

PLATFORM_ID PLATFORM_NAME                                           ENDIAN_FORMAT
----------- ------------------------------------------------------- ------------
          1 Solaris[tm] OE (32-bit)                                 Big
          2 Solaris[tm] OE (64-bit)                                 Big
          3 HP-UX (64-bit)                                          Big
          4 HP-UX IA (64-bit)                                       Big
          5 HP Tru64 UNIX                                           Little
          6 AIX-Based Systems (64-bit)                              Big
          7 Microsoft Windows IA (32-bit)                           Little
          8 Microsoft Windows IA (64-bit)                           Little
          9 IBM zSeries Based Linux                                 Big
         10 Linux IA (32-bit)                                       Little
         11 Linux IA (64-bit)                                       Little

PLATFORM_ID PLATFORM_NAME                                           ENDIAN_FORMAT
----------- ------------------------------------------------------- ------------
         12 Microsoft Windows x86 64-bit                            Little
         13 Linux x86 64-bit                                        Little
         15 HP Open VMS                                             Little
         16 Apple Mac OS                                            Big
         17 Solaris Operating System (x86)                          Little
         18 IBM Power Based Linux                                   Big
         19 HP IA Open VMS                                          Little
         20 Solaris Operating System (x86-64)                       Little
         21 Apple Mac OS (x86-64)                                   Little

20 rows selected.
  • Oracle使用传输表空间的版本要求:

  • 其他要求:
    1)原库和目标库的字符集必须兼容。
    2)目标库不能存在同名表空间。
    3)如果要传输的表空间中存在物化视图,分区表等潜在的对象,这些对象一定要包含在表空间集中。
    4)不能传输系统表空间,也不能传输包含sys用户对象的表空间。

4.传输表空间的模拟实验

4.1 在原库上创建要传输的表空间:
SYS@proe>create tablespace trans_tbs datafile '/u01/app/oracle/oradata/proe/trans_tbs1.dbf' size 100m;

Tablespace created.
4.2 在新建的表空间上创建一些表:
SYS@proe>create table trantest1 tablespace trans_tbs as select * from hr.employees;
Table created.

SYS@proe>create table trantest2 tablespace trans_tbs as select * from scott.emp;
Table created.
#查看有表空间存在表的信息
SYS@proe>select table_name,tablespace_name from dba_tables where tablespace_name='TRANS_TBS';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TRANTEST1                      TRANS_TBS
TRANTEST2                      TRANS_TBS
4.3 查看原库和目标库的平台信息:
#原库:
SYS@proe>SELECT d.name,d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
NAME      PLATFORM_NAME                  ENDIAN_FORMAT
--------- ------------------------------ --------------
PROE      Linux x86 64-bit               Little

#目标库:
SYS@proe>SELECT d.name,d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
NAME      PLATFORM_NAME                  ENDIAN_FORMAT
--------- ------------------------------ --------------
PROE      Linux x86 64-bit               Little
##不好意思,我太懒了 还是克隆的
#两个数据库兼容进行下一步。
4.4 表空间自包含检查:

用来检测相关对象的属性是否都存在在一个表空间。使用自包含检测的包。

SYS@proe>exec dbms_tts.transport_set_check('TRANS_TBS',true,true);
PL/SQL procedure successfully completed.
#可以一次检查多个表空间,使用逗号隔开即可。
SYS@proe>select * from transport_set_violations;
no rows selected
#查看检测结果。没有结果就是通过。
4.5 创建传输表空间集:

1)将原库表空间置为read only

SYS@proe>alter tablespace trans_tbs read only;
Tablespace altered.

2)导出传输表空间集的元数据信息到目录对象中(借用上次数据泵的目录对象)

[oracle@server1 ~]$ expdp \'sys\/123456 as sysdba\' directory=pump_dir dumpfile=tbs_tran.dmp transport_tablespaces=trans_tbs

Export: Release 11.2.0.4.0 - Production on Thu Jul 16 20:48:25 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  "sys/******** AS SYSDBA" directory=pump_dir dumpfile=tbs_tran.dmp transport_tablespaces=trans_tbs 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:
  /home/oracle/pumpdir/tbs_tran.dmp
******************************************************************************
Datafiles required for transportable tablespace TRANS_TBS:
  /u01/app/oracle/oradata/proe/trans_tbs1.dbf
Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Thu Jul 16 20:48:47 2020 elapsed 0 00:00:21

4.6 将传输表空间集和数据文件传输到目标库相应路径:

首先是传输表空间集:

[root@server1 pumpdir]# scp tbs_tran.dmp 11gtest:/home/oracle/pumpdir/
root@11gtest's password: 
tbs_tran.dmp                                            100%  108KB 108.0KB/s   00:00

然后是数据文件:

[root@server1 proe]# pwd
/u01/app/oracle/oradata/proe
[root@server1 proe]# scp trans_tbs1.dbf 11gtest:/u01/app/oracle/oradata/proe/
root@11gtest's password: 
trans_tbs1.dbf                                          100%  100MB   1.3MB/s   01:16    

目标库授权一下(因为用root传的)

[root@11gtest pumpdir]# chown oracle:oinstall tbs_tran.dmp 
[root@11gtest pumpdir]# chmod 664 tbs_tran.dmp 
[root@11gtest pumpdir]# chown oracle:oinstall /u01/app/oracle/oradata/proe/trans_tbs1.dbf 
[root@11gtest pumpdir]# chmod 664 /u01/app/oracle/oradata/proe/trans_tbs1.dbf
4.7 导入传输表空间:

由于目标库已经有目录对象了这里就不再创建
并且,目标数据库需要有和原库相同的数据库模式。不然需要使用remap_schema 参数指定。用法与数据泵一样。

[oracle@11gtest proe]$ impdp \'sys\/123456 as sysdba\' directory=pump_dir dumpfile=tbs_tran.dmp transport_datafiles='/u01/app/oracle/oradata/proe/trans_tbs1.dbf'

Import: Release 11.2.0.4.0 - Production on Fri Jul 17 16:09:43 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":  "sys/******** AS SYSDBA" directory=pump_dir dumpfile=tbs_tran.dmp transport_datafiles=/u01/app/oracle/oradata/proe/trans_tbs1.dbf 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Fri Jul 17 16:09:47 2020 elapsed 0 00:00:03
4.8 将原库与目标库的表空间重新设置为读写:
SYS@proe>alter tablespace trans_tbs read write;
Tablespace altered.

SYS@proe>alter tablespace trans_tbs read write;
Tablespace altered.
4.9 检查目标库是否一切正常:

传输表空间完成。



来自为知笔记(Wiz)


推荐阅读