blue的gravatar头像
blue 2014-08-06 09:59:47

求教oracle导入dmp文件问题

导入dmp时,现在需要指定导入的部分表  如 以user开头的表。网上查资料 只有imp username/password@SID file=XXX.dmp fromuser=XXX touser=XXX tables=(XXX,XXX)这样的话得把每个表名都写出来。

有没有办法可以模糊的制定导入哪些表。如 tables like user*.在线等大牛指教啊

所有回答列表(5)
遇见,的gravatar头像
遇见,  LV36 2014年8月7日

以前和你遇到一样的情况 ,  但是很可惜他不支持like 因为不是SQL语句。

我的解决方案是

1. 现在你的数据库中根据系统表获取到你想要的表并以逗号隔开,实现如下:

SELECT WM_CONCAT(T.TABLE_NAME) FROM ALL_ALL_TABLES T WHERE T.TABLESPACE_NAME = '你要导出的表空间名(要大写)' AND T.TABLE_NAME LIKE 'USER%';

2. 这样你就获取了所有以USER开头的表名以逗号隔开的字符串了,  然后把这个字符串粘贴到你的TABLES()里就可以了

系统表平时还是很有作用的。。 ^ ^

噢 还有两点要注意:

1. 如果你的查出来的表特别多, wm_concat会出错,因为这个函数的返回值是VARCHAR2,最大到4000, 如果太多可以用网上有自定义字符串连接函数f_link ,那个函数返回值是CLOB,可以存到30000多。

2. 你如果表名字符串特别长的话你的CMD命令就会自动换行导致直接执行, 你可以在UE编辑器中处理一下命令后再粘贴到命令框中。

评论(1) 最佳答案
zakari的gravatar头像
zakari  LV12 2014年8月6日

你说的这种方式从来没听说过,应该是没有的。

marche的gravatar头像
marche  LV3 2014年8月6日

你说的那种没听说过~~!都是中规中矩的按照命令来的~~!还有点比较好奇的是 ,既然你导出的表比你导入的表多为什么不直接覆盖呢,还要单独选一些表导入~!

marche的gravatar头像
marche  LV3 2014年8月6日

你说的那种没听说过~~!都是中规中矩的按照命令来的~~!还有点比较好奇的是 ,既然你导出的表比你导入的表多为什么不直接覆盖呢,还要单独选一些表导入~!

已注销用户的gravatar头像
已注销用户  LV34 2014年8月6日

为什么你不先把表导出成sql文件把需要的表 用sql的形式去导入呢? 指定表导入还真是第一次听说~

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友