Oracle_高级功能(3) synonym和database link
一、同义词synonym
connect sys/123 as sysdba;
select * from emp;
ORA-00942: 表或视图不存在
create synonym emp for scott.emp;
select * from emp;
1.定义
同义词是一个模式对象的别名。
可以为一个表或视图、 序列、 PL/SQL 程序单元、 用户定义的对象类型、
或另一个同义词等创建同义词。
因为同义词只是一个别名,因此除了要在数据字典存储其定义之外,不需要其它存储。
2.用途
同义词可以为数据库用户简化 SQL 语句。
同义词也可以用于隐藏底层模式对象的标识和位置。
如果必须重命名或移动底层对象,仅需要重新定义同义词。
基于同义词的应用程序,可以无需修改而继续工作。
3.分类
分类:私有同义词、公共同义词。
私有同义词与其所有者在同一个模式中,只有其所有者对其可用性具有控制权。
公共同义词由名为PUBLIC的用户组所有,并且能被每一个数据库用户访问。
4.语法:
4.1 创建
create [public] synonym syn_name for <obj>;
说明:
私有同义词即不带public关键字;
公共同义词即带public关键字。
为了方便使用,syn_name同义词名一般和表名保持一致。
举例:
create synonym emp for scott.emp;
create public synonym dept for scott.dept;
select * from emp;
select * from dept;
--alter user system identified by system;
4.2 更名(只适用于私有同义词)
rename syn_name to <new_syn>;
举例:
rename emp to syn_emp;
rename syn_emp to emp;
--rename dept to syn_dept;
4.3 删除
drop [public] synonym syn_name;
说明:
删除私有同义词时不带public关键字;
删除公共同义词时必须带public关键字。
举例:
drop synonym emp;
drop public synonym dept;
4.4 数据字典
select * from dba_synonyms where synonym_name in ('EMP','DEPT')
select * from all_synonyms;
select * from user_synonyms;
5.限制:
请尽量少用公共同义词,因为它们使数据库整合更困难。
过度使用公共同义词会导致应用程序之间的命名空间冲突。
同义词本身不是安全可控的。
当在一个同义词上授予对象权限时,其实是在底层对象上授予权限。
同义词在grant 语句中只作为对象的别名。
二、database link
1.定义
两个oracle数据库实例之间直接通信的方式。
database link是定义一个数据库到另一个数据库的路径的对象,
database link允许用户查询远程数据库中的表及执行远程程序。
在任何分布式环境里,database link都是必要的。
另外要注意的是database link是单向的连接。
在创建database link的时候,Oracle在数据字典中保存相关的database link的信息,
在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息
访问相应的远程数据库以完成相应的工作。
建立database link之前需要确认的事项:
确认从local database到remote database的网络连接是正常的,tnsping要能成功。
确认在remote database上面有相应的访问权限。
确认本地账户是否有建立dblink的权限。
如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限:
select * from user_sys_privs where privilege like upper('%database link%');
如果没有,则需要使用 sysdba 角色给用户赋权:
grant create public database link to username;
2.database link分类
分为三类:Private、Public、Global。
2.1 Private
创建database link的user拥有该database link权限
在本地数据库的特定的schema下建立的database link。
只有建立该database link的schema的session能使用这个database link来访问远程的数据库。
同时也只有该Owner能删除它自己的private database link。
2.2 Public
Owner是PUBLIC.
Public的database link是数据库级的,
本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link
来访问相应的远程数据库。
2.3 Global
Owner是PUBLIC.
Global的database link是网络级的,
When an Oracle network uses a directory server,
the directory server automatically create and manages global database links (as net service names)
for every Oracle Database in the network.
Users and PL/SQL subprograms in any database can use a global link
to access objects in the corresponding remote database.
3.创建dblink所需的权限
3.1 create database link
local creation of a private database link.
3.2 create public database link
local creation of a public database link.
3.3 create session
remote creation of any type of database link.
4.步骤
4.1 检查远程服务器网络
ping 192.168.1.105
4.2 配置本地实例名
修改tnsnames.ora文件 或用Net Configuration Assistant工具配置
4.3 登录远程数据库
IP、实例名、账户、密码、端口
4.4 创建dblink
4.4.1 Private
基本语法
CREATE database link link_name
[CONNECT TO user_name IDENTIFIED BY password]
[USING 'connect_string']
举例:
create database link 数据库连接名
connect to 用户名 identified by 密码
using '本地配置的实例名'
connect sys/123 as sysdba;
create database link ORCL111 connect to scott identified by "123" using 'ORCL111';
select * from dept@oracle;
create public database link ORCL_111 connect to scott identified by "123" using 'ORCL111';
select * from dept@dblink_lv;
drop database link ORCL111;
select * from emp@ORCL111;
4.4.2 PUBLIC
基本语法
CREATE public database link link_name
[CONNECT TO user_name IDENTIFIED BY password]
[USING 'connect_string']
5.使用dblink
select * from 表名@dblink_name;
create or replace view 视图名 as (select 字段 from 用户.表名@dblink_name);
create or replace synonym 同义词名 for 表名@dblink_name;
select func_dept_job@ORCL_111('SMITH') from dual; --调用远程函数
exec proc_emp_sal@ORCL_111(1,10); --调用远程过程
6.删除dblink
drop database link dblink_name;
7.限制
创建 DBLink 很简单,但是在使用中后台却出现锁,
查看这个锁的方法可以去 console 中看到或者查询数据库。
每次使用dblink查询的时候,均会与远程数据库创建一个连接,dblink 应该不会自动释放这个连接,
如果是大量使用 dblink 查询,会造成 web 项目的连接数不够,导致系统无法正常运行。
8.完整语法
CREATE [SHARED][PUBLIC] database link link_name
[CONNECT TO [user][current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
说明:
1) 权限:
创建数据库链接的帐号必须有create database link或create public database link的系统权限,
用来登录到远程数据库的帐号必须有create session权限。
这两种权限都包含在connect角色中(create public database link权限在dba中)。
一个公用数据库链接对于数据库中的所有用户都是可用的,
而一个私有链接仅对创建它的用户可用。
由一个用户给另外一个用户授权私有数据库链接是不可能的,
一个数据库链接要么是公用的,要么是私有的。
2)link :
当source端的数据库GLOBAL_NAME=TRUE时,
link名必须与远程数据库的全局数据库名global_name相同;
否则,可以任意命名。
3)current_user使用该选项是为了创建global类型的dblink。
在分布式体系中存在多个数据库的话,
如果想要在每一个数据库中都可以使用同样的名字来访问数据库a,
那在每个数据库中都要创建一个到数据库a的db_link,太麻烦了。
所以现在有这个选项,只要创建一次。
所有的数据库都可以使用这个db_link来访问了。
要使用这个特性,必须有oracle nameserver或者ORACLE目录服务器。
并且数据库a的参数global_names=true。
4)connectstring:连接字符串,
tnsnames.ora中定义远程数据库的连接串,也可以在创建dblink的时候直接指定。
5)username、password:远程数据库的用户名,口令。
如果不指定,则使用当前的用户名和口令登录到远程数据库,
当创建connected user类型的dblink时,需要如果采用数据字典验证,则需要两边数据库的用户名密码一致。
创建database link选项说明
6)SHARED 、不指定
不指定:默认值建立一个dedicated(专用)的连接,每一个使用database link的本地session都会对应有一个远程数据库的session。
SHARED:创建一个共享的数据库连接,同时要指定database link_authentication。
使用shared方式的 database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。
在使用shared database link的时候,到database link的连接会在连接以后与本地连接断开,
为防止未授权的session使用此链接而要求在创建shared database link的时候必须要指定database link_authentication。
7)PUBLIC、不指定
不指定: 默认值建立一个private的database link
PUBLIC: 公共连接,这样的连接可以被数据的所有的用户访问
8)database link用户验证方法取值说明
不指定:默认值采取Connected User的验证方法
CONNECT TO CURRENT_USER:采取CURRENT_USER的验证方式
CONNECT TO user_name IDENTIFIED BY password:采取Fiexed User的验证方式
Oracle_高级功能(3) synonym和database link的更多相关文章
- Oracle_高级功能(10) 备份恢复
备份与恢复Oracle数据库有三种标准的备份方法,分别是导出/导入(EXP/IMP).热备份和冷备份.导出/导入是一种逻辑备份,冷备份和热备份是物理备份.一.导出/导入(Export/Import)利 ...
- Oracle_高级功能(9) 性能优化
1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...
- Oracle_高级功能(7) 数据字典视图和动态性能视图
oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...
- Oracle_高级功能(5) 用户、角色、权限
一.用户(模式)1.定义用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作模式(schema):是某个用户所拥有的对象的集合.具有创建对象权限并创建了对象的用户称为拥有某 ...
- Oracle_高级功能(4) 数据库存储结构
数据库存储结构分为:物理存储结构和逻辑存储结构.物理结构和逻辑结构分开,对物理数据的存储不会影响对逻辑结构的访问.1.物理存储结构 数据库文件 os block2.逻辑存储结构 tablespace ...
- Oracle_高级功能(2) 索引
1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...
- Oracle_高级功能(6) 分区
oracle分区表1.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区. 表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上 ...
- Oracle_高级功能(8) 事务和锁
Oracle数据库事务1. 事务定义在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元 ...
- Oracle_高级功能(1) 数据库设计
1.三范式规范化关系模式称为范式.第一范式:在一个关系模型R中,如果R的每一个属性的值域中的值都是不可再分的最小数据单位, 则称R为第一范式(1NF).第二范式:如果一个关系模型R属于1NF,并且R的 ...
随机推荐
- SQL Server 中BIT类型字段增删查改那点事
话说BIT类型字段之前,先看“诡异”的一幕,执行Update成功,但是查询出来的结果依然是1,而不是Update的2 当别人问起我来的时候,本人当时也是处于懵逼状态的,后面联想具体的业务突然想起来这个 ...
- php缩小png图片时,不损失透明色的办法
做站点时,通常要将图片缩小成合适的尺寸,jpg图片缩小比较容易,png图片如果带了透明色的话,按照jpg的方式来缩小的话,就会造成透明色损失.那么如何处理,才能保存透明色呢? 主要是利用gd库的两个方 ...
- Downloadftp
#!/bin/bash FILENAME=$ DSTDIR=$ FTPSRV=ip FTPUSER="user" FTPPWD="password" SRCDI ...
- (转)JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题
https://blog.csdn.net/l1028386804/article/details/53439755 在通过JavaScript将对象类型的参数通过JSON.stringify转换成字 ...
- 做好Unity4.x开发项目规划
1. 是否要用lua 2. (对于需操作的游戏)客户端游戏如何做战斗验证 下面列举小坑吧.不建议都绕开,毕竟没有那么多时间做前期调研的. 对应版本Unity4.x 1. 客户端程序层面 总的来说C#超 ...
- 三种方式监听NGUI的事件方法
NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定 ...
- Java学习03 (第一遍)
Java是面向对象的语言,函数是面向过程语言的叫法,比如C语言,在Java中一般称之为方法. 构造方法的作用是实例化对象,每个类中都有,即使不写程序也会分配一个默认无参数的构造方法. Java中都是对 ...
- NYOJ201-作业题-(dp)
201-作业题 内存限制:64MB 时间限制:3000ms 特判: No通过数:9 提交数:28 难度:3 题目描述: 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计 ...
- 内存占用过高 kill 调整mysql内存占用
通过 /var/log/messages 查看 被系统kill掉的进程 如果是自己崩溃会产生 hs_err_ 修改mysql my.cnf innodb_buffer_pool_siz ...
- spring boot springmvc视图
pring boot 在springmvc的视图解析器方面就默认集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在视图引擎上就已经集成自动 ...