搜索词条

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

  1. Oracle同义词创建及分配用户创建同义词权限

    (1)--授权某个用户crate synonym的权限,若用户名为scott grant create synonym to scott(2)--创建同义词 create [or replace] s ...

  2. oracle 创建同义词

    1.语法: 同义词 (SYNONMY) CREATE SYNONYM同义词名FOR 表名; CREATE SYNONYM同义词名FOR 表名@数据库链接名; Create synonym synony ...

  3. ORCALE用户授权与创建同义词

    创建同义词: DROP public synonym marketmonitor_day; DROP public synonym marketmonitor_month; DROP public s ...

  4. 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词

    --测试环境,20远端,30本地: --准备1,20远端建立表的同义词,用户信息: 1.11 ---------------------------------------------------准备 ...

  5. Oracle批量创建同义词

    一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...

  6. sqlserver创建同义词

    https://blog.csdn.net/anderslu/article/details/53433841?utm_source=itdadao&utm_medium=referral 例 ...

  7. Oracle同义词创建及其作用

    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系.本文介绍如何创建同义词语句,删除同义词以及查看同义词语句. oracle的同义词总结: 从字面上 ...

  8. Oracle数据库——索引、视图、序列和同义词的创建

    一.涉及内容 1.理解索引的概念和类型. 2.掌握创建索引的命令. 3.理解视图的概念和优点. 4.理解可更新视图应具备的特点. 5.掌握创建一般视图和可更新视图的命令. 6.理解序列和同义词的概念和 ...

  9. Oracle笔记 五、创建表、约束、视图、索引、序列、同义词、表空间

    alter table userInfo add(msn varchar2(20)); 1.建表 create table userInfo ( id number(6), name varchar2 ...

随机推荐

  1. Linux基础重点习题讲解

    第一章  一个EXT4的文件分区,当时使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df-h命令查看磁盘大小时,只使用了60%的磁盘空间,为什么会出现这 ...

  2. matplotlib中的imshow()

    import matplotlib.pyplot as plt plt.imshow(x,cmap) x表示要显示的图片变量,cmap为颜色图谱,默认为RGB(A)颜色空间,也可以指定,gray是灰度 ...

  3. Mstering QT5 chapter1

    涉及到c++ 14新特性: lambda,autovariables. A basic .pro file generally contains: 1) Qt modules used (core, ...

  4. 数据结构 -- Trie字典树

    简介 字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高. 性质:   1.  根节 ...

  5. java访问磁盘文件

    转载,务必写上原文链接 !(尊重与你分享知识的人) 目录 文件 File 对象 VS FileDescriptor 对象 文件讲解java访问磁盘文件过程 fileReader.read() 图解ja ...

  6. Yii2.0 RESTful API 之速率限制

    Yii2.0 RESTFul API 之速率限制 什么是速率限制? 权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流. 例如,您可以限制每个用户 10 分钟内最多调用 API 100 ...

  7. SAS学习笔记36 二分类logistic回归

    这里所拟合模型的AIC和SC统计量的值均小于只有截距的模型的相应统计量的值,说明含有自变量的模型较仅含有常数项的要好 但模型的最大重新换算 R 方为0.0993,说明模型拟合效果并不好,可能有其他危险 ...

  8. Asp.net core 学习笔记 2.2 migration to 3.0

    Ef core 3.0 一些要注意的改变 refer : https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaki ...

  9. hdu 1114需要装满的完全背包 重点是背包初始化的问题

    .,. 最近在看背包九讲 所以就刷了一下背包的题目 这道题目是一个典型的完全背包问题 而且要求满包 在这里 我就简单整理一下背包初始化问题吧 对于没有要求满包的问题 也就是背包可以不取满的问题 在背包 ...

  10. (一)mybatis介绍

    一.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...