您的位置:首页 > 数据库 > Oracle

oracle 同一个表出现2个用户创建的同名触发器

2015-09-16 23:11 387 查看
oracle 同一个表出现2个用户创建的同名触发器,成了双出发器。

现象同一个数据库,A用户在表tab1上有个触发器。采用exp导出A用户。然后建立一个B用户,导入刚才的导出文件。后发现A用户下tab1表上有2个同名的触发器,所属用户不同,分别是A和B。

最后查找原因是A用户的tab1表被管理员建立了一个公共同义词,估计是这个影响的。

在B用户导入时,在这个同义词上建立了出发器。

还有一种可能是触发器的脚本中写死了用户名。

网络上的参考资料

1个数据库实例上2个用户A和B,B有对A下面的表YW_CUSTOMER的增改查的权限,B对A下面的表YW_CUSTOMER建同名的同义词YW_CUSTOMER,

问B能对这个同义词建触发器吗?需要什么权限?

1、可以的。

2、B除了需要create synonym同义词,及表的增删改权限,最重要的是create any trigger权限grant create any trigger to b;

http://zhidao.baidu.com/link?url=_5FKGIAk8kg4Kuh6OcFfVH0ITK-_sgKqMwWCiu80tY4asXjz0hNut-rKslPnt-nBvUGbuO4S--ZvArjnS_VUzK

Oracle同一个数据库中一个用户的结构导入到另一个用户,新用户下触发器中的表没有对应新表,如何解决?

导出导入使用的命令如下:

exp 'sys/口令@数据库 as sysdba' file=db.dmp owner=用户1 rows=n

imp 'sys/口令@数据库 as sysdba' file=db.dmp fromuser=用户1 touser=用户2

导入完成后,用户2下的表结构都正确,部分触发器对应的表仍然是用户1下的表,导致用户2下的表没有触发器生效。

我目前都是手工修改这些触发器,使触发器脚本中的表的owner从用户1修改为用户2。

有没有什么办法在导入到另一个用户的时候避免这种问题?

还有在用户1下建立的自定义数据类型,也无法导入用户2,报错如下:

IMP-00017: 由于 ORACLE 错误 2304, 以下语句失败:

"CREATE TYPE "TABLETYPE" TIMESTAMP '2013-02-20:15:55:45' OID 'D1518196EAC643"

"5EA012BB1DB21A138E' AS TABLE OF VARCHAR2 (4000) "

IMP-00003: 遇到 ORACLE 错误 2304

ORA-02304: 无效的对象标识符文字

请大师指导。

1,如果你的触发器程序里把用户名写死了,那么导出的数据文件当然是写死的用户名,除非开发时,不要显示地在对象名前加指定用户名;
2,自定义类型可以单独导出脚本


追问:

创建触发器的脚本里面本来是没有写用户名的,创建成功以后用户名是自动加上去的呢。
有什么办法不让它自动添加吗?


提问者评价
谢谢!找到解决方案了,就是在user_source中找到写了用户名的触发器,去掉表名前的用户名后重建


想在ORACLE另一个用户下建个触发器,触发我本地的用户中的表进行insert的,怎么做?

RT,我现在用一个A用户,这个用户是正式的,我不想在这个用户上建立触发器,我又建立了一个B用户,我想在B用户上建立一个触发器,实现功能为:当A用户中的某个表insert数据的时候,B用户这个触发器进行触发,然后执行B用户这个触发器,进行操作。

相当于用B用户监测A用户某个表的insert动作。

你可以试试在B用户下建立一个同义词(Synonym),然后将触发器建在这个同义词下。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: