把表导入指定表空的方法

    以下所说是的操作系统环境是linux系统,数据库是oracle 9i。

    由于以前部署系统的不小心,把系统的数据库表建在了一个不太合适的表空上。现在升级系统想把数据库表重新建合适的表空上。于是涉及到把表导出来,再导入到指定的表空上这一操作,上网查了一下,查到如下方法,经过试验,发现不太好用。

 

-------------------------------网上查到的方法   begin -----------------------------------------------------

将数据导出到指定表空间

1、 导出数据,最好指定导出某个用户的数据
exp userid/pwd@dbsid file=xxx.dmp owner=(xxx ,xxx)

2、 创建表空间
create tablespace XXXX
nologging
datafile '+DATA/webdb/datafile/XXX.dbf'
size 1024m
autoextend on
next 100m
maxsize 30810m
extent management local
解释:
nologging 表示不用创建日志,由于新创建的表空间,无需日志
+DATA/webdb/datafile/XXX.dbf' 这个是存储设备路径

3、 授权用户使用该表空间
alter user XXX quota unlimited on XXXX;

4、 修改oracle导出文件xxx.dmp中的表空间   (问题出在这一步上,修改之后导入的表不全)
vim xxx.dmp
%s/TABLESPACE "XXX"/XXXX/g

5、导入
imp xxx/xxx@dbsid fromuser=xxx touser=xxx

 

-----------------------------网上查到的方法  end---------------------------------------------------------------

 

 

后来想到,会不会是因为有数据在dmp文件里,用vi修改后改变了dmp文件的内部结构?试试先把表结构和数据分开导出,再分开导入的方法:

1、导出表结构:

exp myuser/mypass file = mytable.dmp full=n rows=n

2、导表里的数据:

exp myuser/mypass file = mydata.dmp full=n

3、修改mytable.dmp里关于旧表空的字符串,我这里的是TS_RSGL,也就是表是建在TS_RSGL这表空上的,现在我想把表导入在TS_XMGL这个表空上,用vi打开mytable.dmp后,用下面的命令:

%s/TS_RSGL/TS_XMGL/gc

 

这个命令在整个文件中把TS_RSGL这个字符串改为TS_XMGL这个字符串,最后的“gc"是每一个字符串在替换前询问是否替换,这样可以把人工把关一下,别把不需要替换的也替换了。修改完成后保存退出。

4、在新机器上导入表结构

imp myuser/mypass file=mytable.dmp full=y ignore=y

5、在新机器上导入数据

imp myusr/mypass file=mydata.dmp full=y ignore=y

 

完成后,检查表、索引、触发器等是否都建在TS_XMGL这个表空上,如果是,导入成功。系统运行测试正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值