### Oracle DBLink 详解
#### 一、Database Link 概述
Database Link 是 Oracle 数据库中用于连接两个数据库的关键对象,它可以实现从一个数据库到另一个数据库的数据查询与操作。通过 Database Link,用户能够轻松地访问远程数据库中的数据,并执行相关的远程程序。
##### 重要特性:
- **单向性**:Database Link 本质上是一种单向连接,即从本地数据库指向远程数据库,而不支持反向操作。
- **网络依赖**:为了使 Database Link 正常工作,需要确保本地数据库与远程数据库之间的网络连接是通畅的。
- **权限控制**:使用 Database Link 时,需要具备相应的权限才能访问远程数据库中的数据。
#### 二、创建 Database Link 前需确认的事项
1. **网络连接**:确保本地数据库与远程数据库之间存在正常的工作网络连接,可以通过 `tnsping` 工具进行测试。
2. **远程访问权限**:确认在远程数据库上已为访问者分配了适当的权限,至少需要 `CREATE SESSION` 权限。
#### 三、Database Link 的分类
Database Link 主要有三种类型:Private、Public 和 Global。
1. **Private Database Link**
- **Owner**:特定 schema 下的用户。
- **描述**:只允许创建该 link 的用户访问远程数据库。这种 link 只能被其所有者使用,并且只能由其所有者删除。
2. **Public Database Link**
- **Owner**:PUBLIC。
- **描述**:数据库级别的 link,允许数据库中所有具有访问权限的用户使用此 link 访问远程数据库。
3. **Global Database Link**
- **Owner**:PUBLIC。
- **描述**:网络级别的 link,当使用目录服务器时,目录服务器会自动为网络中的每个 Oracle 数据库创建和管理 global database links。这些 links 通常以网络服务名称的形式出现。所有数据库中的用户和 PL/SQL 子程序都可以使用 global link 访问对应的远程数据库。
#### 四、创建 Database Link 所需的权限
1. **创建 Private Database Link**:需要 `CREATE DATABASE LINK` 权限。
2. **创建 Public Database Link**:需要 `CREATE PUBLIC DATABASE LINK` 权限。
3. **远程访问**:无论哪种类型的 link,都需要 `CREATE SESSION` 权限来连接到远程数据库。
#### 五、Database Link 的使用
##### 基本语法
```sql
CREATE [SHARED][PUBLIC] DATABASE LINK link_name
[CONNECT TO [user][CURRENT_USER] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
```
- **权限**:创建 Database Link 的账号必须拥有 `CREATE DATABASE LINK` 或 `CREATE PUBLIC DATABASE LINK` 的系统权限;而用于登录远程数据库的账号则必须拥有 `CREATE SESSION` 权限。
- **说明**:
- 创建 Database Link 时,如果本地数据库的 `GLOBAL_NAME` 参数设置为 `TRUE`,那么 link 名称必须与远程数据库的全局数据库名相匹配。
- 公用 Database Link 对所有用户可用,而私有 Database Link 仅对其创建者可用。一个用户不能将私有 Database Link 授权给其他用户使用。
#### 六、总结
Database Link 是 Oracle 数据库中一种非常重要的机制,它能够方便地实现跨数据库的操作。通过合理配置 Database Link,可以提高数据集成的能力和灵活性。同时,需要注意权限管理和网络连接稳定性,确保 Database Link 能够安全稳定地运行。