ORACLE 如何使用dblink实现跨库访问

dbLink是简称,全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。在创建database link的时候,Oracle再数据字典中保存相关的database link的信息,在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据库以完成相应的工作。

1.赋值权限

例如为用户BOSS823赋值link相关的权限

sql 复制代码
grant create public database link,create database link to BOSS823;

语法:

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']
  • 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
  • link : 当source端的参数(parameter)GLOBAL_NAMES=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
  • current_user使用该选项是为了创建global类型的dblink。在分布式体系中存在多个数据库的话。如果想要在每一个数据库中都可以使用同样的名字来访问数据库a,那在每个数据库中都要创建一个到数据库a的db_link,太麻烦了。所以有这个选项的话你只要创建一次。所有的数据库都可以使用这个db_link来访问了。要使用这个特性,必须有oracle nameserver或者ORACLE目录服务器。并且数据库a的参数global_names=true.具体我也没有创建过,没有这个环境。
  • connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串,也可以在创建dblink的时候直接指定。
  • username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库,当创建connected user类型的dblink时,需要如果采用数据字典验证,则需要两边数据库的用户名密码一致

举例:创建名称为dblink821的dbLink, 链接访问10.0.192.36数据库的BOSS821T用户

sql 复制代码
create database link dblink821
  connect to BOSS821T identified by BOSS821
  using '10.0.192.36_STARSMS';

或者使用图形界面创建

sql 复制代码
SQL> select * from dba_db_links;
 
OWNER                          DB_LINK                                                                          USERNAME                       HOST                                                                             CREATED
------------------------------ -------------------------------------------------------------------------------- ------------------------------ -------------------------------------------------------------------------------- -----------
BOSS823                        DBLINK821.REGRESS.RDBMS.DEV.US.ORACLE.COM                                        BOSS821T                       10.0.192.36_STARSMS                                                              2024/3/6 17

SQL> 
sql 复制代码
DROP database link link_name;
1>访问链接数据库中的表
sql 复制代码
select * from BOSS821T.CUSTOMEREN @dblink821
2>通过dblink复制表

通过dblink复制表性能很高,例如下面的测试,复制17W数据执行时间约3秒

sql 复制代码
SQL> select COUNT(*) from BOSS821T.CUSTOMEREN @dblink821T;
 
  COUNT(*)
----------
    171736
 
SQL> create table CUSTOMER821T as select * from BOSS821T.CUSTOMEREN @dblink821T;
 
Table created
 
SQL> 

执行时间:3.089秒
6.常见问题ORA-02063

如果出现ORA-02063可能是由于11开始支持字符大小写问题引起的

bash 复制代码
--ORA-01017: invalid username/password; logon denied 
--ORA-02063: preceding line from <link_name>

查看数据库信息

bash 复制代码
--查看当前数据库的版本
SQL> select * from v$version;
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0    Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production


--查看链接到数据库的版本
SQL> select * from v$version;
 
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0    Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

被访问的数据库的版本是11g,因此修改dblink,使用双引号来设置密码

sql 复制代码
-- Create database link 
create database link dblink821T
  connect to BOSS821T identified by "boss821T"
  using '10.0.192.36_STARSMS';

上一篇:Oracle 的同义词(Synonym) 作用

相关推荐
小菜yh13 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
ggdpzhk19 分钟前
Mybatis 快速入门(maven)
oracle·maven·mybatis
Microsoft Word33 分钟前
数据库系统原理(第一章 数据库概述)
数据库·oracle
华为云开源43 分钟前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
kejijianwen4 小时前
JdbcTemplate常用方法一览AG网页参数绑定与数据寻址实操
服务器·数据库·oracle
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
高兴就好(石7 小时前
DB-GPT部署和试用
数据库·gpt
这孩子叫逆7 小时前
6. 什么是MySQL的事务?如何在Java中使用Connection接口管理事务?
数据库·mysql
Karoku0667 小时前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
码农郁郁久居人下8 小时前
Redis的配置与优化
数据库·redis·缓存