我从一个数据库中导出来的dmp文件,它的表空间是user,现在我想导入到另一个数据库中去,在那个数据库中我建立了一个aaa的用户,使用的是aaa 的表空间。可用aaa用户导入dmp文件后发现那些表使用的仍然是user表空间,我该怎么办呢?能在导入的时候就指定为aaa的表空间吗?
改变数据库表的表空间的方法有没有比较简单的方法?不用卸载表,然后修改sql语句那么麻烦的动作???
方法其实很简单,如下:
1、先不要授予你这个新的aaa这个用户太高的权限,比如dba的角色及quota unlimited tablespace这个系统权限。
2、只授予aaa在aaa表空间的unlimited权限,在user表空间没使用权限
sql>alter user aaa quota unlimited on aaa;
sql>alter user aaa quota 0 on user;
3、在你做imp时指ignore=y选项就可以了,这样imp进来的表就使用aaa的默认表空间了。
当然有办法改变一个表存储表空间,使用以下命令即可:
alter table table_name move tablespace tablespace_name;
使用命令得到移动表空间的语句
select 'alter table '||table_name||' move tablespace aaa;' from all_tables where tablespace_name= 'user' and owner= 'aaa';
然后执行生成的语句即可
当然,一般还需要在新的表空间中重建索引
select 'alter index '||index_name ||' rebuild tablespace aaa_index;' from dba_indexs where tablespace_name= 'user' and owner= 'aaa';
然后执行生成的语句即可
改变数据库表的表空间的方法有没有比较简单的方法?不用卸载表,然后修改sql语句那么麻烦的动作???
方法其实很简单,如下:
1、先不要授予你这个新的aaa这个用户太高的权限,比如dba的角色及quota unlimited tablespace这个系统权限。
2、只授予aaa在aaa表空间的unlimited权限,在user表空间没使用权限
sql>alter user aaa quota unlimited on aaa;
sql>alter user aaa quota 0 on user;
3、在你做imp时指ignore=y选项就可以了,这样imp进来的表就使用aaa的默认表空间了。
当然有办法改变一个表存储表空间,使用以下命令即可:
alter table table_name move tablespace tablespace_name;
使用命令得到移动表空间的语句
select 'alter table '||table_name||' move tablespace aaa;' from all_tables where tablespace_name= 'user' and owner= 'aaa';
然后执行生成的语句即可
当然,一般还需要在新的表空间中重建索引
select 'alter index '||index_name ||' rebuild tablespace aaa_index;' from dba_indexs where tablespace_name= 'user' and owner= 'aaa';
然后执行生成的语句即可