EXP/IMP传输表空间试验

传输表空间TABLESPACES、TRANSPORT_TABLESPACE、TTS_FULL_CHECK

使用exp/imp将表空间data_tbs从a库传输到b库?下面是准备工作。

create tablespace data_tbs;

create tablespace idx_tbs;

create table t(x varchar2(10)) tablespace data_tbs;

create index idx_t on t(x) tablespace idx_tbs;

insert into t ;


(1)在sys用户下创建的(注:导出是错误的)

C:\Documents and Settings\Administrator>set oracle_sid=orcl

C:\Documents and Settings\Administrator>sqlplus sys/ymh as sysdba;

SQL*Plus: Release 10.2.0.1.0 - Production on星期五6月24 10:36:38 2011

Copyright (c) 1982, 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

 

SQL> CREATE TABLESPACE data_tbs

2 DATAFILE 'data_tbs' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING

3 EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

 

表空间已创建。

 

SQL> CREATE TABLESPACE idx_tbs

2 DATAFILE 'idx_tbs' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED LOGGING

3 EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

 

表空间已创建。

 

SQL> create table t(x varchar2(10)) tablespace data_tbs;

 

表已创建。

 

SQL> create index idx_t on t(x) tablespace idx_tbs;

 

索引已创建。

 

SQL> insert into t select object_id from dba_objects;

 

已创建50407行。

 

SQL> insert into t select * from t;

 

已创建50407行。

 

SQL> commit;

 

SQL> alter tablespace data_tbs read only;

 

表空间已更改。

 

SQL> alter tablespace idx_tbs read only;

 

表空间已更改。

 

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs',TRUE,TRUE);

 

PL/SQL过程已成功完成。

 

SQL> SELECT * FROM sys.transport_set_violations;

 

VIOLATIONS

--------------------------------------------------------------------------------

Index SYS.IDX_T in tablespace IDX_TBS points to table SYS.T in tablespace DATA_T

BS

 

Sys owned object T in tablespace DATA_TBS not allowed in pluggable set

 

SQL> delete from sys.transport_set_violations;

 

已删除2行。

 

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs,idx_tbs',TRUE,TRUE);

 

PL/SQL过程已成功完成。

 

SQL> SELECT * FROM sys.transport_set_violations;

 

VIOLATIONS

-------------------------------------------------------------------------------

Sys owned object IDX_T in tablespace IDX_TBS not allowed in pluggable set

Sys owned object T in tablespace DATA_TBS not allowed in pluggable set

 

SQL> exit

从Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options断开

 

C:\Documents and Settings\Administrator>exp \"sys/ymh as sysdba\" file=d:/tbs.dmp tablespaces=(data_tbs,idx_tbs) transport_Tab

 

Export: Release 10.2.0.1.0 - Production on星期五6月24 11:16:40 2011

 

Copyright (c) 1982, 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

已导出ZHS16GBK字符集和AL16UTF16 NCHAR字符集

注:将不导出表数据(行)

即将导出可传输的表空间元数据...

EXP-00008:遇到ORACLE错误29341

ORA-29341:可传送集不是自包含的

ORA-06512:在"SYS.DBMS_PLUGTS", line 1387

ORA-06512:在line 1

EXP-00000:导出终止失败

 

C:\Documents and Settings\Administrator>

注:sys用户下有问题,具体看后面的总结


(2)使用scott用户操作

C:\Documents and Settings\Administrator>sqlplus sys/ymh as sysdba;

SQL*Plus: Release 10.2.0.1.0 - Production on星期五6月24 13:24:34 2011

Copyright (c) 1982, 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

 

SQL> drop table t;

 

表已删除。

 

SQL> alter tablespace data_tbs read write;

 

表空间已更改。

 

SQL> alter tablespace idx_tbs read write;

 

表空间已更改。

 

SQL> conn scott/tiger

已连接。

SQL> create table t2(x varchar2(10)) tablespace data_tbs;

 

表已创建。

 

SQL> create index idx_t on t2(x) tablespace idx_tbs;

 

索引已创建。

 

 

SQL> insert into t2 select object_id from all_objects;

 

已创建46677行。

 

SQL> insert into t2 select object_id from all_objects;

 

已创建46677行。

 

SQL> commit;

 

提交完成。

 

 

SQL> conn sys/ymh as sysdba;

已连接。

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs',TRUE,TRUE); ===========>单个表空间自包含检查

 

PL/SQL过程已成功完成。

 

SQL> SELECT * FROM sys.transport_set_violations; ===========>有一个关联,自包含检查不通过

 

VIOLATIONS

--------------------------------------------------------------------------------

Index SCOTT.IDX_T in tablespace IDX_TBS points to table SCOTT.T2 in tablespace DATA_TBS

 

SQL> delete from sys.transport_set_violations;

 

已删除1行。

 

SQL> commit;

 

提交完成。

 

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs,idx_tbs',TRUE,TRUE); ===========>两个有关联的表空间自包含检查

 

PL/SQL过程已成功完成。

 

SQL> SELECT * FROM sys.transport_set_violations; ===========>两个一起检查通过

 

 

未选定行

 

SQL> alter tablespace data_tbs read only;

 

表空间已更改。

 

SQL> alter tablespace idx_tbs read only;

 

表空间已更改。

 

SQL> exit

从Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options断开

 

C:\Documents and Settings\Administrator>exp \"sys/ymh as sysdba\" file=d:/tbs.dmp tablespaces=(data_tbs,idx_tbs) transport_tablespace=y

tts_full_check=y

=======================>将两个表空间一起导出,不要数据(tablespaces=(data_tbs,idx_tbs):要导出的表空间;transport_tablespace=y:只导出元数据;tts_full_check=y进行完全自包含检查)

 

Export: Release 10.2.0.1.0 - Production on星期五6月24 14:21:22 2011

 

Copyright (c) 1982, 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

已导出ZHS16GBK字符集和AL16UTF16 NCHAR字符集

注:将不导出表数据(行)

即将导出可传输的表空间元数据...

对于表空间DATA_TBS...

.正在导出簇定义

.正在导出表定义

. .正在导出表T2 ===========è没有数据导出

对于表空间IDX_TBS...

.正在导出簇定义

.正在导出表定义

.正在导出引用完整性约束条件

.正在导出触发器

.结束导出可传输的表空间元数据

成功终止导出,没有出现警告。


(3)复制文件

 

C:\Documents and Settings\Administrator>sqlplus sys/ymh as sysdba;

 

SQL*Plus: Release 10.2.0.1.0 - Production on星期五6月24 13:44:37 2011

 

Copyright (c) 1982, 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

 

SQL> select name from v$datafile where name like '%_TBS';

 

NAME

--------------------------------------------------------------------------------

D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DATA_TBS

D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\IDX_TBS

 

SQL> exit

从Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options断开

 

C:\Documents and Settings\Administrator>copy D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\IDX_TBS D:\oracle\product\10.2.0\oradata\test

已复制1个文件。

 

C:\Documents and Settings\Administrator>copy D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DATA_TBS D:\oracle\product\10.2.0\oradata\test

已复制1个文件。

 

C:\Documents and Settings\Administrator>cd ../..

 

C:\>d:

 

D:\>cd D:\oracle\product\10.2.0\oradata\test

 

D:\oracle\product\10.2.0\oradata\test>dir *_tbs

驱动器D中的卷是 安装

卷的序列号是3451-8864

 

D:\oracle\product\10.2.0\oradata\test的目录

 

2011-06-24 13:28 104,865,792 DATA_TBS

2011-06-24 13:28 10,493,952 IDX_TBS

2个文件115,359,744字节

0个目录40,376,631,296可用字节

 

D:\oracle\product\10.2.0\oradata\test>


(4)导入另一个库

C:\Documents and Settings\Administrator>set oracle_sid=test

 

C:\Documents and Settings\Administrator>echo %oracle_sid%

test

C:\Documents and Settings\Administrator>sqlplus sys/ymh as sysdba;

 

SQL*Plus: Release 10.2.0.1.0 - Production on星期五6月24 13:54:59 2011

 

Copyright (c) 1982, 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

 

SQL> show parameter service

 

NAME TYPE VALUE

------------------------------------ ----------- --------------------------

service_names string test

 

C:\Documents and Settings\Administrator>imp sys/ymh@test as sysdba' file='d:/tbs.dmp' tablespaces=(data_tbs,idx_tbs) transport_tablespace=y

datafiles='D:\oracle\product\10.2.0\oradata\test\DATA_TBS,D:\oracle\product\10.2.0\oradata\test\IDX_TBS

 

Import: Release 10.2.0.1.0 - Production on星期五6月24 14:45:00 2011

 

Copyright (c) 1982, 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

 

经由常规路径由EXPORT:V10.02.01创建的导出文件

即将导入可传输的表空间元数据...

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR字符集中的导入

.正在将SYS的对象导入到SYS

.正在将SYS的对象导入到SYS

.正在将SCOTT的对象导入到SCOTT

. .正在导入表"T2"

.正在将SYS的对象导入到SYS

成功终止导入,没有出现警告。


(5)检查数据

C:\Documents and Settings\Administrator>sqlplus scott/tiger@test

 

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL> conn sys/ymh@test as sysdba;

已连接。

SQL> show parameter service

 

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

service_names string test

SQL> conn scott/tiger

已连接。

SQL> select count(1) from t2;

 

COUNT(1)

----------

93354

 

SQL>


总结错误:


(1) ORA-29335:表空间'DATA_TBS'不为只读

导出的表空间必须为只读状态,否则出现如下错误

EXP-00008:遇到ORACLE错误29335

ORA-29335:表空间'DATA_TBS'不为只读

ORA-06512:在"SYS.DBMS_PLUGTS", line 507

ORA-06512:在line 1

EXP-00000:导出终止失败


(2) ORA-29341:可传送集不是自包含的

“可传送集不是自包含的”的两种处理方法:

1、将所有的依赖表空间一起传,比如该题中,一个表空间会出现自检错误,两个表空间同时自检则不会。

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs',TRUE,TRUE);

SQL> SELECT * FROM sys.transport_set_violations;

VIOLATIONS

--------------------------------------------------------------------------------

Index SCOTT.IDX_T in tablespace IDX_TBS points to table SCOTT.T2 in tablespace DATA_TBS

SQL> Execute sys.dbms_tts.transport_set_check('data_tbs,idx_tbs',TRUE,TRUE);

SQL> SELECT * FROM sys.transport_set_violations;

未选定行

SQL>

2、讲表空间处理为自包含:比如将索引删除,导到其他数据库后重建索引,或者将索引重建到数据文件的表空间,然后导出一个表空间

 

注意:当再sys或system用户下创建表时,使用表空间传输也会出现“可传送集不是自包含的”,并且无法两个表空间同时传输,所以最好必要导出sys和system建表使用的表空间,不管是不是自带的system还是新建的表空间。

EXP-00008:遇到ORACLE错误29341

ORA-29341:可传送集不是自包含的

ORA-06512:在"SYS.DBMS_PLUGTS", line 1387

ORA-06512:在line 1

EXP-00000:导出终止失败


(3) IMP-00053:导入模式与导出转储文件不兼容

1、可能是跨平台时存储格式不同导致(未测试)

2、同一平台下,注意导出的参数和导入的参数,因为导出时忘了加transport_tablespace=y,把数据也改导出,导入时又加入该参数,导致错误:

IMP-00053:导入模式与导出转储文件不兼容

IMP-00000:未成功终止导入

 

(4) ORA-27041:无法打开文件O/S-Error: (OS 2)系统找不到指定的文件。

一个普通的导入错误

IMP-00003:遇到ORACLE错误1565

ORA-01565:标识文件'D:\oracle\product\10.2.0\oradata\test\DATA_TBS'时出错

ORA-27041:无法打开文件

OSD-04002:无法打开文件

O/S-Error: (OS 2)系统找不到指定的文件。

ORA-06512:在"SYS.DBMS_PLUGTS", line 1801

ORA-06512:在line 1

IMP-00000:未成功终止导入


(5) ORA-19722:数据文件D:\oracle\oradata\DATA_TBS版本错误

表空间设置为只读就是为了保证数据的一致性,因此只有讲表空间的数据文件拷贝完成之后才能在源数据库恢复表空间的可读写状态。

否则,在目标数据库导入的时候就会出现下列错误:

IMP-00003:遇到ORACLE错误19722

ORA-19722:数据文件D:\oracle\oradata\DATA_TBS版本错误

ORA-06512:在"SYS.DBMS_PLUGTS", line 2065

ORA-06512:在line 1

IMP-00000:未成功终止导入


(6) PLS-00201:必须声明标识符'DBMS_PLUGTS.NEWTABLESPACE'

使用普通用户或system用户导入时如果出现如下错误,可以使用'sys/ymh as sysdba'来导入,可以加入参数TTS_OWNERS=scott(TTS_OWNERS未详细测试)

已经完成ZHS16GBK字符集和AL16UTF16 NCHAR字符集中的导入

IMP-00003:遇到ORACLE错误6550

ORA-06550:第1行,第7列:

PLS-00201:必须声明标识符'DBMS_PLUGTS.NEWTABLESPACE'

ORA-06550:第1行,第7列:

PL/SQL: Statement ignored

IMP-00000:未成功终止导入


(7) OSD-04002:无法打开文件O/S-Error: (OS 123)文件名、目录名或卷标语法不正确。

如果有多个数据文件,datafile=XXX,XXX,中间用逗号隔开即可,不要用""号将多个概括,否则出现如下错误

IMP-00003:遇到ORACLE错误1565

ORA-01565:标识文件'D:\oracle\oradata\DATA_TBS,D:\oracle\oradata\IDX_TBS'时出错

ORA-27041:无法打开文件

OSD-04002:无法打开文件

O/S-Error: (OS 123)文件名、目录名或卷标语法不正确。

ORA-06512:在"SYS.DBMS_PLUGTS", line 1801

ORA-06512:在line 1

IMP-00000:未成功终止导入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ye_minhua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值