A库 需要访问 B库 进行相关表的数据查询
前提 A库服务器能 ping通B库服务器
一:查看已创建的DBlink
SELECT * FROM dba_objects WHERE object_type = 'DATABASE LINK';
SELECT * FROM all_db_links for update;
二:DBlink创建
--1.查看当前用户是否具有创建DBlink的权限
select * from user_sys_privs;
--如果当前用户没有创建DBlink的权限,给当前用户赋予权限:
--即对应用户 没有 CREATE PUBLIC DATABASE LINK ;
--CREATE DATABASE LINK
grant create public database link to DAIRY;
grant create database link to DAIRY;
--再次执行上述查询语句,当前用户已经有创建DBlink的权限。
--2.sql语句创建DBLink
create public database link TESTLINK1 connect to test1 identified by "123456" USING 'ORCL1521';
--方式1.
create public database link TESTLINK connect to test1 identified by "test2019" USING 'testdb';
--方式2.
create database link TESTLINK connect to test1 identified by "test2019" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 193.16.0.21)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = testdb)))';
--创建错误可以删除DBLink
DROP PUBLIC DATABASE LINK TESTLINK;
--测试是否能够创建成功
select sysdate from dual@TESTLINK;--返回正常时间则代表成功
--如果加表名提示 ora00942/ora02063
select * from testTable1@TESTLINK;
--查询提示ora00942/ora02063 则代表 B库 test用户没有testTable1 表的查询权限 或者是testTable1表前要加t.
--需要在B库给用户test1 设置权限
--3.使用别名如果A库中没有testTable1 则可以
create synonym testTable1 FOR t.testTable1@TESTLINK;--需要加T.时
--或
create synonym testTable1 FOR testTable1@TESTLINK;
--然后在A库就可以用testTable1 来查询
select * from testTable1;