Oracle 两个数据库之间的数据迁移

AIDBOPS 2011-08-28 08:49:09
我有两个数据库A和B,A和B的结构一样(只是B中部分表在A的基础上新增了一些字段),其他的表名、字段名、主外键关系等等都是一样的。A和B的部分表中都有Sequence序列,现在要把A(字段少)中的数据全部移植到B(字段多)中,该怎么移植呢?试了很多方法,都没成功,请高手指点。
...全文
569 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
AIDBOPS 2011-08-30
  • 打赏
  • 举报
回复
有没有高手解答,我再加分(虽然分不多)!
justdoitman 2011-08-30
  • 打赏
  • 举报
回复
用dblink吧。如果这一百多张表的相应结构都不同的话,貌似不知道有啥好用的工具。如果一百多张表只是表明不同的话,那可能会有简便的方法,等高人解答了。
zengjc 2011-08-30
  • 打赏
  • 举报
回复
也可以用copy命令来跑,效率也不错

给你个例子,在cmd窗口中执行就行了

sqlplus username/pwd@DB_B
set arraysize 100
set copycommit 100
copy from username/pwd@DB_A append tab_a using select * from tab_A;
copy from username/pwd@DB_A append tab_B using select * from tab_B;
--…………
swordadsl 2011-08-29
  • 打赏
  • 举报
回复
-- 配置远程连接服务名 tnsnames.ora
ORC_T =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521)) ## 127.0.0.0 远程服务器IP
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL) ## ORCL 远程服务器 SID
)
)

-- 在A库中建 DBLINK
-- DROP DATABASE LINK ORC_T;
CREATE DATABASE
LINK ORC_DBLINK CONNECT TO U_USER -- U_USER 远程连接的用户名
IDENTIFIED BY "U_PWD" USING 'ORC_T' -- U_PWD 远程连接的密码,ORC_T 上面配置的服务名

CREATE TABLE T_TMP (TABLE_NAME VARCHAR2(50),COLUMN_NAME VARCHAR2(4000));

DECLARE
CURSOR C_TAB IS
SELECT A.TABLE_NAME,COLUMN_NAME
FROM USER_TABLES A
JOIN USER_COL_COMMENTS B ON B.TABLE_NAME=A.TABLE_NAME
WHERE EXISTS (SELECT 1 FROM USER_TABLES@ORC_DBLINK WHERE TABLE_NAME=A.TABLE_NAME)
ORDER BY 1,2;
V_TABLE_NAME VARCHAR2(50);
V_COLUMN_NAME VARCHAR2(50);
V_NUM VARCHAR2(50);
BEGIN
OPEN C_TAB;
LOOP
FETCH C_TAB INTO V_TABLE_NAME,V_COLUMN_NAME;
EXIT WHEN C_TAB%NOTFOUND;
SELECT COUNT(1) INTO V_NUM FROM T_TMP WHERE TABLE_NAME=V_TABLE_NAME;
IF V_NUM=0 THEN
INSERT INTO T_TMP(TABLE_NAME,COLUMN_NAME) VALUES (V_TABLE_NAME,V_COLUMN_NAME);
COMMIT;
ELSE
UPDATE T_TMP SET COLUMN_NAME=COLUMN_NAME||','||V_COLUMN_NAME WHERE TABLE_NAME=V_TABLE_NAME;
COMMIT;
END IF;
END LOOP;
CLOSE C_TAB;
END;

-- 生成插入脚本
SELECT 'INSERT INTO '||TABLE_NAME||' ('||COLUMN_NAME||') SELECT '||COLUMN_NAME||' FROM '||TABLE_NAME||'@ORC_DBLINK'
FROM T_TMP;
coolkisses 2011-08-29
  • 打赏
  • 举报
回复
只需要DBA协助
1) 查出需要插数的表名(A 与 B = count(字段) group by 表名 对比一下可得)
2) 建立DBLINK(A 或 B 皆可)
以 A 建DBLINK为例
在 B 中执行
              
insert into 表名(字段名)
select 字段名 from 表名@A.DBLINK;
AIDBOPS 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coolkisses 的回复:]

看上面的描述,只是几张表的数据迁移。
如果是这样的话,可以通过DBLINK,直接进行数据插入(A -> B)。

当然,要先区分出,表结构不同的 LIST
[/Quote]
不是就几张表,有100多张表呢!能不能说详细点DBLink,谢谢
coolkisses 2011-08-28
  • 打赏
  • 举报
回复
看上面的描述,只是几张表的数据迁移。
如果是这样的话,可以通过DBLINK,直接进行数据插入(A -> B)。

当然,要先区分出,表结构不同的 LIST
AIDBOPS 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rakiycl 的回复:]

你可以用PL/SQL工具的,对比数据库来进行,判断要增加哪个字段和相关的对像。
[/Quote]
能不能说详细点,谢谢
hanks_gao 2011-08-28
  • 打赏
  • 举报
回复
找出A和B中有字段差异的表,并记录他们之间的差异(在Excel里面统计都可以)!
然后把A复制一份到B,再把差异在B中建立起来!
数据库的复制可以请你们的DBA帮忙。差异的部分生成脚本SQL,直接在B里面执行!
不要悲剧人生 2011-08-28
  • 打赏
  • 举报
回复
你可以用PL/SQL工具的,对比数据库来进行,判断要增加哪个字段和相关的对像。
Alessandro_ 2011-08-28
  • 打赏
  • 举报
回复
DBlink可以,但是开始也要分析出2表的关系,写个脚本执行。
雨天要吃饭 2011-08-28
  • 打赏
  • 举报
回复
学习dblink呢

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧