参考文档:
在复制或移动表空间前,用户首先将表空间置于只读状态,再复制表空间的数据文件(datafile),
最后使用export/import工具迁移位于数据字典(data dictionary)中的数据库元数据信息(database metadata information)。
数据文件以及元数据导出文件必须全部复制到目标数据库上。
移动这些文件时可以使用任何用于文件复制的工具,例如操作系统的复制功能,FTP,或者发布到CD中。
复制数据文件(datafile)并导入元数据(metadata)之后,用户可以选择是否将表空间(tablespace)置为可读写状态。
环境介绍:
操作系统 :widows 2003 装在虚拟机上的
oracle 版本:11g
oracle 有两个实例 第一个实例名称 orcl 第二个 orcl2
sqlplus /nolog
--连接实例 orcl
connect /@orcl as sysdba
--在 orcl 创建表空间 test 包含一个数据文件
create tablespace test datafile 'C:\oracle11g\app\Administrator\oradata\orcl\test01.dbf' size 10m;
--drop tablespace test; --如果想删除表空间用此语句
--创建一个用户 密码为 123456 默认表空间为test
create user xuejianxin identified by 123456 default tablespace test;
--给此用户授权为dba
grant dba to xuejianxin;
--用刚才创建的用户 连接实例 orcl
connect xuejianxin/123456@orcl;
--创建表
create table test(id int,name varchar2(10));
--插入数据
insert into test values (1,'xue1');
insert into test values (1,'xue2');
--提交
commit;
--修改表空间为只读
alter tablespace test read only;
--恢复表空间为正常状态
-- alter tablespace test read wirite ;
--execute sys.dbms_tts.transport_set_check('test',true); --此句可以不执行
--导出test 表空间 元数据
/**
DIRECTORY
指定转储文件和日志文件所在的目录
DIRECTORY=directory_object
Directory_object用于指定目录对象名称.需要注意,
目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS目录
Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump
*/
connect /@orcl as sysdba
create directory dump as 'c:\dump' --必须创建此目录 c:\dump
drop directory dump;
exit;
--在 cmd 中直接 执行此命令
expdp system/123456@orcl directory=dump dumpfile=test.dmp transport_tablespaces=test
C:\Documents and Settings\Administrator>expdp system/123456@orcl directory=dump
dumpfile=test.dmp transport_tablespaces=test
Export: Release 11.1.0.6.0 - Production on 星期五, 01 7月, 2011 0:58:31
Copyright (c) 2003, 2007, Oracle. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/********@orcl directory=dum
p dumpfile=test.dmp transport_tablespaces=test
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01"
******************************************************************************
SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 的转储文件集为:
C:\DUMP\TEST.DMP
******************************************************************************
可传输表空间 TEST 所需的数据文件:
C:\ORACLE11G\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF
作业 "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" 已于 01:00:02 成功完成
拷贝数据文件 C:\oracle11g\app\Administrator\oradata\orcl\test01.dbf 到 C:\test01.dbf
--恢复表空间读写状态
connect /@orcl as sysdba
alter tablespace test read write;
----------------------------------
--连接实例 orcl2
connect /@orcl2 as sysdba;
--创建导入需要的目录
create directory dump as 'c:\dump'
exit;
--在cmd 中执行以下命令
impdp system/123456@orcl2 directory=dump dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:system
C:\Documents and Settings\Administrator>impdp system/123456@orcl2 directory=dum
p dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:sy
stem
Import: Release 11.1.0.6.0 - Production on 星期五, 01 7月, 2011 1:07:55
Copyright (c) 2003, 2007, Oracle. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********@orcl2 directory=du
mp dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:s
ystem
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
ORA-39123: 数据泵可传输的表空间作业中止
ORA-29345: 无法使用不兼容的字符集将表空间插入到数据库中
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 因致命错误于 01:08:22 停止
结果发现orcl 实例 和orcl2 实例字符集不一样
orcl 字符集为
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
--AL32UTF8
orcl2 字符集为
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
--ZHS16GBK
connect /@orcl2 as sysdba;
SQL> alter system enable restricted session; --shutdown immediate startup restrict
系统已更改。
SQL> alter database character set internal_use AL32UTF8;
shutdown immediate
SQL> connect /@orcl2 as sysdba
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 263639040 bytes
Fixed Size 1332552 bytes
Variable Size 222300856 bytes
Database Buffers 37748736 bytes
Redo Buffers 2256896 bytes
数据库装载完毕。
exit;
最后在cmd 执行 impdp system/123456@orcl2 directory=dum
p dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:sy
stem
由于 orcl2上没有用户xuejianxin 因此 remap_schema=xuejianxin:system
迁入了system方案
C:\Documents and Settings\Administrator>impdp system/123456@orcl2 directory=dum
p dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:sy
stem
Import: Release 11.1.0.6.0 - Production on 星期五, 01 7月, 2011 1:38:13
Copyright (c) 2003, 2007, Oracle. All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已成功加载/卸载了主表 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01"
启动 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********@orcl2 directory=du
mp dumpfile=test.dmp transport_datafiles=c:\test01.dbf remap_schema=xuejianxin:s
ystem
处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLK
处理对象类型 TRANSPORTABLE_EXPORT/TABLE
处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
作业 "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" 已于 01:38:38 成功完成
connect /@orcl2 as sysdba
SQL> select * from system.test
2 ;
ID NAME
---------- --------------------
1 xue1
1 xue2
SQL>
SQL> connect /@orcl as sysdba
已连接。
SQL> drop directory dump;
目录已删除。
SQL> connect /@orcl2 as sysdba
已连接。
SQL> drop directory dump;
目录已删除。