SQL> CONN YANGTK/YANGTK@YTK102已连接。
SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMP
USERS
EXAMPLE
YANGTK
LOB_SPACE
已选择8行。
这时,如果直接导入也会报错:
E:>imp yangtk/yangtk@ytk102 file=t_partition.dmp tables=t_partition
Import: Release 10.2.0.1.0 - Production on 星期日 3月 2 17:17:44 2008
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:V09.02.00 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 TEST 的对象导入到 YANGTK
. 正在将 TEST 的对象导入到 YANGTK
IMP-00017: 由于 ORACLE 错误 959, 以下语句失败:
"CREATE TABLE "T_PARTITION" ("ID" NUMBER, "NAME" VARCHAR2(30)) PCTFREE 10 P"
"CTUSED 40 INITRANS 1 MAXTRANS 255 TABLESPACE "SYSTEM" LOGGING PARTITION BY "
"RANGE ("ID" ) (PARTITION "P1" VALUES LESS THAN (100) PCTFREE 10 PCTUSED 4"
"0 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS"
" 1) TABLESPACE "TEST" LOGGING NOCOMPRESS, PARTITION "P2" VALUES LESS THAN ("
"200) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 F"
"REELISTS 1 FREELIST GROUPS 1) TABLESPACE "TEST" LOGGING NOCOMPRESS )"
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: 表空间 'TEST' 不存在成功终止导入, 但出现警告。
但是由于10g提供了改变表空间名称的SQL,可以通过下面的方式导入分区表:
IXDBA.NET技术社区
SQL> ALTER TABLESPACE YANGTK RENAME TO TEST;
表空间已更改。
下面就可以顺利导入:
E:>imp yangtk/yangtk@ytk102 file=t_partition.dmp tables=t_partition
Import: Release 10.2.0.1.0 - Production on 星期日 3月 2 17:11:55 2008
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:V09.02.00 创建的导出文件
警告: 这些对象由 TEST 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 TEST 的对象导入到 YANGTK
. 正在将 TEST 的对象导入到 YANGTK
. . 正在导入分区 "T_PARTITION":"P1"导入了 0 行
. . 正在导入分区 "T_PARTITION":"P2"导入了 0 行成功终止导入, 没有出现警告。
导入后可以通过修改表空间名称的方法将表空间名称修改会原来的名称:
SQL> ALTER TABLESPACE TEST RENAME TO YANGTK;
表空间已更改。
通过这种方法的导入,可以解决包含多个段的表,无法通过正常方式进行表空间转换的问题。但是上面的方法只是提供了在不提前建表的方式下导入的一种可行性。
且不说修改表空间名称对于一个对外提供服务的数据库系统的影响,就是修改表空间这个动作本身,就未必比提前建表的工作量小多少。
考虑几种情况,如果表中包含多个分区,每个分区所在表空间不同,希望通过迁移将所有的分区都放到目标的表空间中。那么如果目标数据库中,只有目标表空间存在,且分区表每个分区对应的表空间都不存在的话,只能通过修改一次表空间名称,导入一个分区,再次修改表空间名称,再导入一个分区的方法来实现,效率和工作量都比较大。