Oracle入门(十二J)之同义词

转载自 oracle同义词

一、创建同义词

--普通用法
create [or replace] [public] synonym [schema.] 同义词名称 for [schema.] object [@dblink];--创建专有(私有)同义词
create synonym sysn_test for test;--创建公共同义词
create public synonym public_sysn_test for test;

注意: 

1、创建同义词之前需要先给用户/角色赋值相关的权限 例如:用管理员SYS账号给TEST账号赋予创建同义词CREATE SYNONYM的权限;

grant create synonym to test;
2、在同一个数据库的不同用户下创建同义词(要在UAERA用户下创建UAERB用户下TABLEB表的同义词)

首先我们需要给userA用户赋予创建同义词的权限:

grant create synonym to usera;

然后,我们还需要给USERA用户赋予select TABLEA的权限,该权限是在USERB用户下赋值的:

grant select on tableb to usera;

最后,我们就可以在USERA用户下创建同义词:

create or replace synonym syno_tableb for userb.tableb;

3、如何创建一个远程数据库上的某张表的同义词? 首先创建一个database link(数据库连接)来扩展访问,然后给当前用户赋予创建同义词的权限,最后创建同义词:

create synonym syno_table_name for table_name@db_link;

4、在不同的数据库之间如何创建同义词? 问题描述:在两个数据库中创建同义词。解决办法:在一个数据库中的某个用户下建立远程数据库表的同义词。 首先建立数据库连接,保证能访问远程数据库表,然后建立同义词。 例如:先创建数据库连接(我本地网络服务名为db2,数据库连接名为db3)

create database link db3connect to system identified by manager using 'db2';
这时db2数据库中的user表就可以看到了:
select * from user@db3;
创建同义词:
create synonym syno_user for user@db3;
这时就可以访问远程的user表了:
select * from user;


二、查看同义词

select * from user_synonyms;//用户级别的同义词

select * from dba_synonyms;//系统级别的同义词


三、删除同义词

drop [public] synonym [schema.] 同义词名称 [force];
drop synonym sysn_test;
drop public synonym public_test;--当同义词的原对象被删除时,同义词并不会被删除

    编译同义词 ALTER SYNONYM T COMPILE;--当同义词的原对象被重新建立时,同义词需要重新编译 对原对象进行DDL操作后,同义词状态会变成invalid;当再次引用这个同义词时,同义词会自动编译,状态会变成valid,无需人工干预,当然前提是不改变原对象的名称。 

    同义词概念 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能。

    同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、物化视图、序列、函数、存储过程、包、同义词等等,数据库管理员都可以根据实际情况为他们定义同义词。 

    同义词分类 Oracle同义词有两种类型,分别是Oracle公用同义词与Oracle私有同义词。普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。 

1)Oracle公用同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

 2)Oracle私有同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。 

同义词作用 

1) 多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名.object名的形式,采用了Oracle同义词之后就可以隐蔽掉user名,当然这里要注意的是:public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。 

2) 为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个Oracle同义词来简化sql开发。 

3)为分布式数据库的远程对象提供位置透明性。 

4)Oracle同义词在数据库链接中的作用 数据库链接是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。 Create database link 数据库链名 connect to user名 identified by 口令 using ‘Oracle连接串’; 访问对象要通过 object名@数据库链名。同义词在数据库链中的作用就是提供位置透明性。 

同义词的权限与同义词相关的权限有CREATE SYNONYM、CREATE ANY SYNONYM、CREATE PUBLIC SYNONYM三种。 

1、用户在自己的模式下创建私有同义词时必须拥有CREATE SYNONYM权限,否则不能创建私有同义词(报ORA-01031错误);

2、如果需要在其它模式下创建同义词,则必须要具有CREATE ANY SYNONYM的权限; 

3、创建公有同义词则需要CREATE PUBLIC SYNONYM系统权限。

    在存储过程中被访问公共同义词时经常会遇到的一个错误: 创建一个同义词后,用sql可以访问,也可以修改数据,但是在存储过程中用到这个同义词的时候会报“表或视图不存在”的错误,查了一下,发现原因如下:在存储过程中访问公共同义词,必须直接对用户授权,而不能通过角色授权。

grant all on prc_bj_sync_circuit_data_all(同义词) to public;
//public表示是所有的用户,all权限包括select、update、insert、alter、index、delete,不包括drop
    共有同义词和私有同义词能否同名?如果可以,访问同义词时,是公有同义词优先还是私有同义词优先? 可以同名,如果存在公有同义词和私有同义词同名的情况,在访问同义词时访问的是私有同义词指向的对象。
为什么OE用户创建的公用同义词,HR用户不能访问呢? 因为HR没有访问OE模式下对象的权限,如果OE模式给HR用户赋予了select对象等权限,那么HR用户即可访问。
    对象、私有同义词、公有同义词三者是否可以同名? 对象(表)与私有同义词不能同名,否则会报ORA-00955的错误;对象(表)可以和公有同义词同名,在访问时,优先访问的是对象(表)的内容,删除对象(表)之后,访问到的是公有同义词。既:当存在同名对象和公有同义词的时候,数据库优先选择对象作为目标;当存在同名私有对象和共有对象的时候,数据库优先选择私有同义词作为目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21.内存换出

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.有内存换入就有内存换出。 3.因为物理内存空间有限,n次(第n页)换入后导致物理内存用完,则n1次&…

antd vue表单上传文件_vue+axios+antD的上传图片踩坑

一开始使用了实验室大佬封装的axios结合formData进行图片上传,然而传递给后台的formData是空的,打印出来的form又确实是存在的,百度搜了一大推,于是借鉴了百度的做法。1.引入axios import axios from ‘axios‘;2.创建一个新的axios,const …

移动web开发调试工具AlloyLever介绍

简介 web调试有几个非常频繁的刚需:看log、看error、看AJAX发包与回包。其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持。如你所见: 特征 点击alloylever按钮之间切换显示或隐藏工具面板Console会输出所有用户…

Oracle入门(十三A2)之单行函数

一、函数介绍 功能:改变数据输出形式或进行数据运算输出二、单行函数函数格式 函数说明abs(n) 返回n的绝对值floor(n) 返回小于等于n的最大整数ln(n) 返回n的自然对数&#xff…

22.IO与显示器

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.显示器是输入型外设; 3.本章主要内容是讲 显示器是如何被驱动的;或操作系统是如何让用户来使用显示器的; 4.Pri…

d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?

(这是D3的数据)主板芯片组IntelHM76CPU系列英特尔酷睿i53代系列CPU型号Intel酷睿i53210MCPU主频2.5GHz最高睿频3100MHz总线规格DMI5GT/s三级缓存3MB核心类型IvyBridge核心/线程数双核...(这是D3的数据)主板芯片组Intel HM76CPU系列英特尔 酷睿i5 3代系列CPU型号Intel 酷睿i5 32…

[开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

一 ,为什么要造轮子 有兴趣的同学可以去各大招聘网站看一下爬虫工程师的要求,大多是JAVA,PYTHON甚至于还有NODEJS,C,再或者在开源中国查询C#的爬虫,仅有几个非常简单或是几年没有更新的项目。从我看的一些文…

Oracle入门(十三B)之高级查询(上)

下章:Oracle入门(十三C)之高级查询(下) 一、多表格查询 (1)定义将两个或两个以上的表格,按照一定的关系连接起来进行查询。(2)多表格查询分类 连接查询嵌套查…

23.键盘

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.键盘 是输出型外设; 【1】外设工作原理 【图解】外设工作原理: 步骤1:Cpu向外设控制器发出指令(如…

like左匹配索引失效_Mysql索引失效的情况

一、前提条件1、创建三张测试表:DROP TABLE IF EXISTS user;CREATE TABLE user (idint(11) NOT NULL,name varchar(25) DEFAULT NULL,ageint(11) NOT NULL DEFAULT 0,update_time datetime DEFAULT NULL,first_name varchar(25) DEFAULT NULL,last_name varchar(25)…

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心。最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示&#x…

24.原生磁盘的使用

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.磁盘操作抽象 第1层抽象:通过盘块号读写磁盘(或逻辑盘块号);第2层抽象:用队列缓存多个…

Oracle入门(十三C)之高级查询(下)

上章:Oracle入门(十三B)之高级查询(上) 四、常见组函数 SUM、AVG、COUNT、MIN、MAX分组函数忽略null 值。不能在WHERE 子句中使用组函数。MIN 和MAX 可用于任何数据类型;SUM、AVG只能用于数字数据类型五、子…

微软将降低Visual Studio对操作系统的影响

在过去几年中,为了将Visual Studio变成Windows上的第一开发工具,而不管用户的目标平台是什么,微软作出了重大努力。最近收购Xamarin及通过大力支持开源工具来支持非Windows设备,极大地增加了它对于各类开发人员的用处。这一做法的…

代码设置margintop_关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)...

关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用line-height高度,无法居中,发现源码.navbar-brand 设置了 padding: 15px 15px;(默认…

Oracle入门(九A)之用户的权限或角色

转载自 查看Oracle用户的权限或角色 前几天被问到一些关于权限和角色的问题,今天抽时间总结一下如何查看Oracle用户的权限或角色,在之前的博文中,写过 SYS,SYSTEM,DBA,SYSDBA,SYSOPER的区别与联系 以及 Oracle中定义者权限和调用者权限案例分…

25.从生磁盘到文件

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.文件:煮熟的磁盘,或熟磁盘; 本节的主要内容是讨论 如何从文件得到盘块号; 3.磁盘操作抽象&#xf…

Storm 1.0.1发布 .NET 适配也已到来

Apache Storm 1.0.0刚发布不久,1.0.1版本也在几天前到来;该版本主要是完成一些BUG修复和小的改进,通过一段时间新版本的使用,特将个人感受和一些遇到的问题归纳如下;另外 .NET 版本的 Storm 适配器也已经发布&#xff…

布隆过滤器速度_详解布隆过滤器的原理、使用场景和注意事项

今天碰到个业务,他的 Redis 集群有个大 Value 用途是作为布隆过滤器,但沟通的时候被小怼了一下,意思大概是 “布隆过滤器原理都不懂,还要我优化?”。技术菜被人怼认了、怪不得别人,自己之前确实只是听说过这…

Oracle入门(十四)之PL/SQL

一、PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展。 (1)(2)(3)(5)(6)(7)数据类型Number 数字型Varchar2 …