❶ 两个oracle数据库之间的数据同步
首先在ORACLE_B上做dblink连接ORACLE_A,然后做个
存储过程
,大致如下:找到table_db
主键
,select
主键
from
table_db@dblink
minus
select
table_db
from
table_db找到差异数据,然后插入到oracle_b,再写个job.定时执行这个存储过程
❷ 如何实现oracle两个数据库之间的同步
为方便完成指定数据表的同步操作,可以采用dblink与merge结合的方法完成。
操作环境:
此数据库服务器ip为192.168.196.76,有center与branch两个库,一般需要将center的表数据同步到branch,center为源库,branch为目标库,具体步骤如下:
1.在源库创建到目标库的dblink
create
database
link
branch
--输入所要创建dblink的名称,自定义
connect
to
dbuser
identified
by
“password”
--设置连接远程数据库的用户名和密码
using
'192.168.196.76/branch';
--指定目标数据库的连接方式,可用tns名称
在创建dblink时,要注意,有时候可能会报用户名和密码错误,但实际上我们所输入的账户信息是正确的,此时就注意将密码的大小写按服务器上所设置的输入,并在账号密码前号加上双引号(服务器版本不同造成的)。
2.成功后验证dblink
select
*
from
tb_bd_action@branch;
--查询创建好的brach库
正常情况下,如果创建dblink成功,可采用该方式访问到远程数据库的表.
3.通过merge语句完成表数据同步
此例中需要将center库中的tb_sys_sqlscripe表同步到branch,简单的语法如下:
merge
into
tb_sys_sqlscripe@branch
b
using
tb_sys_sqlscripe
c
on
(b.pk=c.pk)
--从center将表merge到branch,同步的依据是两个表的pk
when
matched
then
update
set
b.sqlscripe=c.sqlscripe,b.author=c.author
--如果pk值是相同则将指定表的值更新到目标表
when
not
matched
then
--如果pk值不一至,则将源表中的数据整条插入到目标表中
insert
values
(c.pk,
c.fk,
c.createtime,
c.lastmodifytime,c.author,c.mole,c.deleteflag,
c.scripttype);
commit;
--记得merge后必须commit,否则更改未能提交
4.为方便每次需要同步时自动完成同步工作,可将该语句做成存储过程或脚本来定时执行或按要求手动执行,简单说一下创建脚本的方法:
a.创建merge文件夹
b.先将merge语句写完整后,存到merge.sql文件中
c.新建merge.bat文件,编辑后写入以下内容
sqlplus
user/password@serverip/database
@"%cd%\merge.sql"
❸ oracle怎么比较两个数据库
方法一、用PL/SQL DEVELOPER 来比较
1.登陆数据库A.
2.打开TOOLS菜单下的Compare User Objects
3.点Target Session,登陆数据库B
4.执行Compare
5.返回的是所有不同的对象以及更新语句[@more@]方法二、
1、对需要比较的表进行分析(可全表可抽样,自选),否则统计信息不准;
2、通过dba_tab_col_statistics表的column_name字段进行比较
select tz.table_name ,tz.column_name from dba_tab_col_statistics tz
WHERE tz.owner = 'BSS' AND TZ.TABLE_NAME LIKE 'BSS_%'
and (TZ.TABLE_NAME ,TZ.COLUMN_NAME) not in(
select TZT.TABLE_NAME ,TZT.COLUMN_NAME
from dba_tab_col_statistics@tz_bsstzt tzt
WHERE tzt.owner = 'BSS' AND TZT.TABLE_NAME LIKE 'BSS_%')
❹ 两个oracle数据库之间怎么插入表数据,已建立dblink。
如果已有dblink,那么首先要给dblink登录的用户赋插入权限。
grant insert on 表名 to 用户名;
然后在dblink连接的地方执行:
比如表名为test,字段分别为id和name
那么直接执行:
insert into test@远程主机 values (1,'张三');
commit;
注意:commit一定要写,否则插入不成功。