当前位置:  数据库>oracle

Oracle DBLink创建和维护以及ORA-02085 解决办法

    来源: 互联网  发布时间:2017-06-17

    本文导语: 今天业务需要,要跨库查询Oracle数据,于是想到了dblink, 下面一一细说,Oracle DBLink。 首先Oracle DBLink 分成 如下三种: Private 创建database link的user拥有该database link 在本地数据库的特定的schema下建立的database link。只有建立该databa...

今天业务需要,要跨库查询Oracle数据,于是想到了dblink, 下面一一细说,Oracle DBLink。

首先Oracle DBLink 分成 如下三种:

Private 创建database link的user拥有该database link 在本地数据库的特定的schema下建立的database link。只有建立该database link的schema的session能使用这个database link来访问远程的数据库。同时也只有Owner能删除它自己的private database link。 Public Owner是PUBLIC. Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库 Global Owner是PUBLIC. Global的database link是网络级的,When an Oracle network uses a directory server, the directory server automatically create and manages global database links (as net service names) for every Oracle Database in the network. Users and PL/SQL subprograms in any database can use a global link to access objects in the corresponding remote database. 
Note: In earlier releases of Oracle Database, a global database link referred to a database link that was registered with an Oracle Names server. The use of an Oracle Names server has been deprecated. In this document, global database links refer to the use of net service names from the directory server.

创建dblink:

一:创建 public database link 的实例:

create public database link  todb151 

      connect to hezi  identified by manager

      using '(DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.4.151)(PORT = 18000))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = newzqdb)

                )

              )';   
应该注意的是:
1,上面的hezi 这个用户,是你要连接的远程数据库中的用户(也就是 4.151上的)。

2,SQL> select * from pd_zh_cn.tb_goods@todb151;  通过todb151来跨库查询4.151,会拥有hezi的查询权限。只要本地的用户拥有数据库访问权限即可,所以尽量不要建public数据库连接,或者不要用大权限用户hezi来创建,以免让本地小权限的用户,去远程4.151查看到了不该看到的信息。

3.using 后面的引号中间的内容实际上就有  本地tnsname.ora 中的相应数据库连接信息。所以这里也可以直接改写成:
create public database link  todb151 

      connect to hezi  identified by manager

      using 'db151' ;                     

前提是本地tnsname.ora 文件中有:

  db151 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.151)(PORT = 18000))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = newzqdb)

    )

  )

其中SERVICE_NAME 一般是下面红字部分,

SQL> show parameter service_names

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      newzqdb

还要注意要和监听的服务名一致,因为这个远程是要借助监听的。这里明确的告诉大家,配置静态监听注册时,需要输入的全局数据库名(GLOBAL_DBNAME)输入什么都可以,只要保证listerner.ora中的GLOBAL_DBNAME和tnsnames.ora中的SERVICE_NAME保持一致,所以如果是静态监听,那么在创建dblink时应该也应该符合,service_name =listerner.ora中的GLOBAL_DBNAME ,(创建dblink时不一定非得一样)

[oracle@rac1 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 01-JUL-2015 21:39:53

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=newzq.com.cn)(PORT=18000)))
STATUS of the LISTENER
------------------------
Alias                    LISTENER
Version                  TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                01-JUL-2015 20:18:41
Uptime                    0 days 1 hr. 21 min. 12 sec
Trace Level              off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File  /u01/oracle/products/database/11.2.0.1/network/admin/listener.ora
Listener Log File        /u01/oracle/products/diag/tnslsnr/newzq/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=newzq.com.cn)(PORT=18000)))
Services Summary...
Service "newzqdb" has 1 instance(s).
  Instance "newzqdb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

二:创建 private dblink 实例:注意没有private字眼。

  create database link dblink

        connect to liuwenhe identified by liuwenhe

        using '(DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.151)(PORT = 1521))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = newzqdb)

                )

              )'; 

 管理dblink:                 

在当前数据库下查看所有的DBLINK的方法:

    1. select * from dba_db_links;     

删除当前数据库下的一个指定的DBLINK的方法:

    1. 删除public link 

        drop public database link dblink;

    2. 删除private link 

        drop database link dblink;

ORA-02085 解决办法 :

// *Cause: a database link connected to a database with a different name.
// The connection is rejected.
// *Action: create a database link with the same name as the database it
// connects to, or set global_names=false.
//

2)从报错信息的描述上已经可以得到问题的原因和处理方法
错误原因:使用的dblink名字与要连接的数据库名字不相同
处理方法:有两种处理方法
第一种处理方法:创建与对方数据库名字相同的dblink
第二种处理方法:调整数据库参数global_names值为false,取消这种限制
 

一定要理解具体怎么操作

global_names和global_name看起来很相似,global_names的作用是创建db link时是否强制使用远程数据库的global_name,如果

global_names=true,则db link name必须要求是remote database的global_name,否则创建之后db link 不能连同, 

假如在本地:不是远端,和自己的思维不一样。

SQL> show parameter global_names

NAME                                TYPE        VALUE

------------------------------------ ----------- ------------------------------

global_names                        boolean    TRUE

这样在本地要想创建dblink ,那么该dblink的名字 ,必须是远端4.151的global_name ,如下查看global_name 

SQL> select * from global_name;

GLOBAL_NAME

--------------------------------------------------------------------------------

NEWZQDB

也就是只能起名为newzqdb  ,都则报错ORA-02085

  create public database link  newzqdb                                   

      connect to system identified by manager

      using '(DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.4.151)(PORT = 18000))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = newzqdb)

                )

              )';   

你可以在本地通过  alter system set global_names=FALSE;  来取消这种限制,一定注意在本地, 不是远端。

也就是说如果本地global_names这个参数是TRUE,那么在这里只能创建一个可以使用的dblink。


    
 
 

您可能感兴趣的文章:

  • oracle 视图权限 oracle 创建视图权限不足
  • oracle 创建表空间步骤代码
  • Linux系统下创建第二个oracle数据库
  • oracle 创建数据库小知识
  • Oracle新手教程 手工创建数据库的全部脚本及说明
  • Oracle创建用户权限的过程
  • Oracle WebLogic Server 安装并创建域
  • Oracle 10g创建表空间和用户并指定权限
  • linux redhat5.6安装oracle11g在自动创建实例时停住不动,有图
  • oracle 创建表空间详细介绍
  • 在RedHat Advance Server下安装Oracle9i R2不能创建数据库问题
  • 在oracle数据库里创建自增ID字段的步骤
  • oracle创建删除用户示例分享(oracle删除用户命令及授权)
  • Oracle使用配置文件创建口令管理策略
  • oracle命令行删除与创建用户的代码
  • oracle删除主键查看主键约束及创建联合主键
  • Oracle 10g表空间创建的完整步骤
  • Oracle创建主键自增表(sql语句实现)及触发器应用
  • Oracle 创建监控账户 提高工作效率
  • Oracle11.2 命令行手工最简创建数据库的过程
  • 有做linux+oracle的维护的麽?
  • ■帮一个朋友维护网站,oracle运行半小时就自动锁死,用top发现是其狂吃内存,直到吃完为止。怎么办啊
  • Oracle密码文件的使用和维护第1/3页
  • Oracle数据库密码文件的使用与维护
  • 如何用不算很熟练的jsp,oracle,javascript,html,css等建设动态网站,要网页打开速度快、易于日常维护更新?
  • Oracle数据库密码文件的使用和维护
  • Oracle DBA数据库日常维护完全手册
  • Oracle管理与维护.配置文件的简要分析
  • 使用Linux的Shell脚本维护Oracle
  • DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
  • Oracle数据库密码文件的使用和维护
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • Linux系统下安装Oracle X11错误解决办法
  • oracle中文乱码解决的办法
  • Oracle安装后8080和80端口被占用的解决办法
  • Oracle em中按钮乱码解决办法
  • Oracle 11G SELinux原因启动失败的解决办法
  • Oracle安装后8080和80端口被占用的解决办法 iis7站长之家
  • Oracle 实现类似SQL Server中自增字段的一个办法
  • oracle em 按钮乱码解决办法及em网页变成英文
  • 用jsp连上oracle后,在JSP中用(INSERT)插入中文数据后,显示乱码,有办法吗?
  • Oracle 8i字符集乱码问题析及其解决办法
  • PDO取Oracle lob大字段,当数据量太大无法取出的问题的解决办法
  • Linux 下数据库oracle出现ORA-27102错误的解决办法
  • Oracle中被锁定的解决办法
  • Oracle控制文件的损坏或完全丢失的恢复办法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3