db_LINK详解东子
database link作用 一、創建database link 第一种: 1.根据远端的信息用Net Manager设置好能连接远端的服务及监听程序。 connect to yhd identified by neu 第二种: create database link linkyhd 二、使用DB link 查询远端数据库里的表 SELECT …… FROM 表名@数据库链接名; 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink名”而已。 三、刪除Db Link 三、同义词 创建: CREATE SYNONYM 同义词名 FOR 表名; 刪除: drop SYNONYM 同义词名 ; 数据库全局名称可以用以下命令查出: SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK'; Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。 Global_name:对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>命令进行修改,然后修改相应参数。 Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。 Net service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。 实例 就是管理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成) 数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据 服务名 就是对外公布的名称,为网络监听服务 其实,在我们传统的概念里,数据库是一个统称的名字,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念
1、一个Oracle数据库系统中可以同时安装几个数据库,每一个数据库对应一个唯 一的实例,但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务 器 2、只是一个名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中, 为了方便吧,有些是为了传统习惯的延续,有些是为了更方便的使用 3、NET EASY CONFIG操纵的应该是主机字符串,是为客户端服务的 一个数据库可以对外公布多个服务名(SERVICE_NAMES) 一个客户端也可以用多个主机字符串连接到同一个数据库服务器上 4、一个OS上可以装多个Oracle数据库(小的概念),每个库可以对外公布多个服 务名,都通过init.ora和listener.ora来实现 TNS Ping Utility for Linux: Version 9.2.0.7.0 - Production on 02-JUL-2009 15:16:52 Used TNSNAMES adapter to resolve the alias 2、创建数据库链接, /home/oracle/>sqlplus /nolog 3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym 4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令: 参考 http://moonsoft.itpub.net/post/15182/125559 测试条件: 建立步骤: 2、新建一个连接tnsxj,用于连接本地的sidxj数据库,以tnsxj/userxj/xj123登录到PLSQL中。 5、至此,在新疆的计算机上建立了一个DBLINK,用于连接到北京的数据库上, 6、关于global_name参数的测试 select * from bj_test@a--查询远程表 以上脚本全部在ORACLE817下通过测试。 创建 CREATE public database link test_link CONNECT TO scott IDENTIFIED BY tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = LEE) ) )'; --使用 select ename from emp@test_link; --删除 drop public database link TEST_LINK; 一:dblink创建: 1、已经配置本地服务 create public database link toBeJing connect to scott 数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义. 2、直接建立链接 create database link toBeJing connect to scott identified by tiger host=数据库的ip地址,service_name=数据库的ssid。 其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。 注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。 1.先创建PUBLIC DATABASE LINK,不用指定用户和密码 scott@TEST>conn system/test 2.再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),指定用户和密码 实际上相当于: CREATE DATABASE LINK orcl USING 'BEJING' CONNECT TO scott IDENTIFIED BY tiger; db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。 看看创建db link语法,你对这两种类型就比较清楚了。 创建connected user的db link语法: 创建fixed user的db link语法: db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。 所以,oracle模仿域名搞出一个global_name,global_name=db_name+db_domain。 数据库全局名称可以用以下命令查出 如果global_names=true,那么db link的命名要和远程数据库的global_name相同; 查询global_names是true还是false,在pl/sql中的命令窗口(不是sql窗口)执行:show parameter global_names 二、dblink查询: 查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令: 三、dblink删除: DROP PUBLIC DATABASE LINK toBeJing 四、dblink使用: SELECT……FROM表名@数据库链接名; 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。 例:查询北京数据库中emp表数据 select * from emp@toBeJing; 五、同义词配合: 第四点中from emp@toBeJing可以创建同义词来替代: CREATE SYNONYM同义词名FOR 表名@数据库链接名; 如:create synonym bj_scott_emp for emp@toBeJing; 于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@toBeJing DB LINK是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。 当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink. 创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库: select * from user_sys_privs t where t.privilege like upper('%link%'); 1 SYS CREATE DATABASE LINK NO 2 SYS DROP PUBLIC DATABASE LINK NO 3 SYS CREATE PUBLIC DATABASE LINK NO 可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。 在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户 grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott; 然后以scott用户登录本地数据库 1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。 create public database link to_bylw connect to scott identified by tiger using 'bylw'; 其中to_bylw是你创建的dblink名字,bylw是远程数据库的实例名,scott/tiger是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'bylw'中scott.tb_test表,sql语句如下所示 select * from scott.tb_test@to_bylw; 2.创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库, create database link to_test connect to scott identified by tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bylw) ) )'; 第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。第一种情况tnsnames.ora文件中信息如下: bylw = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bylw) ) ) 两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据,这个时候可以使用dblink。 其实dblink和数据库中的view差不多,建dblink的时候需要知道待读取数据库的ip地址,ssid以及数据库用户名和密码。 创建可以采用两种方式: 1、已经配置本地服务
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’; 2、未配置本地服务
host=数据库的ip地址,service_name=数据库的ssid。 其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。 数据库连接字符串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义. 数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一样 数据库全局名称可以用以下命令查出 SELECT * FROM GLOBAL_NAME; 查询远端数据库里的表 SELECT …… FROM 表名@数据库链接名; 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。 附带说下同义词创建: CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; 删除dblink:DROP PUBLIC DATABASE LINK linkfwq。 如果创建全局dblink,必须使用systm或sys用户,在database前加public。
DBLINK详解
1.创建dblink语法:
CREATE [PUBLIC] DATABASE LINK link
CONNECT TO username IDENTIFIED BY password
USING ‘connectstring’
说明:
1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
2)link : 当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。
4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。
2.删除数据库链接的语句:
DROP [PUBLIC] DATABASE LINK zrhs_link
3.查看已创建的dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
4.dblink的引用:
[user.]table|view@dblink
如:
SELECT * FROM worker@zrhs_link;
SELECT * FROM camel.worker@zrhs_link ;
5.创建同义词:
对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:
CREATE SYNONYM worker_syn FOR worker@zrhs_link;
6.创建远程视图:
CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…;
现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该用户必须有访问数据库链接的权限。
其他:
修改GLOBAL_NAME的方法:
1.在远程数据库的init.ora文件中将global_names设为false。
或者
2.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;
修改后重新启动数据库设置才能生效。
数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;
===== dblink 实战 ======
1.dblink分为公有和私有两类。
公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字。
公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。(测试并确认,不过测试是在一个实例多个用户之间进行)
私有dblink只有创建者可以访问,其上的同义词不能被其他用户访问。需为用户创建视图,并将视图授权给所需用户后,用户才可访问该视图。
另外,不能将带有dblink的同义词直接授权给用户。否则报错,其等价于:
grant select on table1@user1 to user2 *
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
2.创建dblink时,可以使用连接字符串(与tnsname.ora中的),效率较高。
|
db_LINK详解东子相关推荐
- 详解mysql子查询
本文详解mysql中的子查询: 子查询分为where子查询和from子查询. where子查询包括标量子查询.列子查询.行子查询.exists子查询 from子查询包括表子查询 1.标量子查询 概念: ...
- 实战Windows Azure:微软云计算平台技术详解
实战Windows Azure:微软云计算平台技术详解 徐子岩 编著 ISBN978-7-121-14547-6 2011年10月出版 定价:69.00 元 16开 440页 宣传语:什么是真正 ...
- Android 各大厂面试题汇总与详解(持续更新)
介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...
- android子视图无菜单,Android 菜单详解
Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...
- vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解
前言 在vue项目中组件之间的通讯是很常见的问题,同时也是很重要的问题,我们大致可以将其分为三种情况: 父传子:在父组件中绑定值,在子组件中用props接收 子传父:在父组件中监听一个事件,在子组件中 ...
- xpath 取标签下所有文字内容_对Xpath 获取子标签下所有文本的方法详解
对Xpath 获取子标签下所有文本的方法详解 在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string ...
- oracle做子查询注意事项,Oracle子查询详解
Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...
- Unity动画系统详解10:子状态机是什么?
摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...
- 拉格朗日乘子法详解(Lagrange multiplier)
最近在视频的变换编码里推导最优变换(KL变换)时需要用拉格朗日乘子法,之前在机器学习的各种优化问题里也要用到这个方法,特此仔细钻研一番,总结如下: 注:这篇博客讲的很全面,这里部分参考了他的讲解. 注 ...
- 斯坦福NLP名课带学详解 | CS224n 第12讲 - NLP子词模型(NLP通关指南·完结)
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...
最新文章
- Mask R-CNN 源代码终上线,Facebook 开源目标检测平台—Detectron
- 简单的用Python实现学生信息管理
- 关于mysql的wait_timeout参数 设置不生效的问题
- C 标准库——cmath/math.h
- iOS-Core-Animation-Advanced-Techniques(二)
- 微信小程序开发常用代码
- 信息学竞赛学不学计算机史,关于信息学奥赛不得不知道的事
- 线上幽灵:世界头号黑客米特尼克自传改
- 先定一个能达到的小决心,比方读个一本书 ——《小决心》读后感 @阿狸不歌
- 云和恩墨 -全球化数据资产端到端解决方案服务商
- 关于在GET请求中使用body
- matlab如何就导数,Matlab微分和导数
- HTML5原生WebGL开发系列教程
- osgEarth 指北针显示
- 巴什博弈--Nim游戏
- Django使用新浪邮箱发送邮件
- ScrollView中嵌套原生控件+WebView+原生控件出现的WebView滑动顶部的冲突问题。
- 基于51单片机的函数/波形信号发生器
- 路径规划算法学习Day5
- AVPlayer(二)AVAsset