共计 2583 个字符,预计需要花费 7 分钟才能阅读完成。
一. dBlink 简述
dblink(Database Link) 数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的 dblink, 通过 dblink 本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
二. 创建 dblink
创建 dblink 一般有两种方式,不过在创建 dblink 之前用户必须有创建 dblink 的权限。想知道有关 dblink 的权限,以 sys 用户登录到本地数据库:
1 select * from user_sys_privs t
2 where t.privilege like upper(‘%link%’);
查询结果集:
可以看出在数据库中 dblink 有三种权限:
1.CREATE DATABASE LINK(所创建的 dblink 只能是创建者能使用,别的用户使用不了),
2.CREATE PUBLIC DATABASE LINK(public 表示所创建的 dblink 所有用户都可以使用),
3.DROP PUBLIC DATABASE LINK。(删除 dblink)
在 sys 用户下,把 CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASELINK 权限授予给你的用户:
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
然后以 scott 用户登录本地数据库
2.1 已经配置本地服务
1 create public database link link_name
2 connect to username identified by password
3 using ‘connect_string’;
注:link_name 是连接名字,可以自定义;
username 是登陆数据库的用户名;
password 是登陆数据库的用户密码;
connect_string 是数据库连接字符串。
数据库连接字符串是当前客户端数据库中 TNSNAMES.ORA 文件里定义的别名名称. 可以用 NET8 EASY CONFIG 或者直接修改 TNSNAMES.ORA 里定义.
2.2 直接建立链接
1 create database link link_name
2 connect to username identified by password
3 using ‘ (DESCRIPTION =
4 (ADDRESS_LIST =
5 (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.13.178)(PORT = 1521))
6 )
7 (CONNECT_DATA =
8 (SERVICE_NAME = rzzqnew)
9 )
10 )’;
注:host= 数据库的 ip 地址;
service_name= 数据库的 ssid。
2.3 两种方法比较
其实两种方法配置 dblink 是差不多的,第二种方法比较不受本地服务的影响。
注意: 假如创建全局 dblink,则必须使用 systm 或 sys 用户,在 database 前加 public。
三. dblink 常用命令
3.1 dblink 查询
查看所有的数据库链接,进入系统管理员 SQL> 操作符下,运行命令:
1 SQL>select owner,object_name from dba_objects
2 where object_type=’DATABASE LINK’;
3 或者
4 select * from dba_db_links;
3.2 dblink 删除
DROP PUBLIC DATABASE LINK link_name;
3.3 dblink 使用
SELECT……FROM 表名 @数据库链接名;
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名 @dblink 服务器”而已。
四. 配置实例
4.1 机器准备
Machine 1:
Ip:10.10.13.178
Oracle:rzzqnew
Machine 2:
Ip:10.10.13.35
ORACLE:headdb
4.2 创建 db link
登陆 headdb 数据库,账号 kingstar 密码 kingstar
1 create database link dblinktest
2 connect to kingstar identified by kingstar
3 using ‘ (DESCRIPTION =
4 (ADDRESS_LIST =
5 (ADDRESS = (PROTOCOL = TCP) (HOST = 10.10.13.178)
6 (PORT = 1521))
7 )
8 (CONNECT_DATA =
9 (SERVICE_NAME = rzzqnew)
10 )
11 ) ‘;
注意:1. 创建 dblink 时候,主要看本地的 global_name 是否为 true,如果本地的 global_name =true,那么你创建的 dblink 必须和远端数据 库的 global_name 一样,否则创建了 dblink 也不能查到数据;
2. 上面这段代码,如果打错,使用 dblink 时会报错。
这里我们创建的 dblink 名字是 dblinktest,与其不一样,所以可以做下面修改。
1 alter system set global_names=false;
4.3 使用 dblink
执行:
1 select * from dual@dblinktest;
结果如下:
通过这种方法即可实现在 headdb 数据库上使用 rzzqnew 数据库下的内容。
注:其实两种方法配置 dblink 是差不多的,第二种方法比较不受本地服务的影响;
假如创建全局 dblink,则必须使用 systm 或 sys 用户,在 database 前加 public。
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-10/135885.htm