一、同义词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的更多相关文章

  1. Oracle_高级功能(10) 备份恢复

    备份与恢复Oracle数据库有三种标准的备份方法,分别是导出/导入(EXP/IMP).热备份和冷备份.导出/导入是一种逻辑备份,冷备份和热备份是物理备份.一.导出/导入(Export/Import)利 ...

  2. Oracle_高级功能(9) 性能优化

    1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...

  3. Oracle_高级功能(7) 数据字典视图和动态性能视图

    oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...

  4. Oracle_高级功能(5) 用户、角色、权限

    一.用户(模式)1.定义用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作模式(schema):是某个用户所拥有的对象的集合.具有创建对象权限并创建了对象的用户称为拥有某 ...

  5. Oracle_高级功能(4) 数据库存储结构

    数据库存储结构分为:物理存储结构和逻辑存储结构.物理结构和逻辑结构分开,对物理数据的存储不会影响对逻辑结构的访问.1.物理存储结构 数据库文件 os block2.逻辑存储结构 tablespace ...

  6. Oracle_高级功能(2) 索引

    1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...

  7. Oracle_高级功能(6) 分区

    oracle分区表1.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区. 表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上 ...

  8. Oracle_高级功能(8) 事务和锁

    Oracle数据库事务1. 事务定义在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元 ...

  9. Oracle_高级功能(1) 数据库设计

    1.三范式规范化关系模式称为范式.第一范式:在一个关系模型R中,如果R的每一个属性的值域中的值都是不可再分的最小数据单位, 则称R为第一范式(1NF).第二范式:如果一个关系模型R属于1NF,并且R的 ...

随机推荐

  1. &符号 (弃用引用传参了,不要用!!)

    写法一 $age = function grow($age) { $age += ; return $age; } echo grow($age) echo $age 写法二 $age = funct ...

  2. nvm 安装

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash nvm install 8.9. ...

  3. mySQL遇到的问题

    学习mySQL遇到以下错误. 仔细检查才发现,是字段不一样. 所以插入数据,应该一一对应.

  4. python遇到的文件错误

    学习了json.load,运行时出现了以下错误 load读取的是前面写入的文件,如果读取的文件为空,则会出现这个错误,如果不为空,则正确.所以一定要保证读取的文件不为空.

  5. NCBI之gene系列

    1.基因系列中的data索引 2.基因ID之间的转换 对于生信,依托于别人的工具不如自己动手,由于研究发表的滞后性,往往很多工具提供的转换并不是最新的,况且开发者水平也参差不齐,理解原理才能让你来去自 ...

  6. 使用ddns搭建免费服务器

    [使用ddns搭建免费服务器] 第一步 tplink路由器提供了ddns服务,它为用户免费提供一个子tpddns.cn下的子域名,映射到你的路由器上.当启用后,只在要能接入互联网的地方,都能过此域名, ...

  7. linus jsch上传文件

    package com.osplat.util; import java.io.*; import com.jcraft.jsch.*;import com.osplat.bean.Resultmod ...

  8. python学习day7 数据类型及内置方法补充

    http://www.cnblogs.com/linhaifeng/articles/7133357.html#_label4 1.列表类型 用途:记录多个值(一般存放同属性的值) 定义方法 在[]内 ...

  9. CSS float清除浮动

    解决高度塌陷的问题 – 清除浮动 CSS中有个讨论较多的话题就是如何清除浮动,清除浮动其实就一个目的,就是解决高度塌陷的问题.为什么会高度塌陷?什么时候会高度塌陷?塌陷原因是:元素含有浮动属性 – 破 ...

  10. 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

    题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...