将表导入不同表空间的方法 (收藏)

将表导入不同表空间的方法,适用于下面情况:
1.  相同用户,但表空间不同
2.  不同用户,不同表空间

具体步骤如下:
1.  导出dmp文件备份。
2.  如果需要导入到不同用户下,则需要先创建用户。
3.  创建表,脚本可以直接从dmp文件中提取或者通过其它方法提取。

Imp xxx/xxx file=xxx.dmp fromuser=xxx touser=xxx indexfile=xxx.sql
涉及外键约束的表创建将不成功,这时应该分离出主键外键约束来,可以这样提取建表脚本:
Imp xxx/xxx file=xxx.dmp fromuser=xxx touser=xxx indexes=n constraints=n indexfile=xxx.sql

如果是用户相同,则
通过grep –v ‘rows’ xxx.sql | grep –v ‘CONNECT ‘ | sed 's/REM  //g’ | sed 's/原表空间名/新表空间名/g’ > ok.sql
得到ok.sql脚本执行即可。

如果是不同用户,则
通过grep –v ‘rows’ xxx.sql | grep –v ‘CONNECT ‘ | sed 's/REM  //g’ | sed 's/原用户/新用户/g’ | sed 's/原表空间名/新表空间名/g’ > ok.sql
得到ok.sql脚本执行即可。

SQL> conn xxx/xxx
SQL> @ok.sql
SQL> select table_name,tablespace_name from user_tables;---查看表所在表空间

4.  导入表数据

必须加上ignore=y参数,否则导入失败。
Imp xxx/xxx file=xxx.dmp fromuser=xxx touser=xxx ignore=y
通过ignore=y,数据会被正确导入。
使用ignore=n参数时,即它的默认值时,如果一个表创建错误,import将会越过它执行下一个表。当使用ignore=y参数时,表示即使表不能被创建,import也会尽力导入这个表的数据。

5.  检查表是否正确导入

SQL> conn xxx/xxx
SQL> select table_name,tablespace_name from user_tables;---查看表所在表空间
SQL> select count(*) from 某个表名;
 
说明:对于表导入不同表空间,网上还有其它的方法,比如下面网址:
http://www.eygle.com/archives/2005/04/ecineeeeiaeioae.html
 
但该方法有个局限:如果是带有大字段的表,比如blob字段类型的,将不能变更表空间。
 
测试的例子请查看:附件中的《20070115-imp-success(本文提供的方法).log》和《20070115-imp-fail(网上流行的方法).log》
小结:如果表中含有clob这样的字段,建议用本文提供的方法来转移表所在的表空间。
http://orax.blog.sohu.com/60795298.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年11月    »
123
45678910
11121314151617
18192021222324
252627282930
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2