ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 把分区表导入不同的表空间

把分区表导入不同的表空间

原创 Linux操作系统 作者:jason_wang2002 时间:2009-03-27 09:20:20 0 删除 编辑

导入一般数据,请参考
http://space.itpub.net/8745319/viewspace-580297

昨天我写了怎样把DUMP数据导入到不同的表空间,但对于分区表和分区索引,这个方法不适用。那怎样把分区表和分区索引导入不同的表空间呢,那就要用到分步导入的方法

1.根据http://space.itpub.net/8745319/viewspace-580297方法导入数据到指定的表空间,但注意这里先不要导入数据,使用rows=n这个参数先导入对象的结构。这时候,除了和分区表、分区索引、与分区相关的对象没有导入外,其他对象的结构都可以导入到指定表空间

2.再临时赋予unlimited tablespace权限给用户,然后再次导入数据结构,使用rows=n参数。这时候分区表、分区索引、与分区相关的对象将会导入到相同的表结构中

3.再把这些分区表和分区索引移到指定的表空间,使用以下命令
 alter table move partition tablespace ;
 alter index rebuild tablespace ;
 
4.再把数据导入。在导入时要使用ignore=y来忽略创建对象结构的错误

5.最后检查导入的对象是否有效,赋予相应权限,等等。


下面使用例子来说明操作过程


创建相应表空间和用户,赋予相关权限

SQL> conn /as sysdba
Connected.

SQL> create tablespace mtsbaktestd datafile '/data2/oracle/oradata/mtsdb/mtsbaktestd01.dbf' size 5120m
  2  segment space management auto;

Tablespace created.

SQL> alter tablespace mtsbaktestd add datafile '/data2/oracle/oradata/mtsdb/mtsbaktestd02.dbf' size 5120m;

Tablespace altered.

SQL> create user mtsbaktest
  2  identified by mtsbaktest
  3  default tablespace mtsbaktestd;

User created.

SQL> grant dba to mtsbaktest;

Grant succeeded.

SQL> revoke unlimited tablespace from mtsbaktest;

Revoke succeeded.

SQL> alter user mtstest quota unlimited on mtsbaktestd;

User altered.


导出MTSBAK的数据,并导入到MTSBAKTEST用户

exp system wner=mtsbak compress=y file=mtsbak20090326.dmp statistics=none

imp system fromuser=mtsbak touser=mtsbaktest file=mtsbak20090326.dmp rows=n

导入时使用了rows=n参数,除了和分区相关的结构,其他数据结构将会被导入到MTSBAKTESTD表空间


赋予MTSBAKTEST用户unlimited tablespace系统权限,再次导入数据结构

SQL> conn /as sysdba
Connected.
SQL> grant unlimited tablespace to mtsbaktest;

Grant succeeded.

imp system fromuser=mtsbak touser=mtsbaktest file=mtsbak20090326.dmp rows=n

导入后,分区表、分区索引将会导入到相同的表空间

然后登录MTSBAKTEST用户,把分区表、分区索引移到指定表空间(这部分略)。
可以使用SQL命令来自动批量的生成迁移命令,例如

SQL> select 'alter table '||segment_name||' move partition '||partition_name||' tablespace mtsbaktestd;'
from user_segments
where tablespace_name <> 'MTSBAKTESTD' and segment_type = 'TABLE PARTITION';


导入数据

imp system fromuser=mtsbak touser=mtsbaktest ignore=y file=mtsbak20090326.dmp


最后收回DBA、unlimited tablespace权限,赋予相应权限,检查对象状态,等等

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8745319/viewspace-580309/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-03-05

  • 博文量
    35
  • 访问量
    41593