前段时间做过不同default tablespace的测试,在imp时,首先imp到用户的default tablespace(无论与exp数据库服务器中的tablespace是否一致),当没有指定用户表空间的时候,10g会自动imp到user表空间。
测试详细过程见链接:http://space.itpub.net/9252210/viewspace-567223
但是最近发现有时候imp会报错,报错:ORA-00959: tablespace 'xx' does not exist,详细信息如下:
导致错误信息的原因为:
1. 分区表
2. 表中含有blob,clob字段
测试结果如下:
1. 第一个数据库创建表空间及用户
SQL>CREATE TABLESPACE "TEST1" DATAFILE '/oracle/oradata/test/test02.bdf' SIZE 5M
SQL> create user ecc_test1 identified by edd default tablespace test1;
User created.
SQL> grant connect,resource to ecc_test1;
Grant succeeded.
2. 第二个数据库创建表空间及用户
SQL>CREATE TABLESPACE "TEST2" DATAFILE '/oracle/oradata/dupt/test02.bdf' SIZE 5M ;
SQL> create user ecc_test2 identified by edd default tablespace test2;
User created.
SQL> grant connect,resource to ecc_test2;
Grant succeeded.
3. 用户ecc_test1创建4个table(不指定表空间,指定表空间,含有lob字段,分区表)
SQL> conn ecc_test1/edd@test
Connected.
a. 不显式指定对象表空间
SQL> create table t1_notb (id varchar(1));
Table created.
b.显式指定对象表空间
SQL> create table t2_tb (id varchar(1)) tablespace test1;
Table created.
c. 含有lob字段
SQL> create table t3_lob (id varchar(1), id_lob blob);
Table created.
d. 分区表
create table t4_par
(
id number,
id2 number
)
partition by range (id)
(
partition id11 values less than (2),
partition id22 values less than (4)
)
e. 查询对象表空间
SQL> select table_name, tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T1_NOTB TEST1
T2_TB TEST1
T3_LOB TEST1
T4_PAR
4. exp 用户 ecc_test1
C:\Users\Atao>exp ecc_test1/edd@test file=c:\ecc_test.dmp
Export: Release 10.2.0.1.0 - Production on 星期五 7月 17 18:53:42 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 ECC_TEST1 的外部函数库名
. 导出 PUBLIC 类型同义词
. 正在导出专用类型同义词
. 正在导出用户 ECC_TEST1 的对象类型定义
即将导出 ECC_TEST1 的对象...
. 正在导出数据库链接
. 正在导出序号
. 正在导出簇定义
. 即将导出 ECC_TEST1 的表通过常规路径...
. . 正在导出表 T1_NOTB导出了 3 行
. . 正在导出表 T2_TB导出了 4 行
. . 正在导出表 T3_LOB导出了 1 行
. . 正在导出表 T4_PAR
. . 正在导出分区 ID11导出了 0 行
. . 正在导出分区 ID22导出了 0 行
. 正在导出同义词
. 正在导出视图
. 正在导出存储过程
. 正在导出运算符
. 正在导出引用完整性约束条件
. 正在导出触发器
. 正在导出索引类型
. 正在导出位图, 功能性索引和可扩展索引
. 正在导出后期表活动
. 正在导出实体化视图
. 正在导出快照日志
. 正在导出作业队列
. 正在导出刷新组和子组
. 正在导出维
. 正在导出 post-schema 过程对象和操作
. 正在导出统计信息
成功终止导出, 没有出现警告。
5.imp用户ecc_test2
C:\Users\Atao>imp ecc_test2/edd@dupt file=c:\ecc_test.dmp full=y
Import: Release 10.2.0.1.0 - Production on 星期五 7月 17 18:57:39 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 ECC_TEST1 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 ECC_TEST1 的对象导入到 ECC_TEST2
. . 正在导入表 "T1_NOTB"导入了 3 行
. . 正在导入表 "T2_TB"导入了 4 行
IMP-00017: 由于 ORACLE 错误 959, 以下语句失败:
"CREATE TABLE "T3_LOB" ("ID" VARCHAR2(1), "ID_LOB" BLOB) PCTFREE 10 PCTUSED"
" 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROU"
"PS 1 BUFFER_POOL DEFAULT) TABLESPACE "TEST1" LOGGING NOCOMPRESS LOB ("ID_LO"
"B") STORE AS (TABLESPACE "TEST1" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSI"
"ON 10 NOCACHE LOGGING STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 "
"BUFFER_POOL DEFAULT))"
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: tablespace 'TEST1' does not exist
IMP-00017: 由于 ORACLE 错误 959, 以下语句失败:
"CREATE TABLE "T4_PAR" ("ID" NUMBER, "ID2" NUMBER) PCTFREE 10 PCTUSED 40 IN"
"ITRANS 1 MAXTRANS 255 TABLESPACE "TEST1" LOGGING PARTITION BY RANGE ("ID" )"
" (PARTITION "ID11" VALUES LESS THAN (2) PCTFREE 10 PCTUSED 40 INITRANS 1 "
"MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POO"
"L DEFAULT) TABLESPACE "TEST1" LOGGING NOCOMPRESS, PARTITION "ID22" VALUES L"
"ESS THAN (4) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL"
" 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TEST1"
"" LOGGING NOCOMPRESS )"
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: tablespace 'TEST1' does not exist
成功终止导入, 但出现警告。
SQL> select table_name, tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T2_TB TEST2
T1_NOTB TEST2
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9252210/viewspace-609529/ ,如需转载,请注明出处,否则将追究法律责任。