创建database link

本文介绍如何在Oracle数据库中建立数据库链接(Database Link),实现本地数据库访问远程数据库中的数据。包括查询数据库全局名称、验证Global_name参数状态、检查远程数据库的高级复制功能、创建和测试数据库链接、以及通过数据库链接进行数据表的同步。

需求描述:
    本地一台客户机,上面安装有ORACLE数据库,本客户机的IP为  10.187.255.251。
    机房一台数据库服务器,IP地址为10.187.255.11,SID为XYXNB ,用户名为USER密码为PASSWORD


    通过 SELECT  INSTANCE_NAME FROM V$INSTANCE; 语句查看本地数据库SID为 ORCL。


    此时一个需求是要将本地的ORCL数据库访问到机房的XYXNB中的数据,也就是说,需要在本地ORCL数据库中建立DATABASE LINK,可以在本地的SQL中直接访问远程机房中的数据。
  
  1、如何返回数据库的GLOBAL_NAME?
  执行SELECT * FROM GLOBAL_NAME;(远程机房的GLOBAL_NAME为XYXNB)
   
  2、如何查看Global_name参数是true还是False?
  答:执行:SQL> show parameter global_name;


  执行的结果如下:

  NAME TYPE VALUE
  ------------------------------------ ----------- ------------------------------
  global_names boolean TRUE

  表示该参数是true


      该参数为true时,你在本地建立的DBLINK的名称必须和远程的Global_name一致才行。

 

 

  3、查看远程数据徊是否支持高级复制功能。
  答:通过查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持。
  执行语句为:select * from v$option;
  也可以执行select * from v$option where PARAMETER='Advanced replication'语句,
如何返回值为True,那么就是支持,否则就是不支持。在两个数据库中都是检查是否支持才行。

建立步骤:
  在本地通过修改tnsnames.ora文件建立一个Oracle的客户端连接XYXNB,用于连接远程服务器数据库。

 


  通过下面的语句来建立DATABASE LINK:


  create database link dblinkname connect to user  identified by  password using 'xyxnb';


上面语句中中:

dblinkname是要建立的ORACLE DATABASE LINK 的名字,将来需要调用远程数据库的数据的时候,只需要在本地SQL中写上@ dblinkname 就可以直接访问。


user  是连接远程数据库的用户名。

 

password是user  用户的密码。

'xyxnb'是本地建立的连接到远程数据库的数据库的服务名(可以在oracle的安装目录的tnsnames.ora文件中看到)。

 

  3、测试连接是否成功:
  select * from
dual@xyxnb
  如果返回结果如下则表示连接成功了。
  DUMMY
  -----
  X


  4、在本地数据为中查询已经建立的远程连接名:

  SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';
  OWNER OBJECT_NAME
  ------------------------------ --------------------------------------------------------------------------------
  USER XYXNB
  
在本地的计算机上建立了一个DBLINK,用于连接到远程数据库服务器中。
  
5、通过DATABASE LINK在本地建立同样的表:

Create table XXXX as select  *  from
TABLE_NAME@XYXNB;

 

6、删除已经建立的DATABASE LINK

DROP DATABASE LINK dblinkname;

<think> 我们正在讨论的是通过Xshell连接Oracle数据库后,以sysdba身份创建数据库链接(database link)。 根据用户的问题,他已经能够使用`sqlplus / as sysdba`登录,现在需要创建database link创建database link的基本语法如下: ```sql CREATE [PUBLIC] DATABASE LINK link_name CONNECT TO target_user IDENTIFIED BY target_password USING 'connect_string'; ``` 其中: - `link_name`:数据库链接的名称。 - `target_user`和`target_password`:目标数据库的用户名和密码。 - `connect_string`:连接字符串,通常是在tnsnames.ora中配置的网络服务名,或者直接使用完整的TNS描述符。 但是,用户以sysdba身份登录,通常需要创建私有数据库链接(不带PUBLIC),因为sysdba权限很大,但创建公有链接需要额外的权限。 步骤: 1. 确保当前数据库实例可以访问目标数据库(网络连通性,监听器配置等)。 2. 在当前的数据库中创建数据库链接。 注意:创建数据库链接需要CREATE DATABASE LINK权限。对于sysdba用户(SYS)来说,这个权限是默认具备的。 例如,我们要创建一个到远程数据库(服务名为orcl_remote)的链接,目标用户为scott,密码为tiger,数据库链接名为remotedb: ```sql CREATE DATABASE LINK remotedb CONNECT TO scott IDENTIFIED BY tiger USING 'orcl_remote'; ``` 然后,我们可以通过该链接查询远程数据库中的表: ```sql SELECT * FROM emp@remotedb; ``` 但是,如果目标数据库与当前数据库在同一网络中,并且监听器配置正确,那么连接字符串可以使用TNS别名(在tnsnames.ora中定义),也可以直接使用Easy Connect(如果目标数据库支持)。 使用Easy Connect的示例(不需要配置tnsnames.ora): ```sql CREATE DATABASE LINK remotedb CONNECT TO scott IDENTIFIED BY tiger USING '192.168.1.100:1521/orcl'; ``` 其中,192.168.1.100是目标数据库的IP,1521是端口,orcl是服务名。 另外,如果目标数据库是CDB中的PDB,则需要注意服务名应该是PDB的服务名。 创建完成后,可以通过以下数据字典视图查看已创建的数据库链接: ```sql SELECT * FROM user_db_links; -- 当前用户的私有链接 SELECT * FROM dba_db_links; -- 所有数据库链接(需要权限) ``` 注意事项: 1. 确保当前数据库与目标数据库之间的网络畅通(可以使用tnsping检查连接字符串)。 2. 确保目标数据库的监听器正常运行。 3. 确保目标数据库的用户名和密码正确,并且该用户具有访问目标对象的权限。 如果遇到权限问题,可能需要授予创建数据库链接的权限: 对于非SYS用户,需要执行:`GRANT CREATE DATABASE LINK TO username;` 但是,用户是以sysdba登录,所以不需要额外授权。 示例步骤(在Xshell中操作): 1. 登录到数据库服务器: ```bash $ sqlplus / as sysdba ``` 2. 在SQL>提示符下执行创建命令: ```sql SQL> CREATE DATABASE LINK remotedb 2 CONNECT TO scott IDENTIFIED BY tiger 3 USING 'orcl_remote'; ``` 3. 测试链接: ```sql SQL> SELECT * FROM dual@remotedb; ``` 如果创建的是公共数据库链接(PUBLIC DATABASE LINK),则所有用户都可以使用,但需要CREATE PUBLIC DATABASE LINK权限。 引用说明: 在用户提供的引用中,并没有直接关于database link的内容,但是引用[3]中提到了数据库配置,其中可能涉及网络配置(监听器),因此创建链接使用的连接字符串需要正确配置监听器[^2]。 因此,在创建database link之前,最好先用tnsping检查连接字符串是否有效: ```bash $ tnsping orcl_remote ``` 如果tnsping不通,则需要检查目标数据库的监听器配置和网络设置。 相关问题: §§相关问题§§ 1. 如何配置Oracle的监听器(listener)? 2. 创建database link出现ORA-12154错误如何解决? 3. 如何通过database link执行DML操作? </think> ### 通过 Xshell 连接 sysdba 创建 Database Link 的方法 以下是完整的创建 Database Link 的步骤(通过 Xshell 连接到 Oracle 数据库): #### 1. **连接数据库** ```bash # 以 sysdba 身份登录 Oracle sqlplus / as sysdba ``` #### 2. **创建 Database Link 语法** ```sql CREATE [PUBLIC] DATABASE LINK link_name CONNECT TO target_user IDENTIFIED BY "target_password" USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host_ip)(PORT = port)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service_name) ) )'; ``` #### 3. **实际示例(创建到 192.168.111.3 的链接)** ```sql -- 创建私有链接(仅当前用户可用) CREATE DATABASE LINK remote_db CONNECT TO dmscaky IDENTIFIED BY "your_password" USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.3)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )'; -- 创建公共链接(所有用户可用) CREATE PUBLIC DATABASE LINK public_remote_db CONNECT TO dmscaky IDENTIFIED BY "your_password" USING 'racdb1'; -- 使用预定义的 TNS 别名[^1] ``` #### 4. **验证 Database Link** ```sql -- 查询远程数据库 SELECT * FROM v$instance@remote_db; -- 检查已创建的链接 SELECT owner, db_link FROM dba_db_links; ``` #### 5. **使用 Database Link** ```sql -- 跨数据库查询 SELECT * FROM employees@remote_db; -- 跨数据库插入 INSERT INTO local_table SELECT * FROM remote_table@public_remote_db; ``` ### 关键注意事项 1. **网络配置要求**: - 确保源/目标数据库防火墙开放端口访问 - 验证网络连通性:`tnsping 192.168.111.3:1521` - 必要配置 `tnsnames.ora` 2. **权限要求**: ```sql -- 授予创建链接权限 GRANT CREATE DATABASE LINK TO sys; -- 公共链接需额外权限 GRANT CREATE PUBLIC DATABASE LINK TO sys; ``` 3. **连接问题排查**: - **ORA-12154**: 检查 TNS 别名是否正确配置 - **ORA-12541**: 目标监听未启动 [`lsnrctl status`][^2] - **ORA-01017**: 用户名/密码错误 ### 最佳实践 1. **安全建议**: - 使用私有链接而非公共链接 - 定期修改链接账户密码 - 通过钱包管理密码:[^3] 2. **性能优化**: ```sql -- 添并行查询提示 SELECT /*+ PARALLEL(4) */ * FROM large_table@remote_db; ``` > 📌 可通过 EM 控制台 (https://192.168.111.3:1158/em) 监控链接状态[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值