ITPub博客

首页 > Linux操作系统 > Linux操作系统 > EXP/IMP传输表空间试验

EXP/IMP传输表空间试验

原创 Linux操作系统 作者:残日 时间:2011-08-22 21:19:34 0 删除 编辑

传输表空间TABLESPACESTRANSPORT_TABLESPACETTS_FULL_CHECK

使用exp/imp将表空间data_tbsa库传输到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、讲表空间处理为自包含:比如将索引删除,导到其他数据库后重建索引,或者将索引重建到数据文件的表空间,然后导出一个表空间

 

注意:当再syssystem用户下创建表时,使用表空间传输也会出现“可传送集不是自包含的”,并且无法两个表空间同时传输,所以最好必要导出syssystem建表使用的表空间,不管是不是自带的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: 未成功终止导入

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23185328/viewspace-705577/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-22

  • 博文量
    8
  • 访问量
    26861