Tuesday, April 7, 2009

Oracle DB Link introduction [REF]

1。基本概念:
数据库连接串主要用于建立对远程数据库的访问方法,可以直接读取远程Oracle的数据,或者直接修改。数据库连接串可以是公用连接PUBLIC或者私有连接PRIVATE。这一点和同义词很相像。 其实dblink和数据库中的view差不多,建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码
1。创建语法:
CREATE DATABASE LINK TEST CONNECT TO USERNAME IDENTIFIED BY PASSWORD
USING 'CONNECT_STRING';
解释:TEST是数据库连接串的名字。以后就通过这个名字来进行调用远程数据库的内容。
USERNAME是用来连接到远程数据库的合法Oracle用户名。PASSWORD为该用户连接到Oracle时候的合法密码。
CONNECT_STRING为该Oracle数据库所在的主机上的tnsnames.ora文件里边定义的数据库连接串。
1) 已经配置本地服务
create public database link fwq12 connect to fzept identified by neu using 'fjept'
 CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;
2) 未配置本地服务
create database link linkfwq
   connect to fzept identified by neu
   using '(DESCRIPTION =
   (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
   )
   (CONNECT_DATA =
   (SERVICE_NAME = fjept)
   )
   )';

  host=数据库的ip地址,service_name=数据库的ssid。
  其实两种方法配置dblink是差不多的,感觉还是第二种方法比较好,这样不受本地服务的影响。数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

  数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样
  数据库全局名称可以用以下命令查出
  SELECT * FROM GLOBAL_NAME;
  查询远端数据库里的表
  SELECT …… FROM 表名@数据库链接名;

  查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。

  附带说下同义词创建:
  CREATE SYNONYM同义词名FOR 表名;
  CREATE SYNONYM同义词名FOR 表名@数据库链接名;
  删除dblink:DROP PUBLIC DATABASE LINK linkfwq。
  如果创建全局dblink,必须使用systm或sys用户,在database前加public。
2。使用方法:
SELECT COUNT(*) FROM TABLE_NAME@DB_LINK WHERE WHERE_CLAUSE;//查阅远程数据库的内容。

UPDATE TEST.TEST@DB_LINK SET SO_NBR=NEW_SO_NBR
WHERE WHERE_CLAUSE;//修改远程数据库的内容。
在实际使用过程中,还可以通过为这个远程表建立一个同义词来进一步增加透明性,使该数据库连接串对于程序和开发人员来讲完全透明。
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DB_LINK;
3。数据库连接的管理:
1) 如何知道当前用户、当前系统中有哪些数据库连接串?
SELECT * FROM USER_DB_LINKS;
这个查询会给出当前用户的数据库联接的名字、联接用户名、联接密码、要连接的主机以及创建时期。
2) SELECT * FROM DBA_DB_LINKS;
这个查询会给出当前系统中所有的数据库联接的创建用户、联接用户名、要连接的主机以及创建时期。
3) SELECT * FROM V$DBLINK;
这个查询会给出当前打开的数据库联接。
4) 删除数据库连接
先从第2)步中查看数据库连接,取得其db_link的名称
sql>drop public database link TEST.US.ORACLE.COM
数据库连接巳丢弃

No comments:

Post a Comment