oracle 中的dblink

情到浓时终转凉″ 提交于 2020-02-19 05:14:47

 

因为公司的掌上城市系统在多个地势同时上线,而为了让每个城市的3G快讯具有地势特色性,每个地势有自己单独的数据库系统,而每个地势的快讯又一些共同的,譬如突然出了一条国际新闻,那么是不是每个地势的后台编辑都要录入一遍,这样无疑是做了许多无用功,所以公司考虑架设一个总站,总站上有专门的人负责,每天负责录入一些通用的,不具有地势特色的新闻资讯,而各个城市的数据库都将共享总站的内容,同时又具有本地特色的资讯,同时解放了人力资源,各个城市可以集中于地势特色的建设上。

这样的方案,在技术上,就演变成了数据库之间的数据共享,每当录入总站录入数据的时候,调用触发器,通过databaselink向其它各个分站同步数据

用到oracle的database link,之前也没接触过,这两天依据资料摸索了一下,做个记录如下:

作用:将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象。

语法: CREATE [PUBLIC] DATABASE LINK dblink

       CONNECT TO user IDENTIFIED BY password

      USING ‘connect_string’;

      DROP [PUBLIC] DATABASE LINK dblink;     

注意:权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE    SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在 DBA 中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。

参数说明:      dblink: 你所创建的database link的名字,     

                 user和password:要连接的数据库的用户名和密码     

                  connect_string:可以是经过Net Manager配置的(tnsnames.ora)且经测试可以连接的服务名,不过也可写成这种形式,更直接:

                (DESCRIPTION =

                     (ADDRESS_LIST =

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

                     )

                  (CONNECT_DATA =

                        (SERVICE_NAME =orcl)

                  )

               )

 

具体步骤:

1、 链接字符串即服务名,首先在本地配置一个服务名,地址指向远程的数据库地址,当然也可向下面那样直接写的。   

2、创建数据库链接(前提是已分配相应权限),进入系统管理员SQL>操作符下,运行命令:

     create database link wapsx

    connect to WAP identified by wap

   using '(DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

       (SERVICE_NAME = waptown) –这个service_name是您要链接到的数据库服务端的服务名

     )

    )';

   则创建了一个以wap用户和waptown数据库的链接wapsx。

3.database link的使用

  -- 最简单的用法
   SELECT * FROM table_name@database link;
   -- 不想让使用的人知道database link的名字的时候
   -- 建一个别名包装一下

   CREATE SYNONYM table_name FOR table_name@database link;
   SELECT * FROM table_name;

   -- 或者,也可以建立一个视图来封装
    CREATE VIEW table_name AS SELECT * FROM table_name@database link;
    database link删除

   -- 删除public类型的database link
    DROP PUBLIC database link link_name;
   -- 删除非public类型的database link
   -- 注意:只有owner自己能删除自己的非public类型database link
    DROP database link link_name;

4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:

      SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

5、查看数据库连接 sql> select owner, db_link from dba_db_links; ower db_link

6、删除数据库连接 drop databaselink db_link 补充:同步数据时设计的巧妙之处:在触发器中,为了避免总分站资讯id冲突,创建序列的时候设计为总站中id始终为奇数,而分站中则只为偶数,这样就可以达到总分站相应资讯id一致,根据id再通过database link 进行同时的增删改,分站的数据则会跟着总站的同步。

 

参考 http://hi.baidu.com/sei_zhouyu/item/36db1e90eef60ff829164794

       http://blog.sina.com.cn/s/blog_6ceed328010101sr.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!