早上单位人力资源系统需要和OA系统单点登录,人力系统数据同步OA,OA创建了张临时表,由人力系统主动同步数据,过程中出现了一系列问题:
1、首先人力系统直接粗暴上来创建dblink灌数据(oa数据库ip端口不方便展示,汉字代替)
create database link rs
connect to xxx
IDENTIFIED by "abdccccc"
using 'jdbc:oracle:thin:@oa数据库ip:端口/数据库用户';
INSERT into oa表@rs (xm,sjh,sfzh) select A0101 as xm,A0148 as sjh,A0177 as sfzh from UsrA01;
commit;
drop database link rs;
得到的结果是:去oa查询表数据是空的,但是在人力库查到数据了
排查问题吧:
1、查看人力这边创建dblink权限,为空,也就是查询不出数据
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
2、执行付权
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to 人力数据库用户;
3、再执行前面的create database link ,执行后,加上数据库连接访问oa的表,报错ora-12154,此报错截图暂时就放了
4、百度看了一段乱七八糟的,最后换种创建数据库连的方式解决
create database link 创建的dblink名字
connect to 需要访问的用户 identified by “密码”
using ‘(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 需要访问的数据库IP地址)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 服务名)))’;
5、表字段出于安全考虑此处调整了一下,最终搞定(对了,使用数据库直接用@数据库链名)
INSERT into OA表@RS (xm,sjh,sfzh)
select aa,bb,cc from 人力表;