1、同义词synonym
connect sys/123 as sysdba;
select * from emp;
ORA-00942: 表或视图不存在
create synonym emp for scott.emp;
select * from emp;web
1.定义
同义词是一个模式对象的别名。
能够为一个表或视图、 序列、 PL/SQL 程序单元、 用户定义的对象类型、
或另外一个同义词等建立同义词。
由于同义词只是一个别名,所以除了要在数据字典存储其定义以外,不须要其它存储。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;session
4.4 数据字典
select * from dba_synonyms where synonym_name in ('EMP','DEPT')
select * from all_synonyms;
select * from user_synonyms;
5.限制:
请尽可能少用公共同义词,由于它们使数据库整合更困难。
过分使用公共同义词会致使应用程序之间的命名空间冲突。
同义词自己不是安全可控的。
当在一个同义词上授予对象权限时,实际上是在底层对象上授予权限。
同义词在grant 语句中只做为对象的别名。oracle
2、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。 ide
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的验证方式