zoukankan      html  css  js  c++  java
  • 利用DB Link实现数据库间的表同步

    目的

      使用create Database link语句创建数据库链接。数据库链接是本地数据库中的模式对象,利用它可以访问远程数据库的对象。远程数据库不必是Oracle系统。

      一旦创建了数据库链接,就可以用它来引用远程数据库上的表和视图。在表或视图名后附加@[dblink],就可以在SQL语句中引用远程表或视图。用select语句可以查询远程表或视图。如果正以分布式选项使用Oracle,还可以使用任何insert、update、delete或lock table语句访问远程表或视图。

    前提

      要创建私有数据库链接,必须具有create Database link系统权限。要创建公用数据库链接,必须具有create public Database link系统权限。另外,在远程Oracle数据库上必须具有create session权限。

      在本地和远程Oracle数据库上必须安装了Oracle Net。

      要访问非Oracle系统,必须使用Oracle异种服务(Oracle Heterogeneous Service)。

    语法

      CREATE [SHARED][PUBLIC] DATABASE LINK dblink

      CONNECT TO [username IDENTIFIED BY password authenticated_clause|| CURRENT_USER]

      USING ‘connectstring’

    关键字和参数

      shared:指定shared使用一个单独的网络连接创建可被多个用户共享的公用数据库链接。

      public:创建可被全体用户使用的公用数据库链接。若省略该子句,数据库链接为私有的,只能由创建者使用。

      dblink:指定数据库链接的完整名或部分名。GLOBAL_NAMES初始化参数决定数据库链接是否必须具有与该链接相连的数据库的相同的名字。

        在一个会话或真正的应用集群配置中的一个实例可以打开的数据库链接的最大数量,取决于初始化参数OPEN_LINKS和OPEN_LINKS_PER_INSTANCE的值。

      限定:不能在其他用户的模式中创建数据库链接,不能用模式名限定dblink(在数据库链接名中允许有“.”字符,所以Oracle将全名,如RALPH.LINKTOSALES,解释为你的模式中的数据库链接名,而不是RALPH模式中的LINKTOSALES数据库链接。

      connect to子句:connect to子句允许启用对远程数据库的连接。

      CURRENT_USER子句:使用CURRENT_USER创建当前用户的数据库链接。为使链接成功,当前用户必须是在远程数据库上具有有效账户的全局用户。

      若直接使用数据库链接(即不是从存储对象中使用),当前用户即为被连接的用户。

      当执行存储对象(如过程、视图或触发器)激活数据库链接时,CURRENT_USER是拥有保存对象的用户名,而不是调用对象的用户名。例如,若数据库链接出现在过程SCOTT.P(由SCOTT创建)内部并且用户JANE调用过程SCOTT.P,当前用户是SCOTT。

      但是,若存储对象是一个调用方权利(invoker-right)函数、过程或包,调用方的授权ID用于连接作为远程用户。例如,数据库链接出现在过程SCOTT.P(由SCOTT创建的调用方权利过程)的内部,用户JANE调用该过程,那么CURRENT_USER是JANE并且用JANE的权限执行该过程。

      user IDENTIFIED BY password:是使用固定用户数据库链接连接远程数据库的用户名和口令。若省略该子句,数据库链接使用连接到数据库的每个的用户的名字和口令(这称为连接的用户数据库链接)。

      authenticated_clause:指定目标实例上的用户名和口令。该子句在远程服务器验证用户,是安全性所必须的。指定的用户名和口令必须是远程实例上的有效用户名和口令。用户名和口令只用于验证。其他操作不以该用户的名义执行。

       使用SHARED子句时必须指定该子句。

      USING 'connect string':指定远程数据库的服务名。


    example:

    create public database link erpsales
     connect to sales identified by sales
     using '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.217.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = heksales)
        )
      )';

    host=数据库的ip地址

    service_name=数据库的ssid。

    数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义

    数据库全局名称可以用以下命令查出

      SELECT * FROM GLOBAL_NAME;


      可创建同义词省略@dblink后缀

      CREATE SYNONYM 同义词名FOR 表名;

      CREATE SYNONYM 同义词名FOR 表名@数据库链接名;

      删除dblink:DROP PUBLIC DATABASE LINK dblink。

      如果创建全局dblink,必须使用systm或sys用户,在database前加public。

    需要DB支持Advanced replication(高级复制)功能,是否支持,可用如下SQL查看:
    select * from v$option where PARAMETER='Advanced replication';

    如果是返回True就表示支持。

    查看Global_name参数是true还是False
    执行语句: show parameter global_name;

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

  • 相关阅读:
    Nacos系列:基于Nacos的配置中心
    Nacos系列:基于Nacos的注册中心
    Nacos系列:欢迎来到Nacos的世界!
    Go语言学习笔记说明
    Hive基础之Hive数据类型
    Go语言学习笔记(六) [包]
    Go语言学习笔记(五) [函数]
    Go语言学习笔记(四) [array、slice、map]
    Go语言学习笔记(三) [控制结构、内建函数]
    git管理多个github账号
  • 原文地址:https://www.cnblogs.com/benio/p/1630643.html
Copyright © 2011-2022 走看看