为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中的表。

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 用户.同义词名 来删除同义词。

相关内容推荐