Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194593
  • 博文数量: 19
  • 博客积分: 1865
  • 博客等级: 上尉
  • 技术积分: 640
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-06 10:34
文章分类

全部博文(19)

文章存档

2012年(19)

我的朋友

分类: Oracle

2012-08-13 09:38:29

database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。

关于创建和管理DBLINK:
本例远程数据库全局数据库名为pincdb,由于本地数据库的参数:global_names boolean  FALSE,故DBLINK命名为 topincdb是可行的。
1.已经配置本地服务

  1. create database link topincdb
  2. connect to asp62 identified by asp62
  3. using 'PINCDB';
数据库连接字符串'PINCDB'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.

2.直接建立链接

  1. create database link topincdb
  2. connect to scott identified by tiger
  3. using '(DESCRIPTION =
  4.     (ADDRESS_LIST =
  5.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.4.102)(PORT = 1521))
  6.     )
  7.     (CONNECT_DATA =
  8.       (SERVICE_NAME = pincdb)
  9.     ))';

HOST=数据库的IP地址,SERVICE_NAME=数据库的SID
3.DBLINK查询

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

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

4.DBLINK删除

  1. DROP PUBLIC DATABASE LINK toBeJing

5.DBLINK使用

SELECT …… FROM表名@数据库链接名;

查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成表名@DBLINK服务名而已。 例:查询北京数据库中emp表数据   select * from ;

6.使用同义词

CREATE SYNONYM同义词名FOR 表名;

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

如:create synonym bj_scott_emp for ;

于是就可以用bj_scott_emp来替代带@符号的分布式链接操作

7.用户类型

DBLINK3种类型,Connected userFixed userCurrent user

Connected user,当创建database link的时候没用CONNECT TO username指定固定的user的时候,当前用户的登陆信息将会被用来验证登陆远程数据库,如果本地用户是SYSTEM的话那么登陆远程数据库的用户也是SYSTEM
注意:Connected user不一定是建立database link的用户,任何一个可以使用该database link的用户都可以是Connected user

Fixed user,在建立database link的时候如果指定了用户名/密码时,所有使用使用使用该database link的用户,不管是否是建立database link的用户,都将使用指定的用户去登陆远程的数据库。


创建connected  userdb link语法:

  1. create database link topincdb connect to pin62 identified by pin62 using 'PINCDB' ;

创建fixed userdb link语法:

  1. create database link topincdb using 'PINCDB';

8.创建全局dblink
使用systmsys用户,在database前加public

1.先创建PUBLIC DATABASE LINK,不用指定用户和密码

  1. SQL>conn system/test
  2. Connected
  3. SQL>CREATE PUBLIC DATABASE LINK topincdb USING 'PINCDB';
  4. Database link created.

2.再在各个用户下创建私有DATABASE LINK(PUBLIC DATABASE LINK名称相同),指定用户和密码

  1. SQL>conn pin62/pin62
  2. Connected.

  3. SQL>CREATE DATABASE LINK topincdb CONNECT TO pin62 IDENTIFIED BY pin62;
  4. Database link created.

实际上相当于:

CREATE DATABASE LINK topincdb USING 'PINCDB' CONNECT TO pin62 IDENTIFIED BY pin62;

注:如果创建全局dblink没有PUBLIC关键字,则创建私有DATABASE LINK后,应用DBLINK时,会提示找不到DATABASE LINK描述信息。

9.DBLINK 命名
DBLINK 
的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。所以,oracle模仿域名搞出一个global_name,global_name=db_name+db_domain
有了global_name,就可以实现数据库命名的全局唯一。例:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
数据库全局名称可以用以下命令查出
SELECT * FROM GLOBAL_NAME;
如果global_names=true,那么db link的命名要和远程数据库的global_name相同;
如果global_names=false,那么你可以随便命名db link
 

 

本文参照:
Oracle 使用 DBLINK详解
  1. 说明:
  2. 1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
  3. 2)link : 当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
  4. 3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。
  5. 4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。
 
阅读(1521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~