1 访问远程数据库

  ORACLE系统中是通过"数据库链"来实现访问远程数据库的。我们可以在本地数据库上建立一个数据库链,它封装了如下信息:
  (1) 网络协议(如TCP/IP)
  (2) 远程数据库服务器的网络地址(如IP地址166。111。7。123)
  (3) 远程数据库的名字(如ORA2)
  (4) 远程数据库上建立的用户名及口令(如SCOTT/TIGER,你将以此帐号访问远程数据库)
 
  其中前三项是有关网络上一个结点的信息,系统管理员可以在本地数据库服务器上的系统网络配置文件中(TNSNAME。ORA)先将它们定义为一个"连接串",如123。

  下面是建立数据库链的语句示例:
  CREATE DATABASE LINK sales
  CONNECT TO scott IDENTIFIED BY tiger
  USING '123':
 
  作为本地数据库的一个对象,数据库链可以被看作是远程数据库在本地的一个代理。
  在本地数据库中,可以根据需要建立若干个数据库链。一旦建立了数据库链,便可以利用它访问远程数据库中的数据。例如:
  SELECT * //查询远程数据库上emp表的内容
  FROM dept, emp@sales //部门dept表为本地表,emp表为远程表
  WHERE dept.don = emp.don: //不同数据库上表的连接

  注意:数据库链仅在说明表名的地方(如FROM子句)出现,其他地方不需要(如WHERE子句)出现。

  ORCALE分布数据库系统的应用如图8-11所示。

  
图8-11 ORACLE分布数据库系统


  如果读者要问:能否更透彻的对远程数据库进行存取?答案是肯定的,我们可以利用"同义词"机制实现透明访问。例如,我们建立一个同义词:
  CREATE SYNONYM emp1 FOR emp @sales ;

  上述语句中在本地数据库中为远程数据库sales的表emp建立了一个同义词emp1.。建立了同义词后,就可以在SQL语句中使用它。例如:
  SELECT * FROM emp1;

  从该查询语句中看不出emp1表的物理位置,形式上与本地表没有区别。实际上emp1是一个远程表的别名,系统会根据该同义词的定义来定位实际的emp。

  "同义词"是ORACLE的一个数据库对象,同义词可为表、视图、序列或其他同义词等对象定义别名,由于同义词包含数据库链的信息,因此ORACLE通过同义词机制提供了数据物理位置的透明性。