oracle数据库迁移-TTS迁移操作案例01

实战案例如下

迁移介绍:
源数据库系统:Solaris[tm] OE (64-bit) 11.2.0.4版本,文件系统存储
迁移表空间tts01,tts02到版本19.5.0.0 Linux x86 64-bit系统,ASM存储。

#######################TTS限制规则############################

Source/target数据库的字符集必须兼容,target字符集要么和source相同,要么为source的超集;database/national character set

加密表空间不能跨endian平台传输;

包含加密列的表不可支持传输;

不可传输system表空间/sys用户下的object;

Target版本不能低于source;

 时区文件要求一致

1 如果不能使用read only模式,那么也可以使用基于backup的 TTS
2 使用本地管理或者字典管理的表空间可以被传输,传输表空间不需要和目标库有相同的blocksize。

3 使用TTS移动数据比export/import或load unload快很多,因为TTS的数据移动仅仅是datafile的cp过程,TTS的data pump仅移动表空间的metadata。

4 从oracle 11gR1开始,必须使用data pump来进行TTS,只有一种情况可以使用exp/imp工具,那就是迁移10gR2之前的XML type。

5 从10G开始,TTS可以跨平台进行操作。

6  TTS不是支持所有平台,可以查询v$transportable_platform视图来确认,主要决定因素是不同的endian格式,TTS只支持endian格式一致的情况,需要转换。

7 跨平台需要compatibility参数大于10.0.0、

8 TTS两端必须使用兼容的database character。

9 TTS目标不能包含同名的表空间,如果有可以先对tablespace进行rename。

10 表空间没有使用blocknecryption,但是其中的表使用了encrypted columns,这种情况不能使用tts。

11 SYSTEM表空间或者SYS用户包含的对象不能使用TTS。

12 raw bfile可以使用tts,但是必须同平台。

13 EXECUTE_CATALOG_ROLE角色。
############################检查##########################################
set lines 120
col PLATFORM_NAME for a40
SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;


PLATFORM_NAME                            ENDIAN_FORMAT
---------------------------------------- --------------
Solaris[tm] OE (64-bit)                  Big

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

目标系统

SQL> set lines 120
SQL> col PLATFORM_NAME for a40
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT
  2  FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d
  3  WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

PLATFORM_NAME                            ENDIAN_FORMAT
---------------------------------------- --------------
Linux x86 64-bit                         Little

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

SQL> 


######创建测试表空间####

SQL> create tablespace tts01 datafile '/mo/oracle/oradata6/tts01.dbf' size 1G autoextend off;

Tablespace created.

SQL> create tablespace tts02 datafile '/mo/oracle/oradata6/tts02.dbf' size 1G autoextend off;

Tablespace created.

SQL> create table nmosdb.tts01 tablespace tts01 as select * From dba_objects;

Table created.

SQL> create table nmosdb.tts02 tablespace tts02  as select * From dba_objects;

Table created.

SQL> 


Tablespace Self-Contained 检测


SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('tts01,tts02,XX,XX,XX,XX,XX', TRUE);

PL/SQL procedure successfully completed.

 

ORA-39921: Default Partition (Table) Tablespace CLRDBS11 for TFA not c
ontained in transportable set.

ORA-39921: Default Partition (Table) Tablespace CLRDBS01 for TFA not c
ontained in transportable set.

ORA-39921: Default Partition (Table) Tablespace APMDBS07 for TPA_ALARM_NE
UM not contained in transportable set.

ORA-39921: Default Partition (Table) Tablespace APMDBS06 for TPA_AL
_SUM not contained in transportable set.

 

 

 

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

no rows selected


#######################read only表空间#######################
alter tablespace tts01 read only;
alter tablespace tts02 read only;


DIR_BAK


expdp system/Tjnmc#2013 dumpfile=DIR_BAK:tts.dmp transport_tablespaces=tts01,tts02 logfile=tts.log

-bash-3.00$ expdp system/oranmc#2013 dumpfile=DIR_BAK:tts.dmp transport_tablespaces=tts01,tts02 logfile=tts.log

Export: Release 11.2.0.4.0 - Production on Sat Dec 14 15:44:59 2019

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 Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01":  system/******** dumpfile=DIR_BAK:tts.dmp transport_tablespaces=tts01,tts02 logfile=tts.log 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
  /ogg/tts.dmp
******************************************************************************
Datafiles required for transportable tablespace TTS01:
  /mo/oracle/oradata6/tts01.dbf
Datafiles required for transportable tablespace TTS02:
  /mo/oracle/oradata6/tts02.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Sat Dec 14 15:47:14 2019 elapsed 0 00:02:08

-bash-3.00$ scp tts.dmp oracle@10.28.24.4:/home/oracle/dmpdata/
-bash-3.00$ 

##############传输表空间对应的数据文件##############################

-bash-3.00$ scp -rp /mo/oracle/oradata6/tts01.dbf /mo/oracle/oradata6/tts02.dbf oracle@10.28.24.4:/home/oracle
alter tablespace tts01 read write;
alter tablespace tts02 read write;

 

####目标端操作如下 ##############

1创建用户以及赋予对应的权限。

SQL> create user postmall_user identified by postmall_pwd account unlock;
SQL> grant connect,resource,dba to postmall_user;

RMAN> CONVERT DATAFILE '/home/oracle/tts01.dbf','/home/oracle/tts02.dbf' to PLATFORM='Linux x86 64-bit' from PLATFORM='Solaris[tm] OE (64-bit)' DB_FILE_NAME_CONVERT= '/home/oracle/','+DATA02/MONIDB/DATAFILE/';

RMAN> CONVERT DATAFILE '/home/oracle/tts01.dbf','/home/oracle/tts02.dbf' to PLATFORM='Linux x86 64-bit' from PLATFORM='Solaris[tm] OE (64-bit)' DB_FILE_NAME_CONVERT= '/home/oracle/','+DATA02/MONIDB/DATAFILE/' parallelism=10;

Starting conversion at target at 2019:12:14 15:55:09
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2063 instance=monidb1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input file name=/home/oracle/tts01.dbf
converted datafile=+DATA02/MONIDB/DATAFILE/tts01.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
channel ORA_DISK_1: starting datafile conversion
input file name=/home/oracle/tts02.dbf
converted datafile=+DATA02/MONIDB/DATAFILE/tts02.dbf
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
Finished conversion at target at 2019:12:14 15:55:15 

impdp system/oranmc#2019 dumpfile=pump:tts.dmp transport_datafiles=+DATA02/MONIDB/DATAFILE/tts01.dbf,DATA02/MONIDB/DATAFILE/tts02.dbf logfile=tts.log  

[oracle@rac01 ~]$ impdp system/oranmc#2019 dumpfile=pump:tts.dmp transport_datafiles=+DATA02/MONIDB/DATAFILE/tts01.dbf,+DATA02/MONIDB/DATAFILE/tts02.dbf logfile=tts.log  

Import: Release 19.0.0.0.0 - Production on Sat Dec 14 16:02:08 2019
Version 19.5.0.0.0

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

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** dumpfile=pump:tts.dmp transport_datafiles=+DATA02/MONIDB/DATAFILE/tts01.dbf,+DATA02/MONIDB/DATAFILE/tts02.dbf logfile=tts.log 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Sat Dec 14 16:02:19 2019 elapsed 0 00:00:06

[oracle@rac01 ~]$ 

SQL> set lines 120
SQL> col tablespace_name for a20
SQL> col file_name for a40
SQL> select tablespace_name,file_name from dba_Data_files where tablespace_name in ('TTS01','TTS02');

TABLESPACE_NAME      FILE_NAME
-------------------- ----------------------------------------
TTS01                +DATA02/MONIDB/DATAFILE/tts01.dbf
TTS02                +DATA02/MONIDB/DATAFILE/tts02.dbf

SQL> 
SQL> SELECT COUNT(1) FROM nmosdb.tts01;

  COUNT(1)
----------
    132586

SQL> SELECT COUNT(1) FROM nmosdb.tts02;

  COUNT(1)
----------
    132587

SQL> 
SQL> SELECT TABLESPACE_NAME,STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME IN ('TTS01','TTS02');

TABLESPACE_NAME      STATUS
-------------------- ---------
TTS01                READ ONLY
TTS02                READ ONLY

SQL> 
SQL> ALTER TABLESPACE TTS01 READ WRITE;

Tablespace altered.

SQL> ALTER TABLESPACE TTS02 READ WRITE;

Tablespace altered.

SQL> 

################还有用户下的其他对象:例如函数,存储过程,触发器,包,包体等对象需要进行迁移。

异构平台

  CONVERT命令可以转换数据文件、表空间甚至整个数据库的字节顺序, 
    CONVERT TABLESPACE:用于在源库转换指定表空间的数据文件 。 
    CONVERT DATAFILE:  用于在目标库转换数据文件到目标平台 。 
    CONVERT DATABASE:  用于从源平台转换及传输整个数据库到目标平台,并确保创建需要的
                       数据文件,视你的需求即可以在源库执行也可以在目标库执行。只能
                       用于相同字节序的平台。  

1.  CONVERT TABLESPACE 

必须在源平台执行,用于转换表空间的endian format到目标平台 。

可以在命令中指定FORMAT或DB_FILE_NAME_CONVERT参数来设置转换后数据文件的
命名规则,PARALLELISM参数指定转换的并行度:

RMAN TARGET /  

CONVERT TABLESPACE  AHLD,AHLX,APPS_TS_TOOLS,APPS_TS_TX_DATA,APPS_TS_TX_IDX  
   TO PLATFORM. 'Linux x86 64-bit'  
   DB_FILE_NAME_CONVERT  '+DATA/gerpb/datafile','/nas01/convert_dat'    
   PARALLELISM  8 ;
 
CONVERT TABLESPACE  ASMS,ASND,ASNX,CUGD,CUGX,DSTX01,DFPAX,FUND,FUNX 
   TO PLATFORM. 'Linux x86 64-bit'  
   FORMAT='/nas01/transport_linux_%U''  
   PARALLELISM  8 ;

FORMAT和DB_FILE_NAME_CONVERT参数可以同时使用,也可以都不使用,如果两个参数
都不使用的话,目标平台中的文件路径会默认引用源平台中的路径。 

2. CONVERT DATAFILE 

必须在目标平台执行,用于转换指定数据文件到指定的endian format. 

可以通过指定TO PLATFORM参数设定转换到的字节顺序,如果不指定该参数,默认转换
到当前平台。不过FROM PLATFORM参数的值必须是与其对应的源平台,不然convert 可
能会出错。同样CONVERT DATAFILE也可以指定FORMAT,DB_FILE_NAME_CONVERT,PARALLELISM
等参数,例: 

RMAN TARGET /   
CONVERT DATAFILE  
    '+DATA/gerpb/datafile/ahld.1299.825200785',   
     ..... 多个数据文件 ...                           
  '+DATA/gerpb/datafile/ahlx.1154.825198535',   
  '+DATA/gerpb/datafile/ahlx.1154.825198535'  
   TO  PLATFORM='Linux x86 64-bit'  
   FROM  PLATFORM='AIX-Based Systems (64-bit)'  
   DB_FILE_NAME_CONVERT= '+DATA/gerpb/datafile','+DATA/fuerp/datafile';  

2、Tablespace Self-Contained 检测
进行TTS的表空间必须满足自包含条件,如果不满足,则需要进行调整直至满足才可以进行TTS。
source:
SQL> EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('tbs_postmall_data,tbs_postmall_idx', TRUE);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

no rows selected


出现0行,说明满足自包含条件。

3、Generate a Transportable Tablespace Set
生成TTS set之前,需要设置相关的表空间为read only模式。
SQL> alter tablespace tbs_postmall_data read only;

Tablespace altered.

SQL> alter tablespace tbs_postmall_idx read only;

Tablespace altered.

生成相关表空间的metadata dumpfile
oracle@wls112:/data/oracle/dump> expdp system dumpfile=postmall_metadata.dmp directory=dump 

transport_tablespaces=tbs_postmall_data,tbs_postmall_idx logfile=tts_export.log;

Export: Release 10.2.0.4.0 - 64bit Production on Thursday, 14 March, 2013 10:57:34

Copyright (c) 2003, 2007, Oracle. All rights reserved.
Password: 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** dumpfile=postmall_metadata.dmp directory=dump transport_tablespaces=tbs_postmall_data,tbs_postmall_idx logfile=tts_export.log 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/data/oracle/dump/postmall_metadata.dmp
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 10:57:51


4、Transport the Tablespace Set
把第三步生成的metadata dumpfile和相关表空间的datafile传输到target端。其中dumpfile传输到目标端的一个directory中,datafile则传送到一个临时目录(target为ASM存储)或者目标数据库的datafile目录(target为文件系统存储)。
oracle@wls112:/data/oracle/dump> scp postmall_metadata.dmp 172.24.138.101:/data/oracle/dump/
Password: 
postmall_metadata.dmp 100% 260KB 260.0KB/s 00:00 
oracle@wls112:/data/oracle/dump> cd ../oradata/postmall/
oracle@wls112:/data/oracle/oradata/postmall> scp tbs_postmall_* 172.24.138.101:/data/oracle/dump/

Password: 
tbs_postmall_data01.dbf 100% 5120MB 33.0MB/s 02:35 
tbs_postmall_data02.dbf 100% 5120MB 28.1MB/s 03:02 
tbs_postmall_idx01.dbf 100% 5120MB 25.9MB/s 03:18 


5、在目标端将datafile从文件系统传输至ASM中
不能直接用asm的cp命令来进行简单的复制,而需要用RMAN中的convert datafile功能来传输datafile
oracle@postmallrac1:/data/oracle/dump> ls -l
total 15744801
-rw-r--r-- 1 oracle asmadmin 1216 2013-03-14 09:53 import.log
-rw-r----- 1 oracle oinstall 266240 2013-03-14 11:11 postmall_metadata.dmp
-rw-r----- 1 oracle oinstall 520192 2013-03-13 12:06 postmall_user.dmp
-rw-r----- 1 oracle oinstall 5368717312 2013-03-14 11:14 tbs_postmall_data01.dbf
-rw-r----- 1 oracle oinstall 5368717312 2013-03-14 11:17 tbs_postmall_data02.dbf
-rw-r----- 1 oracle oinstall 5368717312 2013-03-14 11:21 tbs_postmall_idx01.dbf
-rw-r--r-- 1 oracle asmadmin 1582 2013-03-14 09:51 tts_import.log

用RMAN进行convert datafile

oracle@postmallrac1:/data/oracle/dump> rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 14 11:26:51 2013

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

connected to target database: POSTMALL (DBID=3816065011)

RMAN> convert DATAFILE '/data/oracle/dump/tbs_postmall_data01.dbf'
2> db_file_name_convert="/data/oracle/dump/tbs_postmall_data01.dbf","+DATA";

Starting conversion at target at 2013-03-14 11:27:22
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1155 instance=postmall1 device type=DISK
channel ORA_DISK_1: starting datafile conversion
input file name=/data/oracle/dump/tbs_postmall_data01.dbf
converted datafile=+DATA/postmall/datafile/tbs_postmall_data.274.810041245
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:02:25
Finished conversion at target at 2013-03-14 11:29:50

RMAN> convert DATAFILE '/data/oracle/dump/tbs_postmall_data02.dbf'
2> db_file_name_convert="/data/oracle/dump/tbs_postmall_data02.dbf","+DATA";

Starting conversion at target at 2013-03-14 11:30:21
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input file name=/data/oracle/dump/tbs_postmall_data02.dbf
converted datafile=+DATA/postmall/datafile/tbs_postmall_data.275.810041421
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:02:45
Finished conversion at target at 2013-03-14 11:33:06

RMAN> convert DATAFILE '/data/oracle/dump/tbs_postmall_idx01.dbf'
2> db_file_name_convert="/data/oracle/dump/tbs_postmall_idx01.dbf","+DATA";

Starting conversion at target at 2013-03-14 12:19:58
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile conversion
input file name=/data/oracle/dump/tbs_postmall_idx01.dbf
converted datafile=+DATA/postmall/datafile/tbs_postmall_idx.273.810044399
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:02:35
Finished conversion at target at 2013-03-14 12:22:33

在asmcmd里可以看到添加进去的datafile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y EXAMPLE.264.807814653
DATAFILE UNPROT COARSE MAR 13 21:00:00 Y SYSAUX.257.807814555
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y SYSTEM.256.807814555
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y TBS_OGG.272.808070095
DATAFILE UNPROT COARSE MAR 14 11:00:00 Y TBS_POSTMALL_DATA.274.810041245
DATAFILE UNPROT COARSE MAR 14 11:00:00 Y TBS_POSTMALL_DATA.275.810041421
DATAFILE UNPROT COARSE MAR 14 12:00:00 Y TBS_POSTMALL_IDX.273.810044399
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y TBS_ULECARD_DATA.270.807903909
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y TBS_ULECARD_IDX.271.807903973
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y UNDOTBS1.258.807814557
DATAFILE UNPROT COARSE MAR 13 22:00:00 Y UNDOTBS2.265.807814821
DATAFILE UNPROT COARSE FEB 25 15:00:00 Y USERS.259.807814557


6、Import the Tablespace Set
导入表空间之前,先把用户创建好。
SQL> create user postmall_user identified by postmall_pwd account unlock;
SQL> grant connect,resource,dba to postmall_user;
SQL> exit
oracle@postmallrac1:/data/oracle/dump> impdp system dumpfile=postmall_metadata.dmp directory=dump 
 
logfile=tts_import.log;

Import: Release 11.2.0.3.0 - Production on Thu Mar 14 13:23:07 2013

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01":  system/******** dumpfile=postmall_metadata.dmp directory=dump transport_datafiles=+data/postmall/datafile/TBS_POSTMALL_DATA.274.810041245,+data/postmall/datafile/TBS_POSTMALL_DATA.275.810041421,+data/postmall/datafile/TBS_POSTMALL_IDX.273.810044399 logfile=tts_import.log 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 13:23:43

7、导入用户的其他object
因为system表空无法进行TTS,所以postmall_user在system表空间的object,比如sequences、PL/SQL packages等就没法通过TTS来迁移。所以到了最后,还需要用Data Pump把其他object给迁移过来。
source端:
oracle@wls112:/data/oracle/dump>  expdp system directory=dump schemas=postmall_user  dumpfile=postmall_user.dmp;

Export: Release 10.2.0.4.0 - 64bit Production on Thursday, 14 March, 2013 13:34:16

Copyright (c) 2003, 2007, Oracle.  All rights reserved.
Password: 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
FLASHBACK automatically enabled to preserve database integrity.
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** directory=dump schemas=postmall_user exclude=table,index dumpfile=postmall_user.dmp 
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /data/oracle/dump/postmall_user.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 13:34:35
传送到target端,在target端导入:
oracle@postmallrac1:/data/oracle/dump> impdp system dumpfile=postmall_user.dmp directory=dump logfile=user_import.log

Import: Release 11.2.0.3.0 - Production on Thu Mar 14 13:36:46 2013

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

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01": system/******** dumpfile=postmall_user.dmp directory=dump logfile=user_import.log 
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"POSTMALL_USER" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
ORA-39082: Object type ALTER_PROCEDURE:"POSTMALL_USER"."UPDATE_0124" created with compilation warnings
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 2 error(s) at 13:36:57

导入的时候,出现了两个错误,第一个"ORA-31684"是因为用户已经存在了,无需再导入。第二个错误"ORA-39082"是因为有个procedure编译告警,这个procedure已经废弃,无需理会。
用户postmall_user虽然已经创建,但是还需要手动修改该用户的default tablespace为新导入的TBS_POSTMALL_DATA
SQL> alter user postmall_user default tablespace tbs_postmall_data;
User altered.

8、检验数据
source端
SQL> show user
USER is "POSTMALL_USER"
SQL> select object_name,object_type,status from user_objects;

OBJECT_NAME                              OBJECT_TYPE          STATUS
---------------------------------------- -------------------- -------
ORDER_LOTTERY                            TABLE                VALID
PRIZE_RECORD                             TABLE                VALID
IDX_OL_LOTTERY_TERM_END                  INDEX                VALID
IDX_ORDER_LOTTERY_STATUS                 INDEX                VALID
IDX_OL_LOTTERY_ONLYID_END                INDEX                VALID
IDX_LOTTERY_NO                           INDEX                VALID
IDX_OL_ESCORDERID                        INDEX                VALID
IDX_OL_USR_PHONE_TYPE                    INDEX                VALID
PK_PRIZE_RECORD                          INDEX                VALID
IDX_PR_MOBILE                            INDEX                VALID
IDX_PR_UCNO                              INDEX                VALID
IDX_PR_CREATE_DESC                       INDEX                VALID
PK_T1                                    INDEX                VALID
T1                                       TABLE                VALID
UPDATE_0124                              PROCEDURE            INVALID
PK_ORDER_LOTTERY                         INDEX                VALID
EMPLOYEES                                TABLE                VALID
PK_EMPLOYEES                             INDEX                VALID
IDX_EMPLOYEES_EMAIL                      INDEX                VALID
CREATE_INDEX_CCLR                        PROCEDURE            VALID

20 rows selected.

SQL> select count(*) from ORDER_LOTTERY;

  COUNT(*)
----------
  33330240

SQL> select count(*) from PRIZE_RECORD;

  COUNT(*)
----------
    111660

SQL> select count(*) from T1;

  COUNT(*)
----------
   2549760

SQL> select count(*) from employees;

  COUNT(*)
----------
       123

SQL> select EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL FROM EMPLOYEES WHERE EMPLOYEE_ID<=10;

EMPLOYEE_ID FIRST_NAME           LAST_NAME                 EMAIL
----------- -------------------- ------------------------- -------------------------
          1 杰森                 伯恩                      124@gmail.com
          2 勒布朗               詹姆斯                    124@gmail.com
          3 科比                 布莱恩特                  124@gmail.com
          4 沙克                 奥尼尔                    124@gmail.com
          5 蒂姆                 邓肯                      124@gmail.com
          6 迈克尔               乔丹                      124@gmail.com
          7 摩西                 马龙                      124@gmail.com
          8 乔治                 布什                      124@gmail.com
          9 hello                baby                      124@gmail.com
         10 jay                  刘杰                      124@gmail.com

10 rows selected.
target端:
SQL> show user
USER is "POSTMALL_USER"
SQL> select object_name,object_type,status from user_objects;

OBJECT_NAME OBJECT_TYPE STATUS
---------------------------------------- -------------------- ---------------------
UPDATE_0124 PROCEDURE INVALID
CREATE_INDEX_CCLR PROCEDURE VALID
IDX_PR_CREATE_DESC INDEX VALID
PK_T1 INDEX VALID
IDX_EMPLOYEES_EMAIL INDEX VALID
PK_EMPLOYEES INDEX VALID
IDX_PR_UCNO INDEX VALID
IDX_PR_MOBILE INDEX VALID
PK_PRIZE_RECORD INDEX VALID
IDX_OL_USR_PHONE_TYPE INDEX VALID
IDX_OL_ESCORDERID INDEX VALID
IDX_LOTTERY_NO INDEX VALID
IDX_OL_LOTTERY_ONLYID_END INDEX VALID
IDX_ORDER_LOTTERY_STATUS INDEX VALID
IDX_OL_LOTTERY_TERM_END INDEX VALID
PK_ORDER_LOTTERY INDEX VALID
T1 TABLE VALID
EMPLOYEES TABLE VALID
PRIZE_RECORD TABLE VALID
ORDER_LOTTERY TABLE VALID

20 rows selected.

SQL> select count(*) from ORDER_LOTTERY;

COUNT(*)
----------
33330240

SQL> select count(*) from PRIZE_RECORD;

COUNT(*)
----------
111660

SQL> select count(*) from T1;

COUNT(*)
----------
2549760

SQL> select count(*) from employees;

COUNT(*)
----------
123

SQL> select EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL FROM EMPLOYEES WHERE EMPLOYEE_ID<=10;

EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL
----------- ---------- ---------- ---------------
1 杰森 伯恩 124@gmail.com
2 勒布朗 詹姆斯 124@gmail.com
3 科比 布莱恩特 124@gmail.com
4 沙克 奥尼尔 124@gmail.com
5 蒂姆 邓肯 124@gmail.com
6 迈克尔 乔丹 124@gmail.com
7 摩西 马龙 124@gmail.com
8 乔治 布什 124@gmail.com
9 hello baby 124@gmail.com
10 jay 刘杰 124@gmail.com

10 rows selected.

数据均一致,中文也没有出现乱码。数据库迁移成功。

小结:
一、两边数据库的字符集(包括NLS_CHARACTERSET和NLS_NCHAR_CHARACTERSET)最好完全一样,如果不一样,也要保证source端的字符集是target端的字符集的真子集,还要加上一些限制,具体可以参考官方文档的说明。
二、在source端生成和传送TTS Set之前必须要设置相关表空间为read only模式。
三、如果从filesystem→filesystem,直接把datafile传输到目标数据库的datafile路径即可。如果从filesystem→asm,则需要多一RMAN的convert datafile操作。如果是asm→asm则还没进行测试。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值