# CREATE DATABASE LINK
#### 功能描述
创建DATABASE LINK对象。
#### 注意事项
- DATABASE LINK详细说明请参见《开发指南》中"特性使用指导 \> DATABASE LINK"章节。
- DATABASE LINK特性只能在ORA兼容模式数据库下使用。

- 禁止通过使用DATABASE LINK的方式连接初始用户，禁止初始用户创建、修改和删除DATABASE LINK对象。
- 创建DATABASE LINK对象时，不会对其是否可连接成功进行验证，如果创建过程中缺乏相关关键字，可能会在使用时报错。
- 升级未提交情况下无法创建使用DATABASE LINK。
- 非透明多写特性下，使用本机IP及对应端口可连接当前实例数据库。由于CN和DN可能分布在不同服务器中，建议host参数不要使用127.0.0.1和localhost，可能会出现连接失败的情况。
 
#### 语法格式
```
CREATE [ PUBLIC ] DATABASE LINK dblink
  [ CONNECT TO { CURRENT_USER | 'user' IDENTIFIED BY 'password' } ] [ USING ( {option 'value'} [, ...]) ];
```
其中option为：
```
{ HOST | PORT | DBNAME | FETCH_SIZE }
```
#### 参数说明
- **PUBLIC**
  指定创建对所有用户可见的公共数据库连接。如果未指定，则为私有的数据库连接，仅对当前用户可用。
  
- **dblink**
  创建的DATABASE LINK的名称。
  
- **user**
  创建的DATABASE LINK连接远程数据库使用的用户名。
  
- **password**
  创建的DATABASE LINK连接远程数据库使用的用户对应的密码。
  
- **CURRENT_USER**
  使用当前数据库初始用户名和空密码连接。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  当前版本指定CURRENT_USER选项后，可正常创建DATABASE LINK，但该连接无法正常使用。
  
- **USING ( {option 'value'} \[, ... \] )**
  可选。USING可选择指定要连接的数据库的IP地址、端口号、远程数据库名称等参数，支持的options包括：
  - host：指定连接的数据库IP地址，不指定时默认为空。可以指定多个IP地址，以逗号（,）进行分隔，当前不支持密态数据库和SSL设置和证书认证。
  
  - port：指定连接的端口号，不指定时默认为5432。
  
  - dbname：指定连接的数据库名称，不指定时默认为连接远程使用的用户名。
  
  - fetch_size：从远程每次获取数据量大小，取值范围为\[0, 2147483647\]，默认值为100。
   
 
#### 示例
```
-- 创建一个兼容性为ORA的数据库。
gaussdb=# CREATE DATABASE ora_test_db DBCOMPATIBILITY 'ORA';
CREATE DATABASE
-- 切换数据库。
gaussdb=# \c ora_test_db
-- 创建拥有系统管理员权限的用户。
ora_test_db=# CREATE USER local_user WITH SYSADMIN PASSWORD '********';
CREATE ROLE
ora_test_db=# SET ROLE local_user PASSWORD '********';
SET
-- 创建私有DBLink，host也可以是IPv6地址。
ora_test_db=> CREATE DATABASE LINK private_dblink CONNECT TO 'remote_user' IDENTIFIED BY '********' USING (host '***.***.***.***',port '*****',dbname 'remote_db');
CREATE DATABASE LINK
-- 删除私有DBLink。
ora_test_db=> DROP DATABASE LINK private_dblink;
DROP DATABASE LINK
-- 创建公共DBLink，host也可以是IPv6地址。
ora_test_db=> CREATE PUBLIC DATABASE LINK public_dblink CONNECT TO 'remote_user' IDENTIFIED BY '********' USING (host '***.***.***.***',port '*****',dbname 'remote_db');
CREATE DATABASE LINK
-- 删除公共DBLink。
ora_test_db=> DROP PUBLIC DATABASE LINK public_dblink;
DROP DATABASE LINK
-- 删除创建出的用户。
ora_test_db=> RESET ROLE;
RESET
ora_test_db=# DROP USER local_user;
DROP ROLE
-- 切换回初始数据库，并删除测试数据库。请用真实的数据库名替换postgres。
ora_test_db=# \c postgres
gaussdb=# DROP DATABASE ora_test_db;
DROP DATABASE
```
#### 相关链接
[ALTER DATABASE LINK](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0185.html)，[DROP DATABASE LINK](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0295.html)
