场景:某日应测试要求从生产导出一批数据用于测试,单个表多在1G以上,为此专门在测试环境新建了表空间和测试用户,预留了足够的空间。可是没想到imp时老提示表空间不够,通过表空间查询语句默认表空间利用率不足1%,最终突然想到虽然导入时指定了fromuser\touser,但是表空间未必会指定到默认的表空间,上网查了下果然如此。
机器环境:P550小型机\ORACLE10G
此前操作步骤:
--建立LV
mklv -y TEST_DAT -T O -w n -s n -r n oradatavg 80
--权限设置
chown oracle:dba /dev/rTEST_DAT
chmod 777 /dev/TEST_DAT
--SQLPLUS下建立表空间
create tablespace T_TEST datafile '/dev/rTEST_DAT' size 20000M;
--SQLPLUS下建立用户
create user test identified by test default tablespace TEST_DAT TEMPORARY TABLESPACE TEMP;
grant dba to test;
--CMD下导入数据
C:\Documents and Settings\ad>imp test/test@apple file=c:\tmp_20101117.dmp fromuser=dev touser=test
Import: Release 10.2.0.1.0 - Production on 星期五 11月 19 13:10:20 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Produc
tion
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 DEV 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 DEV 的对象导入到 TEST
IMP-00017: 由于 ORACLE 错误 1659, 以下语句失败:
"CREATE TABLE "CONTROL" ("ID" NUMBER NOT NULL ENABLE, "MSG_ID" V"
"ARCHAR2(1000), "CONTENT" CLOB, "MSG_TYPE" VARCHAR2(50), "STATE" VARCHAR2(4)"
", "ERR_CODE" VARCHAR2(255), "ERR_MSG" VARCHAR2(255), "ERR_TRACE" CLOB, "ERR"
"_DATE" DATE, "MODI_DATE" DATE, "ARCHIVE_DATE" DATE, "DELETED_FLAG" CHAR(1),"
" "TRY_TIMES" NUMBER, "CREATE_DATE" DATE, "SEND_DATE" DATE, "TARGET" VARCHAR"
"2(50)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 98146"
"7136 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "IN_ADCP"
"HC_DATA" LOGGING NOCOMPRESS LOB ("CONTENT") STORE AS (TABLESPACE "USERS" E"
"NABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE LOGGING STORAGE(INIT"
"IAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)) LOB ("ERR_TRA"
"CE") STORE AS (TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERS"
"ION 10 NOCACHE LOGGING STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1"
" BUFFER_POOL DEFAULT))"
IMP-00003: 遇到 ORACLE 错误 1659
ORA-01659: unable to allocate MINEXTENTS beyond 41 in tablespace TEST
成功终止导入, 但出现警告。
---猛然发现错误提示中有“unable to allocate MINEXTENTS beyond 41 in tablespace TEST”,
---这个tablespace不是之前我新建的表空间,而是此前测试环境的一个表空间,而这个表空间利用率已经达到99%.
---接下来大家都知道了,扩之前存在的表空间
mklv -y test_add -T O -w n -s n -r n oradatavg 40
chown oracle:dba /dev/rtest_add
chmod 777 /dev/rtest_add
---SQLPLUS下执行如下命令
alter tablespace TEST add datafile '/dev/rtest_add' size 1000M;
---扩表空间后再次执行命令成功
C:\Documents and Settings\ad>imp test/test@apple file=c:\tmp_20101117.dmp fromuser=dev touser=test
Import: Release 10.2.0.1.0 - Production on 星期五 11月 19 13:25:44 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Produc
tion
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
经由常规路径由 EXPORT:V10.02.01 创建的导出文件
警告: 这些对象由 DEV 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 DEV 的对象导入到 TEST
. . 正在导入表 "CONTROL"
....................
导入了 203333 行
成功终止导入, 没有出现警告。
C:\Documents and Settings\ad>