博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据的表前缀
阅读量:4188 次
发布时间:2019-05-26

本文共 2274 字,大约阅读时间需要 7 分钟。

很多系统的数据库都给数据表加上前缀,这是为什么呢?
因为每个系统都有一个对应的数据库,有时多个系统都共用一个数据库,而数据表的名称可能相同,为了区分不同系统的数据表,所以每个系统的数据表都有一个自己的前缀,而且加上前缀,相当于对数据表进行了分类,从名字上看就知道哪个表是哪个系统的数据库中的,方便管理。
前缀指数据库中使用的用户名
如:select * from abc.tablename@def
abc是schema,oracle中的模块,通常是指数据库的用户,def是oracle中的dblink,创建dblink用于配置数据库连接的别名,sql的意思是在查询def库中abc用户下的表
前缀oracle叫schema
有可能是用户,也有可能是表空间
表名带有$符号一般都是数据字典的视图或同义词。
例如:v$database数据库运行信息、v$datafile所有数据文件信息
oracle的dblink的使用
在跨数据库查询的时候时常会用到dblink,例如:两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下面的某个schema的数据,这个时候,使用dblink能够很方便的实现。
dblink和数据库中的view功能类似,建立dblink的时候需要直接到待读取数据库的ip地址,ssid以及数据库的用户名和密码。
第一部分:如何创建dblink
dblink的创建有两种方式:
1、在本地数据库tnsnames.ora文件中配置要访问的目标数据库信息
create [public] database link to_mai
connect to scott identified by tiger using 'to_mai';
其中第一个to_mai是将要创建的dblink的名字,
第二个to_mai是tnsnames.ora文件中配置的目标数据库mai的连接信息:
to_mai =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mai)
)
)
scott/tiger是登录到远程数据库的用户名和密码,然后当在本地数据库使用to_mai的dblink访问远程数据库的时候,会使用scott的身份来访问
2、本地数据库tnsnames.ora文件中没有配置要访问的数据库信息
create [public] database link to_mai
connect to scott identified by tiger
using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mai)
)
)';
这一种方式其实是把第一种配置在tnsnames.ora文件中的信息,直接放在dblink的后面
第二部分:dblink相关的权限
SYS@test > select * from user_sys_privs where privilege like upper('%link%');
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SYS CREATE DATABASE LINK NO
SYS DROP PUBLIC DATABASE LINK NO
SYS CREATE PUBLIC DATABASE LINK NO
权限解释:
CREATE DATABASE LINK(所创建的DBlink只能是创建者自己使用,别的用户都使用不了)
CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用)
DROP PUBLIC DATABASE LINK(删除Public dblink的权限)
第三部分:dblink的使用
假如说,我要比较两个库的用户的差异,那么我现在可以这么做:
select username from dba_users@to_mai
minus
select username from dba_users;
这样就可以得到在目标数据库中有的用户,而在当前用户中没有的用户列表了
另外一个:如果你乐意,你可以用triggers+dblink实现一个简单的数据同步,不过不建议使用,玩玩就行了。
第四部分:dblink的相关视图
dblink的常用视图有如下几个:
dba_db_links,查看系统中所有的dblink
v$dblink,用来查看当前数据库中有哪些打开的dblink
@后是实例名或数据源,一个简单例子,服务器上创建了2个数据库实例,名称分别为HR、BOSS,如果你用PL/SQL DEVELOPR等根据登录了HR实例,此时可以省略@HR,若是要访问BOSS实例,则需要select * from dim.dim_area_no@BOSS

转载地址:http://pwnoi.baihongyu.com/

你可能感兴趣的文章
基于Jquery的(可视区域,向上滚动向下滚动两种)图片懒加载
查看>>
原生JS的(可视区域,向上滚动向下滚动两种)图片懒加载
查看>>
使用VMware搭建Hadoop集群虚拟网络配置
查看>>
解决vmware下拷贝主机后不识别eth0网卡
查看>>
Promise简单实践
查看>>
vue中无缝轮播简单实现
查看>>
ES5和ES6中的类定义区别
查看>>
利用解构赋值快速提取对象参数
查看>>
CSS3简单实现360deg旋转
查看>>
vue中使用H5的audio
查看>>
PHPStorm配置ESlint检查代码
查看>>
树的子结构
查看>>
判断两棵二叉树是否相似
查看>>
二叉树中和为某一值的路径
查看>>
数字在排序数组中出现的次数
查看>>
两个链表的第一个公共结点
查看>>
二叉树的深度
查看>>
MySQL数据库入门(三)
查看>>
MySQL数据库入门(四)
查看>>
关于方法覆盖和属性覆盖的问题?
查看>>