使用EXPDP/IMPDP(EXP/IMP)方式
oracle 10g 允许在不同平台 transport tablespace
SQL> desc v$transportable_platform;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
PLATFORM_ID NUMBER
PLATFORM_NAME VARCHAR2(101)
ENDIAN_FORMAT VARCHAR2(14)
SQL> select platform_name from v$transportable_platform;
PLATFORM_NAME
--------------------------------------------------------------------------------
Solaris[tm] OE (32-bit)
Solaris[tm] OE (64-bit)
Microsoft Windows IA (32-bit)
Linux IA (32-bit)
AIX-Based Systems (64-bit)
HP-UX (64-bit)
HP Tru64 UNIX
HP-UX IA (64-bit)
Linux IA (64-bit)
HP Open VMS
Microsoft Windows IA (64-bit)
PLATFORM_NAME
--------------------------------------------------------------------------------
IBM zSeries Based Linux
Linux 64-bit for AMD
Apple Mac OS
Microsoft Windows 64-bit for AMD
Solaris Operating System (x86)
IBM Power Based Linux
已选择17行
以上是oracle所支持的平台
有些限制条件
1.source db 与target DB 有相同的字符集,nls_database_parameters 中NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET必须一样
2.不能有同名tablespace,不过 10G 可用alter tablespace rename解决
3.SYSTEM TABLESPACE 不能transport,sys对象在的tablespace不能transport
4.是不是自包含的(用TRANSPORT_FULL_CHECK可以解决 )不过导出INDEX TABLESPACE 没导出依赖的表tablespace还是会报错,分区表没全部包含,表lob列所在tablespace没包含 都会报错
C:\>expdp system/a831115@xh directory=expdpt dumpfile=e.dmp transport_tablespaces=
system
Export: Release 10.2.0.1.0 - Production on 星期三, 23 9月, 2009 12:12:14
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORA-39001: 参数值无效
ORA-39134: 不能包含作为可传输表空间的 "SYSTEM" 表空间~~~~~~~~~~~~SYSTEM 不行
SQL> conn / as sysdba
已连接。
SQL> create table t6 (a int) tablespace testxh;
表已创建。
SQL> alter tablespace testxh read only(使用RMAN TRANSPORT TABLESPACE 不用read only)
2 ;
表空间已更改。
C:\>expdp system/a831115@xh directory=expdpt dumpfile=e.dmp transport_tablespaces=
testxh
Export: Release 10.2.0.1.0 - Production on 星期三, 23 9月, 2009 12:13:39
Copyright (c) 2003, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/********@xh directory=expdpt d
umpfile=e.dmp transport_tablespaces=testxh
ORA-39123: 数据泵可传输的表空间作业中止
ORA-29341: 可传送集不是自包含的~~~~~~~~~~~~~~~~~~~中含有SYS对象不行
表已删除。
SQL> conn / as sysdba
已连接。
SQL> execute dbms_tts.transport_set_check('testxh',true);检查下时候可以transport
SQL> select * from transport_set_violations;
VIOLATIONS
--------------------------------------------------------------------------------
Sys owned object T6 in tablespace TESTXH not allowed in pluggable set
有内容就是有错误,解决相关问题
SQL> alter table t6 move tablespace users;
表已更改。
SQL> execute dbms_tts.transport_set_check('testxh',true);
PL/SQL 过程已成功完成。
SQL> select * from transport_set_violations;
未选定行~~~~~~~~~~~~~可以transport 该tablespace了
另外对于
dbms_tts.transport_set_check 有以下参数
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
TS_LIST CLOB IN
INCL_CONSTRAINTS BOOLEAN IN DEFAULT
FULL_CHECK BOOLEAN IN DEFAULT
不指定FULL_CHECK DEFAULT n 不会检查tablespace是否是自包含的
SQL> conn xh/a123
已连接。
SQL> select count(*) from t1;
COUNT(*)
----------
1
SQL> alter table t1 move tablespace testxh;
表已更改。
SQL> create index t1_ind on t1(a);
索引已创建。
SQL> select tablespace_name from user_indexes where index_name='T1_IND';
TABLESPACE_NAME
------------------------------
USERS
SQL> select tablespace_name from user_tables where table_name='T1';
TABLESPACE_NAME
------------------------------
TESTXH
上面可以看到index与table不在同一tablespace
SQL> conn / as sysdba
已连接。
SQL> execute dbms_tts.transport_set_check('testxh',true);
PL/SQL 过程已成功完成。
SQL> select * from transport_set_violations;
未选定行~~~~~~~~~~~~~~~~~~~没检查出来INDEX 与table不在同一tablespace
SQL> execute dbms_tts.transport_set_check('testxh',true,true);
PL/SQL 过程已成功完成。
SQL> select * from transport_set_violations;
VIOLATIONS
--------------------------------------------------------------------------------
Index XH.T1_IND in tablespace USERS points to table XH.T1 in tablespace TESTXH
检查出来了 INDEX 与table不在同一tablespace
SQL> conn xh/a123
已连接。
SQL> alter index t1_ind rebuild tablespace testxh; 解决
索引已更改。
SQL> conn / as sysdba
已连接。
SQL> execute dbms_tts.transport_set_check('testxh',true,true);
PL/SQL 过程已成功完成。
SQL> select * from transport_set_violations;
未选定行
SQL> alter tablespace testxh read only;
表空间已更改。
C:\>expdp system/a831115@xh directory=expdpt dumpfile=e.dmp transport_tablespaces=
testxh
Export: Release 10.2.0.1.0 - Production on 星期三, 23 9月, 2009 13:33:19
SQL> host copy d:\xhdatafile\testxh.dbf e:\orcldatafile\testxh.dbf
已复制 1 个文件。
SQL> host copy D:\expdp\e.dmp e:\test\e.dmp
已复制 1 个文件
DMP文件和DATAFILE 都复制过去
SET ORACLE_SID=ORCL
C:\>sqlplus / as sysdba
SQL> create directory dumplist as 'e:\test';
目录已创建。
C:\>impdp system/a831115 directory=dumplist dumpfile=e.dmp transport_datafiles=e:\
orcldatafile\testxh.dbf remap_schema=xh:system
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 13:48:18 成功完成
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
TEST
RMAN_TS
TESTXH~~~~~~~~~~orcl db多了这个 tablespace
已选择9行。
SQL> conn system/a831115
已连接。
SQL> select count(*) from t1; TESTXH TABLESPACE 中对象也给了 ORCL DB SYSTEM USER
COUNT(*)
----------
1
SQL> col tablespace_name format a10
SQL> col file_name format a30
SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE FILE_NAME
---------- ------------------------------
SYSTEM E:\SYSDATAFILE2.DBF
TEST D:\TEST.DBF
EXAMPLE E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\EXAMPLE01.DBF
USERS E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\USERS01.DBF
SYSAUX E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSAUX01.DBF
TABLESPACE FILE_NAME
---------- ------------------------------
UNDOTBS1 E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\UNDOTBS01.DBF
SYSTEM E:\ORACLE\PRODUCT\10.2.0\ORADA
TA\ORCL\SYSTEM01.DBF
RMAN_TS D:\RMAN_TS.DBF
TESTXH E:\ORCLDATAFILE\TESTXH.DBF~~~~~~~~~~~~~~~~~~~~~~
已选择9行。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12020513/viewspace-615395/ ,如需转载,请注明出处,否则将追究法律责任。