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: 无效的对象标识符文字
请大师指导。
追问:
提问者评价
想在ORACLE另一个用户下建个触发器,触发我本地的用户中的表进行insert的,怎么做?
RT,我现在用一个A用户,这个用户是正式的,我不想在这个用户上建立触发器,我又建立了一个B用户,我想在B用户上建立一个触发器,实现功能为:当A用户中的某个表insert数据的时候,B用户这个触发器进行触发,然后执行B用户这个触发器,进行操作。
相当于用B用户监测A用户某个表的insert动作。
你可以试试在B用户下建立一个同义词(Synonym),然后将触发器建在这个同义词下。
现象同一个数据库,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),然后将触发器建在这个同义词下。
相关文章推荐
- oracle按照主键索引查询不到数据
- 安装与配置Oracle Warehouse Builder 11.2.0.3
- Oracle hang 之sqlplus -prelim方法
- oracle11G手动建库
- Oracle学习之常见问题处理
- Oracle 序列 触发器的使用
- 更改Oracle数据库的编码格式,解决导入时ORA-12899错误
- Oracle建立表空间、建立用户、用户授权、指定表空间、激活用户、删除用户、删除表空间
- Oracle主键、唯一键与唯一索引的区别
- Oracle环境下的Hibernate方言配置
- 利用ORACLE实现数据抽样(sample block)
- oracle数据库实例启动与关闭
- oracle 表空间不足处理
- Kettle 5.4 SQL2Oracle简单实例
- Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)
- window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁
- Oracle临时表 和 插入多条语句 用法
- oracle海量数据中提升创建索引的速度
- Oracle或者PostgreSQL的row_number over 排名语法
- maven添加oracle jdbc依赖