创建oracledblink.doc_第1页
创建oracledblink.doc_第2页
创建oracledblink.doc_第3页
创建oracledblink.doc_第4页
创建oracledblink.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

创建oracle dblink 发表时间: 2008年04月07日 23时07分 评论/阅读(/)本文地址: /blog/496696373-1207580863 物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单一的大型数据库,用户可以通过网络对异地数据库中的数据进行存取,而服务器之间的协同处 理对于工作站用户及应用程序而言是完全透明的,开发人员无需关心网络的链接细节、数据在网络节点中的具体分布情况和服务器间的协调工作过程。 数据库之间的链接建立在DATABASE LINK上。要创建一个DATABASE LINK,必须首先在建立链接的数据库上设置链接字符串,即配置一个远程数据库的本地网络服务名。链接字符串的配置参见客户端连接服务器一节。 数据库全局名称可以用以下命令查出: SELECT * FROM GLOBAL_NAME; 修改可以用以下语句来修改参数值: ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE; 、当数据库参数global_name=false时,就不要求数据库链接名称跟远端数据库名称一样。 oracle数据库之间进行连接通讯。 创建数据库链接的语法如下: CREATE PUBLIC DATABASE LINK link CONNECT TO username IDENTIFIED BY password USING connectstring 其中: -demona为用net8 easy config创建的连接字符串 目的方数据库的init.ora文件中的global_names设为false 重新启动数据库设置才能生效 或者用sys用户执行 注意:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。 一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。 创建数据库链接时,还可以使用缺省登录方式,即不指定远程数据库的用户名和密码: create public database link zrhs_link using zrhs; 在不指定用户名和口令的情况下,ORACLE使用当前的用户名和口令登录到远程数据库。 USING后面指定的是链接字符串,也就是远程数据库的网络服务名,这个服务名保存在TNSNAMES.ORA文件中,在该文件中定义了协议、主机名、端口和数据库名。 删除数据库链接的语句是: DROP PUBLIC DATABASE LINK zrhs_link 数据库链接的引用 一般情况下引用数据库链接,可以直接将其放到调用的表名或视图名称后面,中间使用一个 作为分割符: SELECT * FROM workerzrhs_link; 对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用: CREATE SYNONYM worker_syn FOR workerzrhs_link; 还可以建立一个本地的远程视图,方便使用: CREATE VIEW worker AS SELECT * FROM workerzrhs_link where ; 现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户,访问此视图,但该用户必须有访问数据库链接的权限。 对于另外一种情况,所要访问的表不在数据库链接中指定的远程帐户下,但该帐户有访问该表的权限,那么我们在表名前要加上该表的用户名: SELECT * FROM camel.workerzrhs_link ; 、当数据库参数global_name=true时,那就要求数据库链接名称跟远端数据库名称一样 数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME; atabase link(dblink)-数据库链路 创建dblink的语法: sqlcreate database link 数据库链路名 connect to 用户名 identified by 口令 using 主机字符串名; 如: sqlcreate database link # 这里的为oracle默认域名 # connect to scott identified by tiger using sun; 1)dblink名必须与远程数据库的全局数据库名(global_name)相同; 2)用户名,口令为远程数据库用户名,口令; 3)主机字符串为本机tnsnames.ora中定义的串; 4)两个同名的数据库间不得建立dblink; 然后,你就可以通过dblink访问远程数据库了。 如: sqlselect * from 表名; 还可以建立快照(snapshot)通过dblink实现远程数据自动传输。 查看所有的数据库链接,进入系统管理员SQL操作符下,运行命令: SQLselect owner,object_name from dba_objects where object_type=DATABASE LINK; 创建可以采用两种方式: 1、已经配置本地服务 create public database link fwq12 connect to fzept identified by neu using fjept CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING 本地配置的数据的实例名; 2、未配置本地服务 create database link linkfwq connect to fzept identified by neu using (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 2)(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = fjept) ) ); host数据库的ip地址,service_name数据库的ssid。 其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。 查询远端数据库里的表 SELECT FROM 表名数据库链接名; 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名dblink服务器”而已。 附带说下同义词创建: CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名数据库链接名; 删除dblink:DROPPUBLICDATABASELINK linkfwq。 如果创建全局dblink,必须使用systm或sys用户,在database前加public。教你轻松掌握数据库链路的建立和使用来源:赛迪网 编辑:若水 时间:2008-05-06 22InDesign DB PublishingEasyCatalog - a complete database publishing Ads by Google 一、数据库链路的建立: 1、数据库链路的建立语法一般是:CREATE DATABASE LINK db_link_name CONNECT TOuser_name IDENTIFIED BY password USING tns_name;其中:DB_LINK_NAME:是所要连接的数据库的服务名,也就是该数据库的真实名称(通常就是SID)。USRE_NAME:是所要连接的用户名称。PASSWORD:是所要连接的用户的密码。TNS_NAME:是所要连接的数据库的服务命名,也就是在本机上建立的NET8服务命名。2、当使用当前用户做为连接者时,语法可以是:CREATE DATABASE LINK db_link_name CONNECT TO CURRENT_USER USING tns_name (某些情况下这种方法建立的数据库链路都未处于活动状态,不知道是不是语法有误,暂不推荐使用)。3、当使用已连接用户做为连接者时,语法可以是:CREATE DATABASE LINK db_link_nameUSING tns_name 。4、要建立公共的数据库链路语法可以是:只要在CREATE后加PUBLIC关键字就可以了。5、假如你在init.ora文件里的global_names = true只能用上面的方法,如果global_names =false,DB_LINK_NAME不一定要是数据库的真实名称,可以是一个随意的名字。也就是说,当global_names = true时,数据库的每一个用户只能有一个数据库链路,而当global_names = false时,每一个用户都可以建立N多个链路,但一般情况下是没有意义的。 二、数据库链路的使用:1、数据库链路的主要用途就是实现对远程数据库的访问,你可以通过数据库链路直接对远程数据库的表进行读写,也可以在本地建立远程数据库的视图和同意词,另外在进行双机热备份时也要用到数据库链路。2、直接访问:SELECT * FROM user_name.table_namedb_link_name;INSERT,UPDATE,DELETE等也同样适用。3、建立同义词:CREATE SYNONYM user_name.synonym_name FOR user_name.table_namedb_link_name ; 视图也是一个道理。4、由于双机热备是另一个复杂的问题,本文暂不赘述。如果想在两个数据库间实现几个表的同步,做一个双机太复杂,可以考虑用触发器来解决,在触发器中用以上方法引用远程表,对其进行插入,删除也可以做到同步。 参考示例如下: 数据库之间的链接建立在DATABASE LINK上。要创建一个DB LINK,必须先在每个数据库服务器上设置链接字符串。1、链接字符串即服务名,首先在本地配置一个服务名,地址指向远程的数据库地址,服务名取为将来你要使用的数据库链名: 2、创建数据库链接,进入系统管理员SQL操作符下,运行命令: SQLcreate public database link beijing connect to scott identified by tiger using tobeijing; 则创建了一个以scott用户和北京数据库的链接beijing,我们可以查询北京的scott数据: SQLselect * from empbeijing; 这样就可以把深圳和北京scott用户的数据做成一个整体来处理。 3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym SQLcreate synonym bjscottemp for empbeijing; 于是就可以用bjscottemp来替代带符号的分布式链接操作empbeijing。 4、查看所有的数据库链接,进入系统管理员SQL操作符下,运行命令: SQLselect owner,object_name from dba_objects where object_type=DATABASE LINK;如果子使用数据连接出现错误ORA-02085SQL SHOW PARAMETER GLOBAL_NAMESglobal_names booleanTRUESQL ALTER SYSTEM SET GLOBAL_NAMES=FALSE;简单查了一下,Piner的faq上没有,前面也没有人提到。使用数据连接可以很方便的引用其它数据库的数据,但是设置不当可能遇到ORA-02085错误。如果被连接对方的GLOBAL_NAMES参数设置成了TRUE,那么要求数据库连接与对方实例名有相同的名称。这样就可以通过下面3中的任意一种方法来解决:1. 修改对方的GLOBAL_NAMES参数为FALSE2将对方的GLOBAL_NAME设置成与数据库连接相同的名称3.将数据库连接删掉重新创建成与对方实例名相同的数据库连接。下面是测试结果:SQL CREATE PUBLIC DATABASE LINK MASTER.COM USING ORA9I;数据库链接已创建。 SQL SELECT * FROM DUALMASTER.COM;SELECT * FROM DUALMASTER.COM*ERROR 位于第 1 行:ORA-02085: 数据库链接MASTER.COM与ORA9I相连结 SQL SHOW PARAMETER GLOBAL_NAMESglobal_names booleanTRUE select * from v$parameter where name = global_names; SQL ALTER SYSTEM SET GLOBAL_NAMES=FALSE; 或者修改D:Oracleadmineinfopfileinit.ora文件中global_names

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论