
# CREATE DATABASE LINK
#### 功能描述
创建DATABASE LINK对象。DATABASE LINK详细说明请见[DATABASE LINK](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0709.html#ZH-CN_TOPIC_0000002558946093)。
#### 注意事项
- DATABASE LINK特性只能在ORA兼容版本下使用。

- 禁止使用DATABASE LINK连接初始用户。
- 禁止初始用户创建、修改和删除DATABASE LINK对象。
- 升级未提交情况下无法创建使用DATABASE LINK。
- 当使用CURRENT_USER或CONNECT TO连接串省略时，使用当前数据库初始用户名和空密码连接，使用时会连接失败。
 
#### 语法格式
```
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**
  使用当前数据库初始用户名和空密码连接。
  
- **USING ( option 'value' \[, ... \] )**
  USING可选择指定要连接的数据库的IP地址、端口号、远端的database name等参数 ，支持的options包括：
  - host：指定连接的地址。支持以 ','分割的字符串来指定多个IP地址，当前不支持密态数据库，不指定默认为空。
  
  - port：指定连接的端口号，不指定默认为5432。
  
  - dbname：指定连接的数据库名称，不指定默认为连接远端使用的用户名。
  
  - fetch_size：从远端每次获取数据量大小，fetch_size取值为0到2147483647，默认为100。
  
  
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - USING后的括号可以只选择上述关键字中的一部分去写。
  
  - USING关键字也可以不写，同时之后的括号也不要再写。
  
  - DATABASE LINK创建的时候不会去验证是否能连接成功，如果缺乏相关的关键字，可能会在使用时报错。
  
  - 由于分布式CN和DN可能分布在不同服务器中，建议host参数不要使用127.0.0.1和localhost，会出现连接失败的情况。
    
 
#### 示例
```
--创建一个兼容性为ORA的数据库。
gaussdb=# CREATE DATABASE ora_test_db DBCOMPATIBILITY 'ORA';
--切换数据库。
gaussdb=# \c ora_test_db
--创建拥有系统管理员权限的用户。
ora_test_db=# CREATE USER user1 WITH SYSADMIN PASSWORD '********';
ora_test_db=# SET ROLE user1 PASSWORD '********';
--创建私有dblink，host也可以是IPv6地址。
ora_test_db=# CREATE DATABASE LINK private_dblink CONNECT TO 'user1' IDENTIFIED BY '********' USING (host '192.168.11.11',port '54399',dbname 'db01');
--删除私有dblink。
ora_test_db=# DROP DATABASE LINK private_dblink;
--创建公共dblink，host也可以是IPv6地址。
ora_test_db=# CREATE PUBLIC DATABASE LINK public_dblink CONNECT TO 'user1' IDENTIFIED BY '********' USING (host '192.168.11.11',port '54399',dbname 'db01');
--删除公共dblink。
ora_test_db=# DROP PUBLIC DATABASE LINK public_dblink;
--删除创建出的用户。
ora_test_db=# RESET ROLE;
ora_test_db=# DROP USER user1;
--切换回初始数据库，并删除测试数据库。请用真实的数据库名替换postgres。
ora_test_db=# \c postgres
gaussdb=# DROP DATABASE ora_test_db;
```
#### 相关链接
[ALTER DATABASE LINK](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0483.html#ZH-CN_TOPIC_0000002559105871)，[DROP DATABASE LINK](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0591.html#ZH-CN_TOPIC_0000002527986170)
