创建dblink总结:
两个库/表空间(在不在同一台服务器上都一样)其中databaseA库想访问databaseB库的数据信息时,就需要创建dblink
第一步:先得用数据库管理员身份给databaseA的用户赋予创建dblink的权限:
grant create database link to test;
grant create database link to user ; --只有user用户能使用的dblink
grant create public database link to user ;--所有用户都可以使用的dblink
grant drop public database link to user; --删除dblink的权限
第二步:在databaseA数据库执行以下语句
create database link dblinkName connect to databaseB_user identified by passward using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) )';
以上几处注意点:
1. dblinkName:dblink的名字
2. databaseB_user:被访问库的用户名
3. passward:被访问库的用户名对应的密码
4. '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =(SERVICE_NAME = ORCL)))'
这是一段配置,内容是:HOST = 127.0.0.1 远程数据库的地址(我是link的本地的另一个表空间),PORT = 1521 远程数据库的端口号,一般默认都是1521
SERVICE_NAME = ORCL 是远程数据库的服务号
执行成功后可以使用 select * from baseB_table1@dblinkName; 可以查询出数据(baseB_table1 是databaseB库的表)
同义词:
我理解为方便databaseA的查询,所以将表名重命名 如果根本库不冲突可以命名为跟databaseB库相同的表名
sql语句
create or replace synonym 同义词名 for 远程库用户.远程库表名@dblink名;
create or replace synonym baseB_table1 for databaseB_user.baseB_table1@dblinkName;
create or replace synonym baseB_table2 for databaseB_user.baseB_table2@dblinkName;
执行成功后可以使用 select * FROM baseB_table1 可以查询出数据(baseB_table1是databaseB库的表)