一直以来,我都认为只要指定用户的默认表空间,向该用户导入数据时,会自动进入到默认表空间。后来发现从 System 导出的 dmp 文件在导入时,即使指定新用户的默认表空间,还是要往 System 表空间中导数据。
上网搜了一下,还是有解决方法的,常见的方法如下:
SQL> create user myhuang identified by myhuang default tablespace myhuang;
SQL> grant resource,connect to myhuang;
SQL> grant dba to myhuang;// 赋 DBA 权限
SQL> revoke unlimited tablespace from myhuang;// 撤销此权限
SQL> alter user myhuang quota 0 on system;// 将用户在 System 表空间的配额置为 0
SQL> alter user myhuang quota unlimited on myhuang;// 设置在用户在 myhuang 表空间配额不受限。
经过上述设置后,就可以用 imp 导入数据,数据将会进入指定的 myhuang 表空间:
C:\Documents and Settings\myhuang>imp system/123456@vdb fromuser=lnxh tous
er=myhuang file=G:\myhuang\lnxh.dmp ignore=y grants=n
顺便说两个小问题:
( 1 ) IMP-00003: 遇到 ORACLE 错误 1658
ORA-01658: 无法为表空间 MYHUANG 中的段创建 INITIAL 区
通常这个问题可以通过 Resize 增加表空间数据文件大小来解决。
( 2 )删除表空间
SQL> drop tablespace myhuang including contents and datafiles;
在 10g 中实验, drop 表空间之后,仍然需要手动去删除数据文件。