Oracle使用dblink实现跨库访问的实例代码

 更新时间:2024年03月10日 14:09:05   作者:=PNZ=BeijingL  
dbLink是简称,全称是databaselink,database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序,本文给大家介绍了Oracle如何使用dblink实现跨库访问,需要的朋友可以参考下

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

1.赋值权限

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

grant create public database link,create database link to BOSS823;

2.创建dblink

语法:

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用户

create database link dblink821
  connect to BOSS821T identified by BOSS821
  using '10.0.192.36_STARSMS';

或者使用图形界面创建

3.查询dblink

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> 

4.删除dblink

DROP database link link_name;

5.使用dblink

1>访问链接数据库中的表

select * from BOSS821T.CUSTOMEREN @dblink821

2>通过dblink复制表

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

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开始支持字符大小写问题引起的

--ORA-01017: invalid username/password; logon denied 
--ORA-02063: preceding line from <link_name>

查看数据库信息

 
 
--查看当前数据库的版本
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,使用双引号来设置密码

-- Create database link 
create database link dblink821T
  connect to BOSS821T identified by "boss821T"
  using '10.0.192.36_STARSMS';

以上就是Oracle使用dblink实现跨库访问的实例代码的详细内容,更多关于Oracle dblink跨库访问的资料请关注脚本之家其它相关文章!

相关文章

  • oracle 安装与SQLPLUS简单用法

    oracle 安装与SQLPLUS简单用法

    安装oracle数据库成功之后,会显示相关的数据库信息
    2009-06-06
  • Oracle如何通过执行计划查看查询语句是否使用索引

    Oracle如何通过执行计划查看查询语句是否使用索引

    这篇文章主要介绍了Oracle如何通过执行计划查看查询语句是否使用索引问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Oracle启用“_optimizer_skip_scan_enabled” 参数导致NC系统卡死问题解决方法

    Oracle启用“_optimizer_skip_scan_enabled” 参数导致NC系统卡死问题解决方法

    这篇文章主要介绍了Oracle启用“_optimizer_skip_scan_enabled” 参数导致NC系统卡死问题解决方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • DB2数据库切换为oracle数据库经验教训总结(必看篇)

    DB2数据库切换为oracle数据库经验教训总结(必看篇)

    下面小编就为大家带来一篇DB2数据库切换为oracle数据库经验教训总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • oracle添加序号列3种方法大全

    oracle添加序号列3种方法大全

    Oracle是众多的关系型数据库系统之一,它可以为表格中的每一行创建唯一的序号列,这篇文章主要给大家介绍了关于oracle添加序号列的3种方法大全,需要的朋友可以参考下
    2024-03-03
  • Oracle数据泵EXPDP/IMPDP导出导入功能详细深入解析

    Oracle数据泵EXPDP/IMPDP导出导入功能详细深入解析

    这篇文章主要给大家介绍了关于Oracle数据泵EXPDP/IMPDP导出导入功能的相关资料,数据泵导出/导入属于逻辑备份,热备份与冷备份都属于物理备份,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • oracle 指定类型和指定位数创建序列号的代码详解

    oracle 指定类型和指定位数创建序列号的代码详解

    这篇文章主要介绍了oracle 指定类型和指定位数创建序列号,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • ORACLE中段的HEADER_BLOCK示例详析

    ORACLE中段的HEADER_BLOCK示例详析

    这篇文章主要给大家介绍了关于ORACLE中段的HEADER_BLOCK的相关资料,文中通过是示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • oracle索引的测试实例代码

    oracle索引的测试实例代码

    这篇文章主要给大家介绍了关于oracle索引测试的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Oracle AWR(自动工作量资料档案库)的管理与维护详解

    Oracle AWR(自动工作量资料档案库)的管理与维护详解

    这篇文章主要给大家介绍了关于Oracle AWR(自动工作量资料档案库)管理与维护的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论