因为公司的掌上城市系统在多个地势同时上线,而为了让每个城市的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
来源:https://www.cnblogs.com/believe59/archive/2013/05/28/3103845.html