如何把大部分表中的数据迁移到另一个数据库中

需求描述:目前远程服务器有两个数据库AA和BB,两个数据库的数据库版本都为10.2.1.0.1,两个数据库中的用户不一样,但数据库中的表结构都是一样的,数据库AA表中的数据比数据库BB表中的数据多很多,现在需要把数据库AA中几十张表的数据迁移到数据库BB的表中。如果在数据库AA中存在的数据,但在数据库BB中没有的数据,则需要把这些数据导入到数据库BB中。

比如:数据库AA 的数据库名称为AA,所有的表都在A_UserName用户下,改用户的密码为A_Password;
           数据库BB 的数据库名称为BB,所有的表都在B_UserName用户下,改用户的密码为B_Password;

假设本机是一台windows系统的PC机,装有Oracle数据库10.2.1.0.1的版本(服务器版或客户端版都可以),在该系统已经配置好数据库的监听器($ORACLE_HOME\NETWORK\ADMIN\tnsnames.ora).
下面导出、导入两个表为例子(当然几十个表也是没有问题的)


1 导出数据库AA中两表的所有数据:


D:\>expA_UserName/A_Password@AAtables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET) file=20081029  log=20081029.log


Export: Release 10.2.0.1.0 - Production on 星期三 10月 29 16:11:20 2008


Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集


即将导出指定的表通过常规路径...
. . 正在导出表                     DH_REP_WORK导出了           1 行
. . 正在导出表           DRILL_ADM_YEAR_TARGET导出了          40 行
成功终止导出, 没有出现警告。


从上面可以看出来成功导出来远程数据库AA中两表的数据。


2  导入到数据库BB中(请先看下面的错误原因)


D:\>impB_UserName/B_Password@BBtables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET)  file=20081029  log=20081029imp.log


Import: Release 10.2.0.1.0 - Production on 星期三 10月 29 16:13:33 2008


Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Produc
tion
With the Partitioning, OLAP and Data Mining options


经由常规路径由 EXPORT:V10.02.01 创建的导出文件
IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件
IMP-00000: 未成功终止导入


不能导入原来是B_UserName用户没有具有DBA角色的权限。


3、登陆到数据库BB中,用超级用户sys给B_UserName用户授权

SQL> grant dba to B_UserName;

Grant succeeded.

4 、现在重新导入到数据库BB中,为了减少日志的错误使用ignore=yes(忽略错误),rows=y是导入表中的数据,grants=no表示不导入授权(假如在数据库AA中表DH_REP_WORK授权给了test用户,但数据库BB中没有test用户,则不用执行授权给test用户)。
D:\>imp   B_UserName/B_Password@BB   tables=(DH_REP_WORK,DRILL_ADM_YEAR_TARGET)   rows=y ignore=yes  grants=no  file=20081029   log=20081029Imp.log

执行上面的语句,可能会有些错误提示,一般是在数据库BB中的已经存在该数据,由于主键的唯一性,所以不能插入。但数据库AA中存在、但数据库BB中不存在的数据就可以顺利的插入到数据库BB中了。



5、登陆到数据库BB中,用超级用户sys回收B_UserName用户dba的角色:

SQL> revoke dba from B_UserName;


Revoke succeeded.

转载自:http://space.itpub.net/12778571/viewspace-481835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值