Database Link 翻译过来就是数据库链接。
创建的语法很简单,建议还是记住sql的创建方式。
一,关于文档
关于这个比较详细的可以参考oracle 文档
<<Oracle? DatabaseAdministrator's Guide10g Release 2 (10.2)>>, B14231-02。前者是书名,后者是文件Pdf文件名。在该书中的第29章对database link 有比较详细的介绍,从第5节到第16节都是。
29-6 What are database link ? 什么是数据库链接?
29-7 What are shared database link? 什么是共享数据库链接?
29-8 Why use database link ? 为什么使用数据库链接?
Global Database Names in Database links 数据库链接中的全局数据库名称
29-9 Names for dabase links 数据库链接的名称
29-10 Types of Database Links 数据库链接的种类
29-11 Users of Database Links 数据库链接的用户
29-13 Creation of Database Links :Examples 创建数据库链接的例子
29-14 Schema objects and Database Links 模式中的对象和数据库链接的关系
29-15 Database Link Restrictions 数据库链接的限制
二,对文档的详细解释
2.1 什么是数据链接? 这个就不用说了,值得提的就是,它们是单向的作用的。
2.2 什么是共享数据库链接? 关于这个描述还是比较复杂的,这是oracle文档为什么老是这么多的缘故之一,
A:共享数据库链接 是 本地服务器进程和远程数据库之间的连接,但是多个的客户端进程可以共享它。
B: 本地的服务器和远端的服务器可以是各种的模式(shared server or decicated server),共有四种组合
C:不同的用户可以通过一个网络连接来访问远程的模式对象。
D:一个共享的数据库链接可以在不同的会话间共享。而非共享的数据库连接不能。
E:如果服务器是共享型配置的,共享连接是直接在共享服务器上的一个进程上建立的 。而非共享类型的
数据库链接必须通过分发器来创建,需要分发器的上下文切换,数据也必须通过这个分发器。
2.3 为什么用数据库链接? 这个是想当然的,您不必要成为远程数据库的用户就可以访问远程数据库的对象。
2.4 数据库链接中的全局数据命名。 关于这个则必须了解每个数据库的全局命名。
一个数据库的全局数据库命名,在创建的时候已经建立起来了,它是被初始化参数
DOMAIN_NAME,DB_NAME. 最终它们的组成方式和一般的站点的组成是一样的,越大的放在越后面。
譬如某个数据库的名称可以使 Stocks.Fuzhou.Fz.cn
2.5 数据库链接的命名方式。
这是和初始化参数global_names密切相关的,如果是TRUE,则本地的DBLINK必须和远程的服务器的
GLOBAL NAME同名,否则就可以是任意的。
ORACLE 建议 您使用全局的命名方式,因为许多的特性都要求使用这个,包括数据的复制。
2.6 类型
分为 PRIVATE ,PUBLIC,和GLOBAL 。
PRIVATE只能在某个数据库中的某个模式下创建,并且也只能在这个模式下使用。用户是特定的。
PUBLIC可以被一个数据库中的不同用户使用,创建者必须是PUBLIC.
GLOBAL可以被一个ORACLE网络中的所有服务器使用,但是这个网络中必须有目录服务器(DIRECTORY
SERVER),而这个数据库链接就是被自动创建和存储在目录服务器上的。创建者必须是目录服务器上的
PUBLIC.
2.7 链接中的用户。 指的是链接串中用户。
譬如 Create database link SP connect to User using 'Sp';
这个connect to后面连接的用户可以是当前连接的用户(不输入用户(,也可以是关键字current_user ,
也可以指定了用户的。
关于用户的内容有许多,具体的看pdf.
2.8 模式对象和链接的关系。 使用schema.object@global_database_name来访问远程的数据对象。
2.9 限制或者局限。
。Grant privileges on remote objects 不能分配权限
■ Execute DESCRIBE operations on some remote objects. The following remote
objects, however, do support DESCRIBE operations:
– Tables
– Views
– Procedures
– Functions
不能对表格,视图,过程和函数使用desc操作
■ Analyze remote objects 不能分析远程对象
■ Define or enforce referential integrity 不能定义或者强制关系一致性
■ Grant roles to users in a remote database 不能给非远程用户赋予角色
■ Obtain nondefault roles on a remote database. For example, if jane connects to
the local database and executes a stored procedure that uses a fixed user link
connecting as scott, jane receives scott's default roles on the remote database.
Jane cannot issue SET ROLE to obtain a nondefault role. 不能获得远程服务器上的非默认对象,当
用指定链接的时候。
■ Execute hash query joins that use shared server connections 不能执行哈希查询的连接当使用共享服务区器上的连接的时候。
■ Use a current user link without authentication through SSL, password, or NT
native authentication 必须用SSL或者NT的方式进行验证。
2.10 关于访问远程对象的权限
这个取决与connect to 之后的用户的权限。一般我们都用FIXED的方式。
CREATE DATABASE LINK STU CONNECT TO USER IDENTIFIED BY PWD USING 'CONNSTR';
三,对SQL的限制
关于这个,没有太多的描述,首先一般赋予SQL的限制都必须遵循,然后才是关于DBLINK的。
四,附录 关于GLOBAL_NAME的处理
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
HOTCRM.US.ORACLE.COM
SQL> alter database rename global_name to HOTCRM.HOT.FJ.CN /
Database altered
SQL> SELECT * FROM GLOBAL_NAME;
GLOBAL_NAME
--------------------------------------------------------------------------------
HOTCRM.HOT.FJ.CN
查看系统的GLOBA_NAMES设置方法之一
SQL> show parameters GLOBAL_NAMES;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
查看系统的GLOBA_NAMES设置方法之二
SQL> select name,value from v$parameter where name in ('global_names','db_domain');
NAME VALUE
----------------------------------------------------------------
db_domain
global_names FALSE
修改默认的global_names布尔值
alter system set global_names=false;
alter system set global_names=true;