informix创建同义词
搜索词条
1、informix不同主机的数据库同义词创建?
2、informix怎么实现跨服务器数据抽取?
3、informix 数据库跨库访问的配置?https://blog.csdn.net/David_ifx/article/details/100133669
4、informix配置互相访问的信任关系?https://blog.csdn.net/tonghudan/article/details/81502936
一、同义词的介绍及应用背景
背景
为informix数据库中的表创建同义词
事件描述:
Informix数据库服务器dbserver有数据库db_a和数据库db_b,db_a是用户a创建的,db_b是用户b创建的, 由于使用db_a数据库的程序需要读取db_b数据库中的表,在这种情况下,连接到db_a的程序是不能访问db_b的数据的。所以想创建同义词让连接到 数据库db_a的程序也可以访问db_b中的表。(说明:此处的dbserver即为一个数据库服务器,且此处的数据库db_a与db_b均在dbserver的实例名下,否则,若为不同的数据库服务器,则需要先给数据库服务器建立信任关系)
1.首先要明白什么是同义词
A synonym is a word that has a similar meaning to another word.
一个单词如果跟另外一个单词有相同的意思,那么这个单词是那个单词的同义词。在数据库中同义词是指一个数据库对象的别名、或者引用。
2.可以为哪些对象创建同义词、及如何创建Informix数据库中可以为表(table)、序列(sequence)、视图(view)创建同义词,具体语法如下所示:
另外,同一个数据库中可以存在多个带有相同名称的同义词,但这些同义词每一个都必须是属于不同用户,同一用户不能同时创建名称相同的专用(PRIVATE)或公用(PUBLIC)的同义词。
创建过程:
首先,b必须授权给a,让他能够访问需要的表: grant selct on 表名 to "a" as "b";如果需要添加、更改或删除,则添加对应的grant insert/update/delete 等语句。然后,在a中创建那些表的同义词: create SYNONYM b表名同义词 for db_b:"b".b的表名;这样就可以在db_a中通过同义词访问db_b的表了。
3.创建中可能碰到的问题
568: Cannot reference an external database without logging.
This statement refers to a database other than the current database. However, the current database uses transaction logging, and the external one does not. This action is not supported; the databases that are used in a single transaction must all use logging or all not use it.
这个错误说明两个数据库的日志情况不一致,两个数据库要么都关闭日志功能,要么都启动日志功能。
可以通过ontape -s -N 数据库名称 和ontape -s -U 数据库名称来关闭或启动日志功能,在做这个操作时,数据库必须不在应用中,如果有其他程序连接使用数据库,那么会出错。
4.如何查看、删除
用户对同义词以及该同义词引用的数据库对象具有相同的特权,syssynonyms、syssyntable、和systables系统目录表保存关于同义词的信息。
使用 DROP SYNONYM 用户.同义词名 来删除同义词。
实操:以准备金开发环境+业务系统开发环境为例:
--创建同义词
create SYNONYM b表名同义词 for db_b:"表的创建用户".b的表名;
--创建同义词
create synonym syn_reins_zrjunearnedtreaty for reinsredb:"piccre". zrjunearnedtreaty;
create synonym syn_reins_zrjunearnedfac for reinsredb:"piccre". zrjunearnedfac;
create synonym syn_reins_zrjoutstandingtreaty for reinsredb:"piccre". zrjoutstandingtreaty;
create synonym syn_reins_zrjoutstandingfac for reinsredb:"piccre". zrjoutstandingfac;
create synonym syn_reins_zrjunearnedacc for reinsredb:zrjunearnedacc;
create synonym syn_reins_zrjoutstandingacc for reinsredb:zrjoutstandingacc;
--创建同义词
create synonym syn_reins_zrjunearnedtreaty for reinsredb: zrjunearnedtreaty;
create synonym syn_reins_zrjunearnedfac for reinsredb:zrjunearnedfac;
create synonym syn_reins_zrjoutstandingtreaty for reinsredb:zrjoutstandingtreaty;
create synonym syn_reins_zrjoutstandingfac for reinsredb: zrjoutstandingfac;
create synonym syn_reins_zrjunearnedacc for reinsredb:zrjunearnedacc;
create synonym syn_reins_zrjoutstandingacc for reinsredb:zrjoutstandingacc;
--创建同义词:最全的创建方式:包含了数据库名、实例名、表的创建用户名。
create synonym syn_reins_prpdexch for reinsredb@devids:"piccre". prpdexch; --删除同义词
drop synonym syn_reins_zrjunearnedtreaty;
drop synonym syn_reins_zrjunearnedfac;
drop synonym syn_reins_zrjoutstandingtreaty;
drop synonym syn_reins_zrjoutstandingfac;
drop synonym syn_reins_zrjunearnedacc;
drop synonym syn_reins_zrjoutstandingacc;
--查询数据 查询本库的zrjunearnedtreaty表
select * from zrjunearnedtreaty where paydate='2018-06-29';
查询业务系统开发环境的数据(通过同义词)
select * from syn_reins_zrjunearnedtreaty ;
insert into zrjunearnedtreaty select * from syn_zrjunearnedtreaty where paydate='2018-06-29';
直接查询业务系统开发环境的数据
select * fromreinsredb@devids:"piccre".zrjunearnedtreaty ;
--注意 需要有该库的权限才可以通过同义词查询的到另一个库的数据。
上述都是在同一台主机上创建的同义词。
如果在两个不同机器之间建立同义词呢,则需要不同主机之间的数据库建立信任关系即可。
下面是对配置互相访问信任关系的简单介绍,(我自己并没有用到)
控制主机和用户访问信任关系的主要文件如下: /etc/hosts --主机IP-主机hostname对应关系 /etc/hosts.equiv --主机hostname-对应用户username对应关系 /etc/services --应用服务对应的端口 /home/informix/etc/sqlhosts --连接文件。它规定数据库服务器的名称、连接的类型、主机的名称和服务名称 /home/informix/etc/onconfig.* --informix数据库的配置文件,DBSERVERALIASES参数为配置的当前实例名,可配置多个(同样需要再services中配置与
实例名一致的服务名)。 权限控制可参考如下图片:
informix 数据库跨库访问的配置,要实现数据库的跨库访问,需要完成以下三步:
1、修改/etc/hosts:
ip地址 空格或TAB 主机名
注:写上互相访问的两个主机的IP和主机名。
示例: 192.168.1.100 DB1 192.168.1.200 DB2
2、修改/etc/hosts.equiv(如果没有就创建):
主机名 TAB 用户名
注:为了省事两台主机都需要增加
示例: DB1 informix DB2 informix
3、修改$INFORMIXDIR/etc/sqlhosts(说明:此处需要切换到informix用户:sudo su - informix)
可以通过 env|grep SQLHOSTS 来获得(我没使用这个命令)
实例名 协议 IP 端口
注:为了省事两台主机都需要增加
示例: Dbserver1 onsoctcp 192.168.1.100 9099 Dbserver2 onsoctcp 192.168.1.200 9099
4、跨库访问示例:
在Dbserver1上访问Dbserver2 Select * from db2@Dbserver2:tabname;
实操:下面以准备金系统与业务系统为例进行说明。
环境:准备金开发环境数据库+准备金测试环境数据库;地址如下:
如图,得到两台服务器的信息如下:
IP 主机名
开发环境:10.129.202.58 DEV-DB
测试环境:10.150.242.19 ZBGSZBJ 主机名 用户名
开发环境: DEV-DB reserve
测试环境: ZBGSZBJ rbzzbj 实例名 协议 IP 端口
开发环境: devids onsoctcp 10.129.202.58 10001
测试环境: zbj_ids onsoctcp 10.150.242.19 10001
上述命令的操作均需要有root权限才能够操作。通过vi命令进行编辑即可。此处在实验时因为只有开发环境的root权限,所以只编辑了开发环境的上述配置,在测试环境数据库访问开发环境数据库中的表时,报错:尝试连接数据库服务器(devids)失败。
以上报错说明不仅需要在被访问方(开发环境)进行信任关系配置,在访问方(测试环境)同样需要配置。
可以确定的是,上述方式绝对是可以实现的,因为现在:准备金系统的生产环境与业务系统的生产环境;准备金系统的测试环境与业务系统的测试环境;准备金测试环境与数据层字典测试环境,它们的数据库都是在不同的机器上的。准备金系统均是通过创建同义词的方式来读取业务系统的接口表数据的。
说明:
1、可以看到,上述配置通过IP,主机名,端口唯一确定了一个数据库系统,通过实例名唯一确定了该数据库系统的一个实例。
2、在同一个数据库系统的同一个实例名下,如下图,准备金开发环境与业务系统开发环境:只需要用户piccre赋予用户reserve权限(我直接赋予了dba权限),即可以通过创建同义词的方式,在reservedb_dj库,访问业务系统数据库reinsredb中的表。
创建同义词需要以下两步:
1、赋予权限:
grant dba to "reserve";
2、创建同义词:
create synonym syn_reins_prpdexch for reins_re@devids:"piccre". prpdexch;
3、访问表:
【1】直接访问:
select count(*) from reins_re@devids:prpdexch; 【2】通过同义词:select count(*) from syn_reins_prpdexch; 4、删除同义词 drop synonym syn_reins_prpdexch ;
需要注意的是:只要赋予了reserve用户权限,其实不需要创建同义词,就可以在reservedb_dj访问reinsredb中的表。
同理,当两台机器之间建立信任关系后,同样,无需创建同义词,即可以在A库,访问B库中的表。如准备金测试环境与业务系统测试环境,地址如下图所示:
从上图可以看到,准备金测试环境与业务系统测试环境是在两台机器上。当建立信任后,同样可以直接访问。
创建同义词需要以下三步:
1、配置两个机器之间的信任关系。
2、赋予准备金测试库用户权限:
grant dba to "rbzzbj";
3、创建同义词:
create synonym syn_reins_prpdexch for reins_re@zbx_ids:"piccre". prpdexch;
3、访问表:
【1】直接访问:
select count(*) from reins_re@zbx_ids:prpdexch; 【2】通过同义词:select count(*) from syn_reins_prpdexch; 4、删除同义词 drop synonym syn_reins_prpdexch ; 需要注意的是:只要赋予了reserve用户权限,其实不需要创建同义词,就可以在reservedb_dj访问reinsredb中的表。
延伸
1、数据库赋值权限与取消权限
1、赋予权限: 给informix用户赋予dba权限:grant dba to "informix";
给rbzzbj用户赋予dba权限:grant dba to "piccre"; 给rbzzbj用户赋予连接权限:grant connect to "rbzzbj";
grant select on "rbzzbj".t_assess_outstanding_supfac_plus to "public" as "rbzzbj";
grant update on "rbzzbj".t_assess_outstanding_supfac_plus to "public" as "rbzzbj";
grant insert on "rbzzbj".t_assess_outstanding_supfac_plus to "public" as "rbzzbj";
grant delete on "rbzzbj".t_assess_outstanding_supfac_plus to "public" as "rbzzbj";
grant index on "rbzzbj".t_assess_outstanding_supfac_plus to "public" as "rbzzbj";
2、移除权限
Revoke connect from rbzzbj;
revoke all on "rbzzbj".t_assess_outstanding_fac_plus from "public" as "rbzzbj";
2、数据库相关
数据库:
数据库实例的含义:
用户:
3、Linux查看上查看及修改主机名
hostname 查看主机名
hostname -i: 查看本机对应的IP 修改主机名
vim /etc/sysconfig/network
vim /etc/hosts
修改完成后重启:reboot
informix创建同义词的更多相关文章
- Oracle同义词创建及分配用户创建同义词权限
(1)--授权某个用户crate synonym的权限,若用户名为scott grant create synonym to scott(2)--创建同义词 create [or replace] s ...
- oracle 创建同义词
1.语法: 同义词 (SYNONMY) CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; Create synonym synony ...
- ORCALE用户授权与创建同义词
创建同义词: DROP public synonym marketmonitor_day; DROP public synonym marketmonitor_month; DROP public s ...
- 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词
--测试环境,20远端,30本地: --准备1,20远端建立表的同义词,用户信息: 1.11 ---------------------------------------------------准备 ...
- Oracle批量创建同义词
一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...
- sqlserver创建同义词
https://blog.csdn.net/anderslu/article/details/53433841?utm_source=itdadao&utm_medium=referral 例 ...
- Oracle同义词创建及其作用
Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系.本文介绍如何创建同义词语句,删除同义词以及查看同义词语句. oracle的同义词总结: 从字面上 ...
- Oracle数据库——索引、视图、序列和同义词的创建
一.涉及内容 1.理解索引的概念和类型. 2.掌握创建索引的命令. 3.理解视图的概念和优点. 4.理解可更新视图应具备的特点. 5.掌握创建一般视图和可更新视图的命令. 6.理解序列和同义词的概念和 ...
- Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间
alter table userInfo add(msn varchar2(20)); 1.建表 create table userInfo ( id number(6), name varchar2 ...
随机推荐
- Python小技巧:使用一行命令把你的电脑变成服务器
不知道你有没有遇到这么一种情况,就是你有时候想要把电脑上的一些东西传输到你的手机或者 Pad ,你要么需要使用数据线连接到电脑,有时候还要装各种驱动才可以进行数据传输,要么需要借助第三方的工具,在局域 ...
- 【leetcode算法-中等】3. 无重复字符的最长字串
[题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...
- Stream入门及Stream在JVM中的线程表现
继上次学习过Java8中的非常重要的Lambda表达式之后,接下来就要学习另一个也比较重要的知识啦,也就如标题所示:Stream,而它的学习是完全依赖于之前学习的Lambda表达式. 小实验引入: 这 ...
- openlayers集成到vue开发
openlayer初步加载地图 vue项目搭好后,直接用node js安装ol, 安装好后可以看看安装的版本:我用的是5..2的版本 然后看官网相对应版本的文档,都是英文文档; 官方文档: ht ...
- 十四、i2c子系统
由于之后的触摸屏驱动分析中使用到了GPIO子系统和i2c子系统,因此在分析触摸屏驱动之前我准备把这两个子系统进行简单分析. 在读者学习本章以及后续i2c相关章节之前,最好了解i2c通信方式,可以参考: ...
- MySQL explain功能展示的各种信息的解释
1.id: MySQL Query Optimizer 选定的执行计划中查询的序列号. 2.select_type: 所使用的查询类型,主要有以下这几种查询类型. DEPENDENT SUBQUER ...
- [Office 365] Office 365与Visio 2013/2016兼容性测试
Visio Professional 2013 (x64) - (Chinese-Simplified) 详细信息 文件名 cn_visio_professional_20 ...
- Geometers Anonymous Club CodeForces - 1195F (闵可夫斯基和)
大意: 给定$n$个凸多边形, $q$个询问, 求$[l,r]$内闵可夫斯基区间和的顶点数. 要用到一个结论, 闵可夫斯基和凸包上的点等于向量种类数. #include <iostream> ...
- C# Entity Framework The ObjectContext instance has been disposed and can no longer be used for operations that require a connection
The ObjectContext instance has been disposed and can no longer be used for operations that require a ...
- ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图引用资源
https://www.cnblogs.com/Roxlin/p/5615144.html 一.配置BundleConfig.cs文件 1.首先要在App_Start 里面BundleConfig.c ...