昨天导数据,出现如下问题:
建立用户:create user dvboss_bak identified by passwd default tablespace dvbcetus temporary tablespace temp;
授权:grant resource,connect to dvboss_bak;
grant dba to dvboss_bak;
导入表数据:imp dvboss_bak/passwd file=ow_iptv_bill20071106.dmp fromuser=dvbcetus touser=dvboss_bak;
在导入完成后,发现在指定的用户的表空间下没有增长任何数据。
查看该表导入的实际表空间:select t.table_name, t.tablespace_name from dba_tables t where t.table_name = 'OW_IPTV_BILL';
却发现在dvboss表空间中。突然想起来以前也发生或类似的情况,不过当时是drop原表空间的。但这次不可以了,原表空间还是有用的,而且目前空间已经不足以存放这个表的数据了。所以得从根本上想办法了。网上找了很多资料,发现有一种方法很多人介绍,但却缺乏实际的步骤,让我这个菜鸟不懂怎么做。于是只好自己边找资料边摸索。以下是我具体执行的步骤:
bash[oracle@cetus1:/oracle/dvbossbak/sqlfile]=>sqlplus '/ as sysdba'
SQL*Plus: Release 8.1.7.0.0 - Production on 星期三 11月 14 08:41:15 2007
(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.0.0 - 64bit Production
SQL> drop user dvboss_bak cascade;
drop user dvboss_bak cascade
*
ERROR 位于第 1 行:
ORA-01940: 无法删除当前已连接的用户
SQL> drop user dvboss_bak cascade;
用户已丢弃
SQL> create user dvboss_bak identified by passwd default tablespace dvbcetus temporary tablespace temp;
用户已创建
SQL> grant connect,resource to dvboss_bak;
授权成功。
SQL> grant dba to dvboss_bak;
授权成功。
SQL> revoke unlimited tablespace from dvboss_bak;
撤销成功。
SQL> alter user dvboss_bak quota 0 dvboss;
alter user dvboss_bak quota 0 dvboss
*
ERROR 位于第 1 行:
ORA-00969: 缺少 ON 关键字
SQL> alter user dvboss_bak quota 0 on dvboss;
用户已更改。
SQL> alter user dvboss_bak quota unlimited on dvbcetus;
用户已更改。
SQL> exit
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.0.0 - 64bit Production中断开
bash[oracle@cetus1:/oracle/dvbossbak/sqlfile]=>ls
20071113.out createindex.sql createtbs.sql createuser.sql
bash[oracle@cetus1:/oracle/dvbossbak/sqlfile]=>cd ../dmpfile/
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>ls
20071113.out imp.sh ow_iptv24_20071106.dmp.Z
20071113_2.out iptvbill0610.dmp.Z ow_iptv_bill20071106.dmp
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>ls
20071113.out imp.sh ow_iptv24_20071106.dmp.Z
20071113_2.out iptvbill0610.dmp.Z ow_iptv_bill20071106.dmp
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>imp dvboss_bak/passwd file=ow_iptv_bill20071106.dmp fromuser=dvbcetus touser=dvboss_bak grants=n > 20071114.out 2>&1 &
[1] 24728
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>ps -fe|grep imp
oracle 24731 24681 0 08:47:18 pts/2 0:00 grep imp
oracle 24728 24681 4 08:47:04 pts/2 0:04 imp dvboss_bak/passwd file=ow_iptv_bill20071106.dmp fromuser=dvbcetus touser=dv
bash[oracle@cetus1:/oracle/dvbossbak/dmpfile]=>sqlplus dvboss_bak/passwd
SQL*Plus: Release 8.1.7.0.0 - Production on 星期三 11月 14 08:49:31 2007
(c) Copyright 2000 Oracle Corporation. All rights reserved.
连接到:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - 64bit Production
With the Partitioning option
JServer Release 8.1.7.0.0 - 64bit Production
SQL> set linesize 800
SQL> select * from dba_tables dt where dt.table_name = 'OW_IPTV_BILL';
OWNER TABLE_NAME TABLESPACE_NAME CLUSTER_NAME IOT_NAME PCT_FREE PCT_USED INI_TRANS MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS LOG B NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE CHAIN_CNT AVG_ROW_LEN AVG_SPACE_FREELIST_BLOCKS NUM_FREELIST_BLOCKS DEGREE INSTANCES CACHE TABLE_LO SAMPLE_SIZE LAST_ANALY PAR IOT_TYPE T S NES BUFFER_ ROW_MOVE GLO USE DURATION SKIP_COR MON CLUSTER_OWNER
------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------- ---------- ---------- ---------- -------------- ----------- ----------- ----------- ------------ ---------- --------------- --- - ---------- ---------- ------------ ---------- ---------- ----------- ------------------------- ------------------- --------------------- --------------------- ----------- -------- ----------- ---------- --- ------------ - - --- ------- -------- --- --- --------------- -------- --- ------------------------------
DVBOSS_BAK OW_IPTV_BILL DVBCETUS 10 40 1 255 65536 251682816 1 249 50 1 1 YES N 1 1 N ENABLED NO N N NO DEFAULT DISABLED NO NO DISABLED NO
可以发现,表已经存在于dvbcetus表空间中。
这样就从根本上解决了对已经存在的表空间的问题了。
但是问题还没有就此停止,由于表实在大(15G),想要不出个问题真的是很难。
导入是正常导入到指定的表空间了,但是由于参数设置上的问题。导了几次都是到
8G或4G的时候imp就断了。提示的错误是:
我晕啊,尝试修改表空间的参数:
initextents 100M; --alter tablespace dvbcetus default storage(initextents 100)
nextextents 100M; --alter tablespace dvbcetus default storage(nextextents 100)
maxextents 250; --alter tablespace dvbcetus default storage(maxextents 250)
pctincrease 0 --alter tablespace dvbcetus default storage(pctincrease 0)
再次导入,数据增长很快,到晚上12点的时候搞定了。哎,好了。
select 一下也正常。
该建索引和约束了!问题再次出现。速度很慢。=:(