Chinaunix首页 | 论坛 | 博客
  • 博客访问: 431002
  • 博文数量: 11
  • 博客积分: 3030
  • 博客等级: 中校
  • 技术积分: 1405
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-10 17:02
文章分类

全部博文(11)

文章存档

2011年(2)

2010年(4)

2008年(5)

我的朋友

分类: Oracle

2008-03-28 14:10:37

1。基本概念:
数据库连接串主要用于建立对远程数据库的访问方法,可以直接读取远程Oracle的数据,或者直接修改。数据库连接串可以是公用连接PUBLIC或者私有连接PRIVATE。这一点和同义词很相像。

1
。创建语法:

CREATE DATABASE LINK TEST CONNECT TO USERNAME IDENTIFIED BY PASSWORD
USING 'CONNECT_STRING';
解释:TEST是数据库连接串的名字。以后就通过这个名字来进行调用远程数据库的内容。

USERNAME
是用来连接到远程数据库的合法Oracle用户名。PASSWORD为该用户连接到Oracle时候的合法密码。

CONNECT_STRING
为该Oracle数据库所在的主机上的tnsnames.ora文件里边定义的数据库连接串。

2
。使用方法:

SELECT COUNT(*) FROM TABLE_NAME@DB_LINK WHERE WHERE_CLAUSE;//
查阅远程数据库的内容。


UPDATE
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;
这个查询会给出当前用户的数据库联接的名字、联接用户名、联接密码、要连接的主机以及创建时期。

SELECT * FROM DBA_DB_LINKS;
这个查询会给出当前系统中所有的数据库联接的创建用户、联接用户名、要连接的主机以及创建时期。

SELECT * FROM V$DBLINK;
这个查询会给出当前打开的数据库联接。

4
。常见错误处理:

////////////////////////////////////////////////////////////////
1
。不能分解服务名:

登录到远程服务器上的结果:

net97>show parameters global_name

NAME TYPE VALUE
------------------------------------ ------- ------------------------------
global_names boolean FALSE
net97>
net97>drop database link jinhua;

数据库链接已丢弃。


net97>create database link jinhua
2 connect to username identified by password
3 using 'jinhua';

数据库链接已创建。


net97>select * from so@jinhua;
select * from so@jinhua
*
ERROR
位于第 1
:
ORA-12154: TNS:
不能分解服务名称
.
net97>conn username/password@jinhua;
已连接。

net97>
这是因为在Oracle数据库所在的Unix主机上面的tnsnames.ora文件里边没有对jinhua这个服务名的定义。所以不能分解服务名。

阅读(4002) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~