来自当知百科
跳转到: 导航搜索

  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 decicatedserver),共有四种组合

  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. Thefollowing 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, ifjane connects to

  the local database and executes a stored procedure that uses afixed user link

  connecting as scott, jane receives scott's default roles on theremote 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;

个人工具
名字空间

变换
查看
操作
导航
工具箱