创建Database link

创建数据库链接
本文介绍如何通过Oracle客户端创建数据库链接(xx.xx.com),并设置连接参数,包括主机名(YHEF-xxx)、端口(1531)和服务名(YHEF)。

-- Create database link

 


create database link xx.xx.com
  connect to ppp
  using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = YHEF-xxx )(PORT = 1531)))(CONNECT_DATA =(SERVICE_NAME = YHEF)))';

<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]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值