黑客守则- -| 回首页 | 2005年索引 | - -快评:日本煽动全民参拜 挑战全世界

Oracle DB Link介绍- -

                                      

0。基本概念:
数据库连接串主要用于建立对远程数据库的访问方法,可以直接读取远程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 SO 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这个服务名的定义。所以不能分解服务名。

////////////////////////////////////////////////////////
2
GlobalName和数据库联接的名字不一致的情况:

解决方案:

1
。修改本Oracle实例的global_namefalse

登录到本地的NTserver 上面的ORacle816数据库:

本地的tnsnames.ora文件里边有jinhua这个连接串的描述。

GLOBAL_NAME=TRUE
的时候的情况:

SQL> show parameters global

NAME TYPE VALUE
------------------------------------ ------- ------------------------------
global_names boolean TRUE
SQL>conn username/password
SVRMGR> create database link jinhua
2> connect to spgroup identified by spgroup
3> using 'jinhua';
语句已处理。

SVRMGR> select count(*) from spgroup.so@jinhua;
select count(*) from spgroup.so@jinhua
*
ORA-02085: ?????JINHUA.world?ORCL.WORLD???
SVRMGR> drop database link jinhua;
语句已处理。
ORA-02085: ?????JINHUA.WORLD?ORCL.WORLD???
SVRMGR> drop database link jinhua.world;
语句已处理。


SQL> conn username/password
已连接。

SQL> create database link orcl.world
2 connect to username identified by password <B< span>

关于dblink举例

  登录到远程服务器上的结果:
  
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>
  
///////////////////////////////////////////////////
  登录到本地的NTserver 上面的ORacle816数据库:

  本地的tnsnames.ora文件里边有jinhua这个连接串的描述。

  
//////////////////////////////////////////////////////////////
  GLOBAL_NAME=TRUE的时候的情况:

  
SQL> show parameters global
  

  NAME TYPE VALUE
  
------------------------------------ ------- ------------------------------
  
global_names boolean TRUE
  
SQL>
  
SVRMGR> create database link jinhua
  
2> connect to spgroup identified by spgroup
  
3> using 'jinhua';
  语句已处理。

  
SVRMGR> select count(*) from spgroup.so@jinhua;
  
select count(*) from spgroup.so@jinhua
  
*
  
ORA-02085: ?????JINHUA.world?ORCL.WORLD???
  
SVRMGR> drop database link jinhua;
  语句已处理。

  
SVRMGR> create database link jinhua.world
  
2> connect to username identified by password
  
3> using 'jinhua';
  语句已处理。

  
SVRMGR> select count(*) from username.so@jinhua.world;
  
select count(*) from username.so@jinhua.world
  
*
  
ORA-02085: ?????JINHUA.WORLD?ORCL.WORLD???
  
SVRMGR> drop database link jinhua.world;
  语句已处理。

  

  SQL> conn chaos/chaos
  已连接。

  
SQL> create database link orcl.world
  
2 connect to spgroup identified by spgroup
  
3 using 'jinhua';
  

  数据库链接已创建。
  

  SQL> select count(*) from spgroup.so@orcl.world;
  

  COUNT(*)
  
----------
  
6800
  

  SQL>
  
///////////////////////////////////////////////////////////////////
  GLOBAL_NAME=FALSE时候的情况:

  

  SQL> shutdown immediate;
  数据库已经关闭。

  已经卸载数据库。

  ORACLE 例程已经关闭。

  
SQL> startup
  ORACLE 例程已经启动。

  

  Total System Global Area 16930844 bytes
  
Fixed Size 75804 bytes
  
Variable Size 8388608 bytes
  
Database Buffers 8388608 bytes
  
Redo Buffers 77824 bytes
  数据库装载完毕。

  数据库已经打开。

  
SQL> show parameter global_name
  

  NAME TYPE VALUE
  
global_names boolean FALSE
  
SQL>
  
SQL> create database link jinhua
  
2 connect to spgroup identified by spgroup
  
3 using 'jinhua';
  

  数据库链接已创建。
  

  SQL> select count(*) from so@jinhua;
  

  COUNT(*)
  
----------
  
6800
  
//////////////////////////////////////////////////////////////////
  数据库连接串的密码存放在user_db_links里边的password字段里边。

  

  To facilitate application requests in a distributed database system, Oracle
  

  uses
  
database links. A database link defines a one-way communication path from an
  
Oracle database to another database.
  
Database links are essentially transparent to the users of an Oracle
  

  distributed database system, because the name of a database link is the same as the global name
  
of the database to which the link points. For example, the following SQL statement creates a database link in the local database that describes a path to the remote
  
SALES.US.AMERICAS.ACME_AUTO.COM database.
  
CREATE DATABASE LINK sales.us.americas.acme_auto.com ... ;
  
After creating a database link, applications connected to the local database can access data in the remote SALES.US.AMERICAS.ACME_AUTO.COM database. The next section explains how applications can reference remote schema objects in a distributed database and includes examples of how SQL statements use database links.
  
Additional Information: Oracle supports several different types of database links. For more information, see Oracle8i Distributed
  Database Systems.

- 作者: Nicky36 访问统计: 2005年08月1日, 星期一 19:37 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=2454086

博客手拉手

[2005-08-01]    在阿拉伯人中传播奎师那知觉

[2005-08-01]    城市人请仔细“阅读”农民

[2005-08-01]    今天申请成功了博客中国的我的博客

[2005-08-01]    早上去送小猪

[2005-08-01]    好感动

回复

评论内容: